From a design perspective, I prefer to adhere to the following:
- Identification of Desired Goals
- Notation of Behavioral Interfaces
- Description of Modular Functions
- Instantiation of Components & Methods
- Creation of Functionally Decomposed Methods
The first item covers working with business analysts, but the remainder are programming activities, which encompass both the OO realm and the FD style of programming. It's very Top-Down, but once you're defined a well-behaed interface, you code back tot he blackboxes from there.
For new programmers, I like to start at the bottom, and teach functional decomposition, so they can wrap their heads around the basic syntax of the language they are trying to learn.
"Perl. There is no substitute."