|A languages progressed, programmers became less and less skilful in low-level development|
This is totally false.
There isn't any shortage of programmers who understand lower level architecture. If anything there's more than ever. Yes the percentage
of programmers that have that skill may have gone down, but that's a meaningless statistic because virtually anyone can be considered some kind of programmer these days.
But maybe that's your point? Maybe you think hobbyist kids who don't really care about professional/serious development and are only interested in pumping out quick programs for the novelty... that they're somehow ruining it for the rest of us. If that's the case then the only thing I can tell you is to grow up. That's basically like saying "I was a programmer before it was cool" -- nobody cares.
(yes I know you aren't singling out C#, but I'm using it as an example here):
You seem to have it in your head that coding [well] in C# doesn't require you to understand what C# is doing behind the scenes. That is absolutely false. In fact the exact opposite is true... to really use the language well, you really have to have a firm understanding of exactly what it's doing. The same is true of C++, and of C, and even of assembly.
In a sense that makes languages like C++, C#, Java, etc much harder to learn and master. They're significantly deeper and much more complicated.
|I didn't feel like I was in control, and that the compiler was doing things behind my back that I should know about (like the implicit virtual example). |
If you don't feel like you're in control, you don't know the language well enough.
If you think the compiler is doing things behind your back that you should know about... you're right... and you should know about them.
At least... that's if you want to master the language.
|So overall, the low-level art of programming is becoming a distant memory in some programmers' eyes, and the fact that programming is becoming so automated & distant from the architecture, it's almost painful. |
Then again... (and the more and more I read this thread the more I realize this might be the actual underlying issue).... maybe you're just a dinosaur
. And it's painful because you don't like how competitive it is now and you want things to go back to how they were 30 years ago when making any program (no matter how simple) was considered wizardry.
There are a million good reasons why you shouldn't work directly with the architecture, and why you should use existing libraries when available. I've listed some of them before, but in case you missed them... here are some again:
- Speed of development
- Maintainability of code
- Code reusability
- Minimization of bugs
- Ease of communication between developers on large teams
It's not a matter of programmers being lazy. It's not a matter of them not understanding what the languages/libs are doing. It's a matter of being productive. Reinventing wheels and inlining assembly to squeeze out the best performance of the architecture isn't being productive -- it's a waste of time.
So while you are working tirelessly to hand craft every detail of your 1 program by tweaking bits with a hex editor -- your neighbor Biff spends the same amount of time pumping out 5 programs that are all just as functional as yours by using higher level languages and existing libraries.
Although you do have one advantage... your program is so well optimized that it will run seamlessly on a 500 Mhz Pentium machine running Win 95, whereas Biff's programs will stammer and choke on that platform. Too bad nobody runs those anymore.
So yeah I guess it is kind of painful to watch these kids whiz by you. Sounds like you better get with the program... because technology moves really damn fast and it's just going to get worse over time.
Also I just want to reiterate. Coding well now isn't any less of an artform than it was before. It's still very difficult (probably even more difficult than it ever was), and it still takes a lot of knowledge and creativity.