The world is full of debates over what to use in a project. React vs Angular. Go vs Rust. Java vs C#. PHP vs Node. Going down the rabbit hole is a tricky path that ends with all sorts of pro/con lists, benchmarks or alternatively with the idea that languages don't matter and it's mostly down to other factors that decide .
The conclusion is: use whatever.
It may be surprising then that I agree with both stances.
Use Whatever
Of course. Use whatever's handy to get your project off the ground. That's down to what you know or what you can pick up easily with a mix of whatever people around you know and what they can help you pick up. I hate Java, but do use it. It's not necessarily the best or simplest but there's so much documentation and supporting tools on getting started that it's a no brainer. Use Go, that's one of the simplest to pick up. Use whatever.
Beyond that though, do expect that things will reveal themselves as you progress along. You might hit a wall here and there because there are limits to "whatever-ing". Few weeks ago I was talking to a guy who used R to create basic web API that he expected to scale. He struggled to rewrite it with Python (because pip brings ready made stuff) and found that while it worked, the performance was abysmal (sure, he wasn't the best pythonista out there). He tried again with Node and even though he was even worse there, the outcome was usable.
Joe Armstrong makes a decent point in one of his many talks about this. Yep. Languages matter. Start with whatever, but do adapt later on.
Tools Matter, subjectively
Languages are just tools. But tools matter in so many different ways.
Some tools are a joy to use. It's subjective for sure and it's ok. You as a person can learn anything and become productive with anything but there's always a tool (language) that will bring you joy when you use it for reasons that only you know. Maybe it's because there's virtually no setup to do and you can get on with coding in seconds (Go) or maybe it's the opposite. Maybe it's because choosing and setting up the proper tooling around a new project brings you joy (PHP, Java).
Some tools just fit. Ask any handyman about their favourite hammer or screwdriver. Sure, you should the right size for the right situation, but there's one that you enjoy using because of its perfect weight/balance or it just feels right in hand. This will make you more productive in the situation where that hammer is the right tool.
Tools matter, objectively
For whatever set of criteria, you can objectively weigh tools.
Compiled performs better than interpreted (there's no debate here really, just about every interpreted language out there puts a lot of weight on JIT, which is just a way of trying to stay in both boats at the same time). Assembly beats most things hands down and blindfolded.
If my top criterion is getting started fast and I'm surrounded by Elixir experts, that's already a no brainer. If tools objectively didn't matter, I'd say pick up PHP (on a coin toss) but in that situation it wouldn't make sense, would it?
On the other hand if I were in need to create a REST web API, I would surely not rely on Assembly even if it were my top language. I'd die of old age before writing my first endpoint. Might make more sense to just learn a tiny bit of Go and get on with it so that it's finished before dinner.
Tools matter. But don't sweat too much on making a choice. There's a fair chance you'll discover a better one so it doesn't hurt to leave room to pivot.
Top comments (0)