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

Updated:    09 Nov 2021 / Responsible Officer:    Director, School of Computing / Page Contact:    Steve Blackburn