Do Programmers even NEED a degree?

Well, this post yesterday, really got  things going in blog-o-sphere.  Shoot!  Even Joel Spolsky got involved.  I saw another post, but I’m sorry to say, I can’t find it right now.

The original article put forth the idea that we are teaching the right stuff in our undergraduate Computer science degree programs.

Joel’s article suggested that what we really need is a bachelor of fine arts program for programmers.  That programming, and computer science are really two entirely different disciplines.

I think Joel’s onto something and his solution is probably the closest to what our current educational system can handle.  But, I have another solution to the problem that goes further.

Why get a degree at all.  Most of you reading this post know as well as I do that a good 80% of what most programmers learn, they didn’t learn from college.  Let’s face reality here.  First, any degree program is, at best, 20 years behind.  It’s just a fact.  Ours is not the only industry facing this reality.  Second, the really good programmers are already doing what these schools are trying to teach.

Joel suggest that we have people from the industry come in and teach this BA course work he’s suggesting.  There are several major problem with this.  First, most (not all) of the really good programmers can’t teach.  Some could with some training, but the school isn’t going to train them.  And those who can teach, probably don’t know the recent material.  There ARE exceptions.  My point here is that the exceptions won’t fill the need.

But, what would happen if we went back to a really old way of doing things?  It worked.  We are almost doing some form of this already, mostly after graduation.  What if we just skipped the programming degree completely.

I’ve been in this field long enough (20+ years) to know that most of the really good programmers got into our field through some back door.  I was a camp and recreation major that converted to programming via DuPaul’s career change program.  A hoop I jumped through simply so I could get the first job.  At least 80% of what I was taught I was already doing as I had experimented with Basic, Pascal, and C.

I know another guy who dropped out of school his sophomore year because he already had the job he was going to school to get.

And don’t even get me started on certifications.  Let’s say we stop testing knowledge and start testing aptitude.  The aptitude test I took nearly knocked me out of the DuPaul program.  At the end of the program, the main prof told me i was the best natural talent he’d seen come through the program.  Wonder if he knows he almost never saw me?

Let’s face it, what we as programmers need to know to do our jobs effectively can’t be taught.  And most of what can be taught could be taught on the job.

So, here’s my recommendation.  Why don’t we go back to using the apprentice system?  This allows a good senior programmer to get a feel for what kind of programmer the new guy is going to be.  It would help the new programmer find out really quickly if this is what he really wants to do with his life.  He give the formal training the new programmer needs.

Unless you’re just starting out, you know that most of what you learn, you learn from experience.  Why not just admit that and stop trying to fit programming into a degreed program that largely doesn’t work for our industry?

See also:

Related Post

9 Responses to “Do Programmers even NEED a degree?”

  • John:

    Really good article. I agree with your system of teaching. I have a college degree in Graphic Design but ended up in Printing. I found it to be a natural extension of my talents. Although I have to admit my design classes helped my career choice, I was basically taught by a mentor in the trade. I would like to expand my knowledge into 3-D modeling or simulation creation. The thing holding me back is the thought of going back into school and wasting my energies on outdated or obsolete information. With my computer and graphics background I feel would be a plus going into a apprentice program in my interested fields. I would prefer being taught by a professional rather than a guy would did it 10 years ago. It would be a benefit to the businesses selling these programming services. They expect training will be needed anyway.

    I need and respect street creds!

    Thanks for the article!

  • I’ve got to say, you weave a convincing argument. Terrific article, and I agree with the apprentice system. It seems to work well with most of the trade skills. I don’t see why it should be any different with programming.. and that is coming from a college student!

  • Yellow Jacket Coder:

    I’m going to have to disagree. It is entirely untrue to say that a degree is required. But it is true to say that many self-taught programmers have large gaps in their knowledge that required coursework would have filled. Any programmer that decides that “X is lame; I’m not going to bother learning anything about it” will have gaps that will make them less useful. Not all self-taught programmers are like this, but in my experience, enough are that it can cause problems when they have to do non trivial tasks.

    There’s also the issue of expecting a professional to mentor a new learner. I don’t know what companies you’ve worked for where you had that kind of spare time and your managers would be cool with the hit to productivity while a new programmer gets up to speed.

    This is not to say that universities are the pinnacle of teaching computer science and/or programming; they have a lot of room to improve. But your claim that even the best schools are twenty years behind is just plain wrong, and your insinuation that college is useless is pure arrogance.

    Does this mean that self-taught programmers can’t excel? Of course not. But take a look a programmer that has a degree in field, a programmer that has a degree out of field, and a programmer with no degree, and you’ll find a clear correlation with a degree and success.

  • Cus:

    Thanks for referencing my site. One thing I didn’t emphasise in my original post was that my degree was in *accounting* :)

    I’ve worked with folks with degrees in geology, history and others – they were in the majority. What I’ve found however, is that almost all the good programmers had enough of an interest that they were interested in self-improvement outside of work. It’s how I continue to learn, even if I’m more of a Designer or Solutions Architect now. Degree or not, having a developer who is enthusiastic can be a real boon *as long as the developer respects the development process*. It’s the process that needs drumming into developers – coming off a related degree, I find graduates often have an unrealistic (ie optimistic) view of the real-world processes. If some devs are completely self-taught they’re often keen to thrown in niceties they think the customer will want without thinking of the requirements capture process or change code without realising the impact further on in the lifecycle.

    The company I used to work for actively encourages people to come in on the equivalent of an apprentice scheme. They could start off on code support and from there move to be developers or one of the softer-skilled areas if they enjoyed the customer interaction. Effectively the company groomed the apprentice so that they fitted in precisely with the company culture. They didn’t have to unlearn development strategies used in previous companies.

  • jw:

    No degree worked for me. Senior programmer/DBA for 8 years now. Dropped out of college ASAP. I’m just not big on organized education.

    We have hired MANY CS grads here. Most don’t have a clue and it takes them several YEARS to get up to speed to be able to work in a REAL programming department at a mid-sized corporation, and we have nothing “fancy” here (simple standards based apps).

    I think it is really sad, and probably confirms to me that going back to school to complete an degree program would be a waste of time. Either you are a programmer or a hack, and I think that (MOST) schools are producing hacks!

  • mike:

    A computer-related degree can have a lot of value for someone who wants to get into the field and can find a company looking to hire for entry level programming positions. A degree is about the only qualification a company can really look for in an entry level position.

    Companies that hire entry level programmers are usually doing it with the expectation that the senior level programmers will provide some degree of mentoring. This doesn’t mean the senior guy has to sit over the new guy’s shoulder all day long, just that they review some of the code and be available to provide some level of guidance.

    But for anything beyond an entry-level job, I’d suggest that it doesn’t matter much at all. Anything except basic theory that you learned 5 years ago is obsolete now, whether you learned it in college or on the job.

    A prospective employer that puts more weight on a 20 year old college degree than the past 5 years of work experience is probably not someplace I’d want to work anyway.

  • Tim:

    I followed the path of wanting to be a studio musician that failed to become a mechanical engineer that turned to a computer science degree and ended up programming. I whole-heartedly agree that a computer science degree is vastly different than a programming (or MIS) degree. Computer science is a lot more about theory and understanding how computers, compilers, microprocessors and digital logic works whereas a programming degree would (I presume) focus more on problem solving and using a language’s syntax as a vehicle for delivering a solution to a challenge or need.

    I am compelled to add another aspect to this discussion, and that is maturity. I personally feel that college or university is where you go to get a piece of paper that indicates you have an ability to learn stuff and apply it. The piece of paper says “this person is trainable.”

    College/university also serves as a platform for continued social interaction and development that couldn’t take place while living with the people that raised you. Enforcement of due dates and deadlines changes from high school to college and a student is held a lot more responsible for their work, or lack thereof. An attitude adjustment (pleasant or unpleasant – depending on the student’s disposition toward responsibility) takes place in that regard. In my experience, degree-holding programmers are generally more capable of working independently and meeting deadlines. They simply tend to mesh a bit better than the self-taught into the working world.

    I think apprenticing is a nice idea that stirs up warm fuzzy feelings about how the world used to work, but I have concerns. The apprentice will likely be limited by what the mentor knows, understands, or is capable of. If the mentor doesn’t keep himself current, then the apprentice ends up at a disadvantage. Unless the mentor properly encourages or challenges the apprentice to surpass themselves, the apprentice may run encounter the joy of office politics as retaliation for learning material that is beyond the scope of what the mentor knows or wishes to teach.

    The mentor is the most important piece in the apprentice equation. If they can be selfless enough to encourage the apprentice to increase their knowledge – or – if they can be receptive to, say, incorporating algorithms that the apprentice produced (by research or raw talent) that are more efficient than the ones the mentor came up with – and they can do these things without feeling threatened, intimidated, or undermined … then I think you’ve got something. However, people are people, and people have egos … other nifty things like Narcissistic Personality Disorder, The kind of selflessness that makes a good mentor is rare.

    I have mixed feelings about certification, but in general, I am for them. I earned an MCSD in 2002. The exposure to architectural concepts and other constructs exposed me to information beyond what I was required to do on a daily basis and broadened my knowledge considerably. The experience instilled a habit in me, and this habit is to ask a question when faced with a task, “What is the likelihood that I am the first one on the planet to need to figure out this kind of problem, or build a program like this one?” If the answer is “low”, then I set out to read what other people have done to resolve similar issues rather than trying to build the whole thing myself and inadvertently reinvent the wheel. Without the certification experience, my view of programming would probably still be narrowed by whatever my job required me to know to get tasks done.

    I don’t want to wave the certification flag too vehemently though. I have interviewed plenty of folks that have crammed for exams, earned certification(s), and can’t choose the correct (multiple-choice paper-exam) answer to a “fill in the empty bubble in this flowchart” question.

    Truth be told though, I’m working on updating my MCSD certification. It has helped me on several occasions to open doors and get interviews, so it serves as a way to play the job market game.

  • [...] programming for a while now.  See “Object Oriented Programming Has Failed Us” and “Do Programmers Need a Degree” for some of my more recent rants on the [...]

  • I didn’t need a degree. I have been programming for 25 years or so. I am 31. I got expelled from high school. I am doing great! I am completely self taught except for the computer course at private school that started me off in the 80s. I have started many of my own companies including bigbearlake.net and reservationtrack.com my new one about to be released. I do everything graphics and all! I also have several projects engineered for future AI and other computing needs.

    So no I definitely don’t think a degree is required.