In Good Tools, James Bennett writes a compelling article on how his investment in learning his most used tool, emacs, has paid huge dividends in his productivity for years and years. I recommend you read it, his arguments are cogent and his points well founded and well made. He writes:
Good tools, for programmers, are investments: you give them your time and your brain up-front, and then they pay dividends for years on end. I’m writing this post in GNU Emacs inside a terminal window, for example, and GNU Emacs inside a terminal window has been my day-to-day editor for over a decade now.
However, I disagree with his post on it’s fundamental assumptions: (1) that you can use the same tool for decades, and (2) that investing in a specific tool up front is guaranteed to pay these dividends where other investments would pay back less.
Maybe it’s just me, but I think the whole idea of investing in a specific tool, no matter how good the tool is, is the wrong thing to be investing too much in.
I believe more in investing time and learning in two closely related, integrated areas: on becoming a better programmer and on becoming a better designer. To me, it does not matter what tools you use (even though I write about mine), it matters how well you design and create what you do with these tools.
An analogue, a carpenter who makes tables does not spend their entire career learning to use their lathe better, they spend their entire career learning to design and create better tables. A carpenter that studies the lathe and little else, will produce the same rickety table over and over again.
To be clear, I’m not, in any way, saying that James Bennett did not also invest his time in becoming a better designer and programmer, that information is out of scope of the article’s topic. I would assume, based on the quality of his writing, that he did.
It’s just that my experience has been vastly different to his.
His seems to have been stable. Mine, not so much.
Over the past 23 years (yep, old guy), my investment in becoming a better designer and programmer has had me changing platforms and tools on an almost regular basis. My investments in learning Smalltalk and C back in the day made it easier for me to learn and write Objective-C and Ruby today. My investments in learning Aldus FrameMaker for print design made it easier for me to switch to web design later.
And over that period of time, I changed (amongst others) from DOS and Turbo Pascal to Unix and vi to OS/2 and Lotus Notes to Mac and BBEdit to Windows and Visual Studio to OS X and Xcode and back to straight UNIX (OS X development, Linux production) and TextMate 2. At each stage of this evolution, I have taken the time to learn the tools, just like James did, but my goal was to become a better programmer and designer on that platform instead.
And the best part was that the programming and design skills I had learned in earlier work made it easier and easier for me to adapt to new platforms and paradigms, and to produce better and better products. As I learned new languages and platforms, I took their ideas and integrated them into my programming, and found better ways to design and program things in later platforms.
Unlike James, I could not stay with the same toolkit my whole career. Or use the same programming language, or the same design tools. I knew this when I started out. I know this now. My current platform and tools will change over the next few years, and I need to be able to change with it.
If you are in a stable job working on a stable platform where there is little chance of it changing, then I agree with James, the investments you make in learning your tools is absolutely worth it.
But if you change as much as I have, I believe it’s more important to invest in your ability to design and program better, to adapt to change, and pick up and discard platforms and tools as you go. Whatever you invest your learning time in now, whether it be tools or programming skills, know that this learning will not be wasted, it will make it easier to transition to the next tools or languages if and when that happens, and it will pay dividends until then.