Missing from the computer science curriculum

Originally published at: http://boingboing.net/2015/09/11/missing-from-the-computer-scie.html


CSCI 5010: File Processing
Because COBOL is still the most popular language out there in terms of lines of code written. And some of you are going to get stuck maintaining it all. By the end of the course, you’ll start using BEGIN and END in everyday speech.


Haha, I never went on to be a programmer, but drank the 90s Kool-Aid that I just had to be a CS major to be a programmer, so there’s that. This one speaks to me:

CSCI 4020: Writing Fast Code in Slow Languages
Analyze performance at a high level, writing interpreted Python that matches or beats typical C++ code while being less fragile and more fun to work with.

I have a toy problem from years ago, which was almost completely pointless: I take this old Perl script that munges /usr/share/dict/words and spits out semi-random passwords. Perl 5 is ridiculously fast. Languages like Python and Ruby are not. I don’t remember why I first started using that script, but I know I was working in a Mac shop, wanted a simple password generator, I don’t think pwgen was shipped with OS X, and someone had already written that perl script. Further, I was wanting to learn Ruby and was on a Sawtooth G4. If you just naively take the Perl code and rewrite it verbatim for Ruby, it’s slow as molasses. I don’t know how many hours I wasted squeezing a second or so out of that little script, but it was quite the learning experience. One of the first things you learn is that languages like Ruby have these handy functions that are almost always faster than you could write on your own.


CSCI 5020: Be the Machine
If you really want to know how a computer works, this class in Assembly Language is for you! Learn how to line up your tags in column 1, commands in column 9 and operators in column 14. Using your yellow card, act as the Assembler: make two passes through your code and generate the corresponding machine code. Coding pads, yellow card, flow chart template and migraine meds included in course fee.


CSCI 5150: vi/Emacs – Which Is Better? – Not offered this semester due to damage to the classroom (fist and head-shaped divots in walls, bloodstains, general aura of unholiness caused by depraved acts) causing the Maintenance Department to exceed its 2013-4 budget by over 400%. Interested parties may wish to take ZOOL 2520, “Applied Aggravation Of Vespa orientalis By Direct Manipulation Of Its Domicile”, as a substitute.


Actually, it is a useful thing to do. Once.

In the Age of DOS, there used to be a code view utility, “hacker view” or “hiew”, that shown binaries not just as a hex dump but also decompiled into assembler. Was pretty handy for analyzing binaries. You could also edit the hex, in essence directly manipulating the machine code. Handy for cracking software or analyzing an unknown virus.

I love that! :smiley:

UNIX “ls” tool is a case study in excessive command line switches.

Not really. I’d say there’s just the right amount of them. They are useful. Maybe the help could be split into regular and advanced…


This class was very unpopular at my university in Austria. Students complained that the class just “boring” with Europe’s strict weapons regulations. Most people agree that if you’re interested in this subject, you should go to the US.

Also, interest among the younger students has been waning for years. Recently, an entire class failed the final exams because they got distracted by a violent argument about the relative merits of SublimeText and Visual Studio’s integrated editor.


We old mainframe Assembler programmers used to leave a large (by the day’s standards) area of working storage as all binary zeroes in each program. If we needed to hack, we could use that area.

Back in the Age of DOS, I thought, “Hey! I code all day long! Why would I want to go out and pay good money for a PC just so I can come home and code at night, too!” I was also burnt out from being on call.


CSCI 5040: New frameworks and languages, and why they’re better than what you’re using

Learn to

  • Read through all of Hacker News, Stack Overflow and Quora four times a day to find out what the latest “up and coming” language is
  • Never, ever use the same language for two consecutive projects; instead, spend all your time on SO trying to understand the language when you could be coding
  • Re-write your existing projects from scratch every 3 months because it would be so much better if it were writen using that new language
  • Causally drop "oh, you’re still using Go/Julia/Haxe? in casual conversation and mean it.

Given UNIX history ls does have a lot of cruft that could be better designed, may not removing options, but at least making them consistent, for example -g enables -l but removes the user name, but -G doesn’t do anything on it’s own, it requires that you also include -l then it shows the username but not group.

Now ps is a far better example for that class, it has far too many options many of which do something the same or nearly the same as another option.

1 Like

Given how the utils are referred to from various scripts, you have to maintain backwards compatibility.

You can design it anew, better, from scratch, but for the sake of all the gods of sysadminning, please, pretty please, give it another command name!


Is that so different from some real classes? And our department decided against picking one architecture and sticking to it because that would have been boring. The bottom-up hardware-oriented classes chose MIPS and the top-down software-oriented one went with 68k. At least we had a MIPS emulator and could actually run code for that one.


CIS 376: MUMPS - this overview of the Massachusetts General Hospital Utility Multi-Programming System may lead you to reconsider your dedication to Computer Science. Two weeks of the course will be devoted to alternate majors.

CIS 5024: Enterprise Philosophy - if the data-tier crashes on the weekend and there is no-one available to answer their beeper, does it actually crash? Also touches on batch processing, virtual FactoryFactory interfaces, and why test environments don’t work at Our Company.


Unfortunately I recognize some of my own behaviour in that list.


Hey, watch it there, buddy! I have been programming in MUMPS (though they now call it M) for much of my working life, and I expect that M conslutting will pay me well even into my retirement. It’s a fun language. I use it (by choice) for several tasks that I do monthly-- its string handling capabilities are wonderful.Yes, there is a lot of “example” code out there that’s been obfuscated to make it look awful, but you can write awful code in any language.

1 Like

Don’t misunderstand me, I’m not at all saying that I would want to change ls now. I’m just saying that the decades of evolution have left behind what are clearly bad and/or conflicting design decisions that could be taught as a learning exercise.

1 Like

Definitely do that! Legacy code can be crap. Better can be desired. But please let’s mind the old dependencies… let’s have /bin/ls2, it’s about time, but keep the /bin/ls as is!

1 Like

Leave ls alone! That’s what .bashrc is for, so you can fuck up your own life as much as you want without hurting anybody else.


That’s pretty much exactly what I am suggesting! :smiley:

The various castrated versions of the utilities from the busybox implementation are alternative enough for the default utilities namespace.

We have to learn that clear delineation between personalization and standard. I have to be able to sit down at any machine (ssh) and type regular shit and get regular results. No JIVE. People can personalize their own shells to absurdity. Feel free. That’s what shells are for. Leave the rest of us the hell alone. We have work to do and we don’t care about different ls’s. ( sorry I replied to you. It was for the other person but I’m too lazy to fix it. )