Undergraduate
  /  
Computer Science Major (BS/BA)
  /  
CS Course Requirements
CS Project Course

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

EECS 315, 497 - 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. 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.

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 331 - Introduction to Computational Photography

Computational photography combines plentiful low-cost computing, digital sensors, actuators, and lights to escape the limitations of traditional film-like methods. New methods offer unbounded dynamic range and variable focus, lighting, viewpoint, resolution and depth of field; hints about shape, reflectance, and location. Instead of fixed digital snapshots and video playback, computational methods promise direct interactions to explore what we photograph. This course satisfies the CS Project Course, CS Breadth: Interfaces, and CD Depth: Interfaces requirements.

EECS 337 - Natural Language 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 http://www.chromeexperiments.com/webgl/ , http://www.marky.pl/vector-field/) This course satisfies the project requirement.

EECS 351 - 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 built-in abilities of WebGL. 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 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: 3EECS 348, EECS 325, or equivalent experience with artificial intelligence. This course satisfies the project requirement.

EECS 351 - 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 built-in abilities of WebGL. 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 397, 497 - 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 397, 497 - Digital Luthier

EECS 397, 497 - Internet of Things Networks Seminar

EECS 397, 497 - Software Construction

EECS 397, 497 - Internet-scale Experimentation

Internet-scale Experimentation is a graduate-level seminar exploring the challenges of large-scale networked system experimentation and measurements.

EECS 397, 497 - Kernel and Other Low-level Software Development

The development of low-level software such as drivers, kernels, hypervisors, run-times, system libraries, JITs, and firmware is very different from the development of applications. The goal of this class is to teach students how such development is done, both in terms of the modes of thinking needed to design, implement, debug, and optimize low-level software, and in terms of how to leverage representative, widely-used tools to do so. Some of the techniques the class covers are also used in the design and optimization of the performance-critical parts of applications.

EECS 397, 497 - 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 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. Please note that this course requires significant amount of programming outside of class.

EECS 397, 497 - Geospatial Vision and Visualization

Geospatial information has become ubiquitous in everyday life, as evidenced by on-line mapping services, navigation software on mobile devices and vehicles, and HD map for automated driving. Behind the scenes is digital map content engineering that enables all types of location-based services. Course material will be drawn from the instructor's research experience at HERE (formerly NAVTEQ), a leader in mapping and location technology. This course will provide comprehensive treatment of computer vision, image processing and visualization techniques in the context of digital mapping, global positioning and sensing, next generation map making, and three-dimensional and high definition map content creations. Real world problems and data and on-site industry visits will comprise part of the course curriculum.

EECS 397, 497 - (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 397, 497 - Digital Forensics and Incident Response

This course will focus on Digital Forensics and Incident Response (Investigations). This class will introduce the basic theory of Digital Forensics and in the lab, we will actually apply the knowledge in practical scenarios. The goal is to learn how to investigate the digital artifacts left on hard drives, logs and other networking devices. The course shall prepare you to conduct data preservation and analysis on Windows, Linux and Macintosh platforms. Students will also get exposure to the Techniques, Tactics and Procedures (TTPs) of the prominent Threat Actors and will learn to conduct digital investigations with a sound process.

EECS 397, 497 - Innovation Lab

This is a two quarter class in which CS students will work on teams with Law School students to desgined, develop and test innovative products in the legal space. The first quarter will be focused on ideation, design and prototyping. The focus of the second quarter will be the development and hadening of the solution. There will be final presentations associated with each of the two phases of the work.

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 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.

EECS 473-2 - NUvention: Web + Media (ENTREP 473)

This course satisfies the software development (breadth) and project requirement (NOTE: ONLY IF BOTH QUARTERS ARE FINISHED). NUvention:Web is an interdisciplinary experiential learning program designed to expose students to the entire product and business development life cycle for a software company. Project areas include iPad/Tablet App, Mobile Applications, New Media, Social Gaming, Twitter or Facebook Apps, eCommerce/Deals, Analytics, Cloud, Big Data or ideas from students in the program. Teams will be able to continue to work on their projects after the completion of the course. Past NUvention:Web teams have gone on to make TechCrunch, PCMag, Rolling Stone and GigaOM headlines and join incubators, while others are bootstrapping and building their businesses to this day.