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.
(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.
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.
(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.
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.
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.