I’ve gone back and forth on my opinion of slow, high level scripting languages like Python. Note that I’m considering all such languages together, although Python is the iconic poster snake.
Let me divide languages into four categories:
- Unabashedly high level and slow (Python, Ruby, Lua, etc.)
- Low level but as featureful/convenient as possible (C++, Rust, Swift, etc.)
- Unabashedly low level and unforgiving (C, Fortran?)
Note that I am intentionally conflating the language itself with how it is executed. There’s no reason you can’t have a slow C interpreter or a statically compiled, if not fast, version of Python. You can also make JITs for anything (and JITs for Python, Ruby and others exist).
I’ve pretty much conclusively dismissed JITs at this point, since with current technology they are always enormous, complicated resource hogs. I would take a slow interpreter over a bloated JIT any day.
I’d also rather rather use a mix of high and low level languages (like C and Lua) over a “middle level” language like C++ that tends to do everything badly.
Anyway, using one high level and one low level language seems like a pretty sane and reasonable position. So the argument against it is a little bit dubious, but still worth considering.
Basically, with the proper libraries and abstractions build on C, it can approach the convenience of Python (Cello is a somewhat ridiculous existence proof). If you take the time to develop that scaffolding, and your own skill and experience to wield C as efficiently as someone writes Python, won’t that leave you in a generally much stronger and more capable position?
This is an argument against using the right tool for the job. If you make a conscious effort to use the most powerful tool, even when it’s wildly inappropriate for the task at hand, won’t that leave you at an advantage in the long term?
Conversely, whenever you bang something out in Python, sure you can get paid and go home, but aren’t you also eroding your engineering sense and judgment?
It’s true that ultimately, economics trumps engineering. However, I wonder if as engineers, that isn’t a really horrible mindset to have.
When you argue that software can be slow because human reaction times are slow, isn’t that an anti-engineering argument? When you argue that computers are fast, or that developer time is more valuable than CPU time (user time), isn’t that anti-engineering?
If you’re just trying to make a buck on joke apps, it’s true that no engineering is necessary. But where does that leave your career, and you as a person? Even if you’re writing joke apps to make a buck, wouldn’t it be better to be practicing skills that will one day let you make something “good,” that will stand the test of time?
That which doesn’t make you stronger is killing you.