In the programming world it seems very popular to predict potential ceilings of projects or even engineers due to the languages/frameworks that are utilized as though they are the be all and end all indicator of future success. It's a viewpoint that is both propagated by developers 'oh I'd never use a language as verbose and feature incomplete as Java' right through to companies 'We only use cool languages, PHP/Java engineers need not apply'
It. Doesn't. Matter.
When learning the guitar I always thought I'd be that much better if only I had the more expensive guitar, the set-up the pros used or whatever new fangled amp or pedal had just came onto the market. My Dad kindly pointed out that Van Halen would outplay anyone technically on a $100 guitar because at the end of the day as long as the tools are of an acceptable base level then the true differentiator is the craftsman.
Let's repeat that again, the craftsman is the differentiator.
Take any talented programmer and give them an uncool language and they'll still make it sing due to solid fundamentals. Of course exceptions do arise, PHP is never going to be a suitable language for a system like Whatsapp nor is Java suitable for scripting but for the most part [Java,PHP,Python,Ruby] are going to get the job done.
Instead of being dazzled and constantly second guessing ourselves with tech choices we should stick to core principles, clean code, sensible abstractions and above all comprehensive test suites.
I'm guilty of it too, I've spent a lot of time checking out Scala (I write Java predominately), yearning for the conciseness of Ruby or wondering if I'm getting left behind because I'm not slinging Node.js yet. The biggest gains in my engineering skills have come from reading excellent code written by library authors and co-workers and focusing upon readability when writing any new code, not jumping from one framework to another dependent on the flavour of the month. The more I focus on clarity as the number one metric for my written code the more I de-couple myself from the cycle of yearning for other languages and blaming shortcomings on my code due to perceived language limitations.
Sure I'd be slower writing production Scala than an experienced Scala engineer; my Ruby has gotten a little rusty as of late but the core principles I focus on aren't constrained to a language.
You also see this pattern of being dazzled by the bright and shiny new things in the gym, new gym-goers think they constantly need to be switching it up or utilising the latest hot off the press exercises, they also have a propensity for doing too much in the hope that lots of effort has no quality bar and more input always equals more output.
The experienced gym goer can get more out of one set of an exercise with light weights than the youngster cranking out twenty sets at maximum effort; the experienced programmer can get more out of an hour thinking about the problem and several minutes of coding than the junior engineer cranking out 100 new lines in ten minutes.
As touched upon by many engineers with oodles more experience than I have, the best code is no code, knowing when to hold back and when to delay are the keys to success and when it's time, clarity trumps all.
As always feel free to reach out to discuss,argue or even perhaps agree with my thoughts! You can reach out to me on Twitter or leave a comment below!