CS 262: Introduction to Low-level Programming
George Mason University
Department of Computer Science

Spring 2021
  1. Course Basics

    Instructor:


    Name: Tessema Mengistu (Ph.D.)
    Email: tmengis-at-gmu-dot-edu
    Webpage: https://cs.gmu.edu/~tmengis/courses/SP21/CS262_Spring2021.html
    Hours: MW 10:00 - 11:30 AM or by appointment
    Office: Online

    Graduate Teaching Assistants:

    Name: Andrews Kevin
    Email: kandrew@gmu.edu

    Name: Dewan Umama
    Email: udewan@gmu.edu

    Name: Hosain Al Amin
    Email: ahosain@gmu.edu

    Name: Pokhrel Anuj
    Email: apokhre@gmu.edu

    Name: Zhou Huayu
    Email: hzhou8@gmu.edu

    Undergraduate Teaching Assistants:

    Name: Affan Ahmed
    Email: aahmed37@gmu.edu

    Name: Benjamin Wall
    Email: bwall4@gmu.edu

    Name: Chandraaditya Putrevu
    Email: cputrevu@gmu.edu

    Name: Colton Ramey
    Email: cramey4@gmu.edu

    Name: Hurmaan Ahmed
    Email: hahmed22@gmu.edu

    Name: Megan Ngo
    Email: mngo6@gmu.edu

    Name: Panupon Guntapong
    Email: pguntapo@gmu.edu

    Name: Tomas Doherty
    Email: tdohert@gmu.edu

    Name: Vy Hoang
    Email: vhoang6@gmu.edu

    Prerequisites: C or better in CS 211 or CS 222, and C or better in CS 110 (CS 110 can be a co-requisite with CS 262).

    Format: Lecture

    Lectures:

    N/A
    SectionDaysTimesLocation
    Sec 001TR10:30 - 11:45 AMOnline
    Sec 002AsynchronousOnline
    Sec 003MW12:00 - 1:15 PMOnline
    Sec 004MW3:00 - 4:15 PMOnline

    Textbooks:

    RequiredKernighan and Ritchie, The C Programming Language, 2nd edition, Prentice Hall, 1988.
    ReferencesMichael Kerrisk, The Linux Programming Interface, No Starch Press, 2010
    ComplementaryPrintz and Crawford, C in a Nutshell: A Desktop Reference, 1st edition, O’Reilly, 2006
    Griffiths and Griffiths, Head First C, 1st edition, O’Reilly’, 2012

    Blackboard: Blackboard will be used for all official announcements, course slides, assignments (including submissions), and grades.

    Piazza: Piazza will be used for online discussion; any information discussed on Piazza will be assumed to be known to students.

    • The discussion board on Piazza is required reading for all projects. You MUST read the discussion board for clarifications and project updates.
    • Course schedule, announcements discussion. GTA/UTA contacts and office hours will be on Piazza too.
    • Do not e-mail course staff about programming problems; use the discussion board.
    • Use public posts on Piazza to discuss programming project requirements, labs, and other material related to the course.
    • When prompted by a TA, use private posts on Piazza to share portions of your code pertaining to your questions. Don't share your project code in public posts.
    • Email course staff only for logistical issues such as meeting outside of office hours, missing lab/lecture, grading disputes, medical situations, etc. Email addresses are listed on above and on Piazza.
  2. Course Information

    Course Description:

    Most high-level programming languages (and particularly Java) insulate the programmer from the realities of the hardware on which the programs will run. C is the exception since it was originally designed to implement the Unix operating system. C offers the programmer direct access to much of the underlying hardware and, for programs running under Unix, direct access to operating system services. For these reasons C remains the language of choice for systems programming.

    Course Outcomes

    By the end of the semester, students will:

    • Be able to implement, test and debug a designed solution to a problem in a low-level programming language, specifically the C programming language.
    • Have a good understanding of C language constructs such as pointers, dynamic memory management, and address arithmetic.
    • Have a good understanding of C libraries for input and output, and the interface between C programs and the UNIX operating system.
    • Have the ability to use UNIX tools for program development and debugging.

  3. Coursework

    Programming assignments

    Students will receive a number of programming projects (3)during the semester. These programming projects will be a primary focus of your grade - each one should take multiple sessions of coding, with questions asked in between. Don't be surprised if you're spending 20+ hours on each one. All project grades will be averaged together evenly. Programming projects are INDIVIDUAL work.

    • Submission
      • All projects are to be submitted to Blackboard. You can submit your work an unlimited number of times to BlackBoard, and by default only the last version will be graded.
      • Turning in the wrong files will likely result in a zero. You can and should download your submitted attempts to verify that you turned in a working copy.
      • Broken Code == Bad Scores. Any code turned in that does not compile is likely to receive a zero. Make sure your code compiles and runs correctly before submission.

    • Notes:
      • Submission times are automatically recorded by Blackboard, and there's no distinction between a tiny bit late and nearly a day late - plan ahead to make sure that your submission is on time.
      • Blackboard being unavailable is not an excuse for turning in a late assignment; in the rare situation that the website is somehow unavailable or giving the student an error, the student MUST email their submission to their GTA before the deadline, otherwise it will be considered late.
      • Catastrophic computer failure will not be cause for an extension. Use a backup service such as DropBox (or any cloud service), emailing yourself, storing to a USB drive, whatever it takes. Every semester multiple students' computers die, are stolen, or otherwise 'lose' projects. Don't be the student who forgot to (frequently) back up your work!
    Lab Assignments: A short programming assignment will be given at the beginning of each lab. The lab instructor and one or more UTAs will be available to help students with the assignment. If not completed, the lab may be taken home. Lab assignments will be due either at the designated time for submission on Blackboard or, if no due date is given on Blackboard, at the beginning of the following lab period. Attendance at labs is required.
    Tests: individual work; online (you need Respondus browser lockdown installed to take tests. Please refer here about respodus browser lockdown). You need to have a working webcam and microphone as well.
    Final Exam: is closed resources and comprehensive; individual; online (you need Respondus browser lockdown installed to take quizzes. Please refer here about respodus browser lockdown). You need to have a working webcam and microphone as well.

  4. Grading Procedures

    Grade Distribution

    MaterialWeightNote
    Weekly Lab Assignments15%
    Class Participation5%
    Programming Projects30%
    Tests (5)25%
    Final exam25%

    Grading Policies

    • Grades within a category (i.e. tests, projects, labs) are weighted equally.
    • Students must have Respondus Browser locakdown installed before taking any quiz or exams.
    • The final exam is cumulative.
    • Challenging of any grade must occur within a week of when the graded assignment has been returned.
    • To receive a passing grade in this course, the average score for all exams (Tests and Final exam) must be at least 60%.
    • Any number of resubmissions are allowed (the most recent is used), however a resubmission turned in after the deadline will be considered a late submission.
    • In general, make-ups are not allowed except on exams ( under very special circumstances).
    • Assignments are typically due at midnight on the listed due date.
    • Late submission policy (up to 48 hours) is as follows: <=24 hours with 10% off, >24 hours &&<=48 hours with 25% off, > 48 hours will receive 0. For example, if you are late by 10 hours and you get 75 on the assignment, your final points will be 67.5. Submission times are automatically recorded by Blackboard, and there is no distinction between a minute late and a day late. Please plan ahead to make sure that your submission is on time. Taking backups regularly is highly recommended.
    • Code must run on Mason's Zeus platform (zeus.ite.gmu.edu) using gcc. Students may develop programs using any computer system they have available. However, submitted programs must run under gcc compiler available on Mason. Your documentation should clearly state which software was used for compilation, and once makefiles are introduced, a makefile should be included with each assignment submission.

    Grading Scale

    Grade A+AA- B+BB- C+CC- DF
    max 9791 898781 797771 6959
    min 989290 888280 787270 60

  5. Honor Code

    Unless specific instructions are given to the contrary, programming assignments are an individual effort, no group work is allowed. In addition to code, this includes the sharing of test cases, pseudocode, or approaches, receiving assistance in debugging code, as well as the use of external Internet sites.

    Both the GMU Honor Code and the CS Department Honor Code apply in this class. Any use of a direct contribution on any program, homework, quiz, or exam will be reported as a violation of the honor code.

    We take the honor code quite seriously. Any attempts at copying or sharing code, algorithms, or other violations of the honor code simply will not be tolerated. We use automated software to flag suspicious cases, and then review them to find the cases that must be submitted to the Office of Academic Integrity. The penalty for cheating will always be far worse than a zero grade, to ensure it's not worth taking the chance. Confirmed cases of cheating almost always translate into course failure.

    Some kinds of participation in online study sites violate the Mason Honor code: these include accessing exam or quiz questions for this class; accessing exam, quiz, or assignment answers for this class; uploading of any of the instructor’s materials or exams; and uploading any of your own answers or finished work. Always consult your syllabus and your professor before using these sites.

  6. Special Accommodations

    Students who have a right to accommodations due to disabilities or other conditions should discuss this with the instructor as soon as possible. Accommodations will follow the recommendations of the University's Office of Disability Services.

  7. Tentative Schedule

    WeekDateTopic(s)Text Book Reading ChaptersAssignmentsNotes
    week 101/25-01/29Introduction to C Programming
    vi/vim

    Lab 1
    week 202/01-02/05Types, Operators, and Expressions, Standard I/O2, 7 (7.1)Lab 2
    Project-1
    week 302/08 - 02/12Control Flow3Lab 3
    Test 1 (Week 1 -3)
    Sun, Feb 14Lab 1 - due
    week 402/15-02/19Functions4Lab 4
    Sun, Feb 21Lab 2 - due
    week 502/22-02/26Arrays and Strings
    5Lab 5
    Sun, Feb 28Lab 3 due;Project-1 due
    week 603/01-03/05 Pointers
    5Test 2 (Week 4 - 6);
    Lab 6;
    Project - 2
    Sun, Mar 07Lab 4 due
    week 703/08-03/12Multidimensional Arrays,
    Dynamic Memory Allocation
    5Lab 7
    Sun, Mar 14Lab 5 due
    week 803/15 - 03/19
    Structures6Lab 8
    Sun, Mar 21Lab 6- due
    week 903/22-03/26File I/O
    Debugging using gdb

    7
    20(C in Nutshell)
    Lab 9
    Test 3 (Week 7 & 8)
    Sun, Mar 28Lab 7- due; Project 2 - due
    week 1003/29-04/02Bitwise operators2Lab 10; Project 3
    Sun, Apr 04Lab 8- due
    week 1104/05 - 04/09Self-referential structures
    Linked List
    8 (8.5)Lab 11; Test 4 (Week 9 - 11)
    Sun, Apr 11Lab 9 due
    week 1204/12- 04/16Using Multiple Source Files
    Debugging using valgrind
    4 (Head C)
    Sun, Apr 18Lab 10 due
    week 1304/19-04/23The Unix System Interface8
    Sun, Apr 25Lab 11 due; Project 3 due
    week 1404/26 - 04/30Final Exam ReviewTest 5 (Week 12 & 13)
    Exam week Tue, May 04Final Exam 10:30 AM - 1:15PMSec 001
    Fri, May 07Final Exam 8:00AM - 8:00 PMSec 002
    Mon, May 03Final Exam 10:30 AM - 1:15PMSec 003
    Mon, May 03Final Exam 1:30 - 4:15PMSec 004