Phones, diesel engines, animated newspapers, medical devices, games, political
campaigns, medical research, mining, transportation systems, ... and so
on, and on, and on... every day more of the world around us is at least
partly run by computer programs. This means that being able to design programs
- or at least be able to work with people who design programs - is becoming
a more and more valuable skill.
To build your own programs you need to know two things: how to use the
specific programming language and libraries needed, and the more general
skill of how to design a program.
This course presents a design method that will enable you to approach
the design of complex programs systematically. The method will work for
programs in this course as well as hard to design programs you develop
in the future.
Using this method you will learn how to model the information in a problem
domain, how to structure program data to mirror that information and how
to further structure the data to lead to a well organized program. You
will also learn to distinguish those parts of a program that are naturally
data driven, from those that should use an alternative algorithmic approach.
The method uses unit-tests to both produce a better developed design, and
to test your program as you develop it.
In the first course -- Part 1 -- we use a simple
teaching language to cover the core of the design method. In Part 1 we cover various forms of data; simple interactive programs like games and animations; storing information in and rendering trees; and finally exploring search programs: programs that solve puzzles like Sudoku boards.
A second phase of the course, to be offered later, will consist of parallel tracks, with each track using a different popular
programming language and focusing on a different kind of problem. This
will help you bring the design method to whatever language and problem
domain interests you.