Fun discussion, having come a different road into programming via my Degree in Computational Mathematics from most of the programmers I know and after 30+ years in the industry utilizing a dozen or so languages pursuing an aerospace career I put my vote towards Assembly in all its specific hardware requirements glory. Because it is truly a low level language and must be engineered for each specific piece of hardware architecture in the executions flow. When this hardware is in LEO (Low Earth Orbit) refactoring becomes problematic. (We really are getting much better at it since I joined the industry in 1988). Assembly is hard to read and understand with anything but a focused attention and it isn't easy to learn even for a mathematician.
For the longest time Assembly programmers unlike HL programmers wrote our entire programs from scratch without benefit of standard libraries enjoyed by the likes of C, Ada and Modula-2 programmers of the time. I usually had to rewrite integer output routines each time due to hardware architecture issues. Finally Cal Riverside introduced the UCR Standards Library (March, 1992) for 80&86 Assembly architectures and we had some redundant subroutines available.
Finally the myth that Modern Compilers have eliminated the need for Assembly programming is just that a myth and with the current explosive growth of the Satellite and Launch business has left our industry in the lurch with a drought of qualified Assembly Programmers. When it comes down to the High Requirements and the demands to the hardware and the costs involved nothing that I've seen can ultimately replace well written and tested Assembly or the Professional Assembly Programmers that helped build our Space Based modern infrastructure.
Just my 2 cents
Thanks for all the great replies
Any assembly language is hard to learn and to grasp, but once you're immersed into it it seems to get manageable. I remember a university project where we were building a 6502 emulator in x86 assembly. In the end we wrote hangman in 6502 assembly, and while daunting at first we got it working. In my recollection, the most important part is how to split up the functionality — although I have to admit, our emulator was quite basic and not exactly rocket science.
What I've heard is that compiled C is often as efficient, if not more efficient, than assembly, because of the optimizations in the compiler. What do you think about this? And why are you using assembly — is it efficiency or something else?
We're a place where coders share, stay up-to-date and grow their careers.
We strive for transparency and don't collect excess data.