Daniel Brown at Endlessly Curious wrote an interesting post on the current state of teaching programming.
He raises points such as the new generation of programmers getting taught mostly high-level languages such as C# and Java, and that they should be taught more assembly or C instead.
I’ve touched the C/C++ issue myself earlier in my post about what languages a programmer should know. So while I’m not the biggest fan of C/C++, and that Assembly looks scary as far as I’m concerned, I must agree that you should know at least some C/C++ if you really want to be good at what you do.
When I was studying in technical college, we had several required courses in programming. What did they teach us? Visual Basic 6, and apparently they are now teaching Java in its place. You might think that VB6 is crap, and while that might even be true to a certain degree, I believe it’s a decent language for beginner level courses, such as the ones at my school were.
We also had an optional C++ course, but it was not held, as it didn’t have enough participants. I would hope that most people who are genuinely interested in programming would continue with learning C++ after learning a higher level language as an introductionary course. As Daniel explains, it can be very important to understand the low-level happenings even when programming with a high-level language.
However, I don’t think the first language taught should be a low-level one. I’ve mentioned how I find PHP an excellent first language, and I still think so, though it obviously has more value for those who want to develop web applications. Anyways, a higher level language, like Java, C#, PHP, Python or such would be good for beginners, as programming in one of them is much more encouraging and fun. Read the aforementioned PHP-related post for more points.
Though I think this may change in the future. Seeing how high level languages will probably become more and more common as programming tasks get more and more complex, there’s bound to be improvements to the compilers, so that they will optimize the code during runtime and such to make sure it gets absolutely the best performance possible.
Who knows, maybe low level programming will fade to obscurity, only to be used by a subculture, ála C64 hobbyists nowadays. That day may come sooner than most think on desktop PCs, but assembly and C will quite likely live a long and healthy life on various smaller devices.
Fun fact: during my final year in elementary school, we were taught C in an optional computer science course.