I would define “natural programmers” as somebody who suffers while repeating oneself.
You see things that are repeated by humans, and could be either less error-prone or quicker (or both) when done by machines. And then you implement it.
And yet there are still a lot of us, whose work fits perfectly to this scheme:
implement, click-click-click-test, fix, click-click-click-test, if ok implement some more, click-click-click-test-old-stuff do-some-more-clicking-and-test-new-stuff fix-broken-old-stuff fix-new-stuff repeat until you hate your job
And then you hear about automatic tests. And it is hard to get to know them well… mainly because we habitually lean to stuff we know; to way of work we are familiar with.
But after a while, when you know the tool is like i bliss!
I’m an expert in automation. Why didn’t I automate my job earlier? My tests were repeatable, and I kept doing errors, forgetting about some or bypassing some (because it’s f*** boring). I should employ machines to do that for me YEARS ago!
This is me right now. I mean… this is so obvious! Right in front of our nose, so close we can not see it!
I just wanted to share this with you. My advice: If you are a programmer and don’t know TDD – please try it. Start with something small. It’s not trivial, but worth knowing. If you don’t know it you can not keep up with others that do.
Ps. I wonder if it is possible to learn programming by TDD. Not by creating algorithms on piece of paper. Just by incrementally growing them. I wonder if it is possible to create a tutorial like that for non programmers?
ps2. I did it with my recent project Newly created businesses monitoring tool. I focused on functional tests, which are majority of my tests plus some unit tests of my models (sensitive points). It is against TDD pyramid, but allowed me to finish quickly and deploy fixes with pleasure.