Computer Science

CS 1101. Introduction to Program Design.

Cat. I
This course introduces principles of computation and programming with an emphasis on program design. Topics include design and implementation of programs that use a variety of data structures (such as records, lists, and trees), functions, conditionals, and recursion. Students will be expected to design, implement, and debug programs in a functional programming language.
Intended audience: students desiring an introduction to programming and program design.
Recommended background: none. Either CS 1101 or CS 1102 provide sufficient background for further courses in the CS department. Undergraduate credit may not be earned for both this course and CS 1102.
Undergraduate credit may not be earned both for this course and for CS 2135.

CS 1102. Accelerated Introduction to Program Design.

Cat. I
This course provides an accelerated introduction to design and implementation of functional programs. The course presents the material from CS 1101 at a fast pace (so students can migrate their programming experience to functional languages), then covers several advanced topics in functional programming (potential topics include macros, lazy programming with streams, and programming with higher-order functions). Students will be expected to design, implement, and debug programs in a functional programming language. Intended audience: students starting with substantial previous programming background.
Recommended background: prior programming background covering lists, trees, functions, and recursion.
Undergraduate credit may not be earned for both this course and CS 1101. Undergraduate credit may not be earned both for this course and for CS 2135.

CS 2011. Introduction to Machine Organization and Assembly Language.

Cat. I
This course introduces students to the structure and behavior of digital computers at several levels of abstraction. Using a bottom-up approach, the course starts by examining logic gates and digital circuits. The student is then introduced to virtual machines at successively higher levels of abstraction, beginning with the Von Neumann model of execution, and progressing through machine language, assembly language, and high-level languages. Topics include the functional organization of computer hardware, the functions of assemblers, linkers, and loaders, representations of numbers in computers, basic assembly language instruction sets, addressing modes, stacks and procedures, low-level I/O, concepts and examples of microprogramming, and logic circuits.
Students will be expected to design, implement, and debug programs in an assembly language.
Intended audience: computer science students, and those desiring a deeper understanding of the low-level functionality of a computer.
Recommended background: CS 2303 or CS 2301.

CS 2022/MA 2201. Discrete Mathematics.

Cat. I
This course serves as an introduction to some of the more important concepts, techniques, and structures of discrete mathematics, providing a bridge between computer science and mathematics.
Topics include functions and relations, sets, countability, groups, graphs, propositional and predicate calculus, and permutations and combinations.
Students will be expected to develop simple proofs for problems drawn primarily from computer science and applied mathematics.
Intended audience: computer science and mathematical sciences majors.
Undergraduate credit may not be earned both for this course and for CS 501.
Recommended background: none.

CS 2102. Object-Oriented Design Concepts.

Cat. I
This course introduces students to an object-oriented model of programming. Building from the design methodology covered in CS 1101/CS 1102, this course shows how programs can be decomposed into classes and objects. By emphasizing design, this course shows how to implement small defect-free programs and evaluate design decisions to select an optimal design under specific assumptions. Topics include inheritance, exceptions, interface, design by contract, basic design patterns, and reuse. Students will be expected to design, implement, and debug object-oriented programs composed of multiple classes and over a variety of data structures.
Intended audience: students with prior program design experience who desire to learn object-oriented design.
Recommended background: CS 1101 or CS 1102.
Undergraduate credit may not be earned both for this course and for CS 2136.

CS 2118. Object-Oriented Design Concepts for Business Applications.

Cat. I
This course introduces students to an object-oriented model of programming, with an emphasis on the programming approaches useful in creating business applications. Building from the design methodology covered in CS 1101/ CS 1102, this course shows how programs can be decomposed into classes and objects.
Students will be expected to design, implement, and debug object-oriented programs in Visual Basic.
Topics include inheritance, building user interfaces, and database access. Intended audience: non-CS majors with an interest in building business applications who have prior program design experience.
Recommended background: CS 1101 or CS 1102.
Students may receive credit for only one of the following: MG 2720, MIS 2720, or CS 2118.

CS 2223. Algorithms.

Cat. I
Building on a fundamental knowledge of data structures, data abstraction techniques, and mathematical tools, a number of examples of algorithm design and analysis, worst case and average case, will be developed.
Topics include greedy algorithms, divide-and-conquer, dynamic programming, heuristics, and probabilistic algorithms. Problems will be drawn from areas such as sorting, graph theory, and string processing. The influence of the computational model on algorithm design will be discussed.
Students will be expected to perform analysis on a variety of algorithms.
Intended audience: computer science and computer engineering students, and those desiring a deeper understanding of algorithm design and analysis.
Undergraduate credit may not be earned both for this course and for CS 507.
Recommended background: CS 2102 and CS 2022.

CS 2301. Systems Programming for Non-Majors.

Cat. I
This course helps students with prior program design experience migrate their skills to a model of programming where the programming language exposes details of how the hardware stores and executes software. Building from the design concepts covered in CS 1101/CS 1102, this course covers manual memory management, pointers, the machine stack, and input/output mechanisms. Students will be expected to design, implement, and debug programs in C.
Intended audience: non-computer science majors who wish to take upper-level courses in the systems area of the computer science curriculum.
Recommended background: CS 1101 or CS 1102. CS majors and other students wishing to prepare for upper-level CS courses in both systems and software engineering should take CS 2303 instead of CS 2301. Students who have credit for CS 2303 may not receive subsequent credit for CS 2301.
Undergraduate credit may not be earned both for this course and for CS 2005.

CS 2303. Systems Programming Concepts.

Cat. I
This course introduces students to a model of programming where the programming language exposes details of how the hardware stores and executes software. Building from the design concepts covered in CS 2102, this course covers manual memory management, pointers, the machine stack, and input/ output mechanisms. The course will involve large-scale programming exercises and will be designed to help students confront issues of safe programming with system-level constructs. The course will cover several tools that assist programmers in these tasks. Students will be expected to design, implement, and debug programs in C++ and C.
Intended audience: computer science and computer engineering students with substantial prior object-oriented programming experience.
Recommended background: CS 2102.

CS 3013. Operating Systems.

Cat. I
This course provides the student with an understanding of the basic components of a general-purpose operating system.
Topics include processes, process management, synchronization, input/output devices and their programming, interrupts, memory management, resource allocation, and an introduction to file systems.
Students will be expected to design and implement a large piece of system software.
Intended audience: computer science majors and others interested in studying the software and hardware components of computer systems.
Undergraduate credit may not be earned both for this course and for CS 502.
Recommended background: CS 2303 or CS 2301, and CS 2011.

CS 3041. Human-Computer Interaction.

Cat. I
This course develops in the student an understanding of the nature and importance of problems concerning the efficiency and effectiveness of human interaction with computer-based systems.
Topics include the design and evaluation of interactive computer systems, basic psychological considerations of interaction, interactive language design, interactive hardware design, and special input/output techniques.
Students will be expected to complete two projects. A project might be a software evaluation, interface development, or an experiment.
Intended audience: computer science majors, especially juniors.
Recommended background: CS 2102 or CS 2118.

CS 3043. Social Implications of Information Processing.

Cat. I
This course makes the student aware of the social, moral, ethical, and philosophical impact of computers and computer-based systems on society, both now and in the future.
Topics include major computer-based applications and their impact, humanmachine relationships, and the major problems of controlling the use of computers.
Students will be expected to contribute to classroom discussions and to complete a number of writing assignments.
Intended audience: students interested in the impact of a computer-oriented technology on his or her future way of life and well-being. This course is highly recommended for juniors.
Undergraduate credit may not be earned both for this course and for CS 505.
Recommended background: a general knowledge of computers and computer systems.

CS 3133. Foundations of Computer Science.

Cat. I
This course introduces the theoretical foundations of computer science. These form the basis for a more complete understanding of the proficiency in computer science.
Topics include computational models, formal languages, and an introduction to compatibility and complexity theory, including NP-completeness.
Students will be expected to complete a variety of exercises and proofs.
Intended audience: computer science majors and others desiring an understanding of the theoretical foundations of computer science.
Undergraduate credit may not be earned both for this course and for CS 503.
Recommended Background: CS 2022 and CS 2223.
Students who have credit for CS 4121 cannot receive credit for CS 3133.
Students graduating under the pre-1996 distribution requirements may satisfy the Theory area requirement by taking this course, although it does not count as a 4000-level course.

CS 3431. Database Systems I.

Cat. I
This course introduces the student to the design, use, and application of database management systems.
Topics include the relational data model, relational query languages, design theory, and conceptual data design and modeling for relational database design. Techniques that provide for data independence, and minimal redundancy will be discussed.
Outcome: Students will be expected to design and implement database system applications.
Intended audience: computer science majors and others interested in studying the development of software applications with large data management requirements.
Undergraduate credit may not be earned both for this course and for CS 4431 or CS 542.
Recommended background: CS 2022 and either CS 2102 or CS 2118.

CS 3733. Software Engineering.

Cat. I
This course introduces the fundamental principles of software engineering. Modern software development techniques and life cycles are emphasized.
Topics include requirements analysis and specification, analysis and design, architecture, implementation, testing and quality, configuration management, and project management.
Students will be expected to complete a project that employs techniques from the topics studied.
Intended audience: computer science majors and others who expect to design software systems. This course should be taken before any course requiring a large programming project.
Undergraduate credit may not be earned both for this course and for CS 509.
Recommended background: CS 2102.

CS 4032/MA 3257. Numerical Methods for Linear and Nonlinear Systems.

Cat. I
This course provides an introduction to modern computational methods for linear and nonlinear equations and systems and their applications.
Topics covered include: solution of nonlinear scalar equations, direct and iterative algorithms for the solution of systems of linear equations, solution of nonlinear systems, the eigenvalue problem for matrices. Error analysis will be emphasized throughout.
Recommended background: MA 2071. An ability to write computer programs in a scientific language is assumed.

CS 4033/MA 3457. Numerical Methods for Calculus and Differential Equations.

Cat. I
This course provides an introduction to modern computational methods for differential and integral calculus and differental equations.
Topics covered include: interpolation and polynomial approximation, approximation theory, numerical differentiation and integration, numerical solutions of ordinary differential equations. Error analysis will be emphasized throughout.
Recommended background: MA 2051. An ability to write computer programs in a scientific language is assumed. Undergraduate credit may not be earned for both this course and for MA 3255/CS 4031.

CS 4120. Analysis of Algorithms.

Cat. II
This course develops the skill of analyzing the behavior of algorithms.
Topics include the analysis, with respect to average and worst case behavior and correctness, of algorithms for internal sorting, pattern matching on strings, graph algorithms, and methods such as recursion elimination, dynamic programming, and program profiling.
Students will be expected to write and analyze programs.
Intended audience: computer science majors.
Undergraduate credit may not be earned both for this course and for CS 504.
Recommended background: CS 2223 and some knowledge of probability.
This course will be offered in 2010-11 and in alternating years thereafter.

CS 4123. Theory of Computation.

Cat. II
Building on the theoretical foundations from CS 3133, this course addresses the fundamental question of what it means to be “computable,” including different characterization of computable sets and functions.
Topics include the halting program, the Church-Turing thesis, primitive recursive functions, recursive sets, recursively enumerable sets, NP-completeness, and reducibilities.
Students will be expected to complete a variety of exercises and proofs.
Intended audience: computer science majors and others desiring an understanding of the nature of computation.
Undergraduate credit may not be earned both for this course and for CS 553.
Recommended Background: CS 3133.
This course will be offered in 2009-10 and in alternating years thereafter.

CS 4233. Object-Oriented Analysis and Design.

Cat. II
This Software Engineering course will focus on the process of Object-Oriented Analysis and Design. Students will be expected to complete a large number of exercises in Domain Modeling, Use Case Analysis, and Object-Oriented Design. In addition, the course will investigate Design Patterns, which are elements of reusable object-oriented software designs. This course will survey a set of design patterns and consider how these patterns are described and used to solve design problems.
Recommended Background: CS 2303 and CS 3733.
This course will be offered in 2010-11 and in alternating years thereafter.

CS 4241. WebWare: Computational Technology for Network Information Systems.

Cat. I
This course explores the computational aspects of network information systems as embodied by the World Wide Web (WWW). Topics include: languages for document design, programming languages for executable content, scripting languages, design of WWW based human/computer interfaces, client/server network architecture models, high level network protocols (e.g., http), WWW network resource discovery and network security issues.
Students in this course will be expected to complete a substantial software project (e.g., Java based user interface, HTML/CGI based information system, WWW search mechanisms, etc.).
Recommended background: CS 2102 and CS 3013.

CS 4341. Introduction to Artificial Intelligence.

Cat. I
This course studies the problem of making computers act in ways which we call “intelligent”.
Topics include major theories, tools and applications of artificial intelligence, aspects of knowledge representation, searching and planning, and natural language understanding.
Students will be expected to complete projects which express problems that require search in state spaces, and to propose appropriate methods for solving the problems.
Intended audience: computer science majors.
Undergraduate credit may not be earned both for this course and for CS 534.
Recommended background: CS 2102 and CS 2223.
Suggested background: CS 3133.

CS 4432. Database Systems II.

Cat. II
This course concentrates on the study of the internals of database management systems.
Topics include: principles and theories of physical storage management, advanced query languages, query processing and optimization, index structures for relational databases, transaction processing, concurrency control, distributed databases, and database recovery, security, client server and transaction processing systems.
Outcome: Students may be expected to design and implement software components that make up modern database systems.
Intended audience: computer science and computer engineering majors.
Undergraduate credit may not be earned both for this course and CS 542.
Recommended background: CS 3431 and CS 3733.
This course will be offered in 2009-10 and in alternating years thereafter.

CS 4445. Data Mining and Knowledge Discovery in Databases.

Cat. II
This course provides an introduction to Knowledge Discovery in Databases (KDD) and Data Mining. KDD deals with data integration techniques and with the discovery, interpretation and visualization of patterns in large collections of data. Topics covered in this course include data warehousing and mediation techniques; data mining methods such as rule-based learning, decision trees, association rules and sequence mining; and data visualization. The work discussed originates in the fields of artificial intelligence, machine learning, statistical data analysis, data visualization, databases, and information retrieval. Several scientific and industrial applications of KDD will be studied. Recommended background: CS 4341 Introduction to Artificial Intelligence, MA 2611 Applied Statistics I, and CS 3431 Database Systems I. This course will be offered in 2010-11 and in alternating years thereafter.

CS 4513. Distributed Computing Systems.

Cat. I
This course extends the study of the design and implementation of operating systems begun in CS 3013 to distributed and advanced computer systems.
Topics include principles and theories of resource allocation, file systems, protection schemes, and performance evaluation as they relate to distributed and advanced computer systems.
Students may be expected to design and implement programs that emphasize the concepts of file systems and distributed computing systems using current tools and languages.
Intended audience: computer science and computer engineering majors.
Undergraduate credit may not be earned both for this course and for CS 502.
Recommended background: CS 3013 and a knowledge of probability, such as provided by MA 2621.

CS 4514. Computer Networks: Architecture and Implementation.

Cat. I
This course introduces principles and current trends in computer networks. The ISO Reference Model will be used as the framework with the course progressing through the physical, data link, network, transport, session, and presentation layers with specific examples and standards cited throughout for point-to-point, satellite, packet-radio, and local area networks.
Topics include motivation and objectives of computer networks, overview of network architectures, layered architectures, performance analysis, virtual circuits, datagrams, routing flow control, local area networks, internetworking, end-to-end communication, virtual terminal, file transfer protocols, and clientserver programming.
Students will be expected to design and implement projects such as simulation of the network/transport layer functions, routing, congestion control, an Ethernet controller, applications using TCP/IP or remote procedure calls.
Intended audience: computer science and computer engineering majors.
Undergraduate credit may not be earned both for this course and for CS 513.
Recommended background: CS 3013 and some knowledge of probability.

CS 4515. Computer Architecture.

Cat. II
This course explores modern computer architectures in terms of instruction sets and the organization of processors, controllers, memories, devices, and communication links.
Topics include an overview of computer systems, theoretical foundations, modern computer system components, pipelining of instruction sets, multifunction pipelines, parallel computer organization.
Students will be expected to design and implement programs which simulate significant components of modern computer architectures.
Intended audience: computer science and computer engineering majors.
Recommended background: CS 2011 or ECE 2801, and CS 3013.
This course will be offered in 2010-11 and in alternating years thereafter.

CS 4533. Techniques of Programming Language Translation.

Cat. II
This course studies the compiling process for high-level languages.
Topics include lexical analysis, syntax analysis, semantic analysis, symbol tables, intermediate languages, optimization, code generation and run-time systems.
Students will be expected to use compiler tools to implement the front end, and to write a program to implement the back end, of a compiler for a recursive programming language.
Intended Audience: computer science and computer engineering majors.
Undergraduate credit may not be earned for both this course and for CS 544.
Recommended Background: CS 2102 and CS 3133.
This course will be offered in 2010-11 and in alternating years thereafter.

CS 4536. Programming Languages.

Cat. II
This course covers the design and implementation of programming languages. Topics include data structures for representing programming languages, implementing control structures (such as functions, recursion, and exceptions), garbage collection, and type systems. Students will be expected to implement several small languages using a functional programming language.
Intended audience: CS majors and minors interested in understanding how programming languages work and how to implement their own small languages.
Recommended background: CS 2303, CS 3133, and experience programming in a functional language (as provided by CS 1101 or CS 1102).
Undergraduate credit may not be earned for both this course and CS 536.
This course will be offered in 2009-10 and in alternating years thereafter.

CS 4731. Computer Graphics.

Cat. I
This course studies the use of the computer to model and graphically render two- and three-dimensional structures.
Topics include graphics devices and languages, 2- and 3-D object representations, and various aspects of rendering realistic images.
Students will be expected to implement programs which span all stages of the 3-D graphics pipeline, including clipping, projection, arbitrary viewing, hidden surface removal and shading.
Intended audience: computer science majors.
Undergraduate credit may not be earned both for this course and for CS 543.
Recommended background: CS 2223, CS 2303 and MA 2071.

CS 4732. Computer Animation.

Cat. II
This course provides an in-depth examination of the algorithms, data structures, and techniques used in modeling and rendering dynamic scenes. Topics include animation hardware and software, parametric blending techniques, modeling physical and articulated objects, forward and inverse kinematics, key-frame, procedural, and behavioral animation, and free-form deformation.
Students will be expected to develop programs to implement low-level animation algorithms as well as use commercial animation tools to design and produce small to moderate sized animations.
Intended audience: computer science majors.
Recommended background: CS 4731.
This course will be offered in 2010-11 and in alternating years thereafter.

Maintained by webmaster@wpi.edu