| I completely agree with the idea that we are overestimating the impact of tools, specifically, programming languages. I often see startups that rewrite their software one or more times just because they think that changing the tools is the key to success. They switch from PHP to Python, then from Python to JavaScript then from JavaScript to Go. It's so easy to say "We failed because X language, now we have to use Y". The case when choosing a given language will give you a considerable advantage over choosing another one is very rare. The worst thing is that we tend to say that languages suck while completely ignoring all the evidence of the opposite. How many times we have heard that PHP, C++ or JavaScript suck? How many amazing software projects have been built using these technologies? On the other hand, look at the tools that self proclaim the best ones (lisp, haskell), how many big complex software projects have been built with them? In the end they're just tools. Yes, they make a difference, but it's tiny compared with all the other pieces of the puzzle of how to build good software. |
> How many times we have heard that PHP, C++ or JavaScript suck? How many amazing software projects have been built using these technologies?
Languages are better or worse suited depending on the application. How many of these amazing software projects in C++ are web backends? Most of entire Web 2.0 boom has been built on higher-level languages/frameworks like Rails/Ruby, Django/Python, and more recently Node/JS. Its simply not possible for the average software engineering team to build systems as fast and as reliable in something like C or C++. Similarly, the revolution in applied machine learning we are currently seeing would not be possible without tools like NumPy or scikit-learn and the frameworks that have been built on these. On the other hand, 3d game engine code is almost universally written in C/C++.
Sure, choosing between Rails or Django will not matter all that much to your stack in the long run. And its just as important to build a good team around your tech. But the best team in the world is not going to be able to write a highly optimized game engine in Python or quickly prototype new NNs in Ruby.
New languages become popular because they address some need that was not previously met. Understanding these roles different languages play is an essential skill in software engineering.