I am an incredibly boring and un-trendy programmer. I don’t salivate over the latest Hacker News headlines (I don’t even go there anymore), I don’t curate Twitter lists of industry thought leaders, and I use hardly any bleeding-edge tools. This isn’t to say I don’t care about programming, I am ridiculously passionate and obsessive about what I do. People who know me personally would say this it’s something that defines me. Despite this, my choice of tools and methodology, to some, seem… unusual.
I love (LOVE) Backbone.js, Require.js/AMD, Grunt, and Bower, to name a few. These tools have become something of an in-joke amongst the current web development thought leaders. They’re just so… two years ago. We have such exciting new options now — React, Ember, Angular, Gulp, Webpack — the list goes on. And you know what? They’re all really cool! But I don’t use any of them, and I’m not really interested in switching to them. Why? Because these wonderful and exciting tools solve problems that I do not have.
YAGNI gone wild
When I was still new with programming, I got a great thrill out of constructing fantastically complex systems for doing things. I think that the motivation was something along the lines of “I made a very complex thing. Only smart and impressive people can understand or make complex things, therefore I am smart and impressive.” Thankfully, a few years of experience has extinguished this haphazard naïvety, but a lot of programmers start out this way. Experience has made me older, somewhat wiser, and much, much lazier. What was the big change between then and now? Instead of academic projects to complete for a grade, I have a job where I am depended on to get things done, and I don’t want to screw around with needless and avoidable complexity. Luckily, I developed a sense for differentiating between problems that are trendy and fashionable, and problems that I actually have. For the projects that I work on, there is very little overlap between the two.
I build software with lots of users. A large portion of my user base is not 20-something techies. Instead, it’s Normal People. Normal People use old and terrible browsers, and the code I write has to work properly for them. Hopefully this a problem you have as well, because that means you are making a product with a diverse userbase. The exciting new tools that I listed above won’t really impact my ability to write code that works for Normal People.
What I really want out my tools is reliability and simplicity. I want a proven track record. My unfashionable utility belt of Backbone and AMD has yet to let me down on any project, and I’m as happy with it now as I was two years ago. Does React and Browserify work well for you? Awesome, then you should use those! You probably have different problems than I. Alternatively, you may just have a different perspective on solving the same problems as I, and that’s good too. Diversity is a good thing in technology.
Tech is not a zero sum game
One of the most bizarre quirks about the tech industry is the idea of tools and ideas “winning.” Many developers want their favorite tools to win. A mindset has developed where many developers want the tools that they don’t like to lose so that their favorites can win. I don’t know where this oppositional mindset came from, but it’s silly, immature, and it’s really wasting a lot of time. This town is big enough the two of us. I use Backbone, and you might use Ember, but we can still be friends.
If it fits, I sits
If Backbone is as effective a tool for me in 20 years as it is now, I will be using it. If I outgrow it, I’ll switch to something else or just roll my own (probably the latter, but that’s just how I am). But I will not drop a tool simply because it isn’t cool anymore. Engineering isn’t about fashionability to me, it’s about pragmatically solving problems. I feel that less is more and tools that work well should be used. This means something different to everyone, and that is awesome. Use the tools that make you happy and productive.