3 ms·
>Would Dijsktra, for example have adviced teaching for or against teaching Assembly language? Dijkstra makes a distinction between Computing Science and Comput
by rramadass 4y ago
>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.
- tengwar2 4y agoA minor niggle there: machine code is the native language of the computer. Assembly language is a slightly higher-level and slightly less expressive language. Most of the time, they can be seen as equivalent, but as a trivial example, a generation of us had to DB Z80 opcodes when using an 8080 assembler. More practically, things like breakpoints have to be set by writing binary to memory - there is no assembly language involved. At a less practical level, you can have things like self-modifying code, or code where the meaning changes depending on what byte offset you start.