Learning Objectives
Upon successful completion of this course, the student will be able to:
- Apply fundamental programming concepts, using an object oriented programming language, to solve substantial problems
- Understand basic types and the benefits of static typing for object oriented programs
- Distinguish language definition from implementation, syntax and parsing from semantics and evaluation, understand how program state maps to memory (globals/statics, locals/stack, heap/instances), and understand the implications of heap reachability for memory management
- Develop, understand, test, and evolve substantial programs using a modern IDE, and associated configuration tools; use programming approaches that avoid common coding errors; practice fundamental defensive programming; perform individual and team program reviews; use established design principles to organize a software system
- Use, implement, and evaluate fundamental data structures and associated algorithms; create, implement, debug, and evaluate algorithms for solving substantial problems, including recursive, using divide-and-conquer and via decomposition; select and implement an abstract data type for a given problem
- Perform analysis of simple algorithms; select and use appropriate algorithmic approaches to solve problems (brute-force, divide-and-conquer, recursive backtracking, heuristic)
- Understand the basics of event-driven programming, and its use in constructing GUIs
- Deliver and evaluate basic technical documents, presentations, and group interactions, using appropriate tools