bguspl

Systems Programming - Course Overview

System programming is the act of writing a software that manages systems. Unlike application programming - the system programmer does not create a service that is consumed by an end user but instead she creates a service or a library that can be consumed by other software.

A system programmer is often required to deal with concepts close to the hardware level, like registers and memory locations. She may be concerned with data transfer - protocols and media. She is also required to write a fast, compact and efficient systems. In order to do so - a system programmer must understand thoroughly the Run Time Environment (RTE) that she programs for.

In many scenarios, application programmers are also required to some system programming skills - both in order to consume services from other systems and in order to write more efficient applications - such that will be able to run on modern computers, smart phones, web browsers, etc.

As discussed before, The key for a good system programmer is to understand RTEs and how the programs we write interact with the RTE that executes them. There are many different types of RTEs – but all have a similar structure and the interaction between the RTE and the program follows a general scheme.

In this course, we will review the following main services provided by RTEs to the programs they execute:

  1. Memory management.
  2. Concurrency in multithread/multiprocess environment.
  3. Object Oriented Design - design patterns, principles and essentials.
  4. Interprocess communication using RPCs and sockets.
  5. Principles of networking and TCP/IP multi-layered model.
  6. Data storage - from files to databases.
  7. Application-level protocols like HTTP.
  8. Scripting.

In this course we will use the following languages:

  1. C++
  2. Java
  3. Python
  4. SQL