The point of this part of course is not TDD, but rather the logic you would use in building large systems.
When I was first exposed to wishful thinking, I thought it was revolutionary, but what they present here is only a foundation for what they have to say further along. The concept of wishful thinking quickly goes out the window. From a purely top-down approach, or in a system where you are assuming George is building up your primitives, wishful thinking makes a ton of sense, but from what I've seen of TDD, the concepts don't gel. Wishful thinking quickly breaks down once you introduce George and Mary implementing two different representations of the system functionality when both are needed.
I guess I should illustrate how the logic of the book impacts my current project:
I began by creating the front-end html, mindful of the fact that there is strong interaction with the database, however, the pages I created are sort of mini-systems, in that there is a ton of code reuse, their own sets of primitives, etc.
The second step was building the database. I did this because I want to minimize the data interactions between the front and back as much as possible. For example, I want to have all distinct user names, so there is a unique constraint on that column. When the user attempts to create an account, the code "tries" to create a new account, which either tells the user that the name isn't available or creates the account.
Really, the entire power of the course is framing the question "what if." Instead of "I would like this functionality, how do I do it?" I ask "What would happen if I attempted to add a feature to this code?" Which is a much more powerful approach, IMO. This forces me to code in layers, hopefully without going overboard.
Back when I first learned about wishful thinking, I attempted to use that concept alone in building a rather simple program, but I failed miserably at it. I guess ideally, top-down programming is powerful, but without bottom-up considerations, and more specifically, how to create bottom-up, you are bound to get stuck or create a messy system.
With that said, I think that this is all good stuff to know before going into TDD. I mean, how can you effectively use TDD unless you know why you need it? The opposite extreme is toss TDD out the window and just layer primitives on primitives.
Interesting read:
http://devblog.avdi.org/2011/08/22/y...de-is-my-hell/