just brew it! wrote:
When I studied EE one class was 8080 assembly language programming. Not that I learned much interesting about computers in that degree. Most interesting stuff was picked up by self-learning programming and making computers (from chips and datasheets) or dropping into comp sci lectures some of my friends were in... 8-bit just isn't that meaningful anymore. I think learning how a computer actually works is useful to picture how algorithms work and data flows in a system but that could be done just as readily using an abstract virtual machine for some sort of simple clean 32-bit instruction set. We are now in an age where you can cobble together some sort of "embedded control system" using a multi-core GHz class credit-card sized computer bought for nix drawing milliamps and building an application using node.js with a web front-end over Wi-Fi... I don't think you learn much or demonstrate much skill doing that. Somebody still has to know how to draw a line pixel by pixel. But the world doesn't need too many people like that anymore. It's APIs all the way down.
You still need people who can write the APIs, or rewrite them if needed. I'm thinking that if more programmers have learned how to write code to max out the performance of 8-bit machines, we could be avoiding all of this Bloatware and poorly written programs that has plagued computering for the couple of decades(or longer)
Yes, I believe that understanding what the hardware does under the hood can make you a better developer, even if you code in a high-level language. I don't think we necessarily need to force people to learn 8-bit assembly language though. A more modern architecture (say, ARM) would be fine for this, and you have a lot of inexpensive hardware available like the Raspberry Pi. You could have students write assembly language routines to do stuff via the RPi's GPIOs or something like that.
APIs aren't written in assembly language any more. Device drivers are written mostly in C now, so even if you're working at the bare metal level there's typically little or no need for assembly language in the real world.
"C is a language that combines all the elegance and power of assembly language with all the readability and maintainability of assembly language”
As someone who actually wrote non trivial programs in 8086 Assembly (not crazy complex either, but definitely non trivial), I can honestly say that properly structured school classes in C for system programming can teach all or at least almost all of the programming skills that assembly would teach with perhaps more engagement and certainly more portability. I mean look at Kernel development or other bare metal or embedded programming like JBI mentioned. I think more people should be exposed to system and ABI development in school, or embedded sensor or other physical hardware with structural resource limitations but you don't need ASM for that, C can do it if you grade people 'correctly' in ways that make them utilize the features of C that mirror ASM.
I remember that one of my classes was programming in C for a chip where the most expensive instruction was MOV, and that had a dramatic effect on my programming once performance was a metric in the grading rubric. It's just that a lot of instructors won't have the skills required. I mean a lot of people who are great at that kind of programming, are usually one of the last few such experts that are quite necessary and well paid at a company, and aren't necessarily great teachers.