What do CS students learn?

On May 23, I gave a presentation at Sun about computer science students, and how a company can engage with them (audio | slides). Here are some of the questions that I was asked, and the answers that I gave (or wish I had given), and a question that I wish I had been asked.

What can we do to get more students to use OpenSolaris?

(Asked by two people in marketing who were eager to give me installation DVDs.) Ugh, that's not easy. What's in it for the students? It is hard enough to get them to install Linux. Suggestion #1: Work with a professor who teaches operating systems to develop some modules where students use and modify OpenSolaris. Suggestion #2: Why be fixated on DVDs? Give students remote access to Solaris virtual machines to solve a problem that they have, namely to host their JSP/JSF applications. (Just to really rub this in: it would be a double win. Right now, students flock to PHP in their software engineering projects because someone hosts that, even though they'd prefer to work with Java.)

Meta-observation: Students are no different from anyone else. To reach them, you've got to solve their problems.

What math do computer science students learn these days?

It varies by institutions, but typically it is 1-2 semesters of calculus and a semester each of discrete math, linear algebra, and statistics. Unfortunately, that's not really enough discrete math to get good at it. I'd rather trade a semester of calculus for another semester of discrete math. Provided it is taught by someone who understands computer science.

If Java were to fade away in CS departments, what would be the cause?

(Asked by Alex Buckley, after I stated that currently Java is by far the most commonly used language for introductory and advanced CS courses.) Microsoft has been trying for years to push C# instead of Java, with very limited success. Switching from C++ to Java solved a huge problem that professors had—students couldn't get their projects done because they wasted endless hours chasing pointer bugs. And it gave a rich set of libraries for GUIs, database programming, networking, etc. etc. Switching to C# would give you just about the same thing, and if there is anyone who ought to know about switching costs, it is Microsoft.

There is some unhappiness about Java in the first course—see this taxonomy. One pain point is public static void main. It is tough to explain this to a beginner, when in Python you can just write print "Hello, World!"

Some departments have switched to Python as a first language, but it hasn't been a huge trend. Really, the problem isn't that public static void main is annoying, it is that Hello, World! is boring. Switching to Python doesn't solve that. There have been many success stories with libraries, tools, and environments (such as Alice 3), almost all of them in good old Java.

What can we do about the lack of interest in a computer science career?

There has been a tremendous drop (about 50%) in computer science enrollment after the dot-com bust. The conventional wisdom is that the CS1 course is dull, and after a few weeks of Hello, World and computing the digits of π, students see the benefits of a career in divorce law. The canonical solution is to make CS1 more engaging, by showing that computer science is so much more than just programming. (Check out Jeanette Wing from the NSF in this NPR segment) But I am not so sure. In February, Eric Roberts gave a great presentation at a CS education conference about surveying freshmen at Standford. They came in droves to the CS1 course and gave it great ratings. What did they like best? They loved programming. And then they enrolled in some dull course that was a requirement for investment banking.

What is to be done? Paying software as well as investment bankers would certainly solve the problem. But if we want to rely on the folks who do it because they love it, then we need to get more people in middle and high school to love math, science, and engineering.

What is the computer industry doing to push for better education?

Sadly, not much. On the way to my talk, I listened to NPR. John McCain was in Silicon Valley, meeting with the CEOs of software companies. What did they tell him? That they had a single issue on their collective minds: To raise the H-1B visa quota.