Contents (hide)

Welcome to the Systems Programming Course Homepage


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.

    This aspect of the course is not theory driven, but instead, experience driven: we will work on 5 large programming assignments during the semester.

This course involves learning to work with new tools and environments, which often is intimidating. Part of the learning experience is to face these difficulties, not to avoid them or hide them. If you have a problem with the course material do not hesitate to approach the teaching staff during their office hours.

Class Meetings

You can find the schedule and the room location at Course info.

Practical Sessions

This year there will be no lab sessions. All practical sessions will be held at class.


Questions regarding an assignment should be written in the course forum. We will not answer questions regarding the assignment by e-mail.

Questions regarding an assignment checking should be emailed to the assignment checker. His name will be published when the checking procedure starts. When you e-mail to an assignment checker, please state your submission group number.

Delay requests for assignments to be sent to Majeed Kassis - The TA in charge.

Please come to the office hours for any other question.

Textbooks and Internet Resources

The course covers subjects from different areas. The unifying concept is that of Runtime Environment and its interface with the programs we create. The lecture notes in this site are comprehensive and contain many links to specific topics.

In addition, the suggested list is quite long. You should use the following as reference material.

  • Concurrent Programming in Java , 2nd edition, by Doug Lea.
  • Computer Networking, 2nd edition, by James F. Kurose & Keith W. Ross.
  • Effective Java, 2nd edition, by Joshua Bloch, Addison Wesley, 2008.
  • Accelerated C++, by Andrew Koenig & Barabara E. Moo.
  • Effective C++, 2nd Edition, by Scott Meyers.
  • More Effective C++, by Scott Meyers.
  • Effective STL, by Scott Meyers.

Course Requirements

The course workload is heavy. The teaching staff does its best to make your life easier - but we do intend the workload to be heavy just for sake of it - this is part of the programming experience we intend to convey.


  • There will be 4 big programming assignments that will be graded automatically.
  • Assignments 1 is about C++ programming and Memory management.
  • Assignment 2 is about concurrency.
  • Assignments 3-4 is about inter-process and network communication, and python programming.

  • The penalty for late submit is 5 points for each day.
  • Assignments must be submitted in pairs.

Final Exam

The weight of the final exam in the final grade is 70%.

Passing Criteria

In order to pass the course, you must:

  • Get a grade >= 1 in each of the 4assignments
  • Final exam grade >= 56.
  • Get an overall average grade >= 56.

  • PASS: Your exam grade is 100, you submitted 4 assignments with an average grade of 100. You PASS with a grade of 100.
  • FAIL: Your exam grade is 100, you submitted 3 assignments with a grade of 100 BUT you did not submit one assignment. you don't have a written (email) exemptions from the course staff.
  • FAIL: Your exam grade is 100, you submitted 3 assignments with a grade of 100 you submitted 1 assignment with a grade of 0
  • FAIL: Your exam grade is 63, you submitted 4 assignments with an average grade of 27