Syllabus
Summer 2023
Course Description Heading link
Software development tools and practices; debugging and testing; advanced language features; standard libraries; code management.
Extensive computer use required. To be properly registered, students must enroll in one Lecture-Discussion and one Laboratory-Discussion.
The course will be divided into 3 parts:
- C Pointers
- Tools and Techniques
- Object Oriented Programming
C Pointers will include the use of pass-by-address parameters, dynamic arrays, and linked lists.
Tools and Techniques will include the use of debuggers, version control, recursion, test case development and command line interfaces.
Object Oriented Programming will include the creation of classes in the C programming language. Each section will last about the same amount of time.
The Tools and Techniques portion will get intermixed among the other 2 parts.
Basic Information Heading link
Instructor: | John Bell | ||||
Office: | NA | ||||
Email: | JBell AT uic dot edu | ||||
Office Hours: | After labs. Online on BlackBoard Collaborate. | ||||
Lectures: | M-Th, 10:00-10:50, Synchronous online via Blackboard Collaborate | ||||
Labs: | M-Th, 12:00-1:50, Synchronous online via Blackboard Collaborate | ||||
Graduate TAs: | • AmirHossein Seyri • Junaid Mohammad Shaik See People page for all TA e-mails, office hour, and grading assignment information. | ||||
Undergraduate TAs | • Fathuma Ahamed Hazmi • Dua'a Hussein • Vladyslav Symonenko • Salvador Tranquilino-Ramos | ||||
Texts: | • Understanding and Using C Pointers, by Richard Reese, O’Reilly Media, Inc., ISBN-13: 978-1-4493-4418-4 • Practical C++ Programming, 2nd Ed. by Steve Oualline, O’Reilly Media, Inc., ISBN-13: 978-0-596-00419-4 | ||||
URL: | http://cs211.class.uic.edu | ||||
Prerequisite: | Grade of C or better in CS 141; or Grade of C or better in CS 107. The option to use CS 107 as a prerequisite (in place of CS 141) is only for Computer Engineering majors or students doing a Computer Engineering minor. | ||||
Credits: | 2 |
Text Books Heading link
- Understanding and Using C Pointers by Richard Reese
- Practical C++ Programming by Steve Oualline
- After clicking on the links you should enter your uic email
- Other texts that look interesting:
- Expert C Programming, Deep C Secrets by Peter Van Der Linden
- The C Programming Language, Second Edition by Kernighan and Ritchie
- Practical C Programming, by Steve Oualline
Projected Schedule ( Subject to adjustment )
Session( Day in Summer ) | Lecture Topic / Project Released | Lab Activities | Reading |
---|---|---|---|
1 - Monday | Pointer basics. Using pointers to access basic data and array elements. P1 - Array access with pointers | L1 - UNIX access & pointers to basic data. | Reese Chapter 1 |
2 - Tuesday | Program memory structure, dynamic memory, function parameter passing mechanisms, memory leaks | L2 - Pointers & arrays | Reese Chapters 2 & 3, not FP |
3 - Wednesday | Pointer access to 2D arrays. Structs with arrays and pointers. P2 - Pointers and Structures | L3 - Pointers and Structures | Reese Chapters 4 & 6, not LL |
4 - Thursday | Function pointers. Valgrind & print debugging. Command line arguments. | P1 Solution Review L4 - Command line args, Debug mode, and Valgrind. | Reese Chapters 3 FP |
Weekend | |||
5 - Monday | Linked lists P3 - Linked Lists | P2 Solution Review L5 - Linked Lists | Reese Chapter 6 LL |
6 - Tuesday | Debugging with gdb | L6 - gdb | Oualline Chapter 17.4 |
7 - Wednesday | Style, Adages & Code Reviews P4 - Interconnected Structures | L7 - Code Reviews | Oualline Chapters 3, 30 & 17.1 |
8 - Thursday | Intro to C++ Classes P5 - Basic C++ Classes | P3 Solution Review L8 - Basic C++ Classes | Oualline Chapter 13, 28 |
3-day Weekend | Holiday Monday | ||
9 - Tuesday | P4 Solution Review Review Day / Q & A | Q & A & Midterm Exam Through Session 7 | |
10 - Wednesday | Advanced Classes, Inheritance P6 - Inheritance | L9 - Inheritance | Oualline Chapter 21 |
11 - Thursday | Modular development with #directives and make | P5 Solution Review L9B - Modular Development + | Oualline Chapters 10 & 23 |
Weekend | |||
12 - Monday | Polymorphism and Exceptions P7 - Polymorphism | P6 Solution Review L11 - Polymorphism | Oualline Chapter 14, 22 |
13 - Tuesday | Version Control | L12 - Version Control | |
14 - Wednesday | Advanced Pointers / DS | L13 - BST Trees | Oualline Chapter 20 |
15 - Thursday | Types and Typecasting Odds and Ends | P7 Solution Review L14 | |
Finals - Friday | Final Exam on Blackboard Collaborate. Two hours during normal lab window, 12:00-2:00 | Final Exam |
Course Policies and Expectations Heading link
We will be using Blackboard, Gradescope, and Piazza as well as the course website throughout the semester for various purposes. This course consists of online synchronous lectures and online synchronous lab sessions. This means that all students are required to log on and participate during regularly scheduled lecture and lab sessions, not just watch recordings later.
All lecture recordings will be available on Blackboard, for the benefit of review and repetition, NOT as a substitute for attending class and labs. All other class materials and announcements will be distributed on Blackboard/Piazza and the course website.
Blackboard:
- Blackboard Collaborate will be used for all lectures, lab discussions, and office hours.
- All lectures will be recorded and will be available on Blackboard automatically sometime after lectures end.
- Copies of any PowerPoint slides presented in lecture will be posted under “Notes” in Blackboard, sometime AFTER the slides have been presented in class.
- Midterm and final exams will be conducted via Blackboard, and will require use of the Respondus Lockdown browser and a working webcam for proctoring purposes.
- Recorded scores for all graded assignments and exams will be posted to Blackboard.
- Other handouts and related materials may be posted either on Blackboard or on the course web site or possibly on Piazza.
Gradescope: We will use Gradescope to collect and grade programs and lab assignments. If you did not already get an email indicating you have been added to Gradescope, then contact the class instructor.
Piazza vs. eMail:
- Piazza is the preferred means of asynchronous communication, particularly for announcements and questions.
- Questions posted to Piazza will get a much faster response than e-mail, as more people can see and respond to the questions.
- Public questions allow everyone to see the answers, and allow instructors to answer a given question once instead of repeatedly.
- Piazza posts can be anonymous to classmates, though instructors and TAs can always see who posted each message.
- Posts containing personal or confidential information should be posted privately to instructors; All other posts should be public.
- Posts containing significant code snippets should be considered confidential, and therefore private. Do not post large blocks of code publicly.
- Private posts of general interest with no sensitive content may be changed to public.
- When sending email please include “CS 211” in the subject. Email sent from a netID@uic.edu account is less likely to be filtered out as spam.
Lectures: Lecture discussions are live, interactive, and recorded. Attendance is expected whenever possible. All students are responsible for all information presented in class, and should watch the class video recording within 24 hours if they are not able to attend class live. ( Absences should be RARE occurrences, e.g. for medical reasons, not common practice. )
Lab Sessions:
- Lab sessions will occur every day Monday to Thursday from 12:00 to 1:50 during the summer, online on Blackboard Collaborate, with separate sessions depending on the first letter(s) of a student’s last name.
- Lab sessions will generally begin with the presentation of material by the TA, including a review of homework project solutions on certain lab days.
- Lab assignments and related materials will be posted to the class web site by the beginning of lab sessions. Students will generally edit some provided code, answer questions via Gradescope, and then submit the edited code via Gradescope.
- Lab activities are not expected to exceed the duration of the lab period. Students may earn full credit for a lab session by either:
- Working diligently on the lab exercises until the end of the lab period, or
- If a student completes the lab exercises before lab time expires, then they do not need to stay for the remaining lab period.
- Lab attendance is required, with rare exceptions, e.g. for ( covid-related ) emergencies. In the rare case when a student must miss a lab period, then they have until midnight on the day of the regularly scheduled lab period in which to turn in the lab assignment, and are on their honor not to spend any more time on it than a normal lab period. ( See previous bullet point. )
- Lab submissions will be evaluated to see if they represent a good-faith effort at completing the assignment. It is expected that most students will earn full credit for most labs that they attend.
Programming Assignments: During the summer it is expected that there will be 7 programming assignments due, on Wednesdays and Sundays at 3:00 P.M., with a late window extending to 12:00 noon on the following day, at which point solutions will be presented in lab and after which no more late submissions can be accepted. ( With one assignment due Monday May 29th instead of Sunday May 28th, due to the Memorial Day holiday. ) See below for late policies and grading considerations.
Code Reviews: Students must participate in one or more Code Reviews during the course of the term, in which two students analyze and critique code authored by a third student. This will generally occur during lab sessions, and MUST occur after the late deadline for submitting the code in question has passed. See the code review page for further details and supplemental materials.
Late Policy:
- Labs will have a 24 hour window in which to complete lab activities, which should not take more than
90 to 120 minutes to complete. Therefore no late submissions will be accepted for lab exercises. - For programming assignments, each student is given four late days at the beginning of the term, to
use as they see fit.- The first two late days a student uses are free of charge. The third late day costs a 10% late penalty. The fourth late day costs a 20% late penalty.
- No more than one late day may be used for any given assignment.
- For the summer, a late “day” is slightly less than 24 hours, extending from the 3:00 P.M. due time to noon on the following day.
This is so the late window expires at the beginning of lab when the TAs will go over assignment solutions, while not starting the late day until an hour after lab is over on the previous day. - Late days may not be split, sold, bartered, or transferred. Unused late days expire at the end of the
term and may not be used in other courses.
Exams:
- Summer 2023 will have one midterm exam and one final exam, which will be conducted online through Blackboard.
- Use of the Respondus Lockdown Browser will be required for all exams.
- All students should have working webcams for use by automatic proctoring software. Exceptions will be proctored via zoom.
- The date of the final exam is Friday June 9th, i.e. the Friday of the 4th week of the 4-week summer session.
- The date of the midterm exam has not yet been set, but it will be held either during a regularly scheduled class or lab time.
Grade Adjustments: Any questions regarding how any assignment or test is graded must be raised within one week of the time the assignment is first returned to the class. No claims, justifiable or not, will be considered after this deadline. The first person to talk to is the one who graded the particular assignment in question. See the people page for information on who is grading which assignments(s).
Attendance at lecture is expected whenever possible. In any case, each student is responsible for all information (notes, hand-outs, announcements, etc.) covered during class. Ask fellow classmates for missed information, not the instructor or the TA. Attendance in lab is expected in most cases, but special consideration is in place for rare absences.
Academic Integrity:
- All work submitted for grading must be done individually, and must be 100% the effort of the student whose name is on the submission, with no copying of any external sources.
- Programming assignments are individual work, not group efforts. Do not work in teams or submit anyone else’s work as your own. Do not offer or receive any kind of unauthorized assistance. ( Starting code provided by the instructor and help from TAs is acceptable. It is acceptable to learn from examples found in books or online, but do not copy any material from any such source. )
- Examples of academic dishonesty include but are not limited to: transferring programs between students, copying-pasting code from the internet, working in a group on homework assignments, and allowing a tutor, TA, or another individual to write an answer for you. The University’s policy is available here https://dos.uic.edu/community-standards/academic-integrity/
- An automatic cheating-verification program will be applied to every submission, that is very good at detecting even partial logical similarities. Don’t even take the risk.
- Academic dishonesty will result in an Academic Integrity Incident Report go.uic.edu/academicIR being submitted to the UIC Office of the Dean of Students. Details are given on the Academic Integrity page, which includes a link to the Student Disciplinary Policy. Any student caught in Academic Dishonesty on any course work will get a grade of 0 on that work and will be dropped a letter grade at the end of the semester, for each offense.
- In the event of two students submitting unacceptably identical work, no distinction will be made between the original author and the one who copied it – Both will be considered guilty of academic misconduct.
- Any student caught cheating on exams will receive an F in the course and face possible dismissal from the University.
No Extra Credit: No “extra” work is allowed to make up for poor performance.
No False Grades: “Incompletes” will not be falsely recorded as a means of avoiding undesirable grades.
Evaluations, Scoring, and Grades Heading link
Programming Assignment Evaluation:
TAs will determine exact evaluation criteria on an assignment-by-assignment basis. However the following guidelines are provided:
- The first half of the points should be relatively easy to get. Any assignment handed in properly and which compiles without error and shows a reasonable effort should earn at least 50%.
- The last 10% of the points should be hard to get. Scores above 90 should be rare, and only assigned to the best submissions. Most scores are expected to lie between 70 and 90.
- Approximately 25% of the points should be for good programming style and documentation. Issues such as comments, indentation, good identifier naming, consistency, and general readability and efficiency.
A program that doesn’t run and doesn’t work may conceivably earn these style points, and conversely a program may run perfectly and still lose all the style points.
Scoring:
During the course of the term, points will be recorded for each of the following areas:
Programming Projects: | Expect 7 at 5 Points each |
Lab Exercises: | Expect 12 to 14 at 2 Points each |
Code Reviews: | 1 Point each - Number TBD |
Midterm Exam: | 15 Points |
Final Exam: | 20 Points |
Other assignments: | As needed |
Total: | Not necessarily 100 points, or any other special number |
At any point in time points earned can be normalized to a 100-point scale,
by dividing points earned by the number of possible points, and dividing by
100. This yields the “Percentage of Possible Points”, or PPP:
- PPP = ( Points earned / Points possible ) * 100%
A chart of all PPP scores in the class will periodically presented and discussed, so that every student know exactly how their PPP compares to the rest of the class.
Mapping of Scores to Letter Grades:
- Grade breaks will be determined by identifying gaps in the plot of PPP
scores. - These grade breaks may be near the traditional 90/80/70/60 splits or slightly off,
depending on how the data lies. - Separate grading curves may be established for each independent grader. Students’ scores will only be compared against other students’ scores who were graded by the same grader(s).
Regardless of overall average, you must pass a majority of the exams and
complete a majority of the work to be eligible for a passing grade.