Career tips for code wranglers. This isn't about coding for a living. It's about living.
There's plenty of articles about the shortage of skilled IT workers, and the difficulty experienced by companies in finding qualified software developers. The whining would be far more credible if the Want Ads didn't have a silly, arbitrary qualification: a college degree.
There's nothing wrong with a software developer getting a college degree in CompSci, especially when it accompanies an opportunity to learn useful skills. My problem is with hiring managers who think the degree an absolute necessity, and who exclude otherwise-brilliant candidates who didn't spend four extra years in a classroom. If you never graduated from a university, you may discover that getting a programming job without a degree is like trying to get a Teamsters job without a union card. Which is, not to put too fine a point on it, really dumb.
Frankly, I have always found this attitude unfathomable. But I'm willing to be wrong (really) and to listen to the opposite viewpoint. So I asked for input about the reasons someone might require a college degree as part of their company policy. I hoped to be given an "Oh! Now I understand!" moment in which I whacked myself on the head. So much for that idea.
A strangely common explanation for requiring a college degree is that it demonstrates "commitment." As a recruiter friend said, "One client described it to me as less about the education or the degree and much more, for them anyway, about the sense of commitment the person shows to starting and finishing something. They indicated that they saw the lack of degree in parallel to the lack of loyalty or dedication to the employer." Or as someone else said, "It helps demonstrate that that person can set a goal and then achieve it. It also shows that the person had the vision to realize that four years spent now will probably pay off in the long run."
Maybe, maybe you could get away with that attitude if the manager is trying to fill an entry level position, and expects the pool of candidates to be very young or have little experience. In such cases, the youngsters have had little time to "achieve" much of anything, so the ability to do an all-nighter in pursuit of a good grade is — arguably — an indication of seriousness.
But even then, it's not really a measurement of commitment. It's a measurement of the candidate's parents' ability to pay a college tuition. Yet, someone who dropped out of school because he could no longer afford it and had to earn a living might care just as desperately about the field. Requiring a college degree (in anything, not just CompSci) excludes the people who are really committed to learning programming skills, because they did it on their own time, or worked full-time days while they attended a Tech School at night. Becoming a programmer because you want to demonstrates resourcefulness and determination. Aren't those equally important as "commitment"?
Another major problem with the "commitment" excuse is that its relevance fades over time. I might have been a drifter or impatient idealist at age 20 (and in fact I was: I dropped out of a poison ivy league university to Save the World). In the ensuing 30 years, I might possibly have learned something — ya think? Yet, if I apply for a "college degree required" position today, my résumé wouldn't make it past the HR department. (Because, as we all know, HR departments exist to eliminate candidates, not to find them.) I've seen several programming jobs listed that specify "college degree or five years experience," and I'm fine with that. But I also know a major innovator in programming languages who was told he couldn't teach a class in the field he invented, because he never bothered to get a sheepskin.
So far, I'm assuming that a company demanding a degree insists you have one in Computer Science, but I've rarely see them specify what your major should be. As several people pointed out to me (and I agree wholeheartedly on this point), the best programmers often come from other disciplines. (IBM at least used to give a +1 to any candidate with a degree in music.) To the degree that college does teach you "how to think" (though I suspect it's more likely to teach you how to drink), it's more important for students to acquire the skill of learning quickly than to have college experience in programming a now-"legacy" language.
As one correspondent, John M, explained eloquently, "The drop-dead killer programmers you want on your team, as likely as not, were not CompSci or Software Engineering majors. They're doing programming because they like to do programming. They're intrinsically interested in communicating with the machine, and what they can get the machine to do. The college kids you interview are in Comp Sci or Software Engineering because they think they'll earn big bucks. That's why Joel Spolsky insists that any job interview should include asking the candidate to write code. I've had Dean's List students from major engineering schools who couldn't solve a simple problem — and couldn't be coached into figuring out what to do. I have a young man working for me now who majored in Music Composition who rolled his eyes at the problem and said, "You probably don't want to do it that way—the new LINQ to XML tools make it easier...."
For fairness, let me cite a few of the more sensible responses I encountered:
A college degree in CompSci gives you fundamental skills, such as data structures, how to handle large problems in a systemic way, or an awareness of accounting (relevant, since many apps interface with accounting systems). Someone with a university degree understands the difference between "coding" and "software engineering," my correspondents argued.
I'll give a nod to this viewpoint, because a good degree program does expose students to these important concepts. But I'd argue that few college graduates get a holistic view of the field until they're out of school on their first job, busy un-learning all the technically interesting "techiques" they were taught, and finding out how programming works in the real world. (The most arrogant programmers are the ones who just graduated, as I'm sure you've noticed. They're also the best and smartest in the industry. You can believe them, because they'll tell you so.)
A degree does not guarantee that the job applicant learned these skills. Programming skill is not a sun lamp. Being exposed to it doesn't mean you soak it in.
Nor does it mean that someone who worked her way through tech school, or who is self-taught from many fine programming books, lacks an understanding of Computer Science basics. Instead of asking for a degree, the interview process at these companies should include the question, "What's the last programming book you read? When? What did you learn from it?"
Some programming tasks need specialized knowledge you'd only get in school. As one person said, if the software to be written has complex algorithms, such as those that are calculus-intensive, a degree is usually a must. "You might find some unique individual without a degree who can code such algorithms, but that would be a very odd case. Or maybe the person did go to college but did not complete. It is unlikely that someone off the street without schooling could do that task."
Here I disagree. If you need specific knowledge, advertise for that need. Someone can major in CompSci without taking calculus; the degree wouldn't assure you she had that knowledge. But if the job listing makes it clear that advanced math skills are a prerequisite, you have a better chance of finding the right individual. Degree status isn't part of it.
The other assumption in this argument is that domain knowledge can't or won't be learned outside of school. That's really strange. Because someone who works in a given area is likely to learn a lot more about it than somebody who took a three-hour course in it, a decade ago.
For example, one correspondent without an undergrad degree was contacted by a recruiter whose client wanted software developers who understood their specific industry. "The project they were undertaking was an exact mirror for the project I had just completed for their chief competitor. My references were excellent and were from industry leaders that their very own senior management had long relationships with. My qualifications were so solid, I expected an interview to be merely for ceremony." Instead, the hiring company decided not to speak with him. "His client required a college degree. It wasn't important if the degree was in the artistic studies of microscopic archeology but a degree was required. They refused to review my résumé."
The degree is a measurement of achievement for those who have no other metric. One individual asked, "How familiar with software development is the person doing the hiring? If little, then would you want to rely on someone who claims to have a lot of experience without a degree? What would be the measure of identifying how knowledgeable the person truly is?" That's a fair point — and one that is a worthwhile question outside of the hiring process. (Certainly, it applies to any computer consultant who needs to sell herself to a non-technical client... a topic I'd better leave for another time.)
But I'd hate to think about the decision-making process in which one candidate is chosen over another because the former, to paraphrase comedian Robert Klein, was admitted to a college that'd accept anyone who could make it to the bursar's office. If the hiring manager isn't qualified to judge someone's knowledge, hire a consultant to interview the candidate and write a report the boss can understand.
Or take the aforementioned John M's advice: "By contrast, I can think of three strong predictors: Has the candidate been involved with the full life-cycle of a serious project? Is the candidate presently doing software development outside of work (i.e. for a social organization, his church website, a non-profit, or a hobby interest)? And does the candidate have strong performance experience with music? Two of the three warrant giving this person a close look; find all three and you've likely got your new team member. The college degree? It's a nice-to-have."
If a company really and truly wants the best programmers it can hire, it should ditch the "college degree" requirement. Now.