Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

Possible Duplicate:
Would you hire programmers without a 4-year college degree?

I was wondering about the background of software engineers/programmers.

The person who asked the question Can someone find a job as a programmer without an education? seems to assume that it is hard to get an SE.programmer job without an SE/CS degree.

In my experience (possibly narrow), it seems that most SE/programmers do not have specific computer education. That is, most have some kind of college degree, usually in a science (but often not), but it seems rare to find working people who have explicit CS in their academic education .

Sure, computer science is just not the same as programming or software engineering.

But is there any benefit to the undergrad degree in CS over real programming experience? (e.g. you surely never need to implement anything like Red-Black trees, but does knowing about them help?)

Or, on the other side, is there any detriment to not having a CS degree?

share|improve this question

marked as duplicate by FrustratedWithFormsDesigner, Anna Lear Apr 16 '11 at 1:11

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

6  
It is rare that you find a CS graduate that isn't 'shocked' by the 'real' world once entering a serious job. Almost answered as such, but seemed like more of a comment. –  Tim Post Apr 15 '11 at 17:04
    
Yes, I thought of that as a possible duplicate, and many of the answers are relevant here. But frankly I wanted to know more from the point of view of someone -hiring-. –  Mitch Apr 15 '11 at 19:48

8 Answers 8

up vote 5 down vote accepted

As someone who programs without having had any formal education in programming, I can say that the main advantage of a CS degree is breadth. Depth, such as deep understanding of the algorithms or intricacies of the language you work with every day, will come automatically with experience. But breadth is hard to achieve for someone self-taught.

As a CS graduate, you have seen (and hopefully not forgotten) a large variety of approaches and concepts, which you may apply to find a solution to a particular problem. You know certain concepts exist, and how they're called; in other words, your knowledge makes it possible to look stuff up and understand it when you need it. I, in contrast, didn't know about red-black trees until a few months ago, and there may have been problems in the past where this knowledge may have been useful.

Ideally, your CS degree also teaches you some fundamentals about programming, such as how to debug, how to document code, how to use version control, or how to actually set up a decently-sized project. Otherwise, you'll be mostly useless for the first weeks or maybe months, which means that you're not going to be useful for the duration of an internship.

share|improve this answer
    
Deep understanding of algorithms usually comes with a CS degree, in my experience. Self-taught people that I know typically don't care about the differences between sorting algorithms, they only want to know the proper function to call to make it work. Only when it works poorly do they start to wonder if there's a better way. Someone with a good foundation in theory usually doesn't get into that situation - in my experiences. –  FrustratedWithFormsDesigner Apr 15 '11 at 18:00
    
@FrustratedWithFormsDesigner: The deep understanding often doesn't even come with a CS degree (unless it's sorting, which is actually talked about in detail in most CS degrees), but a CS degree helps figure out the algorithm when it becomes necessary. For example, most CS programs I have gotten students from don't go into detail about image processing, or numerical optimization. –  Jonas Apr 15 '11 at 20:15
    
The CS program at my school had 0 coverage of: "how to debug, how to document code, how to use version control, or how to actually set up a decently-sized project. " –  P.Brian.Mackey Apr 16 '11 at 13:09
    
@P.Brian.Mackey: That's why my former boss told me once that he was done hiring CS graduates for internships: "They think they know everything about algorithms, but they don't know how to program". –  Jonas Apr 16 '11 at 13:24
    
As far as image processing my school offered an elective called "Computer Vision". This was my favorite course in the degree and taught me so much about the details of image processing. I recommend it to any programmer. –  P.Brian.Mackey Apr 16 '11 at 13:40

But is there any benefit to the undergrad degree in CS over real programming experience?

The relationship is not mutually exclusive. Both provide benefits.

Experience teaches real world tools, how to apply skills and work with real problems that may require more than pure programming theory to solve.

A computer science degree teaches one the basic theory that covers many problems that we face in our day to day activities as a programmer. The concepts are covered in an abstract fashion. This allows us to apply much of what we learned in school to a wide variety of problems. But, without experience its difficult to know when to apply a particular abstraction; it is also difficult to judge the business impact of our decisions.

Or, on the other side, is there any detriment to not having a CS degree?

Many employers ask for a CS or related degree in the job description. Not having one could limit the scope of available positions.

That being said, plenty of top developers do not have a CS or related degree. That in itself is proof that it is not necessary to be a good developer.

share|improve this answer
    
+1 for "The relationship is not mutually exclusive". No one has "real progamming experience" when they start their first job. Except maybe for CS grads who also did co-op/internships... but even then they had little or no experience when they started their first placement. –  FrustratedWithFormsDesigner Apr 15 '11 at 18:27

I would say that most larger companies are picky about hiring college graduates.

I would also say that most larger companies prefer someone with a degree that is CS, close to CS (like EE), or at least "science oriented" (e.g., physics, math).

So without a degree at all, or with a degree in something completely different (e.g., archeology), things are going to be tough in terms of getting an interview.

However, IMHO there is nothing in the CS core curriculum that cannot be studied by a smart auto didactic individual. The primary textbooks are well known and quite affordable. Interviews are often also based on the core CS topics. So not having a CS degree would make it trickier to get a job, but not impossible.

share|improve this answer
3  
If you are smart enough, nothing is hard. –  user1249 Apr 15 '11 at 16:55
2  
@Thorbjørn Ravn Andersen: If you're smart enough, the hard stuff will be really hard for other people. However, most smart people will find it somewhat hard to learn everything in the core CS curriculum, so having determination is usually more useful than just being smarter. –  David Thornley Apr 15 '11 at 17:58

I have a BS in CS. With very rare exceptions, every other professional software engineer/programmer/code monkey I've ever known also had a degree in CS.

It may depend on the field.

As to the benefits of having a CS degree -- a solid theoretical basis helps you to see the big picture and not get bogged down in implementation details.

share|improve this answer

It surely depends on what kind of software job you are looking at. There are many, many jobs creating CRUD apps and web sites for small and large businesses for which a C. Sci. degree is irrelevant. But despite what you say, there are also jobs where you will be implementing Red-Black trees. A person with five years of experience writing CRUD apps is not going to be a particularly awesome candidate for a job working on Google's indexing engine, Microsoft's CLR, or Oracles's SQL parser. On the other hand, the billing office at Chevron is probably not going to be impressed by you senior thesis on LLR parsers if you have no real world experience.

I should also say that there are rare individual like David Cutler or Steve Wozniak that can teach themselves anything, but let's face it, most of us are not as talented as Cutler or Wozniak.

share|improve this answer

You're asking for anecdotal evidence, so will give you mine.

Most CS graduates I have interviewed obtain a passing knowledge of algorithms and data structures, but have almost no experience actually shipping a product that meets real business needs. Which do you think is more important? Besides which, do you really think that everyone who graduates actually knows what they are expected to know? My experience trying to hire CS graduates (and, for that matter, post-grads) belies this notion.

A CS degree is simply a fast track for knowledge that can be obtained by other means (self study). The only tangible difference between someone who acquired this knowledge through academic study and one who acquired it through self study is a piece of paper. Of course, in many places that piece of paper is worth more than the actual knowledge, largely because determining competency is very difficult. Besides, even if the knowledge presented in a CS curriculum is necessary, it is nowhere near sufficient.

I value real world experience shipping products far more than a CS degree. It is possible to obtain this knowledge without a degree, just like it is possible to obtain knowledge from a CS curriculum without a degree.

share|improve this answer
    
Well, I'd say that's true for fresh grads. A grad who's been in the workforce a few years will have the theoretical knowledge from a CS background AND the real-world experience. No one will have experience shipping products in their first programming job. Not a CS grad, and not a self-taught person. –  FrustratedWithFormsDesigner Apr 15 '11 at 17:58
    
Actually, yes, self-taught people often will, typically because they learn "on the job" (open source, their own projects, etc). And a non-grad who's been in the workforce for a few years will have both as well. What's your point there? –  Rein Henrichs Apr 15 '11 at 19:05
    
Also, and more to the point, grads already have 4 years wherein they, as you have already admitted, obtained no real world experience, and often a minimal understanding of CS as well. During those 4 years, a non-grad could have 4 years of autodidactic CS studies AND 4 years of real world experience (there is no other kind for them). –  Rein Henrichs Apr 15 '11 at 19:09

I can offer up only personal experience.

I have no degree, although I got excellent school results. I had a heavy background in maths and was expected to do well at uni in maths, yet in my programming career I've used almost none of it, aside from a brief period when I was doing some 3D graphics work. I can honestly say that at no point in my 20 year career have I felt not having a degree impeded me in any way, or restricted my choice of employers. (Obviously there may be many times it's been a reason for my exclusion, but I've not been told.)

The only times it came up as an issue was in the first few years of career, but in no way did it seem to restrict roles available to me - having been called to interview for and been offered "degree essential" roles. The other time it has come up is the last year or two, which has been more noticeable in the recession - agencies using it as an "easy" filter for roles which are dramatically oversubscribed. When applying direct, the response rate hasn't noticeably differed with "degree only" and "not mentioned" roles.

In work, I've worked with many with and without degrees and never formed the opinion that those without had a harder time getting work once they had a little experience behind them. (I've periodically thought about going to uni to get an MSc but always decided there's no point now).

I've also hired for many tech roles, and although it can be a useful indicator the mere possession of a degree seems to prove little in terms of making a good programmer - I've seen people with a ton of theory and not an ounce of practical ability, and also the reverse. I do think a good CS degree is an indicator of potential, but no more than that and should be taken in the round along with everything else on their application.

Make of that what you will.

share|improve this answer

I think that there are really a few sub-questions here that are best addressed individually. Before I answer though, I will say that my degree is in CIS and is from a somewhat diploma-mill-ish school that didn't teach much in the way of CS theory, and so in terms of real CS I am mostly self taught. This is of course likely to bias my answer, so take the following with whatever amount of salt you think is appropriate.

The first sub-question I see is the question of whether theoretical CS knowledge is useful in the general practice of programming. The answer is yes, it is, although the extent to which it's useful depends a lot on what sort of programming you are doing. Even if you never need to implement a red black tree or hash map or write your own radix sort, knowing about them will still be useful. It doesn't really matter how many data structures and algorithms are implemented in your languages standard library if you don't know what data structures to look for, or when it's appropriate to use them.

The second question I see is the general question of whether a degree is useful for programming. Again, I would say the answer is yes- for two reasons. First, as others have pointed out, HR departments often use degree requirements as a first pass filter on applicants, and even when you can get hired without a degree you will generally have a hire burden of proof to show that you are competent than someone who doesn't have a degree. Second, regardless of what your degree is in, one of the most important skills you get from a bachelors degree at least is learning how to learn. Since programming requires constantly staying up to date with new technologies being able to learn quickly and effectively is a valuable skill, and having spent 4 years honing it will be useful.

The third question is, how important is it that a degree is in CS or a closely related field specifically. To that I would say it depends. It's certainly possible to learn CS theory independently, and if you spend enough time actively working to improve your software craft you're bound to pick up the most important bits along the way. The further away your degree is from a cs/math/engineering field the more foundational knowledge you will have to pick up along the way. Even if your degree is in some completely unrelated field you may find that it's easier to get past HR filters, however you are still likely to find that technical interviewers require a more substantial demonstration of your skills compared to someone with a CS or closely related degree.

Finally, the fourth part to your question as I read it is, what is the relative importance of theoretical to practical knowledge. I think that's a matter of comparing apples to steamrollers. Both are important in almost every job, but the relative importance will depend on the specifics of the job. Working in an R&D department is likely to be heavier on the CS side of things, writing CRUD web applications or internal billing apps is likely to be more heavily weighted toward the practical experience side of things, and fields like game development are going to require that you have a strong theoretical background and know how to write fast working code that ships yesterday.

share|improve this answer

Not the answer you're looking for? Browse other questions tagged or ask your own question.