5 ms·
on lower-level implementation details related to how machines interpret code – knowledge that non-computer science students are unlikely to use after they gradu
by zelos 9y ago
on lower-level implementation details related to how machines interpret code – knowledge that non-computer science students are unlikely to use after they graduate.
Yeah, the world really needs a load more developers with no idea how computers work. We don't see any of those in interviews already.
- filoleg 9y agoWhat's with the false dichotomy? I personally agree with you that knowing lower level things is incredibly helpful to every single good developer, even those who don't touch anything lower than Javascript on daily basis. However, I totally disagree that those computing concepts should be taught in an intro class, when the student not only has to struggle with learning basic computing concepts, but also with memory management and low level quirks that even competent established developers struggle with sometimes. Tl;dr: agreed that low level computing fundamentals are helpful to every developer, disagreed that intro classes are the right place for them.
- oso2k 9y agoThe reason is that not teaching those lower-level concepts continues to allow them to be magical. No one expects to get into Reference Counting vs. Tracing Garbage Collectors, but understanding that lower-level construct exists partially removes the mystery of the underlying mechanics. An analogous example would be Cars: you press the accelerator and gas gets sucked in from the gas tank to the engine. Most people don't care to understand if it is EFI or Carburetor.
- filoleg 9y agoMy point was that even though those things are very useful to know, I don't think that an intro class is a good place for that. Your reply didn't address that at all, and instead brought an analogy that works within the frame of my argument as well.
- jakear 9y agoDid you read your own quote? These aren't developers, they're "non-computer science students" who don't need to know underlying memory details, but they're being required to because this class is a prerequisite for a bunch of computing-related classes in other majors.
- walshemj 9y agoAnd how does a CS student vs an EE student know how computers "work". CS as I understand it is just the math not the underlying technology.
- PirateDave 9y agoFor some schools, including all schools in the UC system, CS majors have to take EE classes as part of their requirements. I remember having to setup and program gates and the sort on FPGA boards.
- zelos 9y agoYes, there was a healthy dose of facetiousness in my comment ;-) That said, there is definitely something to be said for learning a lower-level language fairly early on I think. It's much easier to go from worrying about pointers vs values, manual memory management etc to not having to think about them than it is the other way round.
- czardoz 9y agoIt's an _introductory_ course for a reason. Not all of these students are going to be developers. Those that do, will take advanced classes, rather than trying to interview on the basis of an introductory course.
- UncleMeat 9y agoDo other fields create their intro courses with the plan that people won't take any other classes and therefore not create a curricula that builds to more complex things?
- rrmm 9y agoTo be fair, there's always a dividing line. Usually, "knowing how a computer works" for a programmer is equivalent to knowing the programmer's model for a cpu. A programmer's model is most definitely not how a computer really works (cf. recent cpu security flaws with speculative execution), but it's usually good enough. Knowing more and deeper information is usually a good thing, but students don't need to learn it all at an introductory level which I think this article is focusing on.
- mastax 9y agoNo one is suggesting that CS students shouldn't learn about low-level machine architecture - what would they do for the last 3 years? C++ is just not made to be a first programming language. Aside: I'm not convinced that Python is a perfect first language either - its error messages are very unhelpful when you're learning. Also I think a "NAND to Tetris"-style curriculum could work, but C++ would still not be the first step for this. Also, look at the second half of that sentence. This is not about "developers". If you're a business or physics student who's taking one elective programming course over a bachelor's degree would you be better served if that one course was in Python? Yes, absolutely.
- jakear 9y agoI think there is something to be said for Scheme as an intro language. Knowing the "full stack" of computation doesn't need to end at NAND gates, it could just as easily end at the lambda calculus. In fact, I personally would prefer it that way.
- techman9 9y agoI'd be really curious to see a study of the performance of CS majors in later classes by paradigm of the language taught in CS1 (i.e. imperative/OOP vs functional). I've been trying to keep my eye out for a while, but haven't really found anything that answers this specifically.
- NiceGuy_Ty 9y agoMaybe course withdrawal rates could be used, but getting access to the necessary statistics seems like it'd be a chore. I just checked with my university and the only statistics I can find are centered around graduation rates. One would likely have to contact all the registrars among a sample of universities individually, as I haven't found a university offering these statistics yet.
- techman9 9y agoCS Educators do this research all the time, but it's pretty challenging to design a CS1 class that's effective but also so radically different from the typical paradigm. There's also a risk you'll set students back if it's not effective so there are definitely ethical concerns and it requires interrupting a professor's load for the quarter. That said, CS educators conduct research like this all the time and there's probably a lot of value in studying this kind of change.
- jeremiep 9y agoWe definitely need more developers who can't leverage more than 10% of the CPU's actual power.</sarcasm> Its literally impossible to have any clue about performance without understanding the hardware. Sure you can profile and gain 5-10% after micro-optimizing what the profiler tells you. But you will never, ever get the 200-1000% performance gains you can only get by accounting for the hardware at the very architecture level, something you can't fix by just profiling later on. What even is the point of having programming classes if alls they do is teach what you can learn yourself with an online tutorial?
- nemothekid 9y agoI don't see what any of this has to do with C++, especially modern C++. The only "low-level" detail from lower level systems course I find that is still relevant on a daily basis is cache-alignment - which I doubt they would cover in a 101 course anyways. Almost everything else either 1. the compiler does better or 2. you'd have to know how to fight the compiler to achieve. Anything that would let you achieve 200-1000% performance gains in Python vs C++ (besides, again cache alignment) is likely not something you would cover in a intro level course. (I know C++ is faster Python, but that has nothing to do with "accounting for the hardware at the very architecture level")
- AnimalMuppet 9y agoSIMD. As you say, "you have to fight (or escape to assembly) the compiler to achieve" SIMD, even in C++. But in C++, you can correctly align the memory in preparation. In Python? Not so much.
- pennaMan 9y ago>What even is the point of having programming classes if alls they do is teach what you can learn yourself with an online tutorial? Well, you can learn everything covered by even the most exhaustive CS degree by yourself using open resources. Low level knowledge is not locked away in some ivory tower. You certainly don't have to join a modern priesthood to gain access to high quality learning material, no matter how much the priests tell you otherwise :)
- cm2187 9y agoC++ should be an advanced class, not an introductory class. That's the best way to put off someone from programming otherwise.
- techman9 9y agoYeah, the world really needs a load more gatekeeping jerks who don't consider Python a "real" programming language.
- starpilot 9y agoYou fail to justify why C++ conveys an idea of "how computers work" better than assembly, or machine code, or learning the basics of transistors, capacitors, signals etc. Why does C++ have the "right amount" of abstraction, when it sweeps under the rug a vast body of physics and EE?
- vasilia 9y ago> better than assembly, or machine code, I was studying assembly in the second year. What is the problem? It was really easy because in my early years I was writing 64k demos. > or learning the basics of transistors, capacitors, signals etc. It's the simplest part of all computer architecture. I think I can explain what is D flip-flop/transistors in one hour. > Why does C++ have the "right amount" of abstraction, when it sweeps under the rug a vast body of physics and EE? C++ has OOP, has a smart and raw pointers, STL(not the best, but better than C). Right now I'm working on a project where I need process more than 50Gb in 10 minutes. Python script uses 110Gb of RAM because there are no pointers. I don't know why the previous developer chose Python for this tool.
- fortythirteen 9y agoWhile the best programmers definitely have that knowledge, most programming jobs don't require that anymore. It's like saying that in order to be a secretary you need to know how to replace a typewriter ribbon. Most applications aren't written on the machine level, nor do they have the complexity that requires machine level knowledge. Embedded systems programming is, at this point, a separate disciple than generic software engineering. The only regular exception I see to this is the poor curriculum around most Java oriented BS programs. I've seen many candidates come from a Java focused school that couldn't even write their own code without a full hand-holding IDE.