Basic Courses

111 Introduction to Computer Science I

An introduction to the principles of computer science with an emphasis on algorithmic problem solving and the realization of al-gorithms using a modern object-oriented programming language. Topics include algorithms, problem solving, programming, classes, primitive data types and objects, control structures, arrays and vectors, principles of object-oriented design and programming, and an introduction to graphics and graphical user interfaces. The course also includes an overview of the discipline of computer science and a study of the social implications of computer use. May serve as the laboratory course in the Natural Science Division"s distribution requirement. One laboratory per week. Prerequisite: Knowledge of elementary algebra.

112 Introduction to Computer Science II

A continuation of Computer Science 111 with an emphasis on data structures, data abstraction, algorithm design, the analytical and experimental evaluation of algorithm performance, and object-oriented design and implementation techniques. Topics include stacks, queues, deques, lists, strings, trees and graphs, dictionaries, recursion, searching and sorting algorithms, and an introduction to program verification. May serve as the laboratory course in the Natural Science Division"s distribution requirement. One laboratory per week. Prerequisite: Computer Science 111 or permission of the instructor. Core Courses

210 Principles of Computer Organization

An introduction to the basic organization and operation of computers including logical structure, hardware components, machine and assembly language, and computer system performance. Topics include internal representation of information, instruction set architecture, instruction types and addressing techniques, computer arithmetic, memory systems, design and operation of the control unit, input/output devices and interfaces, assembly language and translation techniques, and modern architectural enhancements such as pipelining and multiprocessors. Special emphasis is on systems programming and assignments in a particular assembly language. One laboratory per week. Prerequisite: Computer Science 112.

220 Programming Language Concepts

A study of the important concepts in the design of programming languages, with emphasis on data types, scoping, binding times, control structures, facilities for abstraction, parallel constructs, and storage allocation. Language constructs are evaluated both for their usefulness in supporting the software development process and the overhead incurred in implementing and using them. Both procedural and non-procedural languages are studied, and students acquire enough literacy in a few of these languages to write moderately sophisticated programs. One laboratory. Prerequisite: Computer Science 210.

230 Theory of Computation and Formal Languages

An introduction to the theories of finite-state machines, pushdown automata and Turing machines as well as the relation between automata and the formal languages they recognize. Students explore computational theory and its practical applications in lexical analysis and language parsing. Prerequisites: Computer Science 112 and Mathematics 205 or permission of instructor. Offered in alternate years.

250 Analysis of Algorithms

A treatment of selected topics from the analysis of algorithms including models of computation, design of effcient algorithms, computational complexity, and NP-completeness. Students develop expertise in mathematical analysis and algorithmic programming methodology. One laboratory per week. Prerequisites: Computer Science 112 and Mathematics 205.

290 Principles of Software Development

A study of the principles and concepts used in the specification, design, implementation, testing, and maintenance of large software systems. Topics include requirements elicitation and analysis, formal specification, software architectures, object-oriented design, software measurement, software testing and analysis, and evolution of a program. Students practice the principles of software development by participating as group members in the creation of a significant software application. One laboratory per week. Prerequisites: Computer Science 210 and 220 or permission of the instructor. Offered in alternate years.

Electives

360 Scientific and Numerical Computation

A study of computational methods for the solution of algebraic and differential equations and systems of equations, interpolation and approximation, numerical integration, calculation of eigenvalues, and error estimation. Implementation of these techniques using general purpose programming languages and symbolic arithmetic systems is explored. Theoretical issues include the nature of computer arithmetic and error generation and propagation. One laboratory per week. Prerequisites: Computer Science 111, Mathematics 290 and 320, or permission of the instructor.

370 Artificial Intelligence

A survey of the theory, computational techniques, and applications of artificial intelligence. Topics include agents, knowledge representation, machine learning, general problem solving, natural language processing, neural networks, evolutionary computation, computer vision, robotics, and philosophical questions. One laboratory per week. Prerequisite: Computer Science 112. Offered in alternate years.

380 Principles of Database Systems

A study of the design and implementation issues in database management systems. Topics include data models, logical/physical database design, data access/search techniques, normalization theory, mappings from logical to physical structures, storage, and utilization. Additional topics include database reorganization, migration, database integrity, consistency, privacy and security, distributed database systems, architecture of knowledgebased systems, and intelligent query interfaces. One laboratory. Prerequisite: Computer Science 112. Offered in alternate years.

381 Data Communications and Networks

An introduction to the theory and techniques of data communications and network design and analysis. Topics include data communications concepts, layered network architectures, local and wide area networks, protocols, switching, routing, security, and areas of current interest. The protocols of the Internet and the World Wide Web are used throughout to illustrate networking concepts. Students complete a large programming project involving some aspect of networking. One laboratory per week. Prerequisite: Computer Science 112. Offered in alternate years.

390 Modern Computer Graphics

An introduction to computer graphics principles and current practice. Students use modern graphics languages to explore basic and advanced concepts such as properties of light and vision, image rasterization, geometric transformations, surface models and hierarchically-based modeling, lighting and shading, image-based techniques, and antialiasing. Laboratories introduce several toolkits for building graphical user interfaces. Projects include interactive 2D and 3D applications. One laboratory per week. Prerequisites: Computer Science 210 and Mathematics 320 or permission of the instructor. Offered in alternate years. Advanced Courses

Advanced Courses

420 Introduction to Compiler Design

An introduction to the basic concepts of compiler design and implementation from lexical, syntactic, and semantic analysis to target code generation. Topics are presented from an implementation point of view. The semester project includes construction of a compiler for a small language using lexing and compiler languages. One laboratory per week. Prerequisites: Computer Science 220 and 230 or permission of the instructor. Offered in alternate years.

440 Operating Systems

A study of operating systems and their design and implementation. Topics include the evolution of modern computer operating systems, basic components of an operating system, and hardware issues of importance to operating system design and implementation. Consideration is given to processes and threads, resource (processor, memory, device, and software) management, process and device scheduling, deadlocks, input/output, file systems, and system security. A representative operating system is examined in detail. One laboratory per week. Prerequisite: Computer Science 210. Offered in alternate years.

441 Principles of Distributed Systems

An examination of the principles and paradigms associated with the design, implementation, and analysis of distributed systems. Topics include the characterization of distributed system models, remote communication, distributed scheduling, synchronization and mutual exclusion, naming and time, consistency and replication, and fault tolerance. Selected distributed system development environments are discussed in the context of the above topics. One laboratory per week. Prerequisites: Computer Science 290 or 440 or permission of the instructor. Internships

Internships

550-551 Internship Seminar

A corequisite seminar for all students participating in the Internship Program. Internship students enroll twice, once prior to and once following the Internship. Computer Science 550 focuses on expectations and planning, leading to the Internship Proposal required for all students planning an internship. Computer Science 551 provides the opportunity for students who have completed the Internship to prepare written and oral reports on the Internship experience. The student, in consultation with the faculty of the Department of Computer Science, is responsible for arranging for an acceptable internship. The courses meet together weekly for one-half a semester. Credit: One semester hour for each course. Prerequisites: Completion of at least two core courses.

552 Internship: Cigital

The student is expected to make a significant contribution to a software development project as described in a proposal prepared for the Internship Seminar and approved by a faculty member in the Department of Computer Science and a supervisor at Cigital. The course requirements include preparation of a research report describing the process and the product and an oral report to be delivered upon completion of the Internship in the Internship Seminar, Computer Science 551. Credit: Two semester hours. Prerequisite: Computer Science 550. Other Courses

Other Courses

580 Junior Seminar: Topics and Research Methods in Computer Science

An advanced treatment of selected topics from various areas of computer science with an emphasis on appropriate research methods. Practical skills are acquired in technical writing, critical reading, and presentation of technical literature in preparation for the senior project. One laboratory per week. Prerequisite: Completion of the computer science core or permission of the instructor.

590 Independent Study

Individual research under the guidance of a member of the Department's faculty. A project proposal must be submitted to the Department and approved in the semester prior to the semester in which the student intends to register for the course.

600 Senior Thesis I

Independent research in computer science. Prerequisite: Computer Science 580. Credit: One semester hour.

601 Senior Thesis II

Continuation of independent research in computer science. Pre-requisite: Computer Science 600. Credit: Three semester hours

About Us | Site Map | Computing Policy | Contact Us | ©2006 Department of Computer Science, Allegheny College