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 MeetingsThere are 4 lecture groups and 12 practical session groups along the week. You can find the schedule and the room location at Course info.
Practical Sessions and Lab MeetingsSome of the practical sessions will take part at labs. A lab session is the practical session in which students will run and experiment with some of the code presented in the classroom.
The lab weeks are: 1,4,5
ContactQuestions regarding an assignment or homework should be emailed to the Teaching Assistant in charge of the assignment or the homework (his name will appear in the assignment/practical session title).
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.
Textbooks and Internet ResourcesThe 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 RequirementsThe 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.
In order to succeed in the course we strongly recommend you do your homework assignments right after the respective practical session has been taught. We also strongly recommend to start working on the assignments as soon as you get them.
Weekly HomeworkEach practical session will have a small homework assignment. Homework assignments are intended to provide immediate hands-on experience with the material taught in the class. The homework assignments are designed to be very simple and require only an hour or two to complete. The submission of the homework assignments is obligatory.
- There will be 5 big programming assignments that will be graded frontally in 3 sessions.
- Assignments 1 and 2 are about C++ programming and Memory management. They will be graded in one session.
- Assignment 3 is about concurrency.
- Assignments 4 and 5 are about inter-process and network communication. They will be graded in one session.
- The weight of assignments 1 and 2 together is 5% of the final grade, each of the assignments 3 to 5 are 5% of the final grade.
- Assignments must be submitted in pairs.
Final ExamThe weight of the final exam in the final grade is 80%.
In order to pass the course, you must:
- Submit at least 11 weekly homework
- Get a grade >= 1 in each of the five assignments
- Final exam grade >= 56.
- Get an overall average grade >= 56.
- PASS: Your exam grade is 100, you submitted 10 weekly homework, you submitted 5 assignments with an average grade of 110 (yes its possible. you PASS with a grade of 100
- FAIL: Your exam grade is 100, you submitted all weekly homework, you submitted 4 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 all weekly homework, you submitted 4 assignments with a grade of 100 you submitted 1 assignment with a grade of 0
- FAIL: Your exam grade is 63, you submitted all weekly homework, you submitted 5 assignments with an average grade of 27