Northwestern UniversityWebsiteAcademic Catalog
Computer ScienceDepartment Website
BS Degree in Computer Sciencesource 1source 2source 3
CS Courses
- Fundamentals of Computer ProgrammingCOMP_SCI 111-0 (1)introCOMP_SCI 111-0: Fundamentals of Computer Programming
Fundamental concepts of computer programming with heavy emphasis on design of recursive algorithms and test-driven development. Functional, imperative, and object-oriented programming paradigms. Procedural abstraction, data abstraction, and modularity. Required for the computer science degree.
- Fundamentals of Computer Programming 1.5COMP_SCI 150-0 (1)introCOMP_SCI 150-0: Fundamentals of Computer Programming 1.5
An introduction to Object-oriented programming: focus on Python but including a brief introduction to a statically typed language (e.g. C++). Students will use some approaches from Artificial Intelligence and Machine Learning to complete programming assignments. Required for the computer science degree.
- Fundamentals of Computer Programming IICOMP_SCI 211-0 (1)introCOMP_SCI 211-0: Fundamentals of Computer Programming II
CS 211 teaches foundational software design skills at a small-to-medium scale. We aim to provide a bridge from the student-oriented How to Design Programs languages to real, industry-standard languages and tools. Topics include expressions, statements, types, functions, branches and iteration, user-defined types, data hiding, basic UNIX shell usage, and testing.
- Mathematical Foundations of Comp ScienceCOMP_SCI 212-0 (1)mathCOMP_SCI 212-0: Mathematical Foundations of Comp 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.
- Introduction to Computer SystemsCOMP_SCI 213-0 (1)sysCOMP_SCI 213-0: Introduction to Computer Systems
The hierarchy of abstractions and implementations that make up a modern computer system; demystifying the machine and the tools used to program it; systems programming in C in the UNIX environment. Preparation for upper-level systems courses.
- Data Structures & AlgorithmsCOMP_SCI 214-0 (1)algsCOMP_SCI 214-0: Data Structures & Algorithms
Design, implementation, and performance analysis of abstract data types; data structures and their algorithms. Topics include fundamental collection classes, tree and graph representations and walks, search trees, sorting, priority queues and heaps, least-cost paths computations, and disjoint-set structures. Required for the computer science degree.
- Software Development and Programming LanguagesScalable Software ArchitecturesororCOMP_SCI 310-0 (1)softengCOMP_SCI 310-0: Scalable Software Architectures
Teaches software design principles for building high-scale Internet services. Focuses on challenges arising when assembling software services that run on many machines in parallel and which require the coordination of multiple software applications.
Practicum in Intelligent Information SystemsorCOMP_SCI 338-0 (1)aiCOMP_SCI 338-0: Practicum in Intelligent Information SystemsA practical excursion into building intelligent information systems. Students develop a working program in information access, management, capture, or retrieval. Project definition, data collection, technology selection, implementation, and project management.
Game Design StudioorCOMP_SCI 377-0 (1)softengCOMP_SCI 377-0: Game Design StudioIn this course, students will design and develop games using the Unity game engine, with focus on team-based projects and agile development practices. Lectures will cover game design theory, game architecture and implementation, and the business of game development. Students will participate in class discussion and evaluation of projects in progress, to develop their skills in iterative design and implementation.
Rapid Prototyping for Software InnovationorCOMP_SCI 392-0 (1)softengCOMP_SCI 392-0: Rapid Prototyping for Software InnovationThis is a course about developing working prototypes of full-stack mobile web software applications in rapid iterations. Teams design and implement three distinct applications over ten weeks. These projects are the context for introducing (1) cross-functional team development, (2) lean agile value-first product development, and (3) specific web application frameworks and development tools, such as React, Firebase, Cypress, and Github Actions for continuous integration.
Software ConstructionorCOMP_SCI 393-0 (1)softengCOMP_SCI 393-0: Software ConstructionBuilding software is a craft that requires careful design. This course teaches software design principles in a studio setting. Each week, students present their programs to the class for review. Together, the class evaluates the programs for correctness and, more importantly, clarity and design. Expect to learn how to build reliable, maintainable, extensible software and how to read others' codes.
Agile Software DevelopmentororCOMP_SCI 394-0 (1)softengCOMP_SCI 394-0: Agile Software DevelopmentDeveloping mobile and web applications, using modern sustainable agile practices, such as backlogs, user stories, velocity charts, and test driven development, to deliver value as quickly as possible to end users, clients, developers, and the development organization.
- InterfacesorororororororororDesigning and Constructing Models with Multi-Agent LanguagesorCOMP_SCI 372-0 (1)aiCOMP_SCI 372-0: Designing and Constructing Models with Multi-Agent Languages
This course will begin with an introduction to the multi-agent language NetLogo. Students will design and implement several NetLogo models and analyze their behavioral regimes. Students will also learn to build models of interaction on social networks (or other types of networks). We will cover methodology for verifying, validating and replicating agent-based models and comparisons with systems dynamics and equation-based models. NetLogo comes with many extensions that support a variety of additional features. Students can use these extensions to create specialized models, such as complex networks, real-time data extraction, data mining, connections to physical devices, etc.. Students will also have an opportunity to explore existing and create their own participatory simulations using the HubNet architecture as well as exploring connecting real world sensors and motors to models. Students can also explore multi-level agent-based modeling in which hundreds or thousands of models are connected with NetLogo's LevelSpace extension.
Computer Game Design and DevelopmentorCOMP_SCI 376-0 (1)graphicsCOMP_SCI 376-0: Computer Game Design and DevelopmentIntroduction to design of simulation-based media, with an emphasis on 2D game design. Mathematical preliminaries: linear, affine, and projective spaces, linear transforms, inner and exterior products, unit quaternions; Architecture: update/render loop, component systems, serialization and deserialization, event handling and asynchronous processing, multitasking; Rendering: scene graphs, meshes, shaders, sprites; Networking; Audio; Physics: particles, rigid bodies, collision detection; Gameplay design.
Game Design StudioorCOMP_SCI 377-0 (1)softengCOMP_SCI 377-0: Game Design StudioIn this course, students will design and develop games using the Unity game engine, with focus on team-based projects and agile development practices. Lectures will cover game design theory, game architecture and implementation, and the business of game development. Students will participate in class discussion and evaluation of projects in progress, to develop their skills in iterative design and implementation.
Introduction to Computer VisionELEC_ENG 332-0 (1)engrELEC_ENG 332-0: Introduction to Computer VisionComputer and biological vision systems, image formation, edge detection, image segmentation, texture, representation and analysis of two-dimensional geometric structures and of three-dimensional structures.
- SystemsCompiler ConstructionorCOMP_SCI 322-0 (1)plsCOMP_SCI 322-0: Compiler Construction
The compiler is the programmer's primary tool. Understanding the compiler is therefore critical for programmers, even if they never build one. Furthermore, many design techniques that emerged in the context of compilers are useful for a range of other application areas. This course introduces students to the essential elements of building a compiler: parsing, context-sensitive property checking, code linearization, register allocation, etc. To take this course, students are expected to already understand how programming languages behave, to a fairly detailed degree. The material in the course builds on that knowledge via a series of semantics preserving transformations that start with a fairly high-level programming language and culminate in machine code.
Introduction to Database SystemsorCOMP_SCI 339-0 (1)sysCOMP_SCI 339-0: Introduction to Database SystemsData 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.
Introduction to NetworkingorCOMP_SCI 340-0 (1)sysCOMP_SCI 340-0: Introduction to NetworkingA top-down exploration of networking using the five-layer model and the TCP/IP stack, covering each layer in depth. Students build web clients, servers, and a TCP implementation and implement routing algorithms.
Operating SystemsororCOMP_SCI 343-0 (1)sysCOMP_SCI 343-0: Operating SystemsFundamental overview of operating systems, including: concurrency (processes, synchronization, semaphores, monitors, deadlock); memory management (segmentation, paging virtual memory policies); software system architectures (level structures, microkernals); file systems (directory structures, file organization, RAID); protection (access control, capabilities, encryption, signatures, authentication). Requires substantial programming projects.
Introduction to Computer SecurityorCOMP_SCI 350-0 (1)sysCOMP_SCI 350-0: Introduction to Computer SecurityBasic principles and practices of computer and information security. Software, operating system, and network security techniques, with detailed analysis of real-world examples. Topics include cryptography, authentication, software and operating system security (e.g., buffer overflow), Internet vulnerability (DoS attacks, viruses/worms, etc.), intrusion detection systems, firewalls, VPN, and web and wireless security.
Computer System SecurityorCOMP_SCI 354-0 (1)sysCOMP_SCI 354-0: Computer System SecurityThe past decade has seen an explosion in the concern for the security of information. This course introduces students to the basic principles and practices of computer system and networking security, with detailed analysis of real-world examples and hands-on practice. Topics include the basic crypto, authentication, reverse engineering, buffer overflow attacks, vulnerability scanning, web attacks, firewalls, intrusion detection/prevention systems, etc. We will first introduce the basic theory for each type of attack; then we will actually carry them out in 'real-world' settings. The goal is to learn security by learning how to view your machine from a hacker's perspective. In addition, we encourage students to participate in the UCSB International Capture the Flag Competition. Capture the Flag is a network security exercise where the goal is to exploit other machines while defending your own. In fact, this course should prepare you for any one of many capture the flag competitions that take place year-round. We will learn about different types of hacks and perform them. After learning how to execute such exploits and penetrate a network, we will discuss ways to protect a network from others exploiting the same vulnerabilities. Understanding security is essential in all fields of software development and computing. For major or minors in Computer Science, this course can satisfy the system breadth.
Advanced NetworkingorCOMP_SCI 440-0 (1)sysCOMP_SCI 440-0: Advanced NetworkingThis course will cover a broad range of topics including Internet evolution and architectures; analysis and design of network protocols (both wired and wireless); networking issues for Web and gaming applications; analysis and performance of content distribution networks; network security, vulnerability, and defenses.
Resource VirtualizationororCOMP_SCI 441-0 (1)sysCOMP_SCI 441-0: Resource VirtualizationThe bulk of the time in this class examining a virtual machine monitor (VMM) in depth, at the source code level. The course explains the hardware/software interface of a modern x86 computer in detail. A VMM is an operating system that is implemented directly on top of the hardware interface, and itself presents a hardware interface to higher-level software. Students will also acquire valuable kernel development skills.
Kernel and Other Low-level Software DevelopmentorororCOMP_SCI 446-0 (1)sysCOMP_SCI 446-0: Kernel and Other Low-level Software DevelopmentThe development of low-level systems software such as drivers, kernels, etc is very different from the development of applications. This class teaches how such development is done: how to design, implement, debug, and optimize low-level software and use available tools.
Microprocessor System DesignorCOMP_ENG 346-0 (1)sysCOMP_ENG 346-0: Microprocessor System DesignStructure and timing of typical microprocessors. Sample microprocessor families. Memories, UARTS, timer/counters, serial devices, and related devices. MUX and related control structures for building systems. Standard bus structures. Interrupt programming. Hardware/software design tradeoffs.
Introduction to Parallel ComputingorCOMP_ENG 358-0 (1)sysCOMP_ENG 358-0: Introduction to Parallel ComputingIntroduction to parallel computing for scientists and engineers. Shared-memory parallel architectures and programming, distributed memory, message-passing data-parallel architectures, and programming.
Computer Architecture ICOMP_ENG 361-0 (1)sysCOMP_ENG 361-0: Computer Architecture IDesign and understanding of the computer system as a whole unit. Performance evaluation and its role in computer system design; instruction set architecture design, data-path design and optimizations (e.g., ALU); control design; single cycle, multiple cycle, and pipeline implementations of processor. Hazard detection and forwarding; memory hierarchy design; cache memories, virtual memory, peripheral devices, and I/O.
- Artificial IntelligenceorNatural Language ProcessingorororCOMP_SCI 337-0 (1)aiCOMP_SCI 337-0: Natural Language Processing
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.
Machine LearningororCOMP_SCI 349-0 (1)aiCOMP_SCI 349-0: Machine LearningStudy of algorithms that improve through experience. Topics typically include Bayesian learning, decision trees, genetic algorithms, neural networks, Markov models, and reinforcement learning. Assignments include programming projects and written work.
Designing and Constructing Models with Multi-Agent LanguagesCOMP_SCI 372-0 (1)aiCOMP_SCI 372-0: Designing and Constructing Models with Multi-Agent LanguagesThis course will begin with an introduction to the multi-agent language NetLogo. Students will design and implement several NetLogo models and analyze their behavioral regimes. Students will also learn to build models of interaction on social networks (or other types of networks). We will cover methodology for verifying, validating and replicating agent-based models and comparisons with systems dynamics and equation-based models. NetLogo comes with many extensions that support a variety of additional features. Students can use these extensions to create specialized models, such as complex networks, real-time data extraction, data mining, connections to physical devices, etc.. Students will also have an opportunity to explore existing and create their own participatory simulations using the HubNet architecture as well as exploring connecting real world sensors and motors to models. Students can also explore multi-level agent-based modeling in which hundreds or thousands of models are connected with NetLogo's LevelSpace extension.
- Theoryor
Math/Stat Courses
- Introduction to Probability and StatisticsorSTAT 210-0 (1)mathSTAT 210-0: Introduction to Probability and Statistics
A mathematical introduction to probability theory and statistical methods, including properties of probability distributions, sampling distributions, estimation, confidence intervals, and hypothesis testing. STAT 210-0 is primarily intended for economics majors.
Probabilistic SystemsororELEC_ENG 302-0 (1)engrELEC_ENG 302-0: Probabilistic SystemsIntroduction to probability theory and its applications. Axioms of probability, distributions, discrete and continuous random variables, conditional and joint distributions, correlation, limit laws, connection to statistics, and applications in engineering systems
- Single-Variable Integral CalculusMATH 220-2 (1)mathMATH 220-2: Single-Variable Integral Calculus
Definite integrals, antiderivatives, and the fundamental theorem of calculus. Transcendental and inverse functions. Areas and volumes. Techniques of integration, numerical integration, and improper integrals. First-order linear and separable ordinary differential equations.
Engineering Courses
- or
Science Courses
Other Courses
- Design Thinking and CommunicationDSGN 106-1 (0.5)communicationDSGN 106-1: Design Thinking and Communication
Integrated introduction to the user-centered design process and technical communication. Students will address challenges proposed by project partners by identifying unmet needs, conducting research, generating and evaluating potential solutions, and finally, presenting a final design concept with supporting documentation. Students also enhance their abilities in equitable teamwork, project management, fabrication skills, and producing written, oral, graphical, and interpersonal communication. One lecture, two section meetings, and lab. Co-registration with ENGLISH 106-1 required. Primarily intended for first-year engineering students.
- Design Thinking and CommunicationDSGN 106-2 (0.5)communicationDSGN 106-2: Design Thinking and Communication
Integrated iteration on the user-centered design process and technical communication. This course will build on the learning objectives from DTC-1 while adding more focus on ethics in design and communication, equitable distribution of teamwork, project management, documenting and communicating progress, and exploring a wider variety of project topics. One lecture, two section meetings, and lab. Co-registration with ENGLISH 106-2 required. Primarily intended for first-year engineering students.
- 5 × Free Elective
History of the Major
2023 | Add STAT 210-0 (Introduction to Probability and Statistics) option for the statistics requirement. |
2022 | Replace 3 non-CS Engineering courses → 3 CS Electives (300+). |
2021 | |
2020 | Replace COMP_SCI 101-0 (Computer Science: Concepts, Philosophy, and Connections) → COMP_SCI 150-0 (Fundamentals of Computer Programming 1.5). |
2019 | Renumber EECS xxx → COMP_SCI xxx. |
2018 |