Foundations of Computer Systems

[Schedule] [Assignments] [Infospaces] [Grading] [Syllabus]



The true voyage of discovery consists not of going to new places, but of having a new pair of eyes.
—Marcel Proust (1871–1922)

Fall 2022
CS250/CS280A1 covers foundational aspects of computer systems encompassing processors, networks, storage, and computing frameworks. A holistic understanding these constructs is key to designing systems (AI, Big Data, clouds, and security) that scale by surfacing problems and solutions from different vantage points. The course includes a discussion of processors, cores, and co-processors (GPUs). Speed differentials across the memory hierarchy and the implications of caching will be covered as well. The discussion of the memory subsystem is complemented with the design of data structures for storage systems. Core foundations of networking including the design of the key elements of the networking stack (IP, TCP, and UDP) will be covered alongside a discussion of DNS and BGP. Current state of the art computing systems are based on parallel and distributed computing frameworks; the course includes an overview of these systems. Finally, the course ends with a future gazing component that explores new, promising systems on the horizon with an emphasis on neuromorphic computing.

Course Objectives
Upon successful completion of this course students will be able to:

  1. Formulate computer systems problems and profile the performance of solutions (time complexity, space complexity, and communications complexity)
  2. Design programs that effectively leverage CPUs and co-processors such as GPUs and TPUs.
  3. Design programs that leverage the memory hierarchy to ensure performance efficiency
  4. Understand the design of key networking protocols that underpin the internet including IP, TCP, and UDP.
  5. Design and implement core data structures used for storage systems
  6. Formulate problems that can leverage specific classes of scalable computing systems
  7. Discuss and document trends in computing systems
Extensive experimentation through programming assignments is a principal activity of this course. These assignments will focus on developing skills that are immediately transferrable to building real-world systems.

  • CS 163 or CS 164 with a C or higher
  • Concurrent Enrollment in CS 165
This course can be used in lieu of CS270 for all Computer Science majors (for e.g., it will satisfy the prequiste for CS370). For ECE majors: This course may not satisfy the prerequisites for downstream ECE courses: for example, CS250 does not involve assembly programming.

Shrideep Pallickara

Office: Room 364, Computer Science
Office Hours:
3:00-4:00 pm Friday
E-mail: compsci_cs250 {aT} colostate.edu
(with the obvious change)
Tel: 970.492.4209

    Lecture Coordinates
MW: 9:00-10:15 am
Room CSB-130 {Computer Science}

  Graduate Teaching Assistant
Kassidy Barram
Office Hours in CSB 120:
2:00-4:00 pm Monday
5:00-7:00 pm Wednesday
E-mail: compsci_cs250{aT} colostate.edu
    Labs:/Recitations in CSB-325
R1: 3:00-3:50 pm on Wednesdays.
R2: 4:00-4:50 pm on Wednesdays.
Undergraduate Teaching Assistant
Zach Fuchs
Office Hours in CSB 120: 
1:00-3:00 pm Tuesday
1:00-3:00 pm Thursday
E-mail: compsci_cs250{aT} colostate.edu

Department of Computer Science, Colorado State University,
Fort Collins, CO 80523 USA
© 2022 Colorado State University
*The course-logo is an image from Microsoft's Online library