Monday, December 29, 2008

Education vs. Experience

Joel Spolsky set off a minor flame war with a comment on his discussion group yesterday. It started off as a simple reply to Bob, who is thinking of leaving the software industry, but it then spilled over to reddit, where things can quickly get out of hand and off-topic.

For those of you who would like a summary, Joel takes the position that anyone who thinks they should leave the software industry, probably should. I tend to agree with this, but it's not what I want to write about in this post, partly because I don't want to be accused of being a Joel fanboy (even though the fact that I went to a Java school should immunize me from such an accusation), and partly because I'm much more interested in one of the side discussions that flared up.

The side discussion that I'm interested in is probably one you've heard before. It's about the merits of going to school and getting a CS degree vs. being a self-taught "hacker". The reason this discussion so fascinates me is that I've been on both sides of it, and I feel like I still understand both sides.

The argument against getting a CS degree always starts out reasonable enough. Here's a quote from the reddit comments:
In my view, a computer science degree doesn't predict whether a person is a good programmer or not.
This may be true, but the point is that it's a better indicator than not having a CS degree. Think of all the people you know without a CS degree. How many of them are great programmers? Maybe a few, but it's going to be a tiny proportion. Now how about those with CS degrees? Still only a few of them are probably great programmers, but the proportion is going to be much higher.

The same commenter goes on to say:
A lot of people with Computer Science degrees have a tremendously hard time realising for themselves that the degree they've got is probably worthless. There's some serious cognitive dissonance there.
Maybe that's because a CS degree isn't worthless? I understand that there may be a bias, but if most people who get a CS degree think that it was worth it, how can someone without a CS degree disagree? On what can they base their argument? Their own lack of a CS degree? If you haven't gotten a degree, then you can't know what it's worth.

The commenter then says:
In short, a degree leads a candidate to think they actually know something in much more depth than they actually do. In pretty much any area of computer science you can understand the subject to a much higher standard with a week of personal study than they achieved with three years at a university.
This is patently false. The little bit of knowledge you gain from personal study is much more likely to lead to second-order incompetence. The one thing that I learned better than any other when I went back to school to get a CS degree is how much more there was for me to learn. It didn't lead me to an inflated sense of my own knowledge, it led me to understand how truly ignorant I was.

A different reddit commenter had this to say:

I don't have a computer science degree, and I believe a degree generally shows the following:

  • You decided to recognize how the system works
  • You can stick with something for four years
  • You know how to look up an answer

That's pretty much it.

I agree with the first two points. I went to school with plenty of people who had years of experience and were only in a CS program in order to "get a piece of paper" corroborating their knowledge. They went back to school only to prove they could stick it out for four years, and they had recognized that they needed a degree to get a much deserved promotion. But I always felt that these people were cheating themselves by just showing up to get the degree. Many of them didn't apply themselves as hard as the could, and if they had given it a chance they may have realized, as I did, that there was a lot more to gain than just the "piece of paper".

I think the whole argument boils down to this: Every person with a CS degree used to be a person without a CS degree. If most of us agree that we're better off after having gotten a degree, then how can those without CS degrees be unconvinced? They haven't experienced the argument from both sides, so are by definition in an inferior position to argue.

I don't think that the argument should be that one programmer with a CS degree is better than another programmer without a degree. The real argument to make is that a programmer with a degree is better than he was before he got it. If you don't have a degree, you just don't know how much better you could be if you put in the time and the effort to earn one.

53 comments:

Anonymous said...

This may be true, but the point is that it's a better indicator than not having a CS degree. Think of all the people you know without a CS degree. How many of them are great programmers? Maybe a few, but it's going to be a tiny proportion. Now how about those with CS degrees?

In my experience, people without a CS degree are better at programming that people with CS degrees. Without exageration a proportion of 1 of 10 candidates that come from a university are better that the "hackers" that self teach.

Bill the Lizard said...

That may have been true 20 years ago, but it's just not what I'm seeing today. Are you comparing candidates without degrees, but with several years of experience to candidates fresh out of college?

The point is, I think a programmer who is good after being self-taught would be even better if they got a degree. Of course, this is only based on my own personal experience.

Red said...

I went to school with plenty of people who had years of experience and were only in a CS program in order to "get a piece of paper" corroborating their knowledge. They went back to school only to prove they could stick it out for four years, and they had recognized that they needed a degree to get a much deserved promotion. But I always felt that these people were cheating themselves by just showing up to get the degree. Many of them didn't apply themselves as hard as the could, and if they had given it a chance they may have realized, as I did, that there was a lot more to gain than just the "piece of paper".

I think this hits on what the real issue behind the differences are. I would guess many of the people saying folks without CS degrees are better programmers are saying so because they've met people who are very self-motivated and teach themselves. Not to say that a CS degree is worthless (I think mine taught me a lot of foundational knowledge that I still find useful in my career) but that without the passion and motivation behind it, you can skate through a CS degree and still not be a good programmer. Perhaps it's more likely a self-taught programmer is more likely to have that passion because they put forth the effort themselves to learn, where many CS students do it "just for the paper" as you mentioned. This is why when I'm involved in the interview process on the company end, I like to ask a lot of questions about personal projects and hobbies to try and indicate if that self-motivation and passion is there, regardless of a degree.

Anonymous said...

A degree is a piece of paper. A person with it is probably more skilled than one without, but not necessarily.

There is nothing stopping people today from obtaining the same experience(minus tutoring) that people who go to universities get. I have a degree, but continue to do "self-study" in mathematics and computer science. I only considered the degree a starting point, but not for further involvement in academia.

There's a lot of stigma against self-taught people these days. That's a shame really since they can potentially be better than or at least just as good as a person with a degree. Given that they too have trained and studied hard.

Anonymous said...

"This is patently false. The little bit of knowledge you gain from personal study is much more likely to lead to second-order incompetence."
The little bit of knowledge you gain from a CS degree leads to incompetence compared to my math PhD!

Bill the Lizard said...

Red,
You bring up some good points about self-motivation. As I said before, 20 years ago it was pretty common for some of the best programmers to be either educated in some other discipline, or completely self-taught. What I don't understand is, in this day and age, why someone who is motivated enough to teach themselves programming skills wouldn't be motivated enough to formalize that education by getting a college degree?

Bill the Lizard said...

Anonymous said:

There's a lot of stigma against self-taught people these days. That's a shame really since they can potentially be better than or at least just as good as a person with a degree. Given that they too have trained and studied hard.

I can't argue that the potential isn't there. The internet is a great equalizing force in the programming profession.

However, I can't understand why, in today's climate of outsourcing and globalization, someone would put themselves at a disadvantage by not getting a degree. How can a potential employer know if a given candidate's self-study gave them the education they need to compete? They can't during a resume screen, and that's why the trend is leaning so heavily against self-taught programmers.

This is hardly unique to the software industry. There are plenty of industries where you can't even get a return phone call without first getting a college education. Software is just catching up with the other engineering disciplines.

Bill the Lizard said...

Anonymous said:

"The little bit of knowledge you gain from a CS degree leads to incompetence compared to my math PhD!"

I'd hire a self-trained hacker over a math PhD to do my programming any day! :)

Brian Takita said...

Theres no doubt the people learn stuff by going to school. The question is the opportunity cost of the 4-5 years of education. Would that person learn more working on real projects and doing self-study?

Part of the problem is that work tends to be project-based, yet schools don't really have students do projects. They have students do contrived homework and test problems. Its not uncommon to have the first 2-3 years be primarily homework assignments and tests.

CS and engineering education would benefit from a primarily project-based activities. Its easy to tell who the slackers are (somehow its done in the work environment) and students get a more realistic education.

Bill the Lizard said...

Brian,
I agree that people learn programming better by working on real projects. The problem is, who is going to teach them in the workplace? I don't think there's any substitute for guided study.

Also, every CS course that I took in college included at least 4 projects, each of which took about 2-3 weeks to complete (along with plenty of contrived homework problems and tests mixed in). I know these aren't the same as a real-world project, but it's a step in the right direction. A lot of schools recognize this, and are moving towards more project-based assignments.

Anonymous said...

Think of all the people you know without a CS degree. How many of them are great programmers? Maybe a few, but it's going to be a tiny proportion. Now how about those with CS degrees? Still only a few of them are probably great programmers, but the proportion is going to be much higher.
Perhaps because the non-degreed aren't getting hired in the same numbers. When you get auto-rejected because you don't have a degree, you never get in the race to begin with.

Bill the Lizard said...

Anonymous said:
"When you get auto-rejected because you don't have a degree, you never get in the race to begin with."

Then get one. If you already have the skills, it's not that hard.

Mario Grgic said...

People who didn't go to university almost always miss the point of education.

Going to study CS won't automatically make you a better programmer any more than having a degree in mechanical engineering is going to make you a better car mechanic than a mechanic that's been fixing cars for 15 years.

But in both instances it gives you a wider more solid basis on which to build your experience. It puts you at advantage because you will not only know how to make use of something but truly understand why it works.

Education (esp. more theoretical hard sciences) changes the person at a fundamental level. It raises your awareness, it teaches you how to research, how to think, how to approach and bound hard problems with solid theory, how to form and test theories etc. It is also a great occasion to devote a lot of time on just bettering oneself. To do mental gymnastics and learn not just the narrow field of study but everything else one is interested in (and once you start working for money you really don't have the time to do that any more).

So, the true value of education is how much it changes you as a person, how much it raises your awareness and it also puts you in a better start position to build your experience and career.

I know and believe that if someone learns to program a Turing machine they will have no problems programming in C++ or Java. Just give them time to soak the libraries and syntax. But if you ask a person who didn't do CS degree and one that did to write a compiler/interpreter for some formally defined (as of yet unknown) language, which one do you think will be in a better position to start the project?

Bill the Lizard said...

Mario,
Well said. The true measure of an education is not whether it makes you better than your peers, but whether it makes you better than yourself.

Carlos Andrade said...

Agreed what you and Mario said, (background BS in CS, working on my Masters in CS). Any monkey can be taught to program, literally. Look at all the bad software people pay for (and I get to support). The key with a degree is that you are exposed to things like Algorithmic design, language design, HCI and other ideas that one may not get just trying to self teach. Trying to talk to some self taught hacker about Big O of an algorythm he chose was like trying to teach a dog card tricks.

For me the degree means knowing how to problem solve, how to learn new things and think.

nicolaslara said...

Very good post. I believe that the important thing is the interest you put in learning while getting your CS degree. Still, getting it is very important. there is a lot of knowledge that you might overlook if you don't have formal education. Sure, some people can teach themselves everything they need to know but most can't, and it is very likely that self thought programmers might overlook issues that you would take into account if you got a degree with the right motivation.
Anyway, If you are going to study all you need to know, why not go and get a degree while you're at it and graduate with honors?
Anyway, here's a list of the things I consider important to take into account when learning programming: http://nicolas-lara.blogspot.com/2008/12/doing-it-right.html

Regards =)

Bill the Lizard said...

Carlos,
Good points about algorithm design and Big-O notation. These are definitely concepts that are a little harder to self-teach.

Anonymous said...

How can there be a single answer for this? You have to talk about tendencies and probabilities here. Self-taught people are more limited in topics and techniques they are aware of - usually - inversely with length and breadth of experience. Formally trained people are unlikely to have done the deep dive on a topic - usually - mostly dependent on their school, it's focus, and the quality of their teachers. I work with people that have degrees and those that just like to program but have other formal training, and it's ONE of the things I take into account when assigning projects. When I write a job listing for a programmer, the degree or formal training is optional. I work in a manufacturing company, directly for the people that use my work, so my requirements are decidedly different than for shrinkwrap or other more formal software development situations. Given a formally trained person who knows nothing about the work in the plant, or a lateral move that wants to program, the lateral move would get lots of extra points because they are more likely to generate a good solution faster.

Bill the Lizard said...

Nicolas,
That's an excellent (and very thorough) article. I'm impressed by how much practical knowledge you've picked up before graduating. Good luck in your future career.

Anonymous said...

Oh please.. Big-o is not hard. That stuff is easily taught by yourself. I do have a degree, but it was I who taught myself about it.

Oh and teaching yourself does not mean you buy no books or don't study calculus,combinatorics,statistics,discreet mathematics... and algorithm design.

My CS degree taught me to study, that is all. The rest i did alone.

Bill the Lizard said...

Anonymous said:
"How can there be a single answer for this? You have to talk about tendencies and probabilities here."

I thought I did a fair job of speaking in generalities, and not absolutes, in my post.

"Given a formally trained person who knows nothing about the work in the plant, or a lateral move that wants to program, the lateral move would get lots of extra points because they are more likely to generate a good solution faster."

I would be hesitant to give a programming project to someone without any prior experience whether they were a new hire or a lateral move. It's a lot easier for you to teach your core business to a newbie programmer than it is to teach programming to, say, a plant manager.

Bill the Lizard said...

Anonymous said:
"Oh please.. Big-o is not hard. That stuff is easily taught by yourself. I do have a degree, but it was I who taught myself about it."

No one said it was hard. Just harder than programming. If you don't understand programming fundamentals, a concept like Big-O is practically meaningless. (Of course, there are other applications in math for Big-O, I'm just assuming a basis in programming here.)

"Oh and teaching yourself does not mean you buy no books or don't study calculus, combinatorics, statistics, discreet mathematics... and algorithm design."

Nobody says that it does. It's just far more likely that you've studied those things if you went to college. Most self-taught programmers teach themselves programming pragmatically, while eschewing the deeper topics. (No, that doesn't mean everyone.)

"My CS degree taught me to study, that is all. The rest i did alone."

I couldn't help but read your comments to myself in the voice of the Simpson's Comic Book Guy.

FlyingAvatar said...

These kinds of discussions are difficult since people get emotionally attached to their position having a degree or not having a degree.

As far as I see it, someone who is truly passionate about programming and has the aptitude for learning its intricacies is going to be better at it than someone who isn't. There are both degreed and non-degreed people who have this passion.

The quality of CS degree programs varies wildly; certainly good developers have come out of bad degree programs and bad developers have come out of good ones. I'm sure the ratio of which positively favors the better schools, but to hold the degree as an infallible criteria for evaluating the potential effectiveness of a developer, I feel is a mistake. (Though many, many companies make this mistake.)

I personally don't see too much difference between school learning and self-learning. Ultimately, all learning is self-learning. Nobody can force the information into your brain. Admittedly, a good degree program can create a good foundation for future learning by selecting an appropriate course of study. A good professor can make learning certain concepts less difficult. But neither are absolutely necessary to become a good developer.

Bill the Lizard said...

FlyingAvatar,
"...to hold the degree as an infallible criteria for evaluating the potential effectiveness of a developer, I feel is a mistake. (Though many, many companies make this mistake.)"

I wouldn't advocate that at all. More and more I'm seeing that a check for a degree is step #1 of the screening process. This is just setting the initial bar, it's not the entire process.

"I personally don't see too much difference between school learning and self-learning."

I've done both, and I can tell you, there is a difference.

"Admittedly, a good degree program can create a good foundation for future learning by selecting an appropriate course of study. A good professor can make learning certain concepts less difficult. But neither are absolutely necessary to become a good developer."

Certainly not necessary, but they don't hurt either. :)

Anonymous said...

The distinction between software engineer and computer scientist tends to be overlooked in these discussions. There are huge swaths of the industry - think virtually every large corporate IT department - where a CS degree isn't really what is required to do the job. An SE who can code well and produce maintainable work, understands various trade-offs, can negotiate and save time in the development process, etc., generates far greater value and savings than someone who mathematically proves that a different algorithm can shave a few milliseconds off a process.

There are positions where that kind of CS skill is appropriate but they are far more restricted than most employers want to believe. At many organizations the recent push toward CS grads tends be less about technical need than managers covering their butts.

I have been in software development for over 25 years and I see no difference between CS grads and the self-taught when it comes who ends up becoming great or even good programmers. The two common factors I see among superior developers are (1) an elegance or style that can't be taught; (2) the ability to drill in, research, and come up with the appropriate solution to a problem.

Much of the difference between CS and non-CS grads is often nothing more than learning styles. CS grads tend to start with a broader but more superficial understanding; the self-taught have drilled deeper into various silos of knowledge. In the end the best ones end up in the same places regardless of where they started and there particular learning mechanisms.

Anonymous said...

It's about the merits of going to school and getting a CS degree vs. being a self-taught "hacker".

I think this discussion is flawed in two aspects.

1) Regarding self-taught you should discriminate into two categories: there are those who just learned a language or two and then started hacking programs and there are others who study all relevant books and acquire the same knowledge or even more than you would acquire studying in a college.

2) You fail to mention the opportunity cost of going to college in order to get a degree.

IMHO the topic "Education vs. Experience" is a false dichotomy. It would be correct to distinguish "College educated vs. self-taught" and in that respect I guess that self-taught wins big time, especially when you factor in the above mentioned opportunity cost.

Bill the Lizard said...

Anonymous,
"Regarding self-taught you should discriminate into two categories: there are those who just learned a language or two and then started hacking programs and there are others who study all relevant books and acquire the same knowledge or even more than you would acquire studying in a college."

Hiring managers don't take the time distinguish between the two. A college degree is an explicit declaration that you have studied all the relevant books and acquired the knowledge.

"You fail to mention the opportunity cost of going to college in order to get a degree."

I talked about this in a reply to one of the other comments. I think opportunity cost is a bad argument. The guided study you get in a degree program is worth more than the random study that most self-taught "hackers" provide themselves (IMHO).

Bill the Lizard said...

Anonymous,
"The distinction between software engineer and computer scientist tends to be overlooked in these discussions."

You're right, I skated over that distinction. For the purpose of this discussion, I'm pretty much treating CS and SE degrees as the same. I'm aware that they're not. :)

Anonymous said...

"What I don't understand is, in this day and age, why someone who is motivated enough to teach themselves programming skills wouldn't be motivated enough to formalize that education by getting a college degree?"

Well, it's called lack of funds.

I'm a self taught programmer, been working as one professionally for about 10 years now. The sole reason why I didn't go to Uni is that I couldn't afford it and once I started working I didn't have the time.

Now I'm doing the distance learning dance, getting my BS through distance learning and you know what? There is almost nothing new I've picked up after 4 semesters.

Of course there always something you learn but nothing that has elevated my programming skills (who I'll smugly consider excellent at this point) besides higher level math.

Honestly, I'm thinking I should've gone for a Math degree instead but the Universities that are here don't give you that option for the distance stuff, only CS and MBA degrees =/

Also, for the 4 years I've been a team lead I've had fresh CS graduates utterly shitting their pants when they were assigned simple programming tasks. A few were so horrible coders that we had to let them go.

So yeah, degree or no it depends on the person and his interest in the field weither he'll be a mediocre, average or great a programmer.

Bill the Lizard said...

Anonymous,
"Well, it's called lack of funds."

Yeah, I was wondering how long it would take someone to bring that up. I worked 60 hours a week to get my BS (40 at a regular full-time job, and 20 tutoring part time), so forgive me if I feel it's somewhat of a bullshit argument. There's assistance for those that need it.

"Also, for the 4 years I've been a team lead I've had fresh CS graduates utterly shitting their pants when they were assigned simple programming tasks. A few were so horrible coders that we had to let them go."

You don't sound biased at all.

Anonymous said...

Nor you, good sir.

I genuinely was not being snippish. I was just bringing up my point of view, you need not go into knee-jerk defensive mode.

As for the "I worked 60 hour weekdays to go to Uni" is a valid point but not accessable to all.
Personally I did the 60 hour workweek shiz myself but moving out at 17 years of age, supporting a family and a child and as such going to school was just not an option (I would've killed to be able to go to school at that time).

But you must understand that it's just not a option for everyone even if you got through it OK.

As for the "horrible degree holding programmers" line I will fully contend that there are fresh grads that I've worked with that were extremely good at what they did. My point was that it isn't really something that you can take for granted.

On the other side of the coin I've been refused jobs just due to the fact that I did not hold a degree. As someone here said, experience doesn't matter if you won't even be considered because of your lack of a BS.

Cheers and happy new years dude.

Bill the Lizard said...

Anonymous,
I'm not trying to be defensive. As I said, I've been on both sides of this debate. Incidentally, I started a family at 20, so my situation wasn't much different from your own. I programmed professionally for about 8 years before I realized I wasn't getting ahead without a degree. I was one of those guys who thought he knew everything, and just wanted to breeze through and get that "piece of paper." Luckily for me, I woke up very early during my first semester and realized that the professors at my little community college actually knew a lot more than me. This was absolutely necessary to the learning process.

I fully take your point that having a degree isn't proof that you're a good programmer. But it is more evidence than not having a degree. I guess I no longer understand why people seem surprised that they have fewer opportunities when they lack formal education. To me, that just seems like the natural order of things. Whether that's entirely fair or not is another matter.

Anonymous said...

I remember having to write a UNIX kernel for my OS class in college
-- 10 years later, still the only time I ever had to code for 24 hours straight to hit a deadline

-- I thought I was pretty slick when my kernel worked, and compiled to a 30% smaller binary than the next most compact (including the TAs reference implementation)

On the other hand, the TA was also an undergrad, but he had been hacking since he was 8, and so decided to major in Sanskrit instead...

Anonymous said...

I just wrote about my OS class, but another great example -- there was another guy who is a little older than me. He had done a BS/MS in something like Linguistics as his undergrad --very smart guy, and he's now a very well respected and successful programmer -- he was always going to succeed, eventually.

However, because he didn't have the CS degree, he had to slog through multiple shitty support / maintenance programming jobs to get where he is.

In comparison, my first job was as a programmer working on the newest VoIP product of a company that makes OEM software for the major telcos -- 4 years smoking weed and banging undergrad chicks beats the fuck out of 4 years as level 1 tech support any day of the week.

Bill the Lizard said...

It certainly sounds better, but I wouldn't know. I've never worked support. ;p

Dustin said...

This article is supposed to be about the merits of being a self-taught "hacker" versus getting a CS degree, as if they're mutually exclusive. The key word is versus. Nobody can really sanely argue that deciding to get a CS degree is a bad idea. And nobody can argue that gaining experience and knowledge through teaching oneself is bad either.

The only thing I can see that you're actually saying is that it's perfectly reasonable, and in fact the preferred course of action, to skip over job applicants because they don't have a degree, in the name of hiring efficiency. Your "step #1."

That may be routine in large, hugely inefficient corporations, but I don't think it's really ideal. Ideally I'd think the best person for a job would be the most qualified, and that your hiring practices would strive to find that person regardless of degree.

Bill the Lizard said...

Dustin,
First of all, "versus" is not the key word of the article. It may just be a bad title.

Second, skipping over applicants that don't have a degree isn't my step #1. I'm just pointing out that it's happening more and more often, and people should expect it.

You seem to contradict yourself on whether the practice of skipping over applicants is efficient or not. Do you think it would be more efficient to interview every applicant to try and discern whether or not they have any programming skills? Maybe large companies have it right. Maybe a larger proportion of degree-holding applicants are good programmers than those without degrees. If that's the case, then it's more efficient to cut down the stack of resumes and only interview the people who are more likely to have skills.

It would be great to live in a perfect world where the very best applicant got the job every time. We don't live in that world. Hiring managers don't have enough time in the day to properly screen every applicant, so they have to set the bar somewhere. Many of them have decided that a BS is where that line belongs. Twenty years ago they would have probably been wrong. Today, I'm not so sure. Maybe my bias has simply swung the other way since I earned a degree, but I think it's just as likely that the number of good programmers who don't have an education really is shrinking. Times change, and people have to keep up.

Anonymous said...

Interesting discussion and I somewhat have the feeling I am somewhere stuck in the between the different parties.

I started out as a self-tought "hacker" way before college. Did math that was beyond of what my peers knew just because I needed it and found it fun. Then there was college. Courses were bad and many very boring. I dropped out of college and work in the industry since then. It surely is no understatement that people consider me an expert in my field. Many years of experience.

During the years I've worked with people that have a CS degree and people without. Frankly speaking I just haven't found a correlation in any way between degree/no degree and good/bad programmer. It's rather that some people are gifted. You realize this when you see the glance in their eyes when coming up with a good software architecture. Other people have learned their job but are not passionate about it. As with many thing "great" usually correlates with "passion". Be that programming, art or football.

Unfortunately or not - you can skate through a CS degree without that passion. Learning and hard work can get you through. This is probably one of the reasons why I know many people having a degree that are terrible terrible programmers. And they don't even care. This doesn't make the density of terrible programmers any higher with people that own a degree though. It's just perceived differently because you would expect all of them to have decent programming skills.

So what about a CS degree?

It does give a broad foundation of knowledge. If you have the money and time - by all means do it! But education is not like education. Pick your college wisely! But even more important - be sure to know what you sign up for. Is it where you passion is?

A degree will make it easier to get through the first line of HR. I guess that's how the system works. That said: I never had to apply for a job in life yet. People knew me and tried to get me on board the second I was indicating I am open for a change. But when I am hiring myself I watch out for the sparkle of passion. People without experience are useless. Let's hope education (self or collage) and experience comes in one box.

So I have a few years of college education - but no college degree. I've even finished a non-college degree next to work just to have at least a recognized degree at all. But still I am finding myself going back and forth on the idea of finishing my college degree. Why? For one because it's unfinished. And also because it feels limiting not to have one. The only questions remains whether that's worth the years of effort in my situation.

Bill the Lizard said...

Anonymous,
You bring up an excellent point. I've said before that there are certainly excellent programmers who don't have college degrees. I don't often hear the great ones complaining that they can't find a job. They're known as really good programmers, so they network and get job offers without the normal resume screen.

Maybe the only real point of contention is at the lower end of the programming spectrum. Great programmers will always have job offers whether they have a degree or not. Maybe it's only unproven programmers (either just entering the job market, or so mediocre that they can't get a glowing reference) who need to have a degree on their resume in order to prove some minimum level of skill?

Lucas said...

I believe you have two primary points: First, your university, major, and grade point average do not perfectly predict programming ability; but, that does not mean that their predictive value is zero. Second, the primary value of a university degree to someone looking for programming jobs might be signalling, rather than the learning of a vocation.

I strongly agree with the first point; many commenters on Reddit and elsewhere commit this fallacy. I am very sympathetic to the second point, perhaps since I am a self-taught programmer with a mathematics degree, but I am more skeptical.

Gabriel C. said...

Very interesting discussion.
I agree that a degree is not a predictor of good skills, to be a great programmer you need passion.
I was programming long before starting my CS degree, and as in my country, college is (supposedly) """free""", entering the university was a no-brainier.
I can't say it made me a "better" programmer, but it forced me to learn a series of topics that after 10 years I still find useful:
logic, algorithms, concurrency, how OSes work, computability, normalization and how DBs work, development process, software engineering practices, CPU architectures, discrete mathematics, etc ...
(although I still don't find multidimensional differential equations useful for something different than twisting your mind :) )
My point: if you aren't good at programming a degree won't make you better, if you have passion, a degree will be difficult, disheartening, and boring but it would provide an excellent foundation for your prowess.

Ben said...

Just as another datapoint for you,

I'm a self-taught programmer who has been very disciplined in my studies. I have competed favorably with coworkers who have degrees in my job...

That said, I saved up a good deal of cash and I am going to go get a Computer Science degree, most likely to the masters level. There are things I don't know, and I know I don't know them, that are deeper and more difficult to learn on my own than what I have learned thus far.

Maybe that just means I'm not smart enough to be self-taught, but I'd like to think it means I'm both motivated, and humble enough to seek help. A lost man gets where he's going faster when he asks for directions.

If I wanted to stay in web programming this probably wouldn't be necessary. My point is, I want to be able to know and offer more than other people. I want to be competitive. I want the paper, but I want the knowledge too. I'm just starting the education part, but I suspect that if you are eager, going back to school and looking back at experience through education might be a cost-effective and time-efficient way to do it. The paper is nice too.

Bill the Lizard said...

Lucas,
You're right on the first point and close on the second. I don't think that signalling should be the primary reason you get a degree (thanks for the link, by the way), educating yourself should be.

I'm not absolutely certain that people with math or EE degrees have it as bad as those with no degrees at all. Many employers (not all, I know) will accept these almost as readily as a CS or SE degree when screening for developers.

Bill the Lizard said...

Gabriel,
Are you sure you're not a better programmer? :)

I agree that someone who isn't motivated probably won't be a much better programmer after finishing a degree. My point is that someone who is motivated will be better. Even the very best self-taught programmers (and the ones who went to college, for that matter) can still stand to learn something new. Those who learn a little bit on their own, then decide that college is a waste of time are just deluding themselves.

Bill the Lizard said...

Ben,
"Maybe that just means I'm not smart enough to be self-taught, but I'd like to think it means I'm both motivated, and humble enough to seek help. A lost man gets where he's going faster when he asks for directions."

Well said. If you're not making good progress through self-study anymore, then a few years of guided study might be just the thing you need. Remember that our field is always progressing. Sometimes it seems like it's going too fast to keep up with. College provides a good foundation in the fundamentals needed to do that.

Good luck.

Tim said...

I don't have a CS degree. I began the process but circumstances just made it impossible to finish.

That didn't stop me from becoming a decent programmer. I continued with self study while utilizing very helpful peer review while working on free/open source software.

School for me just didn't work, for many reasons. One of the biggest was financial .. my family made a little too much money to qualify for financial aid, but not enough money to pay for school. I did not want the pressure of student loans, which would be huge to attend a quality university.

I'm glad that you had a good experience while getting your degree, many do not, many (in fact) find the quality of teaching mediocre at best.

The point being (yes, I have one), you don't need a CS degree to become a great programmer ... you need one to help advance your salary while doing what you love, but even this isn't always the case anymore.

I still think about finishing .. because I would really like to teach and need the credential to do so. But, this is my only motivation to finish.

Bill the Lizard said...

Tim,
You're right, you don't need a CS (or any) degree to be a great programmer. It was never my point that you do. It is my sincere belief that it will make you better, though. If you view it as more than a piece of paper that you need to get ahead. If you view it as a more solid foundation than you can provide for yourself.

I was in much the same situation that you were (are?) in. I had to scratch and scrape for years before I could get myself through a full four year CS program. I found it to be well worth my time and effort, even though I was already a decent programmer before I even started.

I wish you the best of luck. I hope you do finish your degree and teach someday. I don't think it's any coincidence that the very best teachers are those that have some experience to back up their education.

Anonymous said...

I have an associates in CS, and dropped out of college one semester before finishing my degree in Computer Engineering because I came to the realization that virtually everything useful I was learning wasn't coming from my professors -- it was coming from things I was reading and doing on my own.

I have been developing software professionally for 20 years. Virtually every skill, every technique, every language I use on a daily basis was learned outside of a classroom. Those classroom skills I do use are invariably from other disciplines -- mostly math and physics, but also literature, history, philosophy, etc to a lesser extent.

I've worked with a lot of different people over the years. The best programmers I've worked with have almost invariably studied something besides computer science at college -- math, an engineering or physical science discipline, or even business and history. Those that did study CompSci, like myself, got disgusted and dropped out. My experience has shown me that CompSci grads are, at best, mediocre programmers when it comes to producing workable, maintainable code in the real world.

I'm a CTO now and when I'm hiring people, a degree is the LAST thing I look for. Show me experience.

Bill the Lizard said...

Anon,
What would you tell someone who just graduated high school in 2009 who is interested in a career in programming? Are you suggesting that they shouldn't go to college? I just don't think that's reasonable any more.

Of course your 20 years of professional software development experience is going to be more valuable than a newly-minted bachelor's degree. That's not even an interesting comparison.

The real question that young people today need to be asking is whether 4 years of work experience is worth more to them than the bachelor's degree they can get in the same 4 years. In terms of how much they'll actually learn, I think it's a closer contest than a lot of people (on both sides of the argument) are willing to admit. In terms of how good it looks on a resume to a potential employer, I think there's a bigger difference.

Another question to consider is what the degree will be worth in 20 years. Would you rather hire someone with 20 years of experience, or someone with 16 years of experience and a bachelor's degree? It probably doesn't matter much in terms of working knowledge, but most employers will go with the degree, since the difference in experience is minimal.

Anonymous said...

An old adage says, “Experience is the best teacher.” Numerous other adages, however, say, “Learning from others’ experience is best of all.” In my opinion, this is what education is, a collection of the experiences, successes, and mistakes of the teacher’s past. It gives students exposure to knowledge, concepts, and people that they would never have known otherwise.
Am I rejecting the value of real-world experience? Absolutely not; I consider experience to be a vast and largely imperative part of having a well considered education.
In conclusion, school is a very important piece to preparation for adulthood; however, if not paired with real life experiences used to educate, it is useless.

Bill the Lizard said...

Anonymous,
Well said. I couldn't agree more. Learning from the mistakes of others is a valuable skill that's hard to learn itself. :)

James said...

I think that in the area of computer programming self-thought people can trump the skills of college thought students because the industry changes so fast. For example, the IPOD and Iphone come out, and books about how to write "apps" for them hit the bookstore shelves the same day. Boom, I drop down my 40 to 80 bucks, take a good book home to my bedroom and in a week or two I am submitting apps to ITunes, and making money, either for myself or my company. Now, what does a university have to do? I can imagine a conversation like this ensues: "Hey Bill these Iphones are great are they?" "Yeah." "If we could teach are student to program for the Iphone they'd really have a marketable skill." "I agree." "Well, is there a text book for it?" "Not really, there are some good books at Barns and Noble, and some great web sites but no text book that I know of." "Well, could you take on coming up to speed on this kind of programming and develop a class." "No, I'm teaching 5 sections of JAVA, and I have tons of projects to grade. Besides, what are we going to do, buy every kid and IPOD touch?" " they'd love that." "Yeah, most of them have them already but if we were going to teach a class then we'd have to make sure that EVERYONE had one." "True" "Well, maybe in 3 years." "Maybe, but apple will probably be out with some other hot new thing by then, and we'd have to buy each student one of those." " You're right. We'll just keep chunging along with JAVA and C++" "The old standards. :-)"

Bill the Lizard said...

James,
You seem to think that self-taught and college-educated are mutually exclusive terms. They're not. College-educated programmers are just as able (and willing) to pick up a book and learn on their own as anyone else.

Also, colleges and universities aren't restricted from using books that you can get at Barnes & Noble. The college I went to started using "Head First Design Patterns" almost instantly after it came out.

This is why you shouldn't criticize something until you've tried it. You literally don't know what you're talking about.