221 ALGORITHM DESIGN AND ANALYSIS
An in-depth introduction to the design and analysis of algorithms. Topics may include algorithmic paradigms and structures, including recursion, divide and conquer, dynamic programming, greedy methods, branch and bound, randomized, probabilistic, and parallel algorithms, non-determinism and NP completeness. Applications to searching and sorting, graphs and optimization, geometric algorithms, and transforms. Prerequisites: Computer Science 124, Mathematics 136, or consent of instructor. Every fall. (4 credits)
225 SOFTWARE DESIGN AND DEVELOPMENT
This course builds upon the software design foundation started in Computer Science 124. Students will design and implement medium-sized software projects using modern software design principles such as design patterns, refactoring, fault tolerance, stream-based programming, and exception handling. The concept of a distributed computing system will be introduced, and students will develop multithreaded and networked applications using currently available software libraries. Advanced graphical user interface methods will be studied with an emphasis on appropriate human-computer interaction techniques. Students will use operating systems services and be introduced to methods of evaluating the performance of their software. Prerequisite: Computer Science 124, or consent of instructor. Every fall. (4 credits)
240 COMPUTER SYSTEMS ORGANIZATION
This course familiarizes the student with the internal design and organization of computers. Topics include number systems, internal data representations, logic design, microarchitectures, the functional units of a computer system, memory, processor, and input/output structures, instruction sets and assembly language, addressing techniques, system software, and non-traditional computer architectures. Prerequisite: Computer Science 120, 121, or 123, or consent of instructor. Every spring. (4 credits)
261 THEORY OF COMPUTATION (Same as Mathematics 361)
Investigation of the theoretical foundations of computer science as embodied in formal models of computation, including finite state automata, regular expressions, formal languages, and Turing machines. Properties of computation, including computability, unsolvability, and the theory of computational complexity. Prerequisite: Computer Science 124 and Mathematics 136, or consent of instructor. Every spring. (4 credits)
325 PRINCIPLES OF COMPILER DESIGN
The principles, techniques, and theory underlying the design of compilers and language translators. Topics will include lexical analysis, symbol tables, a variety of parsing algorithms, automated scanner and parser generation, representation and generation of intermediate code, machine code generation, and code optimization. Prerequisites: Computer Science 240 and 261, or consent of instructor. Offered alternate fall semesters; next offered Fall 2009. (4 credits)
340 DIGITAL ELECTRONICS (Same as Physics and Astronomy 340)
A survey of fundamental ideas and methods used in the design and construction of digital electronic circuits such as computers. Emphasis will be on applying the theoretical aspects of digital design to the actual construction of circuits in the laboratory. Topics to be covered include basic circuit theory, transistor physics, logic families (TTL, CMOS), Boolean logic principles, combinatorial design techniques, sequential logic techniques, memory circuits and timing, and applications to microprocessor and computer design. Three lectures and one three-hour laboratory per week. Prerequisite: Mathematics 137 and permission of instructor. Offered alternate spring semesters; next offered Spring 2009. (4 credits)
342 OPERATING SYSTEMS AND COMPUTER ARCHITECTURE
The basic principles related to the design and architecture of operating systems. Concepts to be discussed include sequential and concurrent processes, synchronization and mutual exclusion, processor scheduling, time-sharing, multiprogramming, multitasking, and parallel processing. Memory management techniques. File system design. Security and protection systems. Performance evaluation. Prerequisite: Computer Science 240, or consent of instructor. Offered alternate spring semesters; next offered Spring 2009. (4 credits)
343 DESIGN OF COMPUTER NETWORKS
This course investigates basic principles for designing and implementing both local area networks (LANs) and wide-area networks (WAN). It will look at 1) physical layer protocols, including transmission media, analog vs. digital communications, and interface design, 2) data link layer protocols, for point-to-point and contention-based message passing, 3) network layer protocols, for routing, congestion control, and inter-network communication, and 4) transport protocols, for creating error-free end-to-end channels. Each of these concepts will be illustrated using actual communication protocols such as the Ethernet and TCP/IP. The course will also take a brief look at higher level application issues including security (e.g. encryption, authentication), network management, name servers, and multimedia protocols such as JPEG and MPEG. Prerequisites: Computer Science 240 and 221, or consent of instructor. Offered alternate fall semesters; next offered Fall 2009. (4 credits)
346 INTERNET COMPUTING
This course will investigate the latest technology available for building web applications with dynamic content. It will look at all stages in the web application design process, including: 1) client applications, 2) web applications that service client requests, 3) application servers that manage requests for information, update data, and serve client applets, and 4) the database management system that holds the data. The course will be programming-intensive using aspects of the Java language available for designing and implementing Internet applications. The format of the course will be mainly laboratory-based sessions where you learn to build these four components of a web application, supported by lectures and discussions. Students will research particular topics and present their findings during these discussion sessions. The course will also investigate the usability of designs from a human factors standpoint and discuss privacy and other social consequences of this technology. Prerequisite: Computer Science 225, or consent of instructor. Offered alternate fall semesters; next offered Fall 2008. (4 credits)
365 SCIENTIFIC COMPUTATION (Same as Mathematics 365)
Techniques and algorithms for computational solutions to scientific problems with applications to diverse disciplines. Topics include: numerical integration; root finding; interpolation, splines, and Bezier curves; statistical function estimation; modeling via simulation and Monte Carlo techniques; optimization; transforms; symbolic computing; controlling numerical error. Prerequisites: Computer Science 121 or 123, Math 137. Linear Algebra (Math 236) strongly recommended. Every spring. (4 credits)
369 DISCRETE APPLIED MATHEMATICS (Same as Mathematics 469)
Topics in applied mathematics chosen from: cryptography; complexity theory and algorithms; integer programming; combinatorial optimization; computational number theory; applications of geometry to tilings, packings, and crystallography; applied algebra. Prerequisites: Math 236 and 379 and Computer Science 121 or 123. Alternate fall semesters; next offered Fall 2008. (4 credits)
425 PROGRAMMING LANGUAGE CONCEPTS
Introduction to programming language concepts, including issues of design, specification, representation, and implementation across a range of language types (procedural, object-oriented, functional, declarative, and parallel). Specific topics will include models of computation and their influence on language design, syntax, semantics and abstract interpretation, language structures, type theories, and program transformation methods, such as interpretation, compilation, partial evaluation, and graph reduction. Prerequisites: Computer Science 221 and 261, or consent of instructor. (4 credits)
445 PARALLEL PROCESSING
An introduction to the field of parallel processing and its three major subareas of parallel architectures, parallel languages, and parallel algorithms. Topics include SIMD and MIMD systems, private memory and shared memory designs, dataflow architectures; issues in parallel language design such as process creation and management, message passing, synchronization, and deadlock; the design and formal analysis of parallel algorithms in areas such as sorting, searching, numerical methods, and graph theory. Students will design and implement software for an actual parallel processing system. Prerequisites: Computer Science 240 and 221, or consent of instructor. (4 credits)
480 INTRODUCTION TO DATABASE MANAGEMENT SYSTEMS
This course will introduce students to the design, implementation, and analysis of databases stored in database management systems (DBMS). Topics include implementation-neutral data modeling, database design, database implementation, and data analysis using relational algebra and SQL. Students will generate data models based on real-world problems, and implement a database in a state-of-the-art DBMS. Students will master complex data analysis by learning to first design database queries and then implement them in a database query language such as SQL. Advanced topics include objects in databases, indexing for improved performance, distributed databases, and data warehouses. Prerequisites: Computer Science 225, or consent of instructor. Alternate spring semesters; next offered Spring 2010. (4 credits)