04-800-I   Introduction to Systems Software Engineering

Location: Africa

Units: 12

Semester Offered: Fall

Course description

System software is software that provides a platform for other software. Examples include operating systems, language environments like a Python interpreter, game engines, and most of the servers that power the Internet.  A deep understanding of system software is of high value for students interested in careers in software development, cloud programming, embedded devices, or robotics. 
 
In addition to its commercial importance, system software also provides an ideal vehicle to develop mastery of many key concepts in computer science, such as data structures, memory management, and parsing theory. As a result, this course provides an ideal foundation for further study of professional software development of all kinds.
 
The course will maintain a strong hands-on focus with roughly biweekly individual programming assignments. Student progress is assessed by performance on the assignments and classroom participation. The course will be taught using the C language, but no prior experience with C is needed. 

Learning objectives

Students will learn how to decompose a problem into its constituent parts and develop a ground-up software implementation with appropriate encapsulation. Students will also learn strategies for testing and debugging. 
 
The course will introduce students to the C language, beginning with language basics and array manipulation, and moving to an understanding of pointers, data structures, and dynamically allocated memory. 
 
Interspersed with these concepts will be lessons on common operating system concepts, including kernel and user space, filesystems, I/O redirection, shells and basic shell scripting, regular expressions, and simple lexical analysis. By the completion of the course, students will implement a simple command line shell for Linux.

Outcomes

Upon completing this course, students will be able to:

  • Decompose problems into a sequence of steps, implement those algorithms in C with appropriate encapsulation, and ensure the correctness of their implementation through the development of appropriate testing
  • Explain key operating concepts, including kernel space and user space, users and permissions, processes and threads, and I/O redirection
  • Design and implement an appropriate data representation for a given problem.
  • Develop system programs in C, including mastery of concepts such as dynamically allocated data structures, lexing and parsing, and fork/exec and input redirection
  • Explain in detail how an operating system shell (or any other interpreter) is implemented

Content details

  • Intro to C programming
  • Approaches to problem decomposition
  • How to find an appropriate level of abstraction in implementing software and how to work at different levels of abstraction
  • Data structures: structs, arrays, linked lists
  • Object encapsulation
  • Effective testing and debugging
  • Overview of operating systems
  • I/O redirection and the “file” abstraction
  • Use of dynamic memory allocation
  • Lexical analysis and parsing

Prerequisites

 None

Faculty

Howdy Pierce