McCormick School of Engineering and Applied Science   Northwestern University
Department of Computer Science Northwestern University

Course Descriptions

Course schedules are available for the following academic years:

For a summary of the prerequisites for all CS courses, see the Prerequisites Tree.

For individual CS 395/495 course web pages (1 per section, where provided), see the Special Topics - Course Offerings page(s)

725-110-0 Introduction to Computer Programming
Introduction to programming practice using a modern programming language. Analysis and formulation of problems for computer solution. Systematic design, construction, and testing of programs. Substantial programming assignments.
Prerequisites: None
Prerequisite for: 730-205, 730-230
725-111-0 Fundamentals of Computer Programming
Introduction to principles of programming and procedural thinking. Procedural abstraction, data abstraction, modularity, object-oriented programming. Uses computer facilities and the Scheme programming language. Substantial programming assignments, including numerical and symbolic programs. Required for computer science majors.
Prerequisites: None
Prerequisite for: 725-211
725-120-0 Introduction to Computer and Information Technology
** Not currently offered **
725-130-0 Tools and Technology of the World Wide Web
Introduction to the theory and practice of developing sites on and technology for the World Wide Web. It will cover the basics of HTML, JavaScript, ASP, and CGI programming.
Prerequisites: None
Course Director: Kristian Hammond
725-211-0 Fundamentals of Computer Programming II
Continuation of 111. Key concepts in software design and systems programming. Object-oriented programming (in C++), design of interpreters and compilers, and register machines. Required for computer science majors.
Prerequisites: 725-111
Prerequisite for: 725-311
725-213-0 Introduction to Computer Systems
This course has four purposes: (1) to learn about the hierarchy of abstractions and implementations that comprise a modern computer system; (2) to demystify the machine and the tools that we use to program it; (3) to come up to speed on systems programming in C in the Unix environment; (4) to prepare students for upper-level systems courses.
Prerequisites: 725-211 or 727-230
Course Director: Peter Dinda
725-310-0 Mathematical Foundations of Computer Science
Basic concepts of finite and structural mathematics. Sets, axiomatic systems, the propositional and predicate calculi, and graph theory. Application to computer science: sequential machines, formal grammars, and software design.
Prerequisites: 725-110 or 725-111 and 435-214-3
Prerequisite for: 725-322, 725-332, 725-339, 725-343, 725-351
725-311-0 Data Structures and Data Management
The design, implementation, and analysis of abstract data types, data structures and their algorithms. Topics include: data and procedural abstraction, linked lists, stacks, queues, binary trees, searching, and sorting. Required for computer science majors.
Prerequisites: 725-211 or 727-230
Prerequisite for: 725-322, 725-332, 725-339, 725-343, 725-351
725-317-0 Data Management and Information Processing
Data models and database design. Modeling the real world: structures, constraints, and operations. The entity relationship to data modeling (including network hierarchical and object-oriented), emphasis on the relational model. Use of existing database systems for the implementation of information systems. Note: This course is only for IE/MFE students - CS/CIS students are not allowed to register for this course, and it does not carry credit towards the CS/CIS major.
Prerequisites: 725-110, 725-111, or programming experience
Course Director: TBA
725-322-0 Compiler Construction
Introduction to compiler construction. Lexical analysis and parsing. Syntax-directed translation. Intermediate code generation. Machine-code generation. Optimization. Run-time organization.
Prerequisites: 725-311
Course Director: Brian Dennis
725-325-0 Artificial Intelligence Programming
Introduction to Lisp and programming knowledge-based systems and interfaces. Strong emphasis on writing maintainable, extensible systems. Topics include: semantic networks, frames, pattern matching, deductive inference rules, case-based reasoning, discrimination trees. Project-driven. Substantial programming assignments.
Prerequisites: 725-110, 725-111, or programming experience
Prerequisite for: 725-344
Course Director: Christopher Riesbeck
725-330-0 Human Computer Interaction
Introduction to human-computer interaction and the design of systems that work for people and their organizations.  The goal is to understand the manner in which humans interact with, and use, their computers for productive work. The course focus is on the interface as designed artifact. The interface is a design problem without a single "correct" solution but which has many "good" solutions and a plethora of "bad" solutions. Class discussion centers on what makes an interface good and proven techniques for designing interfaces that meet human needs.
Prerequisites: prior programming experience
Course Director: Louis Gomez, Ben Watson
725-336-0 Design and Analysis of Algorithms
Analysis techniques: solving recurrence equations. Algorithm design techniques: divide and conquer, the greedy method, backtracking, branch-and-bound, and dynamic programming. Sorting and selection algorithms, order statistics, heaps, and priority queues.
Prerequisites: 725-310 and 725-311 or consent of instructor
725-337-0 Introduction to Semantic Information Processing
A semantics-oriented introduction to natural language processing, broadly construed. Representation of meaning and knowledge inference in story understanding, script/frame theory, plans and plan recognition, counterplanning, and thematic structures.
Prerequisites: 725-348 or consent of instructor
Course Director: Larry Birnbaum
725-338-0 Practicum In Intelligent Information Systems
A practical excursion into the building of Intelligent Information Systems.
Each student will develop a working program in the area of information access, management, capture, or retrieval. Project definition, data collection, technology selection, implementation, and project management. Semantics-oriented introduction to natural language processing, broadly construed. Representation of meaning and knowledge inference in story understanding, script/frame theory, plans and plan recognition, counter-planning, and thematic structures.
Prerequisites: n/a
Prerequisite for: n/a
Course Director: Larry Birnbaum and Kris Hammond
725-339-0 Introduction to Database Systems
Data models and database design. Modeling the real world: structures, constraints, and operations. The entity relationship to data modeling (including network hierarchical and object-oriented), emphasis on the relational model. Use of existing database systems for the implementation of information systems.
Prerequisites: 725-213 and 725-311
Prerequisite for: 725-464
Course Director: Peter Dinda
725-340-0 Introduction to Networking
A top-down exploration of networking using the 5 layer model and TCP/IP stack. HTTP, FTP, DNS, BSD Sockets, concurrent servers, checksums, reliable transport with stop-and-wait, go-back-n, selective repeat, flow control, congestion control, TCP, unicast routing, multicast routing, router architecture, IP, IPv6, IP multicast, MAC protocols and LANs, Ethernet, ATM, bit-encoding, and wires. Over the course of the quarter, students build web clients and servers, and a fully compatible TCP/IP stack that can run them.
Prerequisites: 725-213 and 725-311
Course Director: Yan Chen, Peter Dinda, and Alexandar Kuzmanovic
725-343-0 Operating Systems
Fundamental overview of operating systems. First Quarter: Operating system structures, processes, process synchronization, deadlocks, cpu scheduling, memory management, file systems, secondary storage management. Requires substantial programming projects.
Prerequisites: 725-311 and either 725-213 or ECE 205 and ECE 231
Prerequisite for: Many 395 offerings
Course Director: Fabian Bustamante
725-344-0 Design of Computer Problem Solvers
Principles and practice of organizing and building AI reasoning systems. Topics include pattern-directed rule systems, truth-maintenance systems, and constraint languages.
Prerequisites: 725-348 and 725-325-1 or equivalent Lisp experience
Course Director: Kenneth Forbus
725-345-0 Distributed Systems
This course addresses some of the basic principles behind distributed systems (collection of independent components that appear to the users as a single coherent system) and reviews some of the main paradigms used to organize them.
Prerequisites: 725-340 and 725-343 or permission of instructor
Course Director: Fabian Bustamante
725-348-0 Introduction to Artificial Intelligence
Core techniques and applications of artificial intelligence. Representation retrieving and application of knowledge for problem solving. Hypothesis exploration, theorem proving, vision and neural networks.
Prerequisites: 725-325-1, 725-111, or Lisp programming experience
Prerequisite for: 725-337, 735-344
Course Director: Lawrence Birnbaum
725-351-0 Introduction to Computer Graphics
Mathematical software and hardware requirements for computer graphics systems. Data structures and programming languages. Random displays. Graphic applications.
Prerequisites: 725-311
Course Director: Jack Tumblin
725-360-0 Designing & Constructing Models With Multi-Agent Languages
This is a hands-on projects course. All students will design and implement multi-agent models in the NetLogo language. Students will design and implement several NetLogo projects focusing on the affordances of multi-agent models and analyzing their behavioral regimes.
Prerequisites: None
725-370-0 Computer Game Design
Fundamentals of computer game design. Topics include: Plot, narrative and character, simulation for creating game worlds, AI for synthetic characters, tuning game play. Substantial programming and project work.
Prerequisites: 725-311, plus at least one of 725-322, 725-343, 725-348, or 725-351
Course Director: Kenneth Forbus
725-394-1,2 Software Project Management and Development
Software development methodologies, object-oriented analysis and design, CASE tools, software life cycle. Project management tools, programming teams. Executable specifications, automatic test generation.
Prerequisites: 725-343-1 or equivalent programming experience
725-395/495-0 Special Topics in Computer Science
Topics suggested by students or faculty, with approval of the department.
725-399-0 Projects
Seminar and projects for advanced undergraduates on subjects of current interest in computer science.
725-430-0 Design of Interactive Learning Environments
This course is about the design of computer-based learning-by-doing environments. It focuses primarily on the initial conception of an environment more than the technical issues involved in building these environments. In this course you will go through the conceptual design process for a number of different learning environments.
Prerequisites: LSCI 403 and 425 are recommended
725-437-1,2 Design of Educational Software Environments
Discourse planning, generation, and advanced problems in NLP, the role of memory in understanding and learning: remindings, expectation failures, memory organization, and thematic structures.
725-441 Resource Virtualization
Virtual machines of all kinds, virtual networking, virtual services, virtual storage, emulation, distributed computing using virtualized resources.
Prerequisites: (CS 343 and CS 340) or consent of instructor. Undergraduates welcome.
Course Director: Peter Dinda
725-442 Dynamic Behavior Of Applications, Hosts, and Networks
Workload characterizion; measuring, analyzing, modeling, and predicting the dynamic behavior of distributed computing environments and their applications.
Prerequisites: (CS 343 and CS 340) or consent of instructor. Undergraduates welcome.
Course Director: Peter Dinda
725-443 Advanced Operating Systems
Advanced concepts in operating systems and distributed computing, covering a wide range of research topics from historical perspectives to current themes such as peer-to-peer computing and mobile systems.
Prerequisites: 725-343 or permission of instructor
Course Director: Fabian Bustamante
725-450 Internet Security
Through measurement-based approaches, students will analyze the complexity of the Internet, and develop countermeasure against various vulnerabilities of the Internet, e.g., viruses, worms, denial of service attacks, and more.
Prerequisites: 725-340 or permission of instructor
Course Director: Yan Chen
725-464 Advanced Database Systems
This class focuses on the implementation of database management systems: file layout, indexing, query optimization and processing, concurrency control, disaster recovery and transaction management.
Prerequisites: 725-311 and 339 or permission of instructor
725-499 Projects
Special projects carried out under faculty direction. Permission of instructor and department required.
725-510 Seminar
Seminar on topics of current interest.
Winter 99: Knowledge Representation
725-590 Research
Independent investigation of selected problems pertaining to thesis or dissertation. May be repeated for credit.

ECE 397 Introduction to Real-time Systems
Theory, design, and implementation of real-time systems, i.e., special-purpose computers that guarantee certain tasks will be completed by certain times. Use of real-time operating systems.
Prerequisites: CS 343 or consent of instructor
Course Directors: Robert Dick (ECE) and Peter Dinda (CS)

Read more about the opportunities for Cognitive Science interdisciplinary program in the Department of Psychology.
2133 Sheridan Road, Evanston, IL 60208
Tel: 847-491-3500 | Fax: 847-491-5258

© 2003,2004 Department of Computer Science, Northwestern University. All Rights Reserved.
Send questions and comments to