Prerequistite course: The essential goal was to learn to program a computer.
We recognize that a computer will blindly follow instructions and the challenge was to learn how to translate our intentions into the proper syntax. The primary measure of success was the correctness of the resulting program.
This course: While correctness is expected, we have a new goal, to become better programmers.
So how do we define "better"?
Efficiency in use of resources (e.g., time, memory)
Robustness
should always be correct, even in unexpected settings.
should have a formal process for testing software.
Adaptability (a.k.a. evolvability)
software will likely need to be maintained and updated
over time.
Reusability
Don't reinvent the wheel for each new application.
Abstraction
Don't get bogged down in details; pinpoint the key requirements
and behaviors.
Encapsulation
Be secretive! Only publish details on a need-to-know basis.
Modularity
Break a large project into (independent) pieces of manageable
size; think hierarchically.
Object-Oriented Methodology:
Over the course of the semester, we will make great use of many aspects of the C++ language and its support for object-oriented programming. Just to name a few, we will use: classes, inheritance, access controls (public/protected/private), the const keyword, constructors, destructors, overloaded operators, exceptions, casting.
Perhaps some of those aspects are already familiar to students, but we expect that many of them will take time to master. Rather than get caught up in weeks of syntax right away, we will chose to review the basic principles of object-oriented programming at the beginning of the course, and then to introduce many of the other concepts as they naturally arise. Chapters P, 1, 3 of our textbook will be used to introduce aspects of C++ while reviewing general principles of object-oriented programming.
Course will involve a lot of work.
I admit to being a critical grader on assignments.
There's rarely such thing as a "perfect" solution and there is always room for improvement as a programmer. Direct feedback is one of the most valuable resources in the course.
For semester grades, I take into account that I've been a tough grader!
Try not to let mistakes and imperfections wear you down.
But also be an active learner and seek help from me by asking questions during lectures, during office hours and via email.
Do not fall behind (this is the biggest challenge)
Take note of unusual late policy.
Academic Integrity -- I take this seriously.