Most beginner programmers (and even many experienced programmers) take a slow, painful, wasteful approach to programming.
The wasteful way
The way many programmers code is to spend a bunch of time writing code without checking to see that it works, then finally run the program once they’ve accumulated many lines of code. The program inevitably fails.
Next, the programmer sits and puzzles over what might have gone wrong. Since the programmer wrote a lot of code without checking it, there’s a lot of stuff that could possibly be the culprit, and therefore the debugging process is slow and painful.
The debugging process is usually not a systematic one but rather a guessing game. “Maybe it’s this. Nope it’s not that. Maybe it’s this other thing. Nope, it’s not that either. Hmm.” As the clock ticks, frustration mounts, and maybe a little desperation sets in. It’s not fast and it’s not fun.
The smarter way: feedback loops
Instead of working in the slow, painful, wasteful way described above, you can work in feedback loops. As I described in my other post about feedback loops, the feedback loop process goes like this:
- Decide what you want to accomplish
- Devise a manual test you can perform to see if #1 is done
- Perform the test from step 2
- Write a line of code
- Repeat test from step 2 until it passes
- Repeat from step 1 with a new goal
When you use the feedback loop method, it’s hard to run too far astray. If you only write a little bit of code at a time and you keep everything working at all times, then you’re guaranteed to always have a program that’s either fully working or very close to fully working.
Feedback loops and automated testing
Automated testing is just the practice of coding using feedback loops, but with the testing step automated.
Here’s how the feedback loop would go with automated tests involved. The automated test parts are included in bold.
- Decide what you want to accomplish
- Devise a manual test you can perform to see if #1 is done (write a test)
- Perform the test from step 2 (run the test)
- Write a line of code
- Repeat test from step 2 until it passes (run the test again)
- Repeat from step 1 with a new goal
Obviously there’s also a lot of technical knowledge that’s needed in order to write automated tests. For example, there are test frameworks that enable automated testing, there are libraries that help your tests interact with a browser, and there are libraries that help with generating test data. But more important than any particular tool are the principles behind automated testing.
Perhaps the most important idea behind automated testing is the feedback loop. And luckily for you if you’re a beginner, you can learn how to program in feedback loops without having to learn anything to do with automated testing yet. And once you do, writing automated tests will feel much more natural.