In this course we will try and expand on some of the software design practices introduced in first year courses, e.g. incremental design, abstraction, and modularity, but we will also focus on many types of tools and habits that can make you a much more effective developer.
Some of the tools and practices we will discuss include debuggers, profilers, version control software, interface prototyping tools and techniques, automated compilation, and the use and development of custom test scripts for software testing.
The course is intended to serve as an introduction to some of the software design/development tools and techniques necessary for work on larger software projects.
Another useful overview is here:
Cay Horstmann: moving from Java to C++