System programming course - B.Sc @ Ben Gurion University
There are two main objectives to this course:
-
Learning how to create programs that interact with sophisticated Run-Time Environments (RTE). The key notion of the course is that programs are always created relative to another program - which we call the RTE. RTEs have a regular structure: they provide services that the programs we create exploit. In the course, we focus on 4 generic services: management of memory, management of concurrency, communication and networking, and persistent data management (file organization and database usage with SQL). Across these topics, we compare various RTEs: Unix and Windows Operating Systems, the Java Virtual Machine (JVM) and on occasion, Servlet containers and distributed RTEs.
-
Gaining experience and exposure to good practices for mid-size programming. The course offers exposure for intensive hands-on programming in pairs. We will learn C++ as a new programming language and systematically compare it to Java. Our perspective is to explain how programming languages provide an abstraction layer above the facilities provided by the intended RTE in which programs are executed. We will focus on systematic acquisition of good programming habits: documentation of code, code metrics verification, design patterns examples, unit testing, test driven development.