I get solicited for advice frequently by budding software engineers. “How do I start?” “Can you recommend a book?” “What language should I learn?” As a homeschool family, I had a large impact on the computer related topics my children studied in high school. This summer has produced an interesting twist: multiple members of the family want to write an app. I’ll focus on my son’s app here. He is a national chess master and has identified a gap in the chess app market for handheld devices. He is currently a junior in college studying computational and applied math. He has done a lot of analytical progragramming, but not with a general purpose programming language.
I have been focused on all things web for many years now and haven’t done anything significant on a desktop in a long time. Since I predominantly code in C#, writing something for the surging Windows store could be fun. With practically zero knowledge of the app store framework, I had the fledgling developers concentrate entirely on application logic rather than UI. That means the only way to exercise the code is through tests. Most new developers begin their journey with console apps. This turns out to be a a big plus for introducing TDD since unit tests feel a lot like running a simple console app.
Chess is not a simple game, so it is no surprise that my son’s app is loaded with complex logic. He jumped in with both feet and quickly saw the power of unit tests. In a very short time, he had over 100 tests validating checkmate logic. As he got deeper in the development, he discovered multiple times a need to fundamentally change his architecture. With each rework, he had an ever growing set of unit tests to fall back on. He absolutely gets it.
I’ve created a TDD monster!