Course Themes
Yes, this course will teach you to program in C++. There are other themes to this course
that are just as important, however:
- Programming languages as tools
- Picking the right programmming language for a task
- How to learn new programming languages
- How to use programming tools
- program management tools (e.g. make)
- debuggers (e.g. gdb)
- profilers (e.g. valgrind)
- documentation tools (e.g. doxygen)
- testing tools (e.g. TUT)
- software development environments (e.g. eclipse)
- "Under the hood" : how high-level block-structured languages are implemented
- Argument passing: by value, reference or pointer
- Data vs references vs pointers
- Stack memory vs heap memory
- Memory management
- How inheritance is implemented
- Single inheritance
- Mulitple inheritance
- Compile-time dispatch
- Run-time dispatch (virtual functions)
- Static variables and methods
- Designing, implementing and maintaining large programs
- Documentation strategies
- Testing strategies
- Maintenance strategies
- Exception handling
- (Programmer) time management
- Efficiency
- Programmer efficiency vs program efficiency
- Optimization strategies
- Knuth: "Premature optimization is the root of all evil"
- Helping the compiler optimize
- Using const
- Using templates
- Avoiding data copies
Grading Criteria
Over the course of the semester, every student will earn a numeric
score,
which is then mapped to a letter
grade by a subjective curve. Scores
combine a student's results on tests, programming assignments and lab assignments
according to the following formula:
- Tests: 40%
- 1st midterm: 10%
- 2nd midterm: 10%
- Final exam: 20%
- Programming assignments: 40%
- There will be multiple programming assignments, which build on each other.
For example, programming assignment #2 will be to extend programming assignment
#1. Therefore, if you miss an assignment, you will have to do two to catch
up the following week (but you will only get credit for one).
- There will be approximately 8 programming assignments, but this number may
increase or decrease depending on how the semester goes.
- Some programming assignments will be one week assignments, others will be two
weeks. Two week assignments count twice as much as one week assignments.
- Laboratory assignments: 20%
- Laboratory assignments are done during recitations, and must be turned in by the
end of the recitation hour.
- As with the programming assignments, we anticipate 8 lab assignments, but this
number may be adjusted up or down.
Why the distinction between scores and grades? Because I give hard tests. The means on my tests are
usually in the neighborhood of 50% correct, with large standard deviations. I think these tests do
a better job of determining how much students have learned than tests with higher mean scores, where
the difference between an 'A' and a 'B' is often a silly mistake. But it means the raw scores are
low. Similarly, we grade programming assignments very strictly: Were there any warning messages when
the program compiled? Did it leak memory? Did it fail gracefully when given illegal input?
We therefore collect raw scores, and at the end of the semester (after all the scores are in) we
map scores to grades using a curve. The curve is subjective in the sense that I will put the
center of the curve where I think is "should" be, i.e. there is no formula for this. However,
if student 'X' has a higher raw score than student 'Y', student X will receive a grade that is
better than or the same as student 'Y's' grade.
Policies
- Academic Honesty/Dishonesty
- All programming assignments, lab work and tests in this class are individual tasks.
- The instructor and GTA will actively look for evidence of cheating/collusion, and the department
policy on academic integrity will be rigorously enforced.
- It is your responsibility to know and abide by the department
academic integrity policy.
- If you are unclear about whether an activity is allowed or not, check with the instructor.
- Late Policy
- Programming assignments are due when they are due. They are not accepted late.
- Assignments build on each other (e.g. assignment #2 extends assignment #1). As a result, if you
miss an assignment, you will have to do it anyway as part of the next assignment. You just won't get credit for it.
- Lab work must be done in the lab (CS214) during the lab hours for which you are registered.
- There is an exception to the two rules above for "unforeseeable emergencies". If an
"unforeseeable emergency" happens to you (e.g. death in the family, severe illness, house fire, etc.)
please talk to the instructor. We are not heartless (despite the rumours) and special
arrangements can be made under these circumstances.