Syllabus
Office Hours
Link to Office Hours Schedule Office hours are held in the basement of Siebel. To add yourself to the office hours queue, go to Queue. Make sure to include which room you are in so the TA on duty can find you.
Course Theme
This course teaches a variety of ways to store collections of data in a computer program and discusses the advantages and disadvantages associated with the different methods. You will learn how to build various data-storage structures, and you’ll discover why you might prefer one over another in a particular situation. The combined arts of design, analysis and justification are the substance of the class.
The first 3–4 weeks of the course will be a crash-course in some C++. We will cover many of the major ideas of the language, and you will have had a great deal of practice with its features by the end of the semester. Our focus will be on those features that introduce computing concepts that may be new to you - most prominently, generic programming, object-oriented programming, and manual memory management.
While this is not a C++ course, keeping up with the class during the C++ portion will be important to your success later on, where the focus will shift from how to do things in C++ to what to do. In order to communicate these ideas for MPs and exams, you’ll need to be familiar with C++. Also, the first assessments will cover primarily C++ topics. That said, knowing C++ alone is not sufficient to do well in CS 225 - if you’re already familiar with C++, we encourage you to learn ahead and make sure you follow along with the data structure discussion later.
Prerequisites
- CS 125: Introduction to Computer Science
- Programming basics
- Programming structures (methods/functions)
- Object-based programming (classes and encapsulation)
- Recursion
- Algorithm analysis
- Linear search and binary search
- Sorting algorithms
- ECE 220: Intro to Computing Systems
- Programming basics (in C)
- Programming structures (methods/functions)
- Pointers
- Recursion
- CS 173 or Math 213: Discrete Mathematics
- Order of growth (“Big-O Notation”)
- Recurrences
- Proof by induction
- Set definitions/terminology/facts
- Tree definitions/terminology/facts
- Graph definitions/terminology/facts
- Relations and equivalence relations
See also the FAQ about prerequisites.
C++ reference
A good C++ reference is a necessity. Here are some suggestions:
- A good reference of the language and standard library is available at http://en.cppreference.com/.
- A more tutorial-based approach is available at http://www.learncpp.com/. This spends more time teaching, rather than acting solely as a reference.
- If you like physical books, Ira Pohl’s C++ Distilled is a good option. (Don’t be put off by its age! In this case it just means it doesn’t cost a fortune. yay!).
You are welcome to use any alternative references you prefer.
Communication
Piazza
The most important forum for communicating in this class is the course’s
Piazza site. Piazza is like a newsgroup or forum — you are encouraged to use
it to ask questions, request clarifications, express opinions, give advice. We
will give you enrollment instructions at the first lab meeting (it’s not hard).
The Piazza site for this class is: Piazza. You are
welcome to sign up, and you can do so directly if you use your @illinois.edu
email address. Doing so exposes you to the possibility of limited promotional
material from Piazza, but you WILL be able to maintain your privacy within the
system by posting private messages. If you are concerned about privacy, and you
do not want to use your @illinois.edu
account, send any course instructor an alternative account and we’ll prompt
Piazza to send you an invitation.
We expect that you will be courteous and post only material that is somehow related to cs225 (however slightly). The posts will be lightly moderated.
Piazza will be a great place to post most questions regarding assignments - both the course staff and other students are allowed to answer your questions. Please try to avoid asking questions that have already been asked and answered. Also, do not post code!!! Finally, try to avoid emailing the instructor or TAs if your question can be posted to Piazza.
Note that private posts to Piazza can be used for things like conflict requests, or for letting us know that you have that sinking feeling—anything you don’t really want to share with our small community of 800 learners.
Discord
Starting last semester, we have had a course Discord server to help students connect with staff and each other. To join the discord server follow this link CS225 Discord .
We’d like you to use this virtual space to talk about class, work on the MPs/labs, and general bantering/socializing! This is entirely optional, you can keep using Piazza, office hours, or e-mailing us about anything you need.
Discord allows us to answer questions in real time. Please keep Discord questions brief so we may answer timely. This server isn’t a way to get ahold of course staff for personal tutoring. If you have multiple questions or want 1-on-1 help in an assignment, please defer to office hours. Please send any long form questions, that may include code, debugging, and error logs, to Piazza, so we can invest time in answering properly. Piazza indexes questions and makes them searchable; this helps other students that may have the same issue!
Grading
All lab and MP scores will be published to your repository. Exam grades will be visiable on PrairieLearn as soon as you finish the exam. All grades will be posted on Moodle and will be updated regularly throughout the semester.
Point breakdown
Category | Contribution | Notes |
---|---|---|
Programming Assignments | 360 points | 60 points each |
Laboratory Assignments | 120 points | 10 points each |
Exams | 300 points | 100 points each |
Final Project | 220 points |
Usual cutoffs
Points | Minimum Grade |
---|---|
[900, 1000] | A- |
[800, 900) | B- |
[700, 800) | C- |
[600, 700) | D |
[0, 600) | F |
We might lower these cutoffs; for example, perhaps 670 points will turn out to be enough for a C-; however, we won’t raise them. (In recent semesters these cutoffs have not moved significantly from these targets.)
We do not assign letter grades for individual scores. We also do not ever curve individual exam or assignment scores. If an exam or assignment should turn out to be significantly harder than we meant it to be, we would announce a lowering of the expected cutoffs above for the various letter grades, in effect lowering the percentage needed for a grade and curving the grades.
Extra credit
There is an opportunity for significant extra credit in this course. Points for extra credit work will be assigned after grade cutoffs are determined, so they are a true bonus to your score. The total amount of extra credit you can earn is capped at 100 points, or one letter grade.
MP extra credit via early submission
All MPs except mp_intro
are broken into two parts. The first part can be submitted
early for up to +8 extra credit points. The result of consistent
early submission is +40 points toward your final course score, or
nearly half a letter grade.
Partial extra credit is available; if you score an 80% on an early submission, you will get 80% of the extra credit weight extra credit. (eg: +8 * 80% = +6.4)
Lab extra credit
Starting with the third week you will get extra credit for attending and participating in your lab section. The total points of extra credit you can earn form labs is 40 points. To earn that you need to attend and participate 10 of the 12 labs starting with the third week.
Problems of the Day (POTDs)
Beginning in approximately a week and continuing every weekday through the end of the semester we will give you a small programming problem to download, solve, and upload. These exercises are designed to mimic the environment and scope of coding problems you will see on midterms. They will be distributed and collected via PrairieLearn. Each POTD is worth +1 extra credit point, to a maximum of +40 points.
MPs and Labs
Machine Problems
There will be 6 machine problems (MPs). They are of increasing difficulty and sophistication, and we consider them to be the meat and cheese of the course.
The MPs you will be doing in this class will serve many purposes:
- They are designed to give you substantial practice with the C++ syntax you learn in class.
- They are an exercise in the software development cycle.
- They are an exercise in attention to detail, as there is not much partial credit given on the MPs.
- They are an exercise learning to use the tools available to you to help you work more efficiently and to check the quality of your work.
You are given approximately two weeks for each MP (after mp_intro
, which is just 1
week). Exact MP due dates will be announced in lecture and on the MP
specification page.
Lab Meetings
There will be approximately 12 lab sections during the semester, each of which consists of a small intro and a lab exercise. See the top of this page for meeting times and locations. Lively discussion and collaboration with course staff and fellow students during the 2 hour labs should usually (but not always) result in significant progress toward finishing the exercise.
The purpose of labs is to help improve your programming abilities and reinforce concepts taught in lecture. Exact lab formats may change week-to-week, but a usual lab will consist of about 20 minutes of discussion over the material covered in lecture and about 90 minutes of collaborative coding.
Lab sections are each worth 10 points each.
Lab assignments will be released for all students before the first lab on Wednesday, and will be due the following Sunday at 11:59pm.
Machines and EWS
Your MP and lab solutions MUST compile and execute on the EWS Linux machines. If you are a student in the College of Engineering, you automatically have an account on those machines. Just use your NetID and AD password to get in. If you discover that you do not have an account on the EWS machines, first try resetting your AD password, and if that doesn’t work, then post a private message to Piazza and we’ll help you take care of it.
You are expected to log in to the EWS machines remotely. Instructions are available from the Resources page.
Distribution and Hand-in
Each of you has been allocated a repository on GitHub Enterprise. Code for each assignment will be distributed on a designated repository. Simultaneously, the assignment writeup will go live on the course web site. The writeup will contain all specifications you need for the assignment, including due dates and submission instructions. All submissions will be taken from your GitHub Enterprise repository at the assignment deadline, so you should commit appropriately.
We are very strict about the deadline, and no late assignment will be accepted.
Exam Policies
See the Exams page.
Academic Integrity
For a more detailed description of our Academic Integrity Policy, please see Academic Integrity. You are responsible for the content there, but as an overview:
- You may NOT reference any code outside of that provided in lecture and the textbook, or receive help from ANYONE outside of course staff or your credited partner.
- Only on labs and when explicitly specified on certain MPs, you may work with a partner who must be currently taking the course.
- Your turned in work must be your own product, representing your own knowledge. Any form of cheating is unacceptable.