Do you really need a CS degree to be a developer?

I was reading this post on starting a new software project this morning and basically nodding along with everything the writer said (with an emphatic nod at point #1), until I hit this part at the bottom:


Do not hire people without [a] Computer Science education.

So, back to the question in the title, do you really need a CS degree to be a good developer? I obviously hope not, since my education and early career background is Mechanical Engineering.  I’m admittedly weak in terms of some low level concepts, but I’ve never felt that I wasn’t as effective as the CS grads I’ve worked with.  I’m certainly not Jeffrey Richter or Raymond Chen, but I do know how to build maintainable code.  I certainly have no business writing compilers or embedded processor code.  But in the world of business applications where most of us live, my engineering background is actually an advantage because engineering in practice is largely an exercise in modeling the real world in abstractions.  I’d even go farther to say that I’ve never observed a general trend of the Computer Science graduates I’ve worked with being any stronger than the rest of us.  <RANT>Actually, the irritating thing for me is working with code written by a CS major that obsesses over low level garbage collection and CLR mechanics while writing unmaintainable code with a stratospheric Cyclomatic Complexity number without any unit tests.</RANT>


Just off of the top of my head, many of the strongest, most effective developers I’ve worked with have had degrees in:



  • Music (surprisingly common, but it’s understandable)
  • Physics
  • Engineering of all types.  Engineering is dull with a capital D.  Lots of us wander into writing code if given half a chance.
  • English (!)
  • Theoretical Mathematics

Of course, the common trait of *all* the strong developers I’ve worked with is a passion and enthusiasm for software development.  I’m not discounting the CS major, and certainly not the knowledge behind it, but I’d worry a lot more about enthusiasm, passion, discipline, collaboration skills, and even raw intelligence first.


And don’t even get me started about certifications…

About Jeremy Miller

Jeremy is the Chief Software Architect at Dovetail Software, the coolest ISV in Austin. Jeremy began his IT career writing "Shadow IT" applications to automate his engineering documentation, then wandered into software development because it looked like more fun. Jeremy is the author of the open source StructureMap tool for Dependency Injection with .Net, StoryTeller for supercharged acceptance testing in .Net, and one of the principal developers behind FubuMVC. Jeremy's thoughts on all things software can be found at The Shade Tree Developer at http://codebetter.com/jeremymiller.
This entry was posted in Ranting. Bookmark the permalink. Follow any comments here with the RSS feed for this post.
  • Alex Le

    I’ve been a software developer for 6 years now and DON’T believe a CS degree is necessary. Sure, the knowledge is nice and the degree helps you get a foot in the door. But in the end, the skills required to code can easily be learned at home or online now. The only thing you really need is passion.

    I have a friend who’s contemplating switching careers to programming (with no degree). If you want to see my response, check out my post http://alexanderle.com/blog/2013/mail-how-become-software-developer.html

  • Shaun

    I’m looking for a career in programming, its definately something i want to do and i’m willing to work as much as need be for it, my maths isn’t as good as it could be, i’m studying computing in college right, my question is given my mathematical ability would it be wise to study computer science at university or would i better off with an alternative course?

  • http://www.codebetter.com/blogs/raymond.lewallen rlewallen

    I never went to college, I’m self taught, and it shows :P

  • http://codebetter.com/blogs/steve.hebert shebert

    Aside from atttitude, I’ve always felt the two best traits are:

    1) ability to bench code in your head
    2) ability to understand and perform pointer arithmetic in your head

    Going through with a CS/IT degree declares that a person is willing to put up with a ton of crap to get where they want to go. :)

  • Colin Kershaw

    English majors of the world unite!

  • jmiller

    That’s funny you should be a genetic engineer Richard.  I got burnt one time as a very junior tech lead by taking on a developer who’s background was a Phd in Biochemistry.  His programming experience, or at least he claimed, was writing C++ code to decode DNA.  I was excited because I thought I was gonna get a programming genius.  His code was purely a “Rube Goldberg” contraption.  He vies for the title of worst developer I’ve ever worked with, right up there with the guy we called the “Canary.”

     

    I think I should have realized that a guy writing VB6 apps was probably kicked out of genetics research in the first place.

  • http://rjdudley.com/blog/ Richard Dudley

    I worked at a place where the ERP coordinator was a chemist, the network manager was a chemical engineer, and myself (lead developer) was a genetic engineer.

    I think the need for CS degrees is there, and at times I’ve definately met challenges I think would have been easier with a stronger background in CS. That being said, the diversity of my background has positively been an asset to me when relating to business managers, etc.

    I think it’s more of a “where do you want to work” kind of thing. I’m absolutely no kernel or compiler programmer–they’re magic black boxes to me. I do a fine job in communications and websites, which I find to be really fun.

  • MA

    The author of the original article is an EE or ME as well. So I find it funny that the linked article adds “only hire cs people” to a post written by an EE or ME.

    heh.

  • http://dioramadesign.net dylan

    Response to Tinus – a CS degree definitely helps with learning to write maintainable code, in that they teach you how to structure object relationships correctly etc. Trial by fire works as well – try spending a few years maintaining and adding to a legacy application and you start understanding how to write maintainable code pretty quickly. As we all seem to be saying though, it comes down to the person.

    So, who needs some documentation written in iambic pentameter?

  • Tinus

    I think it depends a lot on the kind of person you are talking about. The most important personality treat is his or hers will for learning new things – and being able to do so. Another very important part is the person ability to write maintainable code – something which a lot of self taught person seems to have trouble with (I am not saying that every self taught person has this problem, I am talking about the persons I have meet).

    I am studying CS and so far I am not overly impressed with what you learn and the overall quality of it all. But that is a problem with the university as pvanooijen says.

  • http://dioramadesign.net dylan

    Agreed on this. I would hire a developer who had four years experience actually building applications in a business environment rather than a new CS graduate, although it would really depend on the person. Included in that experience should be at least one project that failed miserably. :)

    I’ve found with hiring new CS graduates that they know an exceptional amount of low level compiler information but have never even written a SQL select statement before. Guess which one matters more in most development shops. I’ve also worked with absolute geniuses who would write beautiful and elegant blocks of code that were completely useless, since they didn’t really reflect business requirements.

    Of course, I’m an English grad, so I’m biased. The way I see it, writing code is only a more structured version of writing critical essays – the planning and logic use almost exactly the same parts of my brain. Not to mention I can write great documentation and clear emails.

  • http://www.avocadosoftware.com Derick Bailey

    I fall into the music degree – I’ve got a 2 year Associates degree in music, from a private Junior college in Kansas.

    I’m a Senior / Lead / Architect in a shop of 20 developers, with 8+ years experience in professional development, and 15+ years of my own personal do-it-for-fun prior to that. And i’m only 27. :)

  • Ross Neilson

    I’m not convinced it makes much difference either way. I used to work with a guy who was entirely self-taught and he was a better developer than me (I have a degree in Computing here in the UK).

    The qualities he showed were motivation, perfectionism and an appetite for learning new technologies and techniques. He’s also a very bright fellow.

    I believe those traits are more important than having some sort of qualification, and would look at those if putting together a development team.

    Jeremy, would you care to share your opinion of certifications? I’ve always been a little suspect of them, and feel that they can get out of date too quickly to justify the cost.

  • http://codebetter.com/blogs/peter.van.ooijen/ pvanooijen

    I don’t have as CS degree. In the days I went to university there was no such thing as CS. Only as a direction within mathematics. Those guys were studying Algol68. Nothing could be farther from building real world applications.
    These days you can study CS. The main problem is that the courses are on yesterday’s material given by people from before yesterday. Imagine a new programmer being taught the merits of structured programming. This may sound exegerated buit it is the reality on (at least some) institutions. The world of CS is changing to fast for a stable curriculum to build up. The degree earned often does not fit the real world. The quality of education has to get better!

    On the other hand, sometimes I wish I had a better founded background. Working your way through by yourself is execiting but it’s hard to see the right path. Starting databases with dBase is almost crooked.

    IMHO a degree in CS may be a sign of a good base but it’s no guarantee at all you know how to build on that. A good sense of curiosity, harmony and rhytm in the code, knowing what is (im)-possible and clear language to express yourself are better indicators. Which more or less sum up your co-workers history.

  • http://bryanallott.net/homegrown/ bryanallott

    if CS degrees are so, erm, *controversial*- maybe there’s something amiss between the content of a CS degree and the expectations for a CS graduate in the market? or the issue is not really wether a CS degree is required but wether a CS graduate is something you need for your project- and all this varied reaction is half-and-half a knee-jerk to a perceivably dogmatic prescription? :)

  • jmiller

    I did forget to say that the single best developer I’ve ever worked with was a CS major. He read papers on C++ compilers for entertainment and writes static code analysis tools for fun.

    Jay,

    On the nose — “But in the end what really matters in attention to detail, and a desire to keep learning. ”

    The discipline and continuous learning thing is probably a necessity for being a good developer anyway. The University of Texas has a professional Software Engineering masters program I’d love to do, but that whole “see my family” thing keeps getting in the way.

  • jay

    Ok, I guess I will stand up for all of with CS degrees of some type. I confess, I have a BS in Public Administration but got my masters in computer science.

    Do you need one? No. Does it help? Yes. The barrier of entry into software engineering is lower than engineering fields. Anyone who picks up a teach yourself XX in 21 days can call themselves a programmer (that’s how I started, but when I this my profession I got formal training). I think your screening process for non cs majors needs to be higher. But in the end what really matters in attention to detail, and a desire to keep learning.

    I have been exposed to a lot of different concepts that I would have never have had in the professional setting that help me a great deal now. I understand pointers (yes they are still there and yes you need to know how they work), time / space complexity, basic and specific algorithm design techniques. Of course all of these things can be learned on your own, but I know I’m too lazy to have done most of it on my own.

    Anyway, my $.02.

  • http://substantiality.net Sam Smoot

    I barely finished High School, and didn’t see a day of college.

    I haven’t worked with anyone who had a CS degree that was an ace programmer, but still, such a degree obviously has advantages if you have a passion for the field I think.

    I’d really like to go back and take an algorithms class someday. Binary Searches, RedBlackTrees, how to write an efficient PriorityQueue, etc… all that’s pretty interesting stuff, and I definitely think there’s problems I could solve better knowing them really well.

    Of course you’re right about the dangers of premature optimization, but I’ve seen enough of that from people without CS degrees.

  • http://www.sitepoint.com/blogs/category/net/ Wyatt Barnett

    Bravo! Unless one is deep in the embedded/compiler world, a CS degree is probably more of a detriment than an advantage.

    Writing software is not about saving cycles. It is about translating user requirements into bug-free yet flexible code with the least resources and time involved.

  • Beep

    I will continue to demand only developers with a CS degree work on our waterfall projects.

    Seriously, if that is a requirement then cheaper high quality graduates can be hired or supplied offshore.

  • Jacob Eggleston

    I agree completely. I was an Art major but I’ve been developing software for almost 10 years. A CS degree might (BIG maybe) be better for the employer when comparing two candidates straight out of college, but I think that degree becomes exponentially irrelevant as one’s career progresses.

    If anything, I think companies/managers who have a policy of only hiring CS majors put themselves at a severe disadvantage. Some of the most passionate, and competent programmers I’ve seen have not had CS degrees.

  • http://bryanallott.net/homegrown/ bryanallott

    spot on and well put. some of the most amazing developers i have had the priviledge to work with never saw the first tut in a CS graduate course. most of them though, oddly enough, loved Music and English but also had some healthy addiciton to either a high-adernalie sport or some brusing martial art. one guy in particular, Mike- was a physics major and picked up Dexterity [Great Plains programming language] first day on the job- went on to build a stock inventory module that did not have one single flaw from the date of first release until last i was on that project [some 18months and no reported bug from the customer]- so much for a CS degree… :)

    Job posting for C# Developer:
    To be qualified for this position, individuals should be able to quote at least one Pullitzer Prize winner, have experience playing backup or lead for a local pub band and some pluses would include how to secure a bungee rope or pack a parachute. Some programming skill advantageous.