Archive for the 'Computing' Category

Why Are There So Few Computer Science Graduates?

I’m reading a great series of articles (thanks be to the hyperlink!) that have rekindled my on-again, off-again interest in the problem of the precipitous decline in the number of computer science graduates – nationally and internationally.

Let’s sum up the key popular arguments:

  • CompSci isn’t hip enough for students.
  • Nobody needs a CS degree to do 90% of the professional work in the field.
  • Java is responsible, an argument put forth in considerable detail by (among others) Dr. Robert Dewar and Dr. Edmond Schonberg of ADACore.  Joel Spolsky put in his two cents a couple years ago as well.
  • K-12 education is giving our students an aversion to, or insufficient exposure to, computer science.
  • Worries about the job market are turning kids off.

That last one is obvious bullshit.  Every day you can go to and look up thousands of programming jobs, at top salaries.  A job in software development is among the most portable, and highest paid, of any profession. And believe me, a key thing on the mind of almost every college kid is “how much can I make when I graduate?”

Regarding Java: Mark Guzdial, in a well written post on the subject, writes:

The curriculum did not change that dramatically from 1997 to 2002, but that’s when the enrollment changed so dramatically.

Hm.  Wasn’t that when Java adoption in CS programs really took off?  Remember when Java was the Next Great Thing, the Grand Unifier, the Language to End All Languages?  You couldn’t walk 10 feet in a Barnes and Noble without somebody’s Java book falling off the shelf and knocking you silly.

I was EXTREMELY fortunate to start my computer science education with Ada. I haven’t programmed in Ada in 15 years, but the lessons learned there have served me well in all subsequent parts of my career. Java? I’ve never liked Java. Java is a language for people who lack rigor in their thinking processes.


The thing that concerns me the most, however, is that the examples of truly innovative computer science programs are few and far between – at least they don’t get enough exposure. I see a lot of defensiveness among university educators about the issue, but no one seems to be grabbing the problem, Tom Peters style, and leading the charge. One might infer that (some) university CS programs are risk-averse; one might also suppose that the administrators of said programs are obtuse, obstinate, or supercilious.

What’s my personal opinion on the key factor that is leading to the decline of undergrad CS graduates? Twofold:

1) Programming qua programming is unsexy. Point #1 above. When your leading lights in the software world are this guy and this guy, you see my point.

How to fix this? Expand the curriculum. Include gaming, multimedia, cross-disciplinary majors, and track the sexy related topics like bioinformatics, clean energy, citizen journalism, etc.

2) Programming is fucking hard. Nobody likes hard. That’s why there are about 100 times as many communications majors as there are math majors.

How to fix this? At some essential level, you can’t. It’s a complex subject, and software is – as somebody points out every few minutes – the most complex thing ever created by humans. You don’t hear talk about “the singularity” for nothing.

However, there are steps that the universities can take.

  1. Make tutoring an essential part of any CS curriculum.
  2. Get the tool bullshit out of the way and don’t make students struggle unnecessarily with the ramp-up chores.
  3. Encourage or demand internships where students will get real-world, hands-on, ten-hours-a-day experience doing actual programming.
  4. Encourage and foster communication among the students, but don’t puss out and do “group projects” exclusively because to do otherwise would hurt student’s feelings.
  5. On the other hand, don’t choose arcane topics, languages, or tools on the theory that “if the witch sinks, she’s not a witch”.

Interested to hear your comments.


How To Eject an ExpressCard

I feel like I just learned how to snap my fingers for the first time.  I just learned how to eject an ExpressCard.  I have a Dell XPS M1330 and today I bought a new Option Wireless GT Ultra Express aircard, which comes in the ExpressCard form factor.

Being used to PCMCIA cards from the good old days, I looked around for the little black button to eject the card.  There was none.  Hm, sez me, how do you get this thing out without damaging it?

It turns out the ExpressCard slots are spring-loaded.  You just give the card a good push IN, then the card pops OUT.  Easy as pie.

AT&T GT Ultra Express Air Card Review

On Tuesday, I purchased an AT&T Sierra Wireless 881 USB Air Card to use in my laptop.  I needed to be more mobile than I already am, what with the fact that the mojitos are usually served outdoors on the patio during the summer months.

Today I returned that steaming hunk of junk.  I spent many hours trying to get it to work, including one on the phone with a mostly clueless AT&T tech who told me at one point that “you know more than me” about the networking troubleshooting.

I couldn’t get to any internet sites; ping barfed with a 1231 error, and zero data packets of any sort were sent or received.  I tried upgrading the AT&T Communication Manager software direct from the AT&T support site, and even tried the Sierra Wireless 3G Watcher software.

So, when I returned the 881U, I got a GT Ultra Express card in its place, for $50 more.  I figured that Sierra Wireless was the culprit here and that moving to a different manufacturer might work out well.

I was right.  The GT Ultra Express works beautifully.  It’s an Express Card card, so it’s much lower profile than the monstrous 881U, and it works like a champ.  Initial bandwidth tests to Speakeasy show a download speed of 1639 kbps and an upload speed of 636 kbps, which is right in the advertised range and definitely acceptable for my needs.

So – for those of you choosing between the Sierra Wireless cards and the Option Wireless cards available from AT&T, definitely consider the Option Wireless ones, particularly the GT Ultra Express.  The difference is night and day!

*Real* Programmer Productivity

My friend Adam, otherwise a really smart guy, has it all wrong. Read his post for an example of what not to do, then continue reading below to see how you really get productive.

Sleep? None of this setting your alarm crap. Sleep when you’re tired, then wake up, wipe the drool off your “V” and “C” keys, and start typing. I take my inspiration from the animal kingdom. You think bears set an alarm? Hell no. They stop hibernating when they’re hungry and some hiker walks into their cave. Sharks? They sleep until their nose bumps into some fat mackerel or boat, then they start chomping.

Sobriety? I’ll go out on a limb here and say that no significant advance in the history of computing was done without some sort of chemical-aided inspiration. The whole concept of recursion was developed by Alan Turing after eating a handful of sweet English mushrooms. Python was obviously developed by some dude high on quaaludes. Who hasn’t had their most creative thoughts after four or five gumdrop martinis?

Exercise? Sure, it sends oxygen-rich blood to your brain, but so does shotgunning a couple Red Bulls, and in a lot less time. Exercise makes you look good for the ladies, but so does photoshopping your MySpace profile pic. Plus, as Craig Newmark has found, text-only listings were designed specifically to make nerds look good. My own personal programmer-productivity workout circuit consists of four stations: Computer -> Refrigerator -> Toilet -> Bed. There are 4! permutations, more than enough for variety.

Eat All Day. I can’t really argue with this one, except for his choice of what to eat. A Bavarian Cream doughnut sounds good right about now.

Meditation? If you want to think about things and not do any actual work, you’re cut out to be an Architecture Astronaut, or perhaps a “thought leader”. Real programmers type. Nothing beats working out your ideas in code. Plus, if you’re a consultant, you can’t bill for “meditation” – how do you SVN COMMIT that? You can’t. If you really need to think, re-read that Lisp code you wrote last night at 3 AM.

So, in summary, avoid well-meaning but misguided attempts to put you on the straight and narrow path to personal productivity via unproven “theories” such as rest, exercise, abstinence, and temperance.

ReadyBoost / VMWare Issues with SVCHOST.EXE

For the past couple weeks, I’ve been using VMWare on Vista to load a saved Windows XP image in which I do some specialized work. I’ve been frustrated because every time I start the image, my CPU bounces to 100% – about 50% for the VMWare process and about 50% for the mysterious Mr. SVCHOST.EXE.

If I manually kill the SVCHOST process, my network goes away. One or two cycles of diagnose/repair usually fixes it, and then I’m good to go for the rest of the day.

I resolved this morning to get to the bottom of it, and I believe the culprit is the ReadyBoost service. After disabling that service and restarting the machine, no more SVCHOST bullshit when I start the VM. I don’t use ReadyBoost capabilities anyway – I have 4 GB of physical RAM, which is fine for me – so disabling it would appear to not pose any problems.

Evolution Strategies

I’m working on a couple problems for which the AI technique of Evolution Strategies makes a perfect match. My own AI/EC background is mostly in genetic algorithms (Holland) and genetic programming (Koza); ESs were always “that German thing”. But ESs have gained in popularity as a general problem-solving paradigm, and for my current specific problem this approach is great.

Here’s the general form of the problem: Attempt to describe the mean and standard deviation of several weakly correlated outputs in the range [-1.0, 1.0], assuming you don’t know anything about the output values to begin with. Experimental results will (should?) tell you everything you need to know.

So, start with a uniform input distribution.  Run the inputs through the model and calculate the outputs. Evolve the distribution of the next round of inputs based on the feedback. Wash, rinse, repeat.  You may eventually get to a normal or pseudo-normal distribution if there is a single “correct” output.

ES allows you to coevolve the mutation function(s) (the mean and standard deviation of the inputs) as you go. The idea is that I can present more and more specific sets of inputs and arrive at very neat, very precise, measurements of the output parameter(s) using this method.

Representation is a little heavier than normal using this approach – roughly 3X – but as the man said, if you don’t particularly care about the results, you can get a program to run as fast as you want.

In case my rich multimillionaire great-uncle is reading this post, here’s a $128.00 book that I want to buy: “Noisy Optimization With Evolution Strategies”.

Free Genetic Programming Book Download

From (not to be confused with, there’s a new book by Poli, Langdon and McPhee called “A Field Guide to Genetic Programming”. It’s being offered free as a PDF download. If you have any interest in the topic, you should go pick it up.