Modern software engineers have very little connection to low level code; what actually happens at the processor level.
If you are even in a position to interview someone for a software dev position, try this:
- Have them write a small program do to something simple; find a sub-string in a long string
- Now have them take their program and convert it to pseudo assembly language, explain what goes on in memory, where, how, etc. In other words, it doesn't have to be real assembly from a real processor, yet it has to resemble how things actually work.
From my experience most applicants flunk this test. They have no clue whatsoever.
And so, we produce tools, languages, libraries, and all manner of "pattern matching in modern high-level languages", they use them without a single clue and the resulting code is bloated and slow, to say the least.
Many years ago I wrote a genetic solver as a part of an iOS app that ran on an, at the time, iPhone 3S. It was an absolute dog. Unusable. You simply could not get results anywhere close to real time. An iPhone 3S, in the context of what the code entailed, is a massively fast computing engine. There was only one reason for which this code ran like crap: Objective-C and all the truly unnecessary "modern high-level language" garbage that came with it.
I re-coded the genetic solver in C++ with great care to manage the entire process efficiently. It ran THOUSANDS of times faster. In fact, it ran in real time (in the context of what the UI had to do) to the point where there was no lag and the user could interact with it as needed.
A lot of this stuff comes at great cost. The problem is modern programmers don't have a clue.
In addition, even when people think they know what is going on under the hood, most people are taught how things worked about circa 1992 at best.