views:

3841

answers:

30

A relatively large number of people in the software industry do not have college degrees compared to other industries. In my experience, many of the best programmers/software engineers are those who learned outside of college. However, many employers stress a CS degree or equivalent and some require it.

In your experience, what do software engineers with a college degree have that is generally missing from their degree-less colleagues with equivalent experience, and how much does that set them apart in terms of job performance?

[EDIT] I know that college exposes you to a wider range of things than a single job might and that a degree might help you get a job. What I am looking for is what things engineers with degrees tend to have that is useful on the job that others don't. In other words, as a professional software engineer that is in charge of hiring, why should I care if someone has a related degree? What are they likely to bring to the table that someone without a degree is less likely to?

Note: While searching the site I found a number of related questions including this one but none of them provided the information I am looking for.

+5  A: 

The degree gives a wide and shallow view of things, the real world gives deep and narrow.

Also there is a whole host of things that a come with a degree that are valuable, but most of those have nothing to do with CS or even a CS degree.

The same goes for most other types of degrees as well.

BCS
The real word gives deep? I thought it was copy paste.
fastcodejava
+4  A: 

A college degree will give you something to put on your CV (resume) that will help get it past the HR department into the hands of someone technical.

David Arno
+4  A: 

Have a listen to episode three of the SO podcasts. Jeff and Joel discuss the value of computer science degrees.

flesh
I looked at the summary for the podcast and didn't see anything that dealt with this. Can you summarize the points that were made so I (and others) don't have to listen to an hour long podcast?
Robert Gamble
Dude, that's lazy. Check the transcript wiki.
Chris Farmer
@Chris, I didn't see the link to the transcript the first time. I still don't see where this was really discussed.
Robert Gamble
+4  A: 

In my experience [only!] - it has done next to nothing. However, as @David said, is will get you a step beyond the HR drones.

I've worked with folks with 0 college - even highschool dropouts, that rocked.

IM[notso]HO - college may or may not be a worthwhile endeavor: certainly the piece of paper is nice, but for CS ... experience is what counts.

warren
+21  A: 

What my CS degree added to my professional experience/competency was a good bird's eye view of the field as a whole. I learned about everything from the lowest-level silicon (in circuit/logic courses) to the operating system and high-level algorithms.

Most days I don't directly use what I learned, but when I'm facing a thorny performance problem or am trying to architect a large system, it helps to know about how virtual memory systems work, or how the operating system manages threads. Note that these are all things I could have learned elsewhere, but my degree made sure I got at least a dab of each of them.

Overall I would say that a good CS degree will make you a more rounded programmer and give you a lot more perspective on certain problems, which you might not otherwise get from day-to-day experience. To relate this back to your question about a hiring manager, I would (as a manager) like to know that an applicant had at least a working knowledge of all those things, in addition to knowing how to implement a linked list in java. Programming requires a lot more than just knowing how to write code: you have to know how your code will fit into the system as a whole.

Charlie
+23  A: 

I was a non-CS major in college, but for me, a B.A. or B.S. of any kind indicates that someone has had exposure to the tools required to research and analyze problems, and to synthesize new knowledge, and, perhaps more importantly, to be able to articulate the details of their solutions. If they focused on something more math or engineering related, it also suggests the ability to cope with problems that require particular rigor.

A CS degree at a reputable college indicates that someone has exposure to a suitably wide range of algorithms and data structures to know what the limitations of a particular design decision are, at least in big picture terms. Certainly someone who fell into software development can develop that knowledge, and certainly completion of the degree doesn't prove competence, but it's a start.

I was a geek in elementary school all the way up to high school, and could reasonably adequately hack out code, but until maybe 5 or 10 years ago my eyes would glaze over anytime things requiring a certain degree of understanding of CS or math principles beyond what I learned through hacking came up. Thankfully, I had enough of an understanding of the research process to know where to start digging when an unfamiliar problem space comes up (Hint: the answer isn't always Google).

If I were a CS major, though, many of those categories of problems probably wouldn't have caused me to so much as blink, and I could probably be working on much more complicated problems already. I'm just starting to make sense of graph problems 12 years into my career, but the applicability is very, very broad, and I know they at least come up during a 4-year CS program, even if not necessarily deeply examined.

A degree is useless without intellectual curiosity, but a good foundation for someone who is naturally inclined to keep learning. A hacker may only explore problems they've personally faced, and may be completely unaware that, say, there's a complete theoretical foundation that deals with a problem space they suddenly encounter, and not know where to look. CS graduates should have at least some idea of potential places to look, and other college graduates should at least be able to make sense of research if sent in the right direction.

JasonTrue
+11  A: 

It's like poker. You can play poker really good from instincts, but when you know the math behind it you can make better decisions.

College makes you dig deep into things that you NEED to understand, but don't know it yet.

You can be a great programmer, but until you learn that "stuff" that you wont learn yourself, something will be missing (well, most of the people wont.. who got up in the morning and said "I'm going to take the next 2 weeks and build a compiler!")

amikazmi
Me, actually it's more like that last (and next) several years off and on. I'm still working on the parser *generator* (4 revisions and counting) if that gives you any hint about my interests :oD
BCS
Yeah, BCS is right. Many hobbyist programmers are interested in compiler (and OS) design, probably since we interact with them so much (and it's a great way to show off your skills or challenge yourself).
Wallacoloo
+1  A: 

I did not go to University, but would consider only a minority of other business application programmers my supperiors ... university and non-university. (arrogance not intended)

I know I can solve any problem recieved, and although I couldn't exactly write a database engine with my current skillset; I'm sure I could do it, given the time.

However, I'm sure I would be an even better programmer if I had spent years in university concentrating on programming full time, surrounded with other smart people.

All things being equal, I would reason that university has to be better.

Also I just heard a podcast with Joel talking about this exact thing. I think it's eposode #29

John MacIntyre
I don't think university will make you a better programmer necessarily. The best programmer I know never went to college at all. He has the passion and the things he can do are amazing. He tried to go to university but failed out.
Cervo
At the time time in college I didn't spend a lot of time programming. Most of my time was in general requirements or math classes (especially math classes). There were a few classes with some programming projects but mostly no...
Cervo
@Cervo, then I would say your CS program isn't representative of most of the good programs out there. We start programming from semester 1 and have almost 7-8 classes that required weekly programming assignments in languages ranging from python, c, java, lisp, etc.
Simucal
@Cervo, also your argument about the skilled programmer who never went to college doesn't make sense. You have no evidence to show if he HAD gone to college if he would be an even better programmer than he is today. If I had to guess, I would say he probably would be.
Simucal
@Cervo the point is that taking a degree program will make a person better than HE/SHE would have been if they didn't take it. NOT that it will make them a better programmer than someone else.
TM
+55  A: 
Scott Wisniewski
A "Software Engineer" is NOT a hacker. At least not in Canada where "Software Engineer" is a valid branch of Engineering. Please edit your post to use another term. Cheers, -R
Huntrods
Really well put, and it echoes my experiences in hiring. Degree is good, someone who "groks it" is better, both is great. Have employed non-hackers with CS masters, and was horrible mess.
seanb
The only thing bad with "hacker" is that too many use that word instead of "cracker".
some
Yeah, I think I'd agree with the previous comment - the term "Hacker" has a bad rap because of the media and because of scores of idiots out there that want to use their "knowledge" for malicious purposes designating themselves by the same term. I'd agree with the sentiment of this post though.
BenAlabaster
Couldn't agree more with the post. A hacker that has been schooled in certain thoughts, processes, and methodologies is often times much better adapted and proficient. S.Engineer's not 'hackers'? to hack: putting stuff together/taking it apart - why, that's the core definition of an engineer!
MunkiPhD
Very well put. I like your point about good researchers being different from good Software Engineers. Also, I couldn't agree more about CS degrees educating you about the answered questions.
fluffels
I have to disagree with your basic premise that a degree necessarily offers such a broad experience base. You presuppose that all CS degrees are equal- they're not. All things being equal, a hacker with a CS degree *should* be a good thing, but often that's not the case. Myself, I'll take a competent, passionate, experienced hacker with no degree over a green CS-degreed newbie any day. Experience and work ethic trump the theory learned in most CS-degrees. I do agree that if you combine the degree with the experience, you're golden.
Dave Swersky
@Dave...I agree with you that work ethic is extremely important. At the end of the day, you need to get things done.However, my point was not that CS degrees provide experience. It was that they provide knowledge. Getting all that knowledge through direct experience can be difficult. Not many people can say that they have, commercially, written an OS, a Compiler, a RDBMS, a 3D graphics engine, designed a CPU architecture, invented encryption algorithms, and independently discovered red-black trees. Learning those things is good.
Scott Wisniewski
But I will agree with you that not all CS degrees are the same.A top tier hacker educated at MIT or Berkeley can probably code circles around me. However, I know that I'm a much better hacker with a CS degree than I was without one.
Scott Wisniewski
A CS degree basically teaches a hacker programming history so they don't have to learn what not to do the hard way.
Loren Pechtel
You draw a false dichotomy between degreed hackers having historical/theoretical knowledge that non-degreed hackers either lack or must re-invent. Self-directed academic learning is a third possibility, allowing a non-degreed hacker to have a historical/theoretical background equalling or exceeding what is covered in any given CS program.
Dave Sherohman
There are exceptions. Accept it and move on.
Joe Philllips
The list of things that hacker should know is totally the wrong priorities in my opinion. First and foremost they must have a solid understanding of algorithms, this is the highest level of abstraction and probably the most important. On a day to day basis, the things you listed may be more important by they can all be solved by consulting the correct manual or resource.
ldog
Generally, the lower the level of abstraction, the more arbitriary things become and more you will have to consult documentation/specifications. Putting a heavy emphasis on memorize these trite things (e.g. assembly opcodes) is incorrect.
ldog
@gmat... I don't advocate memorizing trivial things like assembly opcodes. I do, however, think it helps to have written some code, at some time, in assembly language. It also helps to know how a processor works. What caching and pipelining are and how they can affect your code. It also helps to understand how a b-tree works, how virtual memory is implemented, and what your compiler has to do in order to generate code. They all help you to reason about your program, at the level that's appropriate for solving a particular problem.
Scott Wisniewski
+2  A: 

This is a tough one. I was lucky enough to get a good education in science, engineering, and math. I was also lucky enough to get a degree in C.S. and A.I., and learn from a lot of really really bright people, with ideas that could be picked up nowhere else. I was also lucky enough to never take a programming course. (Well, actually, the only programming course I ever took, 7094 assembly language, I hated and nearly flunked.) All programming skills I learned "on the job" and from co-workers. Then I taught C.S. at the college level, and I learned even more - namely how to get the most functionality from the smallest possible amount of code, and how to communicate it. So if I'm any good at this business, it's because of the non-programming education, and being able to learn from some of the best, and having great projects to work on.

Certainly you can be very good in this profession with a minimum of education. I had a few students who were such extremely bright and powerful programmers, that they would hardly ever come to class. It bored them. This was sad, because there were some really useful ideas that they never learned. We used to lament that they were "too smart to learn".

Now the level of learning I have is something that doesn't necessarily help. If I give a design decision based on what I normally think of, such as automata theory or information theory, I have to keep it hidden, because my colleagues may just think I'm showing off. There is a tendency to think the things one does not know are not particularly worth knowing. So education is a two-edged sword.

So I guess I would say, programming is a skill that, if you are clever and energetic, you can pick up quite well, but a broad education in some hard science and math (including computer science) will make you a much better programmer.

Mike Dunlavey
+1  A: 

Employers stress a degree because they want something in writing as accountability for hiring someone, they need to weed out the masses, and they need to keep up with the Joneses.

That said, a quality college education provides a framework for learning a subject from the beginning to an advanced level, in a pre-determined order that requires discipline to understand and practice one concept before proceeding to the next. In short, it facilitates the learning process greatly.

I know that when I try to learn a subject on my own, I tend to skip around. And if I could pour my resulting knowledge onto a plate, it would look like a big ol' slice of swiss cheese -- covering a lot, but with a lot of holes. A degree fills those holes.

+3  A: 

This is only an averages thing (i.e. there are a huge number of exceptions in both directions), but in general programmers with college degrees are better at written and spoken communication. This is mainly because colleges and universities tend to require students to practice these things, whereas the work world (especially programming) does not.

MusiGenesis
+9  A: 

In school, I got exposure to a large number of concepts and tools, that would likely have never known about otherwise.

Such as Finite State Machines, Linear Algebra, Genetic Algorithms, Computer Graphics, OSI/TCPIP layers, basics of Operating System implementation, CISC vs RISC processors, Assembly Language, lisp, Yacc and Lex.

I don't use them most of the time, but it gives me a toolkit when facing a new challenges.

Kozyarchuk
It's "RISC", not "RISK".
Wallacoloo
A: 

I'd say that experience gives you real world problems that you will need to handle. As a self taught programmer, I learned that experience gives you a lot more like confidence to do any task within the programming job.

A degree doesn't actually show you what you will expect since College just shows you only a shallow part of it.

Thorpe Obazee
+1  A: 

College taught me how to learn and what I'm capable of. There is no substitute for experience but college gives you the "real world" experience mom and dad can't give you.

  • Dealing with stress and projects (roommates -> cubical mates)
  • Putting up with classes -> meetings
  • Living on student loans -> Sticking to a budget
JibberSki
shame that "mom and dad" do so often not teach their kids how to handle living on a budget :-\
warren
+1  A: 

Actually it gave me two things - ability to learn, understand new things and analytical thinking.

grigy
+4  A: 

Personally I think I would not have had the same theoretical foundation without my college degree. I'm quite a pragmatic person and if I don't see an immediate use of something I usually don't consider it worth my time. While studying I had to learn much of the theory in CS that I wouldn't otherwise considered, but I can honestly say that it has made me a better software engineer.

Learning Haskell, for instance, seemed to me at the time a bit useless ('I already know C++!') but it has broaden my mind in CS related matters the same way learning Chinese has broaden my mind not only in natural language related matters but also in my view of the world. When you're confronted with something that is so very different from the way your mind currently work, it has only two choices:

  1. Syntax Error
  2. Adapt

I'm not saying you cannot learn this outside of college, but for me it was crucial to be forced in the same way learning snowboarding made me a better skier since I was forced to learn doing it properly.

Andreas Magnusson
+6  A: 

I can think of a few things that I got in university:

1) Formalized communication - Rarely up until university was I required to write out thoughts in Math or Computer Science classes. In university, it isn't that uncommon to have to write out a fair bit of detail when doing Mathematical proofs or other tasks where the key is how one justifies a correct answer rather than simply figuring out that the answer is 42.

2) Working well with others/humility - Up until university, I had found many educational subjects rather simple and easy. I had over a 90% average among my Grade 13 courses. In taking a few advanced Math classes I suddenly became someone near the bottom of the list instead and needed to get help from others usually. For example, in my first week at university we are given an assignment about taking the ring of Integers with a square root of 3 added to it that just didn't make sense initially.

3) Understanding of software development/structure - Granted one can manually go through all the basic structures like Stacks and Queues along with their implementation using arrays or linked lists, but how well does this cover what a university curriculum would? Similarly, I was exposed to Waterfall methodology with its various points along with compiler information in to add more to the structure side of things.

4) Access to a network / Prestige of having THAT degree - I went to the University of Waterloo which is known for being a recruiting ground for Microsoft and other big tech names to some extent. Sometimes a place will have other Waterloo alumni and that is how I got to meet some of the people that gave me my first out of university job.

5) Problem solving side skills - While I didn't have a course in problem solving technically, there were many courses where having a systematic way of tackling a problem is useful, e.g. given a particular statement either prove it to be true or false.

Of course one of the best things about university for me was that I was free of the jerks and bullies that I had to deal with in younger grades. Here for any given class, the people wanted to be there and weren't forced to do so. There was a sports league where just showing up and wanting to play was enough to be included in playing and even though I was a poor player, it was still fun and good to have that exercise and socializing.

JB King
+7  A: 

A college degree gives you the opportunity to learn (and fail) in an environment with fewer and different pressures than the workplace. Furthermore, in contrast to learning at home, one is compelled to continue learning, guided in what to learn, and provided with support from experts.

For example, in the workplace or at home you are unlikely to ever walk through all the stages of a parser and compiler from first principles, with the guidance and answers of an expert at hand, despite the fantastic importance of parsing techniques and compilation in most developers' day to day work.

In the workplace you have deadlines, external limitations, and existing codebases: you would never choose to write your own lexer (to take a particular example), so when:

  • your lexer library doesn't work correctly
  • an existing lexer at your company is too slow
  • a new problem is really lexing/parsing/compiling in disguise (this happens quite often)
  • you have to work on a resource constrained platform, and end up writing your own parser

you are missing the required experience, and have to learn under very different pressures.

The particularly important part about all this is that someone who earned their degree can go to the workplace and experience all of the different pressures, learning both sets of skills... but it's much rarer for someone who has spent years in the workplace to go back to school full-time to learn in that environment.

Put another way, the workplace teaches you to get something working, while a university teaches you the principles of making it work, or how to make it work right. It's possible to learn the latter in the workplace, but it's harder.

My personal perspective is that my time at a university taught me a tremendous number of underlying principles that I use every day in my work without thinking, and some that I consciously use. Some of my coworkers without those experiences have noticeably different approaches, and they often start on a course which — with greater insight into the character of the problem (algorithmic complexity being one such area) — would be obviously foolish.

All that said, I wouldn't refuse to hire a programmer without a university education... but I do think they would have a harder time meeting my requirements than if they had one.

Rich
RE: walking through all the stages of a parser and compiler from first principles -- which classes did you take that walked you through this? I'm interested in taking one but can't find any. I'm specifically interested in the JavaScript parser. Do you recommend any books on the subject?
Simply a second-year compiler course at my university. I'm afraid I don't have any specific resources to point you to apart from Google and the keywords "how to write a compiler". This book walks through start to finish: http://tinyurl.com/5878t2
Rich
+6  A: 

One thing that I didn't see explicitly mentioned here: A college graduate will generally have had additional exposure to required course material that is not directly programming related, but is still useful in the performance of some of a programmer's job functions.

A specific example that comes to mind for me is an English writing course that I was required to take in college (while pursuing my degree as a CS major); the course significantly improved my writing skills relative to the level they were at prior to taking the course. I've benefited from that experience on the job when doing the writing work that comes with a programming job, such as writing documentation (where "writing documentation" also includes high-quality in-code comments), communicating via email with others on my team and with business stakeholders, and so forth.

Jon Schneider
A: 

I want to add a couple of points that I've gleened from my experience in software engineering, both throughout school and university and out in the real world. In my own experience of and from speaking to software engineers - most of them didn't have decent schooling in computers and learned just the barest basics until they went into college or university.

I didn't learn anything during my degree studies that I couldn't have easily learned on my own time given a decent reading list and access to the vast resource of the internet. So I have to say that I was (and still am) remarkably disappointed with my education in computer science and software engineering.

Obviously books are a non-interactive medium so even with a decent reading list, the explanations come in the form that you're given. Therefore, tutors are extremely valuable - of course, "tutors" can take many forms - just having people around that already understand the content that you can ask questions and bounce ideas of are a godsend.

University has the greatest potential as a medium of education - but too often, the course material is lacking, the tutors uninspiring and there is a distinct lack of passion impressed upon the students.

A decent reading list can be found with an evening of research on the internet - most universities will provide you with one in a single phone call. The books can be easily obtained from Amazon or from Chapters/Borders/Waterstones, and with decent proramming resources like StackOverflow popping up all over the internet it's easy to get alternative explanations to any material you don't understand.

So would I rather have someone with a CS degree? Yeah, maybe - I agree in principle, someone with a CS degree had the dedication to get them through - and that kind of dedication is commendable.

But I'd just as soon have someone that's got:

  • A good track record
  • An pragmatic analytical nature
  • Passion for their craft
  • A hunger to learn
  • Resourcefulness to find the answers
  • The ability to self-learn
  • Great references
BenAlabaster
+4  A: 

Getting a CS degree shows that someone took extensive action to specifically become trained in CS. This generally means they have an interest and commitment to the field. This to a lesser extent is also the value of certifications. Specific knowledge of content to these is a bonus.

Remember its cheaper for a company to not hire a good engineer compared to expense of having to get rid of a bad one. Also remember that interviews cost money (people time).

Candidate 1 has a CS degree and a couple years experience, and a couple relevant certifications. Candidate 2 has no degree and a few years work experience.

Candidate 1 has demonstrated they want to be in CS, and are committed to gaining knowledge in relevant technologies. Candidate 2 has demonstrated that they have been able to avoid being fired for a number of years.

Which would you interview?

Those of us in CS for a while intrinsically know that those without formal education may be just as competent as those without. However discovering those without formal education that have commitment and capability is higher risk to the hiring manager.

Rob Fuller
Agreed -- nobody's going get fired for hiring a CS major that doesn't work out, but hiring someone without a degree that doesn't work out makes the recruiter look reckless to his/her boss.
jeffm
+15  A: 

A large pool of single women. There's no other time in your life when you will be around so many women who are single. Once you start working, it gets really tough to meet women (which is why all the match.com sites exist). Grad school often has many married students, so college is your best bet to sharpen up the dating/social skills.

This should be reason alone to go to college.

Mitch Haile
Hard to argue with this one. For the ladies, of course, college represents a large pool of single guys. But then, so does the planet.
MusiGenesis
LOL, so true! :))
Andrei Rinea
A: 

A four year degree course or 4 year experience in in Industry, which one is more valuable. I will say 4 year experience in Industry. Then why are some people with fancy degrees are earning more? It is because of of our mindset. It is true that 99.99% of bright young people go to a college and waste 4 years.

And Babu is Babu...
xxxxxxx
Even if 4 years in the industry is more valuable (And I'm not saying it is, I don't have the experience to make this decision), not many companies will be willing to pay for those 4 years of educating you, when they could hire somebody who's already paid for their own 4 years of education.
Wallacoloo
A: 

I've worked in at least a dozen industries both on and off the books. I've worked with educated and experienced people.

A college education means the person has loans to pay back, they've volunteered to "go with the flow", and they're likely to simply "fit in" to the way a business wants to run things. They're generally going to be the type of "employee" a company is looking for.

Someone with experience on the other hand generally lacks education-related loans to pay off, has opted to "go against the grain", and always thinks they know how management "really works". These people are a much, much higher risk to an employer because they're generally in a position where they can "cut and run", often times taking trade secrets with them and setting up competition.

Technically, a college educated person really doesn't bring anything more to the table. Realistically, a college educated person is also less likely to take things away from the table.

joebert
A: 

A college degree nowadays has become the gateway to a successful career. Careers related to IT/computers are so challenging and competitive that you cannot think of getting your foot in the door without a college degree. Thus, gaining experience without education these days is out of question. Computer degree programs make you well-versed with the fundamentals and trains you for the latest technological trends. A college degree not only makes you employable, but it also makes you proficient in the field of computers.

Keith
"trains you for the latest technological trends"? Not that I've ever seen .. unless you're looking at graduate progams
warren
+1  A: 

A degree gives you knowledge (but isn't the only way to get it). Experience gives you wisdom to know how to apply that knowledge.

You cannot be a great programmer without experience, but you can be a great programmer without a degree.

(and 4-5 years isn't "experience", it's practice. Real experience takes 10 years or more)

Another thing a degree gets you is proof you can stick with something for a significant amount of time.

Bryan Oakley
Very few people acquire knowledge of lots of different ways to tackle a problem from just practice. Some do, but they're exceptions; most just become better at doing things in the ways they already know. (OTOH, some people just piss away their college years and never really learn any lesson worth the name; higher education is just wasted on them.)
Donal Fellows
A: 

At my previous job, I found a number of people who thought they wasted 4 years in college. On my team of four developers, I was the only one with a CS degree. Having gotten started with computers late, a college education helped me get a theoretical foundation that I may not be able to achieve on my own, since I had started so late. I've found great developers who didn't go to school and really bad developers with a great GPA. There are plenty of people I went to school with that I would never hire.

A degree is good, but it shouldn't be a measuring stick. Interviewing for the technical requirements of the job is what will determine whether a candidate is fit for the job. I would say that the two most important things are: the ability to understand difficult software engineering patterns and the desire to keep up with constantly evolving technology.

Juan Mendes
+2  A: 

As others have said, the best you can get is a natural coder (a hacker in the old sense) who also has a degree in CS and experience doing real-world programming (which may happen in a university; not everyone who works in them is an academic). This analogy is why:

Imagine there's a tall hedge around a house and a bunch of programmers wish to get in. Those who aren't doers will just sit around and achieve nothing useful (and, if they've got a fancy education, they'll spend their time berating everyone else in earshot in a very irritating manner). It's only the practitioners who achieve anything real.

The guy without the education or experience will work on climbing over the hedge; a huge waste of effort, but eventually they'll succeed through sheer effort. The guy with the experience but no education will choose an appropriate tool and hack (hah!) their way through the hedge; plenty of collateral damage, but a more efficient solution. The guy with the education too (and a practitioner with education will accumulate experience rapidly) will walk round the corner to the gate in the hedge that they know should be somewhere about, and get in rapidly and with minimal effort.


OK, it's a very silly analogy, but it illustrates that what a proper education gives a coder is different perspectives on a problem. They'll know what databases do. They'll know what regexps are. They'll not be over-fazed by bugs in compiler correctness. They'll know when to use functional programming, or logic programming, or networking, or concurrency, or any number of other techniques. Marry that to same sorts of skills that a good practical coder has and you've got the ingredients for someone who really can rapidly deliver effective code. They'll also be the people best able to create the application architecture, design the code module interfaces, and communicate what was done with others.

Without education, the ordinarily skilled coder will just write code that implements the first solution they think of. That's fine enough for simple and low-level work where there tends not to be too many deep choices to make, but the lack shows up in high-level work where deep howlers are made (e.g., utterly inappropriate security choices that commit an organization to doing the coding equivalent of pounding sand down a rat hole for a decade; I've seen that happen, where a dumb choice was made by people without a CS background).

A CS education in the hands of the right type of person is a massive accelerant to their overall skill.

Donal Fellows
I like the analogy!
Paul Nathan
A: 

Formal education give you a foundation which makes you think rationally and logically. In industry, you can get by doing just copy-paste and buzzwords sometimes.

fastcodejava