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:

Like this Article? Subscribe to get every article sent to your email.

Related Post

  • Learn To Program – Online College or Self Taught?Learn To Program – Online College or Self Taught? I got this interesting question the other day. “I am interested in pursuing a career in Computer Programming and have a question. Which would be better: to get my degree through an […]
  • Why Programmers Can’t ProgramWhy Programmers Can’t Program Jeff Atwood of Coding Horror writes: “I find it difficult to believe, but the reports keep pouring in via Twitter and email: many candidates who show up for programming job interviews […]
  • How to Excel as a Programmer (or anything else)How to Excel as a Programmer (or anything else) From a very early age we have been conditioned to fail. I know that probably seems harsh, and probably seems like an over generalization, but it is true. Here are some things you can […]
  • Object Oriented Programming has Failed UsObject Oriented Programming has Failed Us I've been thinking about the state of the programmers coming into our industry recently.  It seems to me that many of the college students who graduate today understand the syntax, […]
  • ASP.NET Interview Questions For New College GraduatesASP.NET Interview Questions For New College Graduates I’m not the first to write on this topic and probably won’t be the last.  But I do have something to say on the matter that I think is helpful. In fact, there has been quite a bit […]

About Dave Bush

Dave Bush is a .NET programmer and Certified ScrumMaster who is passionate about managing risk as it relates to developing software. When he is not writing or speaking about topics related to Application Lifecycle Risk Management (ALRM), he is an example to his peers as he develops web sites in the ASP.NET environment using industry best practices.

One Pingback/Trackback

  • 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!

  • http://www.studentswithjobs.com Students With Jobs

    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.

    • Mike

      I have to disagree about the degree and ability. I left in my second year of college and was able to do work for on company that would have qualified for master thesis work (a multi-user/multi-tasking OS that ran on 8086/80286 systems, compilers, virtual machines, debuggers, etc.).

      We hired a guy that had a doctorate in Computer Science and I originally thought he would be great. It turned out all he could do was copy code he would find in a book or online and shoehorn it into existing code. If it didn’t work he rarely was able to get it to work correctly.

      I was asked to look at a sorting routine he had done for a real time communication system. I found out he had it set up to guarantee it too the longest possible time to complete the sort. I told his and his manager that he simply had to move an inner loop to be the outer loop and one of them needed to be reversed. He spent two weeks trying to get it working his way and failed. His team leader implemented my way in 1/2 hour and it worked perfectly.

      However, in todays market I found that people are passing me over, because I don’t have a degree, when other candidates do have one. So I have been going to ITT to get one. I have the AS (4.0 GPA and Valedictorian) and am at the halfway point through the BS program (IT and Security for that one).

      I have an ulterior motive for getting the degree as well. I do intend to go into teaching as a sort of semi-retirement later. I already know how I can improve the coursework at ITT in programming and have given them feedback on it. My fellow students thought I would be a good teacher, because of how I was able to help them.

  • http://www.cus-productions.com 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.

  • Pingback: Technology is Moving Too Fast For College

  • http://www.reservationtrack.com SnowboardingProgrammer

    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.

  • Rhys

    I have to agree, i actually got into my programming job through an apprenticeship scheme. Not sure where you are but here in the UK the government is doing a lot to encourage companies to take on apprentices

  • Drew

    I only minored in “Computer Science & Engineering” with another in Theater and a degree in International Studies. I wouldn’t call what I do right now science, but I am definitely programming and it takes a creative mind. If I’d actually found a love for programming earlier, I doubt I would’ve needed a degree, but it is useful when applying for jerbs.

  • Gcoder

    I agree. I dropped out of high school, as the learning environment was more forceful than encouraging and engaging. I learn best when I enjoy something, if I’m pushed or forced, than I lose interest. That’s what happened in high school, so I left. I had started coding when I was 12. By the time I was 15, I got an internship $7/hr. But I didn’t do much, other than learn from my senior. And that 7/hr were more than worth it. I learned a lot.

    When I was 17 and had dropped high school, I got a decent job paying 52k. As a programmer, I can learn on my own and perhaps be even a better programmer than people with a degree. Why? Because I’m motivated and driven.

    College on the other hand would give me the low level and greater theory knowledge that I would otherwise not dedicate time to learn and understand.

    However, in the programming world, we still have old school programmers, who use tons of theory to make decisions and solutions. To which I will also lack. For instance, I had no idea what a recursion loop is until a senior programmer told me I was using a recursion algorithm in my program.

  • John

    In a degree you get the basic knowledge and you learn to work as a scientist. But to make that work you need passion. From my experience the quality of the software in the industry is very poor and most will fail in a basics university exam. Why? Because why thing we are the best and we thing we know all and we don’t thing as scientists.

  • B. Clay Shannon

    I agree a degree is not required; I’ve been programming professionally for 20 years, and all I had was a few classes in junior college after I was classified as a displaced worker when the gold mine where I was working as a blaster (“powder monkey”) shut down. Besides, what can anybody teach you that you can’t learn from a book/the Internet? And will you ever make up the four years of lost income and the tuition and other costs incurred? Unlikely. Yes, aptitude and code you’ve written should be the key, not a piece of paper that said you attended a college or university.

  • B. Clay Shannon

    As Frank Zappa said, (paraphrased) “If you want to meet girls, go to college; if you want to learn something, go to the library.”

  • biagiop1986

    I think it’s a matter of “focus”. Colleges and universities focus a lot on math, physics, electronics, A.I. courses and so on. Depending on the company you will work for, you could need a lot of the concepts learned in different classes, not only programming ones. Where I studied, programming skills were needed only to make projects in courses not directly related to programming. So, I learned Java in A.I. class, C++ in Computer Architecture class and so on. So, now I know how to program but I learned it while learning a lot of valuable different stuff.
    I think that a self-taught programmer could tend to focus only on programming, to read every single C++/Java/whatever book he/she can find and, eventually, have a lot of difficulties to understand simple linear algebra concepts like homogeneous matrices or eigen-vectors when approaching, say, a render engine.

    • Dave Bush

      And a guy who learned programming on his own couldn’t also pick up that other stuff when he needed it?

      • biagiop1986

        Of course he/she could, but the problem is that studying this way will never give “the big picture”. One could lack at all the time to *really* study a linear algebra book and just get a quick glimpse of unintelligible symbols. Studying advanced theoretical concepts is a slow process of reading, experimenting, digesting and eventually understanding things. Is not like looking at the syntax of a switch statement.
        Moreover, the bigger danger is that one could never know he/she lacks some knowledge: imagine one starting to write C code after reading K-R book. Can he/she do that? Of course, all the language is there. But, without some knowledge of memory hierarcy, bitwise operations (logics & Boole algebra) and, generally, some computer architecture he/she can only write poor code. Maybe decent code, but of course not optimum code.

        • Dave Bush

          In theory, you are right. In practice what I’ve found in my 26+ years of programming is exactly the opposite. I think we just have to agree to disagree.

Awards & Certs