6 ms·
"C is about as close to teaching the mechanics of the computer as you can get while staying portable" Why is it important to teach the underlying mechanics of
by betterunix 13y ago
"C is about as close to teaching the mechanics of the computer as you can get while staying portable"
Why is it important to teach the underlying mechanics of a computer in a data structures course, or an algorithms course, or really anything beyond OS or computer architecture courses (and perhaps a compilers course)? The reality is that the way computers work "under the hood" is counterintuitive in an extreme sense. Pointers are a counterintuitive abstraction. Fixed-width arithmetic is counterintuitive, as is having integer division always round down, as is using floating pointer numbers to represent fractions. Yes, eventually a CS student should learn about these things -- but an introductory course is the wrong place, as is basically anything that deals with purely abstract notions (data structures, algorithms, cryptography, etc.).
- knappador 13y ago"The guts of CS are a great place to expand after a certain point." "...an introductory course is the wrong place" I'm glad we're in agreement.
- betterunix 13y agoAh, sorry, I misunderstood what you meant there ;)
- ForHackernews 13y agoI agree with you except for your use of cryptography as an example. In anything dealing with security, unfortunately the nitty-gritty implementation details wind up mattering as much (if not more) than the theoretical portion. Most cases of crypto failing are not examples where the algorithm is flawed (or outdated), but rather where the implementation is weak. Any course on crypto needs to address both algorithms in the abstract and the particularities of how they're implemented in the real world.
- betterunix 13y ago"Any course on crypto needs to address both algorithms in the abstract and the particularities of how they're implemented in the real world." I disagree. There is a rich theory of cryptography that is entirely abstract, for which the low-level details are an irrelevant distraction. Even the AES finalists, which were designed with low-level concerns in mind, are described abstractly and can be implemented at a high level (I have an implementation of Serpent in Common Lisp, for example -- no messing around with low-level details, just a functionally correct block cipher). Within the crypto research community there are people who work on high-level languages suitable for cryptography implementation: http://www.charm-crypto.com/Main.html http://www.charm-crypto.com/Main.html To be fair, there is also an enormous body of work on implementing cryptosystems in the real world -- at least enough to have an entire course dedicated to the topic. If anything, we should really have two courses: an introductory course that covers the theory of cryptography, and a cryptography engineering course that deals with real-world implementations.
- pjmlp 13y ago> In anything dealing with security, unfortunately the nitty-gritty implementation details wind up mattering as much (if not more) than the theoretical portion. Specially if buffer exploits and pointer misuses are to be taken into account.
- theseoafs 13y ago> Why is it important to teach the underlying mechanics of a computer in a data structures course, or an algorithms course, or really anything beyond OS or computer architecture courses (and perhaps a compilers course)? I'd say this is an extremely important part of a data structures course. Say we have an array of integers and a linked list of integers. Which will take less time to iterate through? We all know it's the array, but you have to be aware of how caching works to know that that's the case. Which takes less space in memory? Again, we know it's the array, but you have to understand pointers to know why that's the case. If you only know what a linked list is in the abstract, then you'll have a hard time reasoning about space usage when compared to an array. These are just a few examples, but there are countless more. It's hard to reason about how the different data structures work in the real world if you don't know how the computer works. > The reality is that the way computers work "under the hood" is counterintuitive in an extreme sense. Since when was CS about teaching only what's intuitive?