I’m only a hobbyist no skin in the game but as an engineer first programmer second I feel like how you design the architecture of your logic and how you choose to prioritize computational optimization or feature implementation have a much bigger impact than language. Obviously theres a time and place like using luajit instead of lua if you really need that speed boost, but in big complex programs I’m willing to bet lazy programmers skip optimization steps and copy paste thousands of lines to ship quickly regardless how performance optimized the underlying language is.
I make a module that does a specific thing for version 1, after initial bug patches and maybe a feature addition theres usually an epithany that the logic can be generalized into an api type registry structure that allows the code to be reused and configured as needed on per item basis. Along the way you do stuff like ask what the not expensive calls are, add accumulator timers to reduce unneeded CPU usage , ensure early returns are up top when it makes sense, choosing to render a cleverly crafted sprite instead of a full 3d entity.
A conditional if then logic loop Is a logic loop no matter what Turing complete language its written in. What really matters is how you use the loop not which syntax its written in.
It’s extremely important, because you’re never really picking a programming language, you’re picking a stack
You can technically write an android app in Python, but should you? You’re now locked into a framework used to run apps in Python, which are going to be much more limiting than other languages and frameworks. But you’ll also have access to Python libraries, which gives you options in that direction
Then you examine the context. How good are you at learning other languages? How long/complicated is what I want to do? Does this need to be performant? How long do I need to keep this working?
And most importantly, and you really have to think this one through… Will I need to extend the original goals in the future?
So really, yes, it’s very important. A bad decision in the beginning could cause problems for decades
You make a fair point, programming skill is more important than language but picking a programming language is still important in a lot of cases.
Ecosystem size can reduce “reinvent the wheel” code.
Some languages just have dogshit performance like Ruby, lua is pretty good though and it absolutely matters when you have to crunch a lot of data. Access to developers is big since you ideally want to find someone with experience in the language your project is in.
Some languages like Rust are very good for making safe code but very bad if you want to get out a microservice fast. I could make an equally correct version of some adapter in a fourth of the time in python compared to rust and I know them similarly well.
Then there’s low RAM requirements like embedded devices, it’s best to run something that compiles to machine code and doesn’t need a big runtime. Java and C# become almost useless in very low RAM environments and you’d have to use Zig, C or Rust instead.
So long story short, depending on what you’re writing it can just not matter or matter a lot.
Any function can be written in any Turing complete programming language. That doesn’t mean a sane person would use malboge or brainfuck for a production system. Language choice can have a huge impact on productivity and maintainability and time is money.
No one actually copy/pastes thousands of lines of code. We use libraries.
Languages do matter a lot. Yes, they are all technically equivalent, but the craft of software engineering is much, much more about social/cultural/community considerations than it is computational ones. What the community around a programming language values matters, because it informs a great deal about what’s idiomatic in a language, what libraries are available, what kind of bugs are possible (or not), how easy code is to read, comprehend, and maintain, and much more.
What makes a language good is not what programs you can write in it, but how it constrains what you can do such that you naturally writing good code. For example, null pointer exceptions (or segfaults in C, etc.) are a classic problem that plagues many mainstream languages like Java, C#, Python, etc. In Haskell (and a handful of other languages, including Rust), null pointer exceptions are not possible, because nulls do not exist in these languages. Taking away this language “feature” actually increases the power of the language, because you can guarantee that a certain class of common bugs are not possible in your program. So languages that restrict known bad programming practices lead to programmers writing better programs and, more generally, a community around the language that resonates with these philosophies.
“We have decided that we will use deck screws to build our deck, it’s the right pattern and architecture for the job. Now get started with this hammer, the tool you use doesn’t matter as long as it’s functional as a tool. If it’s not working well that’s an optimization problem because you’re bad at your job.”
I’m only a hobbyist no skin in the game but as an engineer first programmer second I feel like how you design the architecture of your logic and how you choose to prioritize computational optimization or feature implementation have a much bigger impact than language. Obviously theres a time and place like using luajit instead of lua if you really need that speed boost, but in big complex programs I’m willing to bet lazy programmers skip optimization steps and copy paste thousands of lines to ship quickly regardless how performance optimized the underlying language is.
I make a module that does a specific thing for version 1, after initial bug patches and maybe a feature addition theres usually an epithany that the logic can be generalized into an api type registry structure that allows the code to be reused and configured as needed on per item basis. Along the way you do stuff like ask what the not expensive calls are, add accumulator timers to reduce unneeded CPU usage , ensure early returns are up top when it makes sense, choosing to render a cleverly crafted sprite instead of a full 3d entity.
A conditional if then logic loop Is a logic loop no matter what Turing complete language its written in. What really matters is how you use the loop not which syntax its written in.
It’s extremely important, because you’re never really picking a programming language, you’re picking a stack
You can technically write an android app in Python, but should you? You’re now locked into a framework used to run apps in Python, which are going to be much more limiting than other languages and frameworks. But you’ll also have access to Python libraries, which gives you options in that direction
Then you examine the context. How good are you at learning other languages? How long/complicated is what I want to do? Does this need to be performant? How long do I need to keep this working?
And most importantly, and you really have to think this one through… Will I need to extend the original goals in the future?
So really, yes, it’s very important. A bad decision in the beginning could cause problems for decades
You make a fair point, programming skill is more important than language but picking a programming language is still important in a lot of cases.
Ecosystem size can reduce “reinvent the wheel” code.
Some languages just have dogshit performance like Ruby, lua is pretty good though and it absolutely matters when you have to crunch a lot of data. Access to developers is big since you ideally want to find someone with experience in the language your project is in.
Some languages like Rust are very good for making safe code but very bad if you want to get out a microservice fast. I could make an equally correct version of some adapter in a fourth of the time in python compared to rust and I know them similarly well.
Then there’s low RAM requirements like embedded devices, it’s best to run something that compiles to machine code and doesn’t need a big runtime. Java and C# become almost useless in very low RAM environments and you’d have to use Zig, C or Rust instead.
So long story short, depending on what you’re writing it can just not matter or matter a lot.
Any function can be written in any Turing complete programming language. That doesn’t mean a sane person would use malboge or brainfuck for a production system. Language choice can have a huge impact on productivity and maintainability and time is money.
No one actually copy/pastes thousands of lines of code. We use libraries.
Languages do matter a lot. Yes, they are all technically equivalent, but the craft of software engineering is much, much more about social/cultural/community considerations than it is computational ones. What the community around a programming language values matters, because it informs a great deal about what’s idiomatic in a language, what libraries are available, what kind of bugs are possible (or not), how easy code is to read, comprehend, and maintain, and much more.
What makes a language good is not what programs you can write in it, but how it constrains what you can do such that you naturally writing good code. For example, null pointer exceptions (or segfaults in C, etc.) are a classic problem that plagues many mainstream languages like Java, C#, Python, etc. In Haskell (and a handful of other languages, including Rust), null pointer exceptions are not possible, because nulls do not exist in these languages. Taking away this language “feature” actually increases the power of the language, because you can guarantee that a certain class of common bugs are not possible in your program. So languages that restrict known bad programming practices lead to programmers writing better programs and, more generally, a community around the language that resonates with these philosophies.
“We have decided that we will use deck screws to build our deck, it’s the right pattern and architecture for the job. Now get started with this hammer, the tool you use doesn’t matter as long as it’s functional as a tool. If it’s not working well that’s an optimization problem because you’re bad at your job.”