The Zen of Missing Out on The Next Great Programming Tool

ben profile image Ben Halpern Mar 06, 2016

Any time a hot new programming language or framework or methodology pops up or gains popularity, which is pretty much every day, there is a palpable fear and paranoia I see pop up within the programming community. Many programmers are concerned about missing the wave and letting their skills grow obsolete. It is something coders experience as individuals and bubbles into a collective angst. Nobody wants to turn into a programming dinosaur.

This emotional response to the hot new thing surfaces collectively in the form of, often obnoxious, Hacker News debates and individually as a sort of paralysis to make personal technology choice. There is a frustrating pull between pulling the tool you know from your tool box or testing out that shiny new object that people are raving about.

The benefits of sitting on the sidelines

The action of inaction can be an incredibly powerful one in programming. You can gain a lot of wisdom and future productivity by waiting back and being a late adopter of new technology.

  1. You let the new thing mature and become stable. You will avoid being part of something that changes every three weeks.
  2. Learning resources will become more widely available. Waiting until a handful of thorough online courses exist and plenty of reading material has been established can make your learning experience much more efficient and pleasant. You will not lose hours hunting down the scarce learning materials.
  3. Support structures will evolve. Stack Overflow questions will become more plentiful and chat rooms will pop up with plenty of people there to help.
  4. The ecosystem of build tools and re-usable code will have evolved. This will help your immediate productivity. 
  5. You will get to find out if this hot new thing is here to stay and become popular. Unpopular tools in programming are hard to get down with of because they lose support, have weak surrounding ecosystems and little in terms of support materials.
  6. You will learn a lot by patiently learning bits and pieces on the fringes. Once it is time to jump in you will have much more context and direction.
  7. Good and bad use-cases will emerge and be talked about so you don’t have to waste time building the wrong thing with the wrong tool.
  8. Alternatives inspired by the tool you are waiting on may emerge to fit your needs much more closely.
  9. You will stay more productive by doing more of your work with the tool you already have experience with.
  10. Older programming languages stay relevant and offer many employment opportunities long after they stop being talked about a lot on all the podcasts and discussion boards.

My experience

When I first got into professional web development, I learned Ruby on Rails and was happy to do so. I enjoyed the friendly syntax of Ruby and I have got along great with Rails. It was a big personal upgrade over my previous experience with Java and my application architecture skills were doing well. But soon I felt uneasy that my JavaScript skills needed an upgrade so I could build and manage the needs of my front ends better. I could write in JavaScript, but my front-end code was a mess. I knew I needed to learn a “framework” or something. I tried Backbone, Angular, and checked out React a bit when it was newer and felt none of it was really fitting my mind. What I wound up doing was accepting that it was not something I was going to be able to master right away and I kept on writing messy front-end code taking on tasks appropriate to my skill level.

Eventually it became obvious to me that React was the right choice and I picked up enough along the way to get into React full steam when it started really taking off and I am very grateful I waited. The environment was so much more mature and friendly when I jumped in. I still jumped in relatively early with React, but I am glad I was late to the front-end framework game and never bothered learning Angular or any of the other most popular solutions from a couple years ago. And it is not that I would not have enriched my skills by learning Angular, but there is always a tradeoff and being patient paid off for me.

When I did first get into React, I was still sort of early and I felt like there were no clear architecture pattern winners in Flux, so I rolled my own with my own style that worked for a while. I knew I would eventually need something more scalable and inline with the direction the library was taking me. I waited to develop strong architecture opinions and I am grateful I did because Redux emerged as the standard and is far more friendly than it was at the time.

I am still making great use of Ruby on Rails and I am excited about a few emerging alternatives, but will be happy to spend some time dipping my toes before becoming worried about falling behind the times. My future may involve a lot of Elixir, Go, Clojure, Haskell, Node, or other. I'm going to let it play out.

In conclusion

Patience is a virtue. I am not saying you should never adopt new things early but jump in when it feels right, not out of anxiety of missing out. Being excited about new things and being willing to change is of vital importance in computer programming, but the angst of feeling like you need to catch up with the times is not helpful. Challenge yourself, but spend your time doing things that make you happy and productive.

markdown cheatsheet

Thanks for echoing your thoughts about not always being on the bleeding edge of tech. I too feel that same way, having started with C/Linux, then moved to Java/SQL and now transitioning to Python/ML. I find that it makes sense to let the tech mature a bit, so that it is good enough for production before embracing it completely.

Number 9 is key. When you use a set of tools that you are familiar with there is much more time to spend on other aspects of what you are building. While many people keep fighting whether NextBigThing.js is good or not, there are great, fast, profitable software being built with tools that are 5 year old or so.