I'd like to know what role hardware had to play in the development of modern languages. For example, did more RAM mean that languages could be less efficient with memory allocation, but become more convenient to the user? Did faster processors mean that prohibitively expensive operations could move into the mainstream?
Marcus
Full Stack Developer
Back in the days, people were writing assembler in order to squeeze as much performance as possible out of their 8MHz CPU with 1MB RAM computers - in other words, programmers were translating business logic into machine code. Modern languages are much further away from assembler, instead, you write code that almost resembles the business logic and the compiler / interpreter translates to machine code. Writing low-level code has become a niche that's only required for very specific use-cases like building operating systems; for the majority of use-cases, you can get away with a more modern language and spend your time creating business value instead of translating business logic into code that is / almost is machine code.
lol :D hardware improvement is how we scaled, hardware is cheaper than a dev that's why we need 300 servers and a cloud to do things.
Functional programming the second (third?) uprising is because we don't care about imperative memory management anymore.
How many of us sit down and think how the program reacts on all levels ? none what do we do ? we add another server ... "load goes up ? add another server"
a modern senior dev, in austria, costs in a classic employment about ~40€ an hour with taxes and social security etc. that's around 3200 € gross per 160hours which is the equivalent of 40hours week. (for the dev, the company pays double)
so if the bug is not reducing the throughput of my profit margin it's cheaper to just add another server which costs around 40€ a month so I can have 80 Months of server power and let my programmer focus on "important business"-tasks.
this is why companies can scale not because they "get the smartest" (they all try for sure) but because they can compensate with hardware.
We don't tend to think about state representations in memory and how to efficiently do stuff, "the compiler will manage it" and that's okay.
It's a perfectly valid thing as an application programmer to say "I like to work with the abstract problem, not the realities it implicates" but lets be real ... we only can do this because hardware got so cheap....
Well, I think neither Java nor Python should be called modern anymore. Python came up in 1991 (26 years old) and Java first appeared in 1995 (22 years old). At the time, people had a completely different take on hardware and software. People then thought: "Let's build the logic the way it is easy to write and read. If the program is slow, we just have to wait for another year and it will be fast enough" (since single-core performance increased according to Moore's Law). There is no performance in the way Python or Java were conceived.
Today's languages, however, take a step back. Take a look at Go and Rust. They take the hardware into consideration again, because we suddenly have many many cores doing jobs in parallel (which is a change in the hardware architecture). So those languages were build with multithreading in mind and are a lot closer to the abstract hardware (not the real hardware) they run on.
Something like that is very possible again, because we learned from the past. We learned how to work with hardware from software in a safe and sane fashion. It's not only a phenomenon of languages, but also APIs (for example OpenGL->Vulkan) and IoT (use software instead of hardware even for very small stuff, like a temperature sensor).
Imho, in the future, we might see languages, which abstract multithreading away again, so that we can have very high-level programs without thinking about locks, mutexes and critical zones. History repeats itself :)
I would agree with j on the fact that memory management has sort of gone out the window. But Java and Python are very academic languages, meaning that the idea of future youth finding the ease as a reason to learn the language, in my opinion, to be something to shoot for. I think a lot of modern languages shoot for this, maybe not for the academic but ease of use. No one is going to learn your language if it is complicated.
Although there are newer languages coming out that want to come back to memory management. Maybe make things better. Take Rust for example. At first it is a brick wall of doubt. However once you understand ownership, to me it is just as easy to write as Java.
But overall, yes. Hardware is cheap, and during the time those languages were made it was and still is easier to leverage the processing power rather than man power.
On a counter argument hardware limitations have also lead to different languages and libraries. Take Elixir or Java's akka, you can now work on threads, leveraging the multicore. Before you only had single core processors and now we have multicore.