My programming motto is:
- Make it run -- the program solves the problem
- Make it right -- the program is designed cleanly and there is a small amount of duplication
- Make it fast -- optimized (if needed)
Test Driven Development handles the first two.
I think a beginner should be taught TDD so that he knows how to make programs run. IMHO, only then can good design techniques be taught.