4 ms·
I wish that CS curriculum followed similar trends to traditional science where it goes from generalized high-levels of abstraction/assumptions (e.g. spherical c
by im_down_w_otp 10y ago
I wish that CS curriculum followed similar trends to traditional science where it goes from generalized high-levels of abstraction/assumptions (e.g. spherical cows and frictionless surfaces) to more detailed and complex "truths" or realities.
In terms of language-use progression I imagine that to look a lot like:
Python-ish -> Java-ish -> Lisp-ish -> C-ish -> Asm-ish.
So that a person can engage the simplified general problems in Computer Science and work their way toward the nuts and bolts that comprise the underlying system. That seems like it would boost appreciation for the prior convenience and abstraction while simultaneously boosting "mechanical sympathy" for the systems and lower layers that enable everything.
- lol768 10y agoThat's an interesting model. I completely agree it'd boost appreciation for the higher level languages, but I wonder if that'd be to the detriment of lower level languages. I guess you'd need to emphasise that there are times when you might want to use a lower-level language - something I didn't appreciate for a while ("Why would I want to use C and manage memory when I can just use Java?"). Maybe using an embedded system as part of the course would come in handy here.
- neutronicus 10y agoI remember having a conversation with the professor who ran the "intro to programming for engineers" at my undergrad, where they spent half a semester on C and half a semester on matlab, in that order. I remember saying that I thought they should do things in the other order (as you're suggesting here), and I remember him saying that they'd tried that, and being very emphatic that it did not work, that trying to teach C to students already used to matlab was a disaster.
- im_down_w_otp 10y agoThat might just be the choice of MATLAB as the alternate pole. Because that stands out to me as strange for several reasons... starting with it's not really general purpose at all and it is a relatively complex environment in and of itself which has nothing at all to do with programming or computer science. That method seems akin to expecting a bunch of students who learned Photoshop for web layouts to have an obvious progression to linear algebra or analog signal processing.
- neutronicus 10y agoWell, this was "intro to programming for engineers" so every engineering specialty (mechanical, biomedical, aerospace, you name it) took this class, and its main purpose was to ensure that they'd be MATLAB-literate for subsequent courses, with C-literacy kind of a bonus that'd serve them well if they wandered into some area where it was necessary.
- planteen 10y agoWas this Georgia Tech by chance? When I was there, the "full" intro to CS for CS, EE, CmpE was in Scheme. But for all other engineers, it was MATLAB with no C.
- neutronicus 10y agoNah, Michigan.
- R_haterade 10y agoSurprised it wasn't UT Austin. You just can't make it through modern engineering if you can't use _matlab_, and it's easy if you've already finished C. Old YTMND jokes aside, I did it this way too, and didn't learn to enjoy computing for a long time after that.
- userbinator 10y agoI advocate the complete opposite, perhaps with digital logic (and associated boolean algebra), sequential/combinatorial circuits, building a basic CPU, before even Asm. Someone who has only had experience with very high-level languages will have a very inaccurate model of what actually happens which will confuse and conflict when they eventually try to learn a lower-level language, while the opposite gives a much better idea of what/when abstractions become useful (instead of blindly applying them everywhere) as well as the limits of the machine. To use your example, someone used to Python and its "infinite precision" bignums may become confused and frustrated by the fact that lower-level languages actually have limits on how big their integer types can be (and the behaviour that occurs when they overflow), while someone starting from the other end will, understanding how data is represented, find it a natural consequence of the fact that bits, register sizes, and memory are finite. They will also understand that, for the vast majority of calculations, this is perfectly fine; and when it isn't, to switch to bignums and understand the associated overhead. CS is not like traditional science in that the majority of the time people are focused on building new systems instead of analysing existing ones (although I'm not saying that RE/analysis is not important --- in fact, quite the opposite.) Thus I think a bottom-up approach will be superior.