4 ms·
Dennis Ritchie's book on C is pretty well required reading for anyone going through a computer science program no?
by soperj 5y ago
Dennis Ritchie's book on C is pretty well required reading for anyone going through a computer science program no?
- sokoloff 5y agoI suspect there are CS programs that don’t even teach C at this point.
- soperj 5y agoThat seems really weird to me. We even did a machine language course even though we will never do any machine language programming. It's good to understand what the hell is going on. C is amazing in explaining how memory management works, since you have to do it all yourself.
- float4 5y agoFor an undergrad course on compilers that I took, I had to build a parser, implement a state machine and a few other things. All in Haskell. For my master's I took a course on static analysis, for which we had to perform usage analysis, type error diagnosis, implement a type checker etc. All in... Haskell.
- soperj 5y agoWe did something similar, not in Haskell unfortunately. We did have a programming languages class that introduced us to haskell. It seems so damn intuitive. As a web developer though there just isn't the support for that language unfortunately.
- robotresearcher 5y agoC teaches you how PDP11 memory management works. Modern PC/server hardware doesn't work like this, neither do modern applications that use accelerators, and while the system works hard to present this virtual address space to your runtime, you don't need to think about it in many languages, from LISP to Swift. Most devs write Javascript. I say this as a person who loves C and taught it lovingly to undergrads for many years. Embedded system programming is a lovely niche, but we don't need to design CS curricula around it.
- soperj 5y agoI would hope you wouldn't be designing cs curricula around javascript, because even javascript frameworks are moving to typescript. This seems like not teaching calculus because you can do it on a calculator. I didn't do a degree that focused on C development, but I still had to know how to do it. God forbid any of your graduates end up working on an operating system at some point.
- robotresearcher 5y ago> I would hope you wouldn't be designing cs curricula around javascript I didn't propose that. I'd expect a good curriculum to expose students to several languages, so that picking up another one is not an ordeal.
- Jetrel 5y agoSomeone beat me to the punch, but yeah, at this point, C barely works the way actual computers work under the hood. It works the way a PDP-11 does, and most modern computers have been forced (even at the CPU level) to basically act as PDP-11 emulators. Take, for example, the entire stack-and-heap thing. That's not a bedrock feature of computing; it's merely a thing that was particularly convenient to do on a PDP-11. But if you're working in C, you have to do it - so it stays a "seemingly bedrock" feature even if the hardware has drifted far from the PDP-11. A lot of these features boiled down to the ISA making it fairly convenient to do them that way - there were built-in instructions that made it pretty easy to "color-by-numbers" and get the job done. --- This is similar to how we (societally) did barely any woodworking with screws before we had the industrial processes (like lathes or whatnot) to make them. Nails weren't some magic ground-truth or axiom of woodcrafting - it was just obscenely difficult to craft a screw, so why would anyone in their right mind attempt to build something with them?
- soperj 5y agoScrews are a terrible way to build something still though compared to a properly fitted mortise & tenon.
- solveit 5y agoI went through the joint honours degree in mathematics and computer science at Oxford (that's basically a particularly rigid double major for people unfamiliar with the British system). I did not learn C, mostly because I spent a good deal of effort trying to stay as far from actual implementations as possible, but I'm sure it's quite possible for even straight CS students to not learn C. I don't believe that any required courses (which in particular does not include a course on operating systems) use C.
- 908B64B197 5y agoThe ones that matter do. If a CS/Engineering program doesn't have an OS class with non-trivial labs in C, it's simply not serious and a red flag on a resume.
- sokoloff 5y agoI looked over the degree requirements for an MIT 6-3 (Comp Sci part of EECS) degree and it looks to me like you can get one without taking a course in C. Maybe MIT EECS "doesn't matter", but I doubt that.
- 908B64B197 5y agoPeeking at the course required[0], it's hard to avoid microcontrollers. Furthermore, 6.004[1] looks like it has to involve C at some point. [0] http://catalog.mit.edu/degree-charts/computer-science-engineering-course-6-3/ http://catalog.mit.edu/degree-charts/computer-science-engine... [1] http://catalog.mit.edu/search/?P=6.004 http://catalog.mit.edu/search/?P=6.004
- soperj 5y agoYou are probably my least favourite poster on here, but I agree with you here.
- mattnewton 5y agoIt was not for me; C wasn’t even taught outside of an elective on operating systems, the main CS course was mostly Java and python with one quarter focused on C++.
- soperj 5y agoThat's really sad. I mean, we weren't actually taught any programming language, but we had courses that required C, so the Ritchie & Kernighan book was part of the deal.
- approxim8ion 5y agoIt wasn't in my program. There was a lousy textbook that is only popular among engineering programs in my country, and only a few offhanded mentions of K&R.
- wheelinsupial 5y agoDepends on the instructor. Some profs where I studied will assign K&R C for reading and others will use King's C Programming: A Modern Approach. King is a much more gentle introduction IMO.