Systems Programming

01:198:214

Fall 2011
  • Russell, Brian
Spring 2011Fall 2010Spring 2010
  • Hari, Pradip

Description

This course teaches students how to think about, build, debug, and test large computer programs.  The course stresses learning how to use tools such as debuggers, profilers, source version control systems, and integrated development environments as an essential part of developing large programs.  The course also stresses the understanding of how programs execute on today's computers and how to measure and optimize performance.  Programming will be in C on Unix systems to introduce students to a new programming eco system, as well as enable the mapping of high-level language constructs to the underlying machine.

Credits: 4

Will be offered for first time in Spring, 2010

Prerequisites: 01:198:112; 01:198:211 (or currently enrolled).

Please note that courses for which a student has received a grade of D cannot be used to satisfy prerequisite requirements.

Semesters Offered:

Fall

Topics:

Systems programming in C and Unix:
- C programming
- Memory management and the C memory model
- System calls
- I/O
- Caching
- Multi-threaded programming
- Shell scripts

Software development:
- Performance (space and time) analysis and measurement
- Debugging
- Testing
- Performance optimization

Tools:
- IDE (e.g., Eclipse)
- Source version control (e.g., CVS)
- Debugger (e.g., gdb)
- Memory errors (e.g., valgrind)
- Profiling (e.g., gprof, valgrind)

Expected Work:

Large programming project spread across several parts

Department Learning Goals:

Computer Science majors ...
  • will be prepared to contribute to a rapidly changing field by acquiring a thorough grounding in the core principles and foundations of computer science (e.g., techniques of program design, creation, and testing; key aspects of computer hardware; algorithmic principles).
  • will acquire a deeper understanding on (elective) topics of more specialized interest, and be able to critically review, assess, and communicate current developments in the field.
  • will be prepared for the next step in their careers, for example, by having done a research project (for those headed to graduate school), a programming project (for those going into the software industry), or some sort of business plan (for those going into startups).

Select A Course

Login