This course is intended to give advanced programming techniques, as well as further experience in programming. Topics covered will be: advanced object-oriented programming techniques and programming with classes (function overloading, templated classes, inheritance), pointers, linked lists, stacks, queues, debugging and profiling, reusable software (using/creating libraries), visual/GUI programming, exception handling, multi- threaded programming and synchronization.