I have been teaching programming since 2010, and one of the most delicate topics remains the integration of test driven development in your daily practice.
Every time I explain how to change habits to include TDD, students seem to be enthusiastic, but when I check a few weeks later, none have kept the habit or they use an "adapted" version (read "writing the tests after the code") that "suits" their workflow better.
And I can't really blame my students, it took me some years of trial and error to find the right amount of testing in my code, and also to convince myself that writing tests before my code was absolutely not the same thing as writing them after.
I think the biggest inspirations for me were a talk from Kenneth Reitz at FOSDEM in 2013 about "README-driven design for APIs", and a storified example in the appendix of a programming book I had borrowed circa 2009 (I think it was "Clean Code" by Robert Martin). My former colleague Andrew Dodd also had a lasting influence over my vision of how to write tests.
I have now developed my own theory about it (exploratory coding, failing test, code, passing test), and I think it's similar to the one of many other practitioners, and it has served me well for years now.
So why are my students unable to see the beauty of it?
At some point I realized I kept repeating the same things over and over, but I lacked good examples to show the limitations of the theory, and what to do in those corner cases. It's also a concept you can explain in a few words, but that takes a lot of time to demonstrate.
Since I cannot afford to spend entire days with each student, teaching the basics, I thought I could record myself, coding moderately complex tutorials, the same way I code every day.
No edits (except heavy breathing and yawns), no rehearsals, just me designing stuff and commenting along the way.
Python tutorials and MOOCs can tell you how to write code, but not to write software.
That's what I'm going to show you on the Adimian Youtube Channel, with a new episode every Monday.
Curious about Python, software design or TDD? Want to watch me fail or make mistakes? Want to propose new ideas for future episodes? Then subscribe to the channel and share around you.
See you next time !