Recently, at a family reunion-type event I was asked by a high school student how important it is to get a computer science degree in order to get a job as a programmer in lieu of actual programming experience. The kid has been working with Python and the Blender project as he's into making games and the like; it sounds like he has some decent programming chops. Now, as someone that has gone through a computer science degree my initial response to this question is to say, "You absolutely MUST get a computer science degree in order to get a job as a programmer!" However, as I thought about this I was unsure as to whether my initial reaction was due in part to my own suffering as a CS student or because I feel that this is actually the case. Now, for me, I can say that I rarely use anything that I learned in college, in terms of the extremely hard math, algorithms, etc, etc. but I did come away with a decent attitude and the willingness to work through tough problems.

I just don't know what to tell this kid; I feel like I should tell him to do the CS degree but I have hired so many programmers that majored in things like English, Philosophy, and other liberal arts-type degrees, even some that never went to college. In fact my best developer, falls into this latter category. He got started writing software for his church or something and then it took off into a passion. So, while I know this is one of those juicy potential down vote questions, I am just curious as to what everyone else thinks about this topic. Would you tell a high school kid about this? Perhaps if he/she already knows a good deal of programming and loves it he doesn't need a CS degree and could expand his horizons with a liberal arts degree. I know one of the creators of the Django web framework was a American Literature major and he is obviously a pretty gifted developer. Anyway, thanks for the consideration.

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
If this question can be reworded to fit the rules in the help center, please edit the question.

1

I'm always very impressed when someone with no formal education in a subject gets workplace experience in that subject.
–
MYouFeb 22 '11 at 17:23

3

@Steven - The answer is you should suggest people get a college degree in the field that they are interested in. Programmers without college degrees getting programming jobs are the exception not the rule. I can tell you places like Google, Microsoft will not even look at your resume without a degree in computer science. Depending if he wants to go work for a company like EA, it would be tough to prove your ability as a programmer without a degree, considering 1 in 100 people who apply to EA even gets hired.
–
RamhoundFeb 22 '11 at 17:28

5

@Ramhound: "I can tell you places like Google, Microsoft will not even look at your resume without a degree in computer science." - you can tell us that, but it isn't true.
–
Steven A. LoweFeb 22 '11 at 18:08

2

@Ramhound: Yes I agree that the big companies probably won't hire you but not everyone wants to work at a huge multinational company. These days, small shops are all the rage and can be a better place to start for new devs. Focusing on things like agile development and the like can be better than doing grunt SQL queries or something for a new dev. Pairing with an experienced developer might be a better education than reversing a linked list in CS 330 or something...
–
Steven Ellliott JrFeb 22 '11 at 19:19

@Steven Elliott Jr: Not all companies are willing to be educators as well, beyond what's needed for that particular job. Some companies will take co-op students, but even then they prefer the students have at least a full year of school behind them. And even then, there's a LOT of time that gets spent catching them up on things they haven't learnt yet. Teaching someone SQL in between meetings and lunch breaks, and then giving them a book and saying "have fun!" is not the best way to do it. Trust me.
–
FrustratedWithFormsDesignerFeb 22 '11 at 19:27

12 Answers
12

It depends... I have seen people who went without the degree and have picked up some very strange habits and techniques along the way. Self-taught anti-patterns, near-mystical views of how databases work, almost paranoid fear of the math behind proofs for algorithms and O-notations. Their learning curves for new tech sometimes seems steeper. And some self-taught folks get along just fine, and sometimes even better than the CS grads. The CS grads don't seem to have these problem (or at least not nearly as often, or as bad), but that doesn't necessarily mean for sure that they will be better developers. This is all anecdotal though...

Less anecdotally is that some employers (usually large financial institutions, gov't depts, etc...) really prefer to see the degree, unless you can show SO MUCH experience that the degree does not mean much, but to get to that level in a person's career takes a number of years of experience. Two people at the same age of just-graduated, the one with the CS degree seems more likely to get a job in the larger institutions. In smaller start-ups, it does not seem to matter as much. So I guess it comes down to job security in the early stages of his career. If he wants it, probably better to go with the CS degree.

Many employers won't even look at your resume to add you to the list of interviews if you don't have a degree. It kind of comes down to whether you want to work 40-50-60 hours a week with benefits at a corporate job with the degree, or 80-90-100 hours a week at a startup without a degree, or benefits, and the outside chance of a bonus if the startup succeeds, but more likely looking for a job in 18 months.
–
BBlakeFeb 23 '11 at 12:16

I did things backwards. I worked as a programmer for 6 years before I went back to university and did a second master's degree in computer science (my first CS qualification - my other two degrees were liberal arts).

The degree was a great experience, and I learnt quite a bit about operating systems, 3D graphics, etc. However, there wasn't anything on the course that I couldn't have picked up on my own just by reading a handful of books. The programming, databases, fundamentals and algorithms classes didn't teach me anything I didn't already know, other than the fact that academics shouldn't be allowed anywhere near commercial systems. There isn't an edict that says "liberal arts majors shalt not read Knuth".

Based on my experience, if the question is "do you need a CS degree to be a good programmer", the answer is an emphatic no.

Conversely, if the question is "do you need a CS degree to get a good programming job", the answer is it helps a lot. I found getting a first programming job without a relevant qualification to be very difficult. It didn't matter how many cool personal projects I had to show off. If I didn't have a) a degree or b) x years of commercial experience, people weren't interested.

I kind of did this too, I worked as a damn RPG programmer for a few years then got into .NET and decided to go back for the degree after a few years of work experience. It was definitely interesting to mix the two together. I have found that if programmers are doing the hiring the less a degree matters, if an HR drone is hiring then he wants to see the CS degree on there just to get past the initial screening.
–
Steven Ellliott JrFeb 22 '11 at 21:23

I look at getting a degree as a personal, social and professional achievement and not as a license to get a job. Technical schools are much better at that. If he has learned this much on his own, he'll take advantage of his coursework, exposure to other programmers and ideas. I can't imagine he'd want to study anything else with this much interest.

If he is in a position to go to school (finances), he should take advantage of it. He can always search for jobs and internships. When a great job offer comes up, he can then decide to forget about school. Most people have trouble holding off on going to school and then latter trying to go back. Then again, some people were better off blowing off some steam and maturing a bit before starting.

The degree, I think, is critical. Not for the programming part though, aside from the basic concepts that are universal. Schools are usually always behind the curve from a languages and technology standpoint anyway. No, the importance of the degree comes from the other courses that are part of the degree. For example, understanding mathematical concepts, especially statistics, is important. Having a basic accounting understanding is important. Having excellent business communication, both written and verbal, and verbal presentation skills are absolutely critical. Those are the parts of the degree that are vital to having a successful career.

Can you succeed as a programmer without the degree? Sure you can. But you'll go a lot farther if you build up the whole skill set that comes with a degree than you will by just knowing how to write some C# or Java code.

It will also probably be the first time in the person's life that they will learn that they won't get a passing grade and a trophy just for showing up.
–
DunkFeb 22 '11 at 18:00

1

I'd add to @BBLake that in a college/uni setting, you get to work with other people -- something you don't get when you are working alone, and not just in CS classes. A "works well with others" can be a tie breaker in a hiring decision, IMO.
–
KM.Feb 22 '11 at 18:13

2

@Dunk - Absolutely. I'm so sick of the happy, happy everybody wins mentality that kids are taught nowadays. I saw it in college far too much and it was a rude awakening for all those who felt they were owed just for participating.
–
BBlakeFeb 22 '11 at 18:56

@BBlake: I understand what you are saying, but I know plenty of people that majored in CS that were complete morons. They showed up and remembered enough to pass. They didn't really understand what they were doing for the sole fact that they really didn't love the topic. I would say like 70% of the people I went to school with did so because they felt they'd get a decent job after graduating. Those of us that were in it because they couldn't not be seemed to be better off at the end of it all. I see no reason why someone without the same degree couldn't be just as good if they were passionate.
–
Steven Ellliott JrFeb 22 '11 at 21:21

1

@Steven: I am shocked to hear you say that someone will learn to be just as good without the degree considering that it seems like you have one. I guess you didn't get the education you should have. Maybe for simple programming your statement has some merit. Howver, there is so much more to being a good software developer than programming. Most of those without degrees will never even know some topics exist that will help solve the problems they face let alone how to apply them, while those with the degrees are fully aware of them and can apply the topic....(continued)
–
DunkFeb 22 '11 at 22:19

As a philosophy major, I would certainly not consider having a CS degree necessary to be a good programmer. I took a few programming classes as electives, including design patterns and discrete structures. What I found in these classes was that I had already learned most of these concepts in my philosophy courses, and some of the core concepts were discussed in significantly greater detail in philosophy. I have very little patience for many of those students who complain about other programmers not knowing about "such and such" design pattern, when I saw them barely pass the few weeks they had to focus on boolean algebra and formal logic systems. CS puts a whole lot of emphasis on mathematics, when most of us deal with formal predicate logic FAR more on a day to day basis.

I am not trying to say that CS is worthless, only that I can see how someone from my particualar major could easily have a much stronger grasp on certain aspects of programming than your average CS major. Obviously, decent programmers somehow figure out predicate logic when they need it, whether by taking a couple electives or reading a book, much the same way someone like me would learn some design patterns as needed.

I'd tell a high school kid to go study what they enjoy and see where it leads them. A CS degree can be useful as a point on a resume but also in terms of having connections as many universities have a career services area that can be helpful. My first job out of university was one that I applied because I had seen it advertised on the school's career site that was just for grads and alumni.

I did a double major of Computer Science and Combinatorics & Optimization, so in a way I know some CS and another subject too. A university degree doesn't automatically put you at the front of the line but it can show you a few new lines out there.

In general, it's easier to get a degree earlier than later. This is especially true if he is interested in starting a family before age 30 or so. However, this is also a period in his life where he can take a few risks with little to lose, if he is so inclined.

If he's too immature and going to waste his education, he should work for a couple of years first. If he's very mature and has conflicting obligations (e.g., needs to work full-time to care for younger siblings after parents died, or is caring for aging parents), he's going to do well no matter what and can afford to take a few years to attend to those obligations first. If he doesn't have the finances, working a few years first won't destroy his future and will place him in college when he is more mature and better able to take advantage of his education (and the previous experience will probably land him better internships and research opportunities). But if he has the maturity, freedom, and financial resources with no superb opportunities clamoring for his attention, he should go for it.

Degrees are becoming more and more critical in CS. 15 years ago, there weren't that many people with CS degrees. Employers had to hire people with other degrees; there just weren't enough who studied CS to fill the demand. This is less and less true. CS is no longer a brand new shiny discipline. A degree is a big help in this field, and if he already loves coding this much, he will probably enjoy earning it. If he is too arrogant to enjoy it, he probably needs the degree just for the lesson in humility. He'll still have time to do his own programming on the side, even if he needs to work part-time to get through school.

Fortunately most of new-age-programming (especially with the advent of Java and such) has brought in the concept of glue components together instead of the old develop good code. Also, most of the software development projects do not stand alone, but are attached to some field - unless they are projects such as developing a new language, Unix kernel development, et.c., - hence depend more on prior experience in similar settings.

That said, I still believe that decent understanding of computing principles help improve the quality of code in the beginning: the approach can be more mathematical.

For e.g., someone with engineering background tries to find a construct in a language that would help, finds it, uses it. Others, with enough experience, understand that there are constructs that can be used in certain scenarios, and use them.
It is quite possible for a computing science graduate, over a period of working with lousy code base, to lose these skills, as is possible for others to pick these skills up by working on good code bases.

The CS degree (or CS classes) are important for the foundation they provide. I run into too many programmers who have never taken a Algorithms, Operating Systems or Complexity class who can write code but can't really solve the hard problems. Knowledge of these things and others you will learn while obtaining a CS degree will prove invaluable to a developer for the rest of their career. Of course the languages you will learn, libraries, tools, and the like will change a few years out of school. But how is that different from any career pursuit?

Is a CS degree a guarantee that you will be a good programmer or is it required to get a job? No and No. I've worked with software developers who started out in many different fields like Geology, Biology, Anthropology, etc.

We all know that Bill Gates and a few others dropped out of college; however, a lack of a degree will really limit his options in the future. He'll be able to rise to his peak which will be quick and exciting, but he will hit a peak with his career much sooner than someone who has a degree.

Obviously, I'm speaking in generalities, and if he founds the next Facebook I'd like to work for him. :)

The question that no one asks is why did Bill Gates and company drop out of college. Because they had a better opportunity. They WERE in school until that better opportunity came along. They didn't just randomly drop out. If any of these famous dropouts didn't find their opportunities until after college they would all have degrees.
–
PemdasFeb 22 '11 at 17:41

2

I know somebody who was an executive for a large company, and he always thought his lack of a degree hindered him. If you aren't Bill Gates or somebody else who can help found a company worth billions of dollars, the degree will almost always help.
–
David ThornleyFeb 22 '11 at 17:44

Michael Jordan got cut from his high school basketball, it didn't mean that he didn't bust his ass to get to the NBA. Similarly Bill Gates dropping out of college didn't mean he stopped writing code and rested on his laurels
–
Woot4MooFeb 22 '11 at 22:02

CS is one of the worst degree in terms "90% what you have learnt will be obsolete in 3 years".

If you want, put in four years at a college (or more at a graduate school). This will give you access to some jobs that require credentials, and it will give you a deeper understanding of the field, but if you don't enjoy school, you can (with some dedication) get similar experience on the job. In any case, book learning alone won't be enough. "Computer science education cannot make anybody an expert programmer any more than studying brushes and pigment can make somebody an expert painter" says Eric Raymond, author of The New Hacker's Dictionary. One of the best programmers I ever hired had only a High School degree; he's produced a lot of great software, has his own news group, and made enough in stock options to buy his own nightclub.

A good degree will teach you arrays, graphs, trees, algorithm design, recursion, binary logic, etc. What part of that will be obsolete in 3 years?
–
AntFeb 22 '11 at 17:46

1

The same can be said for any degree. So what is the point? I also question th 90% quote. Most of what I learned 20 years ago still has application today. But that might be because my school did not believe that learning a language counted as something worthy of being a class. In class you learned the concepts, you were expected to pick up the language while learning to apply those concepts.
–
DunkFeb 22 '11 at 17:56

@Ant: Some schools teach less theory and more language. I was fortunate to be at a school that taught concepts using language as a platform.
–
Michael KFeb 22 '11 at 17:57

"good degree" - we don't live in a perfect world. There are a lot of so-called "Java schools" which half of the class you will do some Swing forms. Don't get me wrong, 3 years and 90% is not some hard data.
–
lukasFeb 22 '11 at 17:59

2

"The same can be said for any degree" - this is not correct. For instance, history of ancient Greece, would it changed much in 10 years?
–
lukasFeb 22 '11 at 18:01

CS degrees are absolutely useless and so are most of the people who have them.

They are absolutely necessary to getting a job.

HR idiots eat it up. If you don't have a degree you're not even likely to get an interview with me.

Just don't go to college expecting you'll actually learn anything and you'll be fine. Take care of your own education. Use the opportunity to build up your network. Go out and get job experience by interning, either for pay or without. A lot of teachers in CS are actually coming in from the field to teach...become their friends. Kiss lots of ass.

Definitely intern; you'll learn more and you'll be a good 10 miles above your competition. You'd be surprised how many college graduates come to me without any kind of interning experience. I don't take them seriously. I often times get superseded by other parts of the interview committee...and I generally get proven right. They generally don't know jack and haven't the ambition of a 3 year old. So prove that you're interested by having real job experience in addition to your degree by the time you graduate.

I have found intern experience doesn't mean a thing. What matters most is decent grades AND they actually do some projects of their own. I should -1 for saying CS degree is absolutely useless but I suppose it all depends on the school you went to, so maybe in some cases that is true, but I seriously doubt that is true for the overwhelming majority of schools.
–
DunkFeb 22 '11 at 20:23

1

@Dunk: I disagree about intern experience being meaningless. Some companies will hire back interns once they graduate, if they like the intern and have a position for them. They do this because they already know the person and they intern has already learned the companies systems enough to work on them. I've seen this happen a number of times. The experience helps the intern get their foot in the door, and workplace experience on the resume before graduation.
–
FrustratedWithFormsDesignerFeb 22 '11 at 20:46

@Frustrated & @Dunk - from an employer's perspective, people who don't intern in college can't be taken seriously because they didn't take their career seriously. You simply can't learn what you need to learn to be effective in college. I've not seen one single CS degree that taught students what they really need. People who just do their classwork, even if they succeed, are those who just float through doing just enough. Good developers try harder and you'll see this in the form of internships and extra-curricular projects.
–
Crazy EddieFeb 22 '11 at 20:57

I've interviewed more than a few people, masters degree graduates even, and my experience is that having a CS degree doesn't mean anything. It just makes the HR people happy, and speaking again from experience...that's really important. I've had my choices turned down by HR because of lack of degree.
–
Crazy EddieFeb 22 '11 at 20:58

1

@Crazy Eddie I think the problem is that a lot of people equate computer science degrees with software engineering. This is a misconception that needs to be dispelled. Also -1 for the part about cs degree holders being useless, I guess Joshua Bloch has no idea what he is talking about.
–
Woot4MooFeb 22 '11 at 22:00