Overview

The purpose of this course is to familiarize you with the the environment that modern computer programs exist in. Through a large and varied set of practical assignments, you will gain experience with the many steps along the path from source code to running program, memory management and virtual memory, process creation, communication and control, and a healthy dose of concurrent programming. While the class combines theory and practice, there will be a focus on practical demonstrations in lecture and extensive hands-on programming experience. Plan to spend 10 +/- 5 hours per week on homework programming, depending on your current proficiency.

By the end of this course, you will have a good understanding of the main elements that work together to form modern computing environments. You will have acquired some familiarity with standard diagnostic tools, debuggers, dynamic memory allocation, concurrent programming, and file I/O both with physical files and network sockets.

Prerequisites

The main conceptual prerequisites for this class are CS 211 (the C part), CS 261 (machine organization), and CS 251 (data structures). A solid understanding of the theory of how things are stored in the computer, as well as the theory of how a processor executes instructions, as well as a basic understanding of programming (and specifically programming in C) are the tools you’ll need to succeed in this class.

Course Announcements

Whenever possible, course information will be conveyed using this website. Course discussion will happen via Piazza. You are responsible for checking this website for the reading schedule and ensuring that you complete all assignments. You are responsible for knowing about all of the material distributed for this class, whether is is mentioned in the syllabus, posted on Blackboard, or announced during lecture.

Peer Instruction

This course will be taught using Peer Instruction, a teaching model which places stronger emphasis on classroom discussion and student interaction.

Evaluation

Grades are curved based on an aggregate course score. There are separate curves for graduate and undergraduate students. This means that the course score cut-offs for an A, B, C etc. are not defined ahead of time: these will be set after the end of the course.

The course grade weighting is:

Task % of total grade
Reading Quizzes 5
Class Participation 5
Lab worksheets 5
Homeworks 40
Midterms 20
Final 25

READING QUIZZES

Reading quizzes will be given at the beginning of each class period using iClickers. Everyone will have their lowest three quiz scores dropped.

CLASS PARTICIPATION

Participation is an incredibly important facet of this course. The baseline Class Participation grade will be based off of participating in classroom discussion questions and answering questions via iClicker. (iClicker questions are graded for participation, not correctness.) However, extra credit points may be added for substantial contributions, entirely at the instructor’s discretion. Exceptional participation includes early reports of errors in assignments, helpful discussion on Piazza, contribution of helpful code to the common good of the class (e.g. test cases and/or testing scripts) and thoughtful discussions during lecture.

Textbook

We will be using Computer Systems, a programmer’s perspective by Randal E. Bryant and David R. O’Hallaron, 3rd edition, as our main textbook. This is the same textbook as used in CS261, and it covers the majority of the topics discussed in this class.

You may also find The C Programming Language by Kernigan and Ritchie (colloquially referred to as K&R) a helpful reference when writing C programs.

HOMEWORK LATE POLICY

Assignments completed outside of the main lecture period come in two flavors: homework assignments, which are relatively substantial programming tasks, and lab worksheets, which must be completed on the day they are made available (this will always be Fridays - the day of lab section). Lab worksheets are relatively straightforward and are designed to assist you in completing the homework assignments. Lab worksheets are due the day they are assigned no matter what. Submitting homework assignments late is strongly discouraged. You may turn in up to two homeworks one day late without penalty. To use this late day, you must fill out the late submission form before the assignment is due. The late submission form is here. Deadlines are strict: if a homework is due at 8:00 pm, a submission with a timestamp of 8:01 pm or later will be marked as late. Be sure to submit early! Homeworks that are submitted late without using a late day will not be graded. In order to use one of your late days, fill out the form before the homework is due.

If there is an exceptional reason (such as a severe illness) that you will not be able to complete an assignment or take a test, talk to me immediately, and prior to the deadline. Unless you are literally incapable of contacting me for the entirety of the situation (or having someone else contact me for you), I will not be able to give you any consideration for even the most legitimate circumstances. I handle all of these situations on a case-by-case basis.

Overcoming challenges enables growth

This is not a lecture-oriented class or one in which mimicking prefabricated examples will lead you to success. You will be expected to work actively to construct your own understanding of the topics at hand, with the readily available help of the professor and your classmates. Many of the concepts you learn and problems you work will be new to you and ask you to stretch your thinking. You will experience frustration and failure before you experience understanding. This is part of the normal learning process. Your viability as a professional in the modern workforce depends on your ability to embrace this learning process and make it work for you. You are supported on all sides by the professor and your classmates. But no student is exempt from the process and the hard work it entails.

Student Disabilities

If you have a disability that might impact your performance in this course or otherwise requires special accommodation, please contact me as soon as possible so that appropriate arrangements can be made. Support is available through the Disability Resource Center. You will need to contact them to get your disability documented before accommodations can be made.

ACADEMIC INTEGRITY

Consulting with your classmates on assignments is encouraged, except where noted. However, turn-ins are individual, and copying code from your classmates is considered plagiarism. For example, given the question “how did you do X?”, a great response would be “I used function Y, with W as the second argument. I tried Z first, but it didn’t work”. An inappropriate response would be “here is my code, look for yourself”. You should never look at someone else’s code, or show someone else your code. Either of these actions are considered academic dishonesty (cheating) and will be prosecuted as such.

To avoid suspicion of plagiarism, you must specify your sources together with all turned-in materials. List classmates you discussed your homework with and webpages from which you got inspiration. Plagiarism and cheating, as in copying the work of others, paying others to do your work, etc, is obviously prohibited, and will be reported. We will be running MOSS, an automated plagiarism detection tool, on all handins.

There are consequences to cheating on two levels - the consequences for your grade, and the consequences at the university level. Within class, the first time cheating on a programming assignment or problem set will result in a 0 on the assignment. A second time on a programming assignment, or first time on an exam will result in failing the class. Egregious cheating on a programming assignment (including but not limited to purchasing a solution online) is also grounds for failing the class.

I report all suspected academic integrity violations to the dean of students. If it is your first time, the dean of students allows you to informally resolve the case - this means the student agrees that my description of what happened is accurate, and the only repercussions on an institutional level are that it is noted that this happened in your internal, UIC files (i.e. the dean of students can see that this happened, but no professors or other people can, and it is not in your transcript). If this has happened before, in any of your classes, this results in a formal hearing and the dean of students decides on the institutional consequences. After multiple instances of academic integrity violations, students may be suspended or expelled. For all cases, the student has the option to go through a formal hearing if they believe that they did not actually violate the academic integrity policy. If the dean of students agrees that they did not, then I revert their grade back to the original grade, and the matter is resolved.