- Lecture Time/Location
- Tuesday/Thursday 1:30pm–2:50pm, Lecture Center 4
- Labs Time/Location
- Monday 8:25am–9:20am, Humanities 111
- Monday 11:40am–12:35pm, Massry Center for Business B010
- Friday 8:25am–9:20am, Social Science 133
- Amir Masoumzadeh (email@example.com)
- Office Hours: Tuesday/Thursday 4:30pm–5:30pm (UAB 422), or by appointment
- Teaching Assistants
- Ferhat Demirkiran (firstname.lastname@example.org)
- Office Hours: Monday/Wednesday 2:00pm–3:00pm (UAB 419), or by appointment
Machine representation of numbers (two’s compliment and floating point). Concepts of system level programming including dynamic memory management, hardware-software interface, storage management, compilation and linkage, multi-processing, and terminal I/O.
Student Learning Objectives / Outcomes
At the completion of this course, the student will:
- Be able to convert between number systems, including two’s complement.
- Be able to write idiomatic C code using various data types, loops, branches, arrays, and structs, and programs that manage memory using dynamic memory allocation functions and variables that contain a memory address (pointers).
- Be able to code, test, debug and internally document computer programs in C language so they follow given functional specifications, using appropriate software tools and practices.
- Be able to understand and articulate what system software does.
- Be able to write software for POSIX systems using system calls.
- Be able to read and understand research papers in the systems area.
- Grade of C or better in ICSI/IECE 213.
No textbook is required for this class. Instead, we rely on online resources that are listed as readings for each week. If you prefer to read books for learning C programming, I recommend:
C Programming Language, 2nd edition by Kernighan and Ritchie (ISBN: 0131103628)
C Programming: A Modern Approach, 2nd edition by N. N. King (ISBN: 0393979504)
Effective C by Robert C. Seacord (ISBN: 1718501048)
Communication and Submissions
The course syllabus and schedule is available on the course webpage. Most of the tasks in this class will be handled via course GitHub organization including the distribution of notes, assignments, assignment submission, and feedback. You will be invited to join the organization in the first week of classes. We will also use Brightspace for announcements and for your grades.
Assessment and Grading
The course is A-E graded based on the following categories and corresponding weights. Conversion from the final numerical grade to the letter grade is based on cutoffs determined according to the grade distribution in the class. This results in more flexible and favorable grades compared to using a fixed conversion scale.
- In-Class Exercises (5%)
- You will work on small in-class exercises either individually or in teams. Submissions are only accepted at the designated time during class. Missing submissions (including due to absence) will result in not receiving the grade for the associated exercises. Up to 10% of exercises will be dropped from your grade calculation to accommodate unforeseen situations.
- Labs (15%)
- You will work on one lab assignment every week during your registered lab session. The first lab session of the class meets on Friday, followed by Monday sessions in the week after that. Labs are relatively simple, and you should be able to finish them during the lab session. Each lab submission is due the day before your regular lab meeting day of the week after which it is assigned. You will also demo your solution to each assigned lab in the following lab session. Your two lowest lab grades will be dropped from your grade calculation.
- Programming Projects (40%)
- You will work on four (mini) programming projects during the semester. These are more substantial programming assignments compared to the labs. You will usually have about two weeks to finish each project.
- Exams (40%)
- You will take a midterm exam (during the regular class sessions) and a final exam (during the final exam period). Each exam is worth 20% of your total grade.
General Education Competency
While studying this course students will also develop such general education competencies as Advanced Writing, Critical Thinking, Information Literacy and Oral Discourse; first, through working on the programming project assignments.
It is required that all programming code be well documented, thus, clear and laconic written descriptions are necessary. In the written report, students will not only demonstrate increasingly sophisticated writing according to the conventions of computer science, but also able to communicate clearly in writing, employing fundamental rules of usage, style, and mechanics in the context of computer science (Advanced Writing).
To solve programming problems students need formulate complex problems clearly and precisely and apply familiar and new computer science concepts in developing solutions and conclusions (Critical Thinking).
Through the programming project work, students will learn to organize and access information from open sources such as GitHub; select the most appropriate strategies, search tools (such as Google or StackOverflow sites), and resources for each unique information need relevant to their project, and evaluate the dynamic online content as per their need. While using the publicly available (online) information in the project, students must conduct ethical practices keeping in view of intellectual property and personal privacy. As a part of team, they must produce, share, and evaluate information with other team members in a variety of participatory environments (Information Literacy).
Team programming project will require students to communicate with their teammates in the forms of discussion and brainstorming, thus they need communicate ideas effectively appropriate to a context of programming problem and according to a specific set of criteria given by the instructor (Oral Discourse).
The following schedule is tentative and will be regularly updated. It is your responsibility to check the schedule regularly. The plus sign (+) means optional reading.
|Module 1: Shell/Git|
|Aug21||No Lab (Friday labs start Aug25; Monday labs start Aug28)|
|Aug22||Course Introduction, Git||lab01 (Setup)|
|Aug29||Unix Files, Shell Basics||lab02 (First Program)|
|Sep04||No Lab (Labor Day)|
|Module 2: C Programming|
|Sep05||C Basics, Number systems||lab03 (Bitwise)|
|Sep12||Memory: Pointers, Strings, Arrays||lab04 (Pointers & Strings)|
|Sep19||Memory Management||lab05 (Linked Lists)|
|Sep26||Developing Modular C Programs||project1 due Oct06|
|Oct03||C File I/O, Pre-Midterm Review||lab06 (C Files)|
|Oct06||No Lab (To Prepare for Midterm)|
|Oct09||No Lab (Fall Break)|
|Oct10||No Class (Fall Break)|
|Module 3: POSIX/Linux Programming|
|Oct17||System Calls, File I/O||lab07 (POSIX Files), project2 due Oct31|
|Oct24||Processes, Executing Programs||lab08 (Processes)|
|Oct31||Signals, Pipes, FIFOs||lab09 (Signals/Pipes), project3 due Nov14|
|Nov14||Threads||lab11 (Threads), project4 due Nov28|
|Nov21||Shared Memory Segments, Memory Mapped Files|
|Nov23||No Class (Thanksgiving Break)|
|Nov24||No Lab (Thanksgiving Break)|
|Module 4: Misc. Topics & Recap|
Rust, Recap & Review
||lab12 (Shared Memory)|
|Dec12||Final Exam (Dec12, 10:30pm-12:30pm)|
- No Late Submission (Except One Assignment)
- Assignments will be released at least a week before their due date. You are highly recommended to study an assignment as soon as it becomes available. There will be ample opportunities to benefit from office hours and communication with me and the TAs before the due date. Assignments are due at 11:59pm on the day of their deadline. Submissions after due time will receive no points. However, in order to account for unforeseen situations, you can request to submit only one assignment late. In order for your late assignment to be graded, you must email the instructor to request a late submission before the deadline. You should note that a late-submission request may not be always accepted (e.g., when the solutions need to be discussed in class immediately after a submission). Therefore, you are recommended to submit a version of your solution before the deadline if your request has not been reviewed yet. You have up to 3 days to submit after the deadline if your late-submission request is approved. Also, note that you only have one such opportunity during the semester. Therefore, it is advised to leave that option for truly critical situations.
- Lab Demo
- You are required to demo each lab to the TA team on your lab day of the week following when the lab is assigned, with the following two exceptions: 1) You can demo your lab earlier than the designated lab session, for example, in the office hours. 2) If you have to miss a lab due to unforeseen circumstances (being sick, etc.), in only up to two instances during the semester you can demo within one week after the missing demo session (either in the TA’s office hours or the next lab session). Note that labs will receive no points if you do not demo them.
- Review of Grades
- Any issue regarding your grade in a specific assignment must be communicated to us no later than 5 business days after the posting day of the grades. There will be no re-grading after the 5-day period has passed.
- Attending Classes
- Class attendance is required for successful completion of this course.
- Attending Exams
- The midterm exam is given in regular hours of the class. The final exam will be during the final exam period. Tentative exam dates are given in the course schedule. Makeup exams will be given only for valid and verifiable extenuating circumstances (e.g., a major medical situation). It is the student’s responsibility to contact the instructor at least a week ahead of the exam date and arrange to take a makeup exam at an alternate date/time. If an absence in exam is expected due to religious observance, the student is responsible to notify the instructor at least 30 days before the exam date. Otherwise, their request may not be granted. Makeup exams are not guaranteed and will be generally harder than the regular exams.
- Academic Integrity
- It is every student’s responsibility to become familiar with the standards of academic integrity at the University.
Claims of ignorance, of unintentional error, or of academic or personal pressures are not sufficient reasons for violations of academic integrity.
Any incident of academic dishonesty can result in no credit for the affected assignment and a report sent to the appropriate University authorities (e.g., Dean of Undergraduate Education or Graduate Studies).
Repeated violations will result result a failing grade for the course.
For all assignments, you must submit your own work, except where collaboration is explicitly permitted or required. Providing your solutions to others or copying even parts of a solution is considered plagiarism. In projects/papers, you must properly cite any resources from which you borrow ideas and clearly distinguish them from your contributions.
- Use of Electronic Devices
- Computers or other electronic devices may be only used during class for note-taking, in-class exercises, or other class-related activities. You are not allowed to perform any unrelated tasks during class.
- Students with Disabilities
- Reasonable accommodation will be provided for students with documented disabilities. If you believe you have a disability requiring accommodation in this class, please notify the Disability Access and Inclusion Student Services (DAISS) (Campus Center 130, 518-442-5501). That office will provide me with verification of your disability, and will recommend appropriate accommodations. In general, it is your responsibility to contact me at least one week before the relevant activity to make arrangements.
- Health and Well-Being
- Your physical and mental health is very important.
The university has several health services when you need them.
In particular, Counseling and Psychological Services (CAPS) provides free, confidential services including psychological counseling and evaluation for emotional, social, and academic concerns.
If your life or someone else’s life is in danger, please call 911. If you are in a crisis and need help right away, please call the National Suicide Prevention Lifeline at 1-800-273-TALK (8255). Students dealing with heightened feelings of sadness or hopelessness, increased anxiety, or thoughts of suicide may also text “GOT5” to 741741 (Crisis Text Line).