Comment Re:So many negative comments (Score 1) 368
Every programming language leads to its own types of laziness. I.e., there are unique types of laziness associated with assembly programming.
I've noticed this in the projects I've worked on in assembly. In several cases, I've later done a C version of the project targeting more powerful hardware, and the result is more robust. Yes, you could argue that the experience gained doing the assembly version aids the later development of the C version, and you would probably be correct. But it's just so much easier to do things in C, and this includes error checking!
Every assembly programming task is time consuming, and this can lead people to take shortcuts. Think there aren't any buffer overrun issues? Why? In C, all you might have to do is type something like "if (index>=length) {/*don't write to buffer or whatever*/}" There! Buffer overrun issue solved! In assembly, the same fix takes longer, and you might be less likely to implement it before the problem surfaces.
One thing I think assembly programming does give you is a very intuitive understanding of how a processor works, which in turn will help you avoid errors when programming in higher-level languages in the future. It helps to understand, for example, the sheer number of instructions required to perform extended precision floating point arithmetic on a fixed-point 8-bit processor!
Programming in assembly is not productive. It is educational, it is sometimes necessary, and I think it can be fun, but it is definitely not productive. I'd like to see a variant of C that exposes more of the low-level capabilities of the typical microcontroller (and that explicitly supports Harvard architecture processors, for that matter), but even in its current form, C seems to me an appropriate compromise between performance and productivity for low-level and bare metal programming.