Are there interesting problems that require knowledgeable of Assembly language to solve?
Would Dijsktra, for example have adviced teaching for or against teaching Assembly language?
Are there interesting problems that require knowledgeable of Assembly language to solve?
Would Dijsktra, for example have adviced teaching for or against teaching Assembly language?
Dijkstra makes a distinction between Computing Science and Computer Engineering. The former is the Theoretical Science part i.e. Mathematical Logic, Automata, Algorithms, Computability, Complexity etc. The latter is the design of practical machines where we can realize the running of algorithms from the former domain. Dijkstra did both but his interests/focus were more in the former domain.
However, he called the General-purpose Computer "A Radical Novelty" from the pov that it allowed us to do any computation that we can think of (subject to Mathematical limitations/Computability) unlike any other previous man-made inventions. Many of his EWDs talk about this. Given that Assembly language is the native language of a Computer and all Higher-level language abstraction constructs have to map to it there is great value in learning the structure of Assembly language and how to program using it. There is also the beauty of Engineering involved, where layers of abstraction come together in a harmonious manner to give you a Machine with almost limitless capabilities. Also note that Assembly language is the Computer Architecture view for a Programmer while Computer Organization is the engineering implementation of it.
The following two books are highly recommended for further understanding:
1) Code: The Hidden Language of Computer Hardware and Software by Charles Petzold.
2) Structured Computer Organization by Andrew Tanenbaum.
Being able to read it, on the other hand, I find really useful for debugging. You can follow execution into places where you don't have code at hand, find code that was not translated the way you expected (e.g. due to surprising aggressive optimizations), etc.
Learning to understand Arm architecture specifically or computer architecture in general can be invaluable. A particular Assembly syntax is just a way of expressing what you want to do.
I would suggest reading a book about computer architecture or taking a course. And if you are like me and are interested in what complicated things hardware does to fulfil the needs of software, you might want to first read a book on operating systems (like OSTEP by Arpaci-Dusseaus, which is marvel of accessibility and challenge for students), because it will make you ask relevant question.
If you are curious about this stuff definitely look into it. It may be worth to you.
In the end everything is just bunch of ones and zeroes and clever hardware architectures.
Nand2tetris is great source for figuring out whether this is something you want to get in to.
If you find reverse engineering interesting, at minimum being able to read assembly is a must. I only learn assembly for fun, e.g writing SNES/Sega/Atari games.
As a mobile application developer, obviously assembly is practically useless for work.