Skip to content Skip to navigation

Systems Programming

01:198:214

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
Prerequisite: 
01:198:112; 01:198:211 (or currently enrolled).
 
If you are currently enrolled in 198:211, you will need a prereq override to register for 198:214.
A grade below a "C" in a prerequisite course will not satisfy that prerequisite requirement.
Semesters: 
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

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