Computer Science Curriculum
CS Project Course

The courses below fulfill the Project Course requirement in computer science.

EECS 322 - 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. This course satisfies the project requirement.

EECS 330 - 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. This course satisfies the CS Project Course, CS Breadth: Interfaces, and CD Depth: Interfaces requirements.

EECS 337 - Intro 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, counter-planning, and thematic structures. This course satisfies the project requirement

EECS 338 - 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. This course satisfies the project requirement.

EECS 339 - Intro to Databases

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. This course satisfies the project requirement.

EECS 340 - Introduction to Computer Networking

A top-down exploration of networking using the 5-layer model and the 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 , wireless networks, and network security. Over the course of the quarter, students build web clients and servers, a fully compatible TCP/IP stack that can run them, and evaluate routing protocols in simulation. This course satisfies the project requirement.

EECS 343 - Operating Systems

A fundamental overview of operating systems. Topics covered include: Operating system structures, processes, process synchronization, deadlocks, CPU scheduling, memory management, file systems, secondary storage management. Requires substantial programming projects. Approved for Systems Breadth and Depth in the CS curriculum in McCormick and Weinberg This course satisfies the project requirement.

EECS 344 - Design of Problem Solvers

Principles and practice of organizing and building AI reasoning systems. Topics include pattern-directed rule systems, truth-maintenance systems, and constraint languages. This course satisfies the project requirement.

EECS 345 - Distributed Systems

Basic principles behind distributed systems (collections of independent components that appear to users as a single coherent system) and main paradigms used to organize them. This course satisfies the project requirement

EECS 350 - Introduction to Computer Security

The 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 and information security. Focus will be on the 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, Web and wireless security. Students with good performance in the class will be awarded researchship in the academic year and/or the summer. This course can help satisfy the project course requirement for undergraduates and satisfy the breadth requirement in computer systems for system Ph.D. students. This course satisfies the project requirement

EECS 351 - Intro to Computer Graphics

First in a 3-course series to teach the core principles, ideas & math behind all forms of computer-assisted picture-making; complementary/compatible with computer-game design interests. After this course you can write your own programs to depict animated 2D and 3D objects that respond to mouse and keyboard inputs, yet run in any modern web browser. We write WebGL programs in Javascript to create GPU-driven high-performance 3D graphics in any up-to-date web browser (Skeptical? try , This course satisfies the project requirement.

EECS 352 - Machine Perception of Music & Audio

Machine extraction of musical structure in audio, MIDI and score files, covering areas such as source separation and perceptual mapping of audio to machine-quantifiable measures. This course satisfies the project requirement

EECS 354 - Network Penetration and Security

This course will focus on remote computer penetration (hacking). The class will introduce basic theory for many different types of attacks; 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.

EECS 370 - 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. Approved for the Breadth Interfaces and Depth Interfaces requirement in the CS curriculum. This course satisfies the project requirement

EECS 371 - Knowledge Representation and Reasoning

Principles and practices of knowledge representation, including logics, ontologies, common sense knowledge, and semantic web technologies. Prerequisite: 348, 325, or equivalent experience with artificial intelligence. This course satisfies the project requirement.

EECS 372-472 - Designing and Constructing Models with Multi-Agent Languages

This course focuses on the exploration, construction and analysis of multi-agent models. Sample models from a variety of content domains are explored and analyzed. Spatial and network topologies are introduced. The prominent agent-based frameworks are covered as well as methodology for replicating, verifying and validating agent-based models. We use state of the art ABM and complexity science tools. This course can help satisfy the project course and artificial intelligence area course requirement for CS and CIS majors, and satisfy the breadth requirement in artificial intelligence for Ph.D. students in CS. It also satisfies a design course requirement for Learning Sciences graduate students, counts towards the Cognitive Science specialization and as an advanced elective for the Cognitive Science major.

EECS 394 - Software Project Management & Development

EECS 394 is focused on the process of software development from the perspective of both rapid prototyping and responsive relationships with clients. We’ll take an Extreme Programming approach in which teams will maintain tight, iterative development cycles that include ongoing interactions with clients. In the style of EDC, the class is project oriented, with teams focused on specific projects during the entire 10 week period. The class also has a studio feel, with team interactions during class guided by faculty and graduate students.

EECS 395-495 - Biometrics

In a security conscious society, biometrics-based authentication and identification have become a central focus for many important applications as biometrics can provide accurate and reliable identification. Biometrics research and technology continue to mature rapidly, driven by pressing industrial and government needs and supported by industrial and government funding. This course offers an introduction to major biometric techniques, the underlying pattern recognition and computer vision basis for these biometrics, scientific testing and evaluation methodologies of biometrics systems, a deeper study of facial recognition, and an examination of the current privacy and social/ethical issues surrounding the technology. The course includes readings from the literature, short writing assignments, and practical experience with current biometric technology

EECS 395-495 - Data Science

In this seminar, we will survey the fundamentals of data science by reading state of the art research papers in this area. This class will cover the basics of how to manipulate, integrate, and analyze data at scale. To receive credit, students must give in-class presentations and complete a final project.

EECS 395-495 - Game Development Studio

In 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 fundamentals such as the MDA framework, 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. (formerly known as "EECS-395/495 Real-Time 3D Game Engine Design")

EECS 395-495 - (Special Topics) Innovation in Journalism & Technology

This is a joint projects class with Medill in conjunction with the newly announced Knight News Innovation Lab at Northwestern. McCormick students (primarily CS and CE majors) and journalism students will join cross-functional teams to assess and develop, from both an audience/market perspective and a technology perspective, a range of technology projects with the ultimate goal of deployment for impact in media and journalism. Some projects may continue over the summer if students are interested.

EECS 395-495 - Computational Photography Seminar

This course is second in a two-part series that explores the emerging new field of Computational Photography. Computational photography combines ideas in computer vision, computer graphics, and image processing to overcome limitations in image quality such as resolution, dynamic range, and defocus/motion blur. This course will first cover state-of-the-art topics in computational photography such as motion/defocus deblurring cameras, light field cameras, computational displays, and much more!

EECS 395-495 - Design, Technology, and Research

Design, Technology, and Research (DTR) is an EECS and Segal learning initiative that empowers students to drive cutting-edge research through the development of systems that shape new experiences with people and technology. Students participate in DTR through fast-paced, quarter-long programs (intended to be repeated). Students work with a mentor to identify a direction of research, explore and iterate over designs, prototype at varying fidelities, build working systems, conduct evaluative studies, and report findings through conference publications. As a cohort, each week students demo their prototypes, provide and receive feedback, and help each other resolve technical challenges. DTR adapts and extends agile development and design-based research practices with scrums, sprints, studio critique, design logs, and pair research

EECS 395-495 - Intermediate Computer Graphics

(to become CS351-2) Second in a 3-course series on the methods and theory of computer graphics, this project-oriented course explores how to describe shapes, movement, and lighting effects beyond the abilities of the standard OpenGL rendering pipeline. It includes interactive particle systems, simple rigid-body dynamics, explicit and implicit dynamics solvers (suitable for smoke, simple fluids and cloth) and an introduction to ray tracing (chrome, glass, and diffraction) with a few basic ideas for global illumination.

EECS 395-495 - Online Advertising: A Systems Approach (Kuzmanovic)

This course will cover a broad range of topics related to online advertising on the web, mobile, search-engines, and online social networks. Example topics include online advertising architectures, click frauds and malicious advertising, privacy-preserving online advertising, measuring and predicting the effects of online advertising, behavioral and contextual advertising, and more.

EECS 441 - Resource Virtualization

The 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. This course satisfies the project requirement

EECS 443 - Advanced Operating Systems

Advanced operating systems. Topics covered include: Approved for Systems Breadth and Depth in the CS curriculum in McCormick and Weinberg This course satisfies the project requirement.

EECS 450 - Internet Security

Cybercrime has exploded over the last decade. In this course, we will start with the basic concepts of network security, then focus on security challenges of network and distributed systems as well as the counter-attack approaches. Approved for Security Depth and Systems Breadth and Depth in the CS curriculum in McCormick and Weinberg This course satisfies the project requirement.