One of the things I do as part of my job for Pillar Technology is interview prospective new developers.
In the spring and summer of 2009, I was getting more and more frustrated with the interviews I was doing–especially the ones involving young folks fresh out of college. I was noticing that they had spent four years learning something, but they didn’t know anything we needed them to know.
For example: one promising young man I interviewed probably could have told me the difference between NP-hard and NP-complete right off the top of his head, and maybe made a good stab at writing a shellsort; but he couldn’t write a unit test to save his life. He was trying to write a test for a method that was–under the conditions in effect at the time–supposed to return 2. He started like this:
Note that he had forgotten to save the result of the call to
.methodThatShouldReturnTwo () in a variable.
So he stared at the code for a good five minutes, trying to figure out what to put after the comma in the second line. Suddenly he brightened and completed the test:
assertEquals (2, null);
“Are you sure?” I asked him.
“Yes, yes,” he declared confidently, “that’s a failing test.” He ran JUnit to prove it to me.
“True enough,” I agreed. “Now make it pass.”
Unfortunately, I had to draw the interview to a close before he was able to write enough production code to make
assertEquals (2, null) pass.
But these were the kinds of kids I was getting for interviews straight out of college, and it was making me angry. Obviously, the colleges were not teaching the right things to help their students get jobs when they graduated.
Both my wife and my father are college professors, so I’m at least peripherally involved in the academic community. I decided to try to do something about this travesty.
At the time I was commuting to an Agile project in Michigan. So I called up a succession of computer science professors (total of three, if I remember correctly) and made each of them the following proposal:
I know the university gives you travel money each year. So: why don’t you reserve a room at the Marriott Courtyard in Farmington Hills, MI for a week. I’ll drive you up there Sunday afternoon, and all week you can sit in the team room and see how a real live Agile project works, and what the people who work there need to know. You can participate in the meetings, talk with anybody you want, pair with the developers, go to lunch with us and talk shop–whatever you want. You’ll see the whole cadence of an entire Agile iteration. Then on Thursday afternoon I’ll drive you back home. (And you’ll have the opportunity to teach your students what they need to know rather than what they don’t. I didn’t say that part, I just thought it.) So what do you think?
Without exception, all three of the professors turned me down. They weren’t interested. They had better things to do. One of them even told me, in rather a snide tone of voice, “We don’t train software developers. We train computer scientists!”
Well, you might say that got my dander up.
At that time, I had already been volunteering in various prisons–including MCI–doing other things for fifteen or twenty years, and I knew there were a few guys at MCI who were trying to learn programming, mostly as just something to do to pass the time. So I got hold of Jo Dee Davis of WinWin and asked her if there weren’t some way I could get a class started there.
I had visions of calling that snide professor back in the space of two years or so and telling him, “You pick your favorite pair of seniors, and I’ll pick my favorite pair of felons, and we’ll put them to work on a real-world programming task and see who comes out ahead.” Probably won’t ever happen, but it was enough to sustain my interest.
So Jo Dee set me up with four guys, and we got JavaGuys started.
Since then I was moved from the commuter project to one right here in central Ohio with a health-care services company. In the summer of 2010 I made the same offer (without the travel) to another computer-science professor, and he actually took me up on my offer. Well, sort of. He said, “If it turns out I can’t do the entire week, at least I should be able to do a day.”
You can’t experience much about an Agile iteration cadence in a day, but I was excited anyway. Since the client was a health-care company governed by HIPPA, though, there was a lot more involved with getting somebody from the outside in for a week than simply inviting him. I got his paperwork started with the higher-ups, and it took a few weeks to come through. The day it did, though, I was about to call him and tell him so when he called me. He’d found something better to do that week than learn how to train mere software developers.
Seems to me that if you’re a professor of something like mathematics, where it’s perhaps true that no significant discoveries or advances have been made since Rufus Bowen’s work on axiom A systems in 1978, it might make sense to just teach the same thing over and over from hire to retire and not worry about staying up in your field.
But computer science isn’t mathematics, and discoveries and advances are being made every day. I think it’s inexcusable to still be teaching C++ as the main programming language in a computer science major, and deal with the advent of languages like Java, C#, and Ruby by sticking in half an hour on automated garbage collection in a programming-languages course.
So there’s my li’l ol’ personal vendetta. Colleges turn out computer-science graduates who are essentially worthless to employers until after a significant training investment has been made in them, and does so over four years at a cost of $70-100,000. I think smart, passionate guys can learn much more useful things in much less than four years for much less money than that. So we’ll see.
After a year of JavaGuys, there are two prisoners in the class who, if they were released tomorrow, would make (I think) excellent junior developers for Pillar, and one who would slot easily right into Pillar’s apprenticeship program. Of course, I have to wait until they’re actually released to find out whether I’m just blowing smoke–and I don’t know when that will be–but I have my suspicions.