For a while, I’ve had the nagging feeling that there’s something missing with the way that many junior developers learn to write software these days. In a way that I suppose makes me a bit of a curmudgeon, I somewhat long for the days before the prevalence of the IDE and the automated unit test framework. But rationally I know that IDE’s and other specialized tooling have done a lot to both cut grunt work and to eliminate accidental complexity so it’s hard to deny they’re a big step forward from what came before.
And then it occurred to me. Some of my issue with the modern tendency toward doing everything in the IDE is the tendency that weaker developers have to conflate tooling with craft. Because Eclipse has the ability to automatically generate getters and setters for each data member of a Java class they simply stop questioning the wisdom of having getters and setters for all the members and merrily march forward–exposing far more data than they should. The benefit of data hiding, which, after all, was the original benefit of private class members is largely lost because they can’t be bothered to actually think through the wisdom of effectively turning a class into a pseudo-struct.
A long time ago when I first began coding I had a senior developer who mentored me. I had a bit of a tendency to charge in and start changing code (I am still guilty of that I suppose) without really thinking through the problem. He wisely counseled me to take a few minutes to think about the problem before I started hacking. Now I think I understand how he felt.
Don’t get me wrong–better tooling is definitely a good thing. But don’t let your tooling dictate your craft. And if you want to be a truly better developer focus on learning the craft of building strong code. The tooling is important, of course, but the underlying craft is much more important.