Thanks Frank,
I loved your article. I specially like when you elaborate on "Thinking Backward", I really think that that is missing a lot when we teach in the university. Although I like to teach in a spiral (or cycles), which really helps to understand and learn everything.
You also mention classroom and how to behave inside and outside. There is something that I dislike teaching in the university: grade students. I have taught in another places, and without grades you can focus on value and forget the rest. When you have to grade your students, you have to think in the evaluations that you can conduct, and think how to present the syllabus in a way that they can solve those evaluations satisfactory. The only fact of grading, and do it according to some cumbersome law enforced standards, damages severely the learning process. That is a pity, under that paradigm the only thing that I teach is how to pass an evaluation.
About TDD, it is not the only way. If you read more of my articles, you will discover that I really like it. There is no one reason, but several of them. Among all, the first thing that attracted me was the reasonable guarantee of not breaking old code, but quickly I loved it because it is goal oriented: you have to think first what is your objective, where do you want to go, and start writing tests to force you to code only based on that goal.
But the problem of TDD is that only a few people follow it correctly. Most programmers mix QA testing with TDD, and that is disastrous. Probably because of it, you like to approach to a problem in a goal oriented way, but it does not include TDD.
And finally, about creativity, there are plenty of practices, but I love two: 1) write everything that you think that is relevant as soon as you think it (it does not matter if you are in the shower), 2) apply natural techniques to them.