I've been feeling for a while now that I'd like to be a better programmer. Right now I can make stuff happen, but I usually don’t think it’s particularly well designed. Since it’s a new year, full of possibilities, I thought I'd spend some time working on my programming skills. With that in mind I asked my boss what he thought I needed to work on most. His answer: TDD. So here I am, trying to do 30 days of thoughtful practice of TDD.
What did I do today?
Today I didn’t really get anything done. I spent some time reading about TDD, mostly looking for some resources that I can work with for the next 29 days. In case it’s helpful to anyone else, here’s what I've found so far:
- TDD video lessons
- TDD by example, book
- Ruby Best Practices
- how to set up autotest-rails
- RSpec 2 on Peepcode (paid)
- Game of life in TDD
- lots of RailsCasts (mostly paid)
- a couple of katas
- and a few more katas
Hopefully that list helps someone else out there. If you have any suggestions please let me know - I’m sure it'll take me plenty of time to get through all that, but if there’s something better or particularly helpful, I’m all ears!
The last one looked pretty promising so I tried getting set up with that gem. Unfortunately I hit a snag on installing that today, so I'll give it another go tomorrow.
I’m not really completely convinced about TDD or testing in general. We didn’t test at all in my last job, and one of my requirements for my current job was that they test so I could learn how to test properly. But in reality, I’m not sure how often I've had a test really save me from pushing bad code. Overall it seems like I just go back to update the test, which, as far as I can tell, is just making more work for me without really helping the codebase in general. Perhaps I’m doing it wrong and I shouldn’t be updating the tests as often. Perhaps that is the price you pay for “peace of mind.” I probably haven’t written (good) enough tests for them to be able to stop me from pushing bad code. I’m hoping this next month will help me better understand what testing is all about.