1. 09:39 22nd Sep 2008

    notes: 13

    reblogged from: inky

    tags: blog

    inky:

    marc:

    A software engineer that has first hand understanding of the vagaries of pointers, type casting, memory management (and fragmentation), and even OS internals (whatever the OS) will be better able to appropriately research and choose from PHP, perl, ROR, or even Ada. C (or some other suitably “dangerous” language) can facilitate learning these.

    BUT, what about the CS major that is focused on human-computer-interaction, math theory, or other research-oriented areas? Then whatever languages that compliment those goals are the “right” ones.

    marco:

    Learning C doesn’t just teach you syntax or a particular library. It teaches the fundamentals on which nearly all other languages are built. It’s as close as you can get to what the hardware actually does and still remain productive. […]

    You can get along just fine without knowing C and its concepts. But your skills and knowledge reach an entirely new level when you fully understand what the computer is really doing.

    I agree with Marco.

    Back in the day, when I was doing my undergrad CS degree, we were started on Smalltalk (Java was “out” but only the postgrads knew what it was). I think this was the department’s way of making us into object-oriented thinkers without having to make us struggle through the whole procedural to OO transition thing.

    In our second year we were taught, and had to use, Ada. Yes, really. As a friend of my says about Ada: Array slices! Ada is pretty cool. If I recall we were also compelled to learn a couple of functional languages too. I seriously sucked at functional programming.

    In our third year were were finally taught C, which we were compelled to use. Up until this point we had done data manipulation stuff in Smalltalk and Ada. In C, the big assignment was to rewrite malloc and calloc. I did well, but I barely understood it. I think we also had to learn assembler during third year. I was very bad at assembler.

    In my honours year I did not write code at all. This is why I am now a design researcher and not a programmer or software designer.

    My first job out of uni I was compelled to learn Java. Actually PwC flew me from Australia to Tampa, FL to learn Java with 40 other Australian grads. I am not a great programmer but I did not suck at Java. I was certainly in the top quartile of my cohort for PwC. After a while of not coding because of the tech crash, I was put on a project using SAP/ABAP. ABAP is basically FORTRAN, so it is easy once you’ve seen a few other languages.

    In fact, every language is easy, once you’ve used a few other languages (for given values of “easy”). And, I would say, every language is even easier once you’ve used C.

    Now I (still) write no code and I am glad. There are other people who get much more pleasure from writing code and are much better at it than I could ever be. This is OK, as I am pretty good awesome at some other things. But, quite a lot of what I do is mediated by technology, be it computers or other hardware. I like to think that one reason it is so easy for me to understand new technologies and devices and integrate them into the work I want to do is because I did CS as an undergrad which lets me see, just a little bit, the internal workings, which means it’s easier for me to see the metaphorical shape of what the software or device really does.