Hacker News new | past | comments | ask | show | jobs | submit login
Why do people discount the importance of a formal education in computer science? (news.ycombinator.com)
35 points by pius on Sept 24, 2008 | hide | past | favorite | 30 comments



Because time and time again people with a formal education in computer science have turned out to be useless in the commercial arena.

Let's face facts most programming is not rocket science and could easily be automated. The reason it has not been automated is that programmers by and large are Luddites. They can admire new gadgets but not seismic changes in their work environment.

Anybody who has had the where with all to study for a BSc/MSc/PhD then most work in a commercial setting is going to be far far beneath their intellectual capabilities.

In short Compu Sci is best for a research role and commercial dev experience is best for producing a product. The two are widely different beasts.

Personally, I have BSc in CompuSci and work in the commercial sector. I think both Academia and Commercial use of computers is abysmal. The last big step forward was in the 1960s for Academia and 1980s for business. Since then it's all been downhill.

I have recent compu sci grads who cannot design a simple 8 bit cpu, what's an ALU. This is just plain wrong. I also have witnessed commercial developers who don't know how to treat clients. In both cases why are these people even bothering to work in computing?

Most devs still think inheritance is more important than interface. Just how far forward can we move with these fools slowing us down.

I think what it will take to move forward is a company saying if we do IT better we can rule the market. Then finding some devs and ops with long experience and fresh ideas.

When a billion dollar company shows it can run it's IT with 20 people then we have progressed. Not when some dweeb says he has a new programming language that goes to 11.


When a billion dollar company shows it can run it's IT with 20 people then we have progressed. Not when some dweeb says he has a new programming language that goes to 11.

Well, billion dollar seems a little excessive. Let's say $100m.

In which case, 37signals is, imho, the closest thing today.


Craigslist.


Ah yes, true, they're even closer.


There are a lot of other vocations where formal training isn't always an asset.

How many rock/pop stars formally trained to be a musician? Did hendrix do a Phd in the guitar?

I think the same is true in hacking. The best way to become good is through practice, and self learning. Not necessarily from learning other peoples opinions, or current fads.


It's about barriers to entry. Anyone can buy their own guitar and learn to play. Anyone can buy their own computer and learn to program. But few if any amateur zoologists can afford a zoo, or amateur physicists a Hadron Collider. You need, in those fields, to get the approval of other people before you can practice. The formal education just gets you to the point where you can be taken seriously, but without anyone having to commit substantial resources to you upfront.


Remember: there's a difference between being a "programmer" and being a "computer scientist." (Similarly, there is a difference between being a musician and a musicologist.)


Because most people who studied computer science aren't employed as computer scientists. If someone refers to themselves as a computer scientist, I expect that they've either had formal (or rigorous informal) education in CS. If they refer to themselves as a programmer, I assume they know how to program. If someone says that they work at a zoo I don't assume they studied zoology. I do if they call themselves a zoologist.


Cuz they think programming is computer science?


Alan Kay uses an interesting analogy to explain the distinction between "Computer Science" and "Software Engineering":

UCLA has one computer science department, but 25 full departments of biology (not counting medical school stuff). Why? Biologists are smarter then we are. When things are bogging down, the best thing to do is to go create a new department. (http://www.windley.com/cgi-bin/printthis.pl?url=http://www.w...)

I think the pharmacy:"software engineering"::biology:"computer science" metaphor is pretty insightful. So to answer your question - people discount a formal education in CS because it isn't necessary to write good code, just like pharmacists don't need the formal education that research biologists go through.


A lot of disciplines are organized into strata, where once you are on a particular stratum in terms of what you know, you can get a lot done without learning new things. The truly new ideas tend to occur in corner cases or logical extremes, and generally people discount such things as being too focused on insignificant details. However, these corner cases often lead to new strata. I suspect corner cases define the history of ideas.

So, when working on practical problems, since they are the general case, it is hard to see the value of special, stratifying issues.


"... Alan Kay: Is Computer Science an Oxymoron? ..."

andreyf, great read & thanks for submitting it. You should submit this article.


The field is very young. If you want to build bridges, you major in Civil Engineering. You have to learn a lot of physics along the way, but make no mistake: the point of your education is to prepare you to build things.

Computer Science is a mish-mash of many things, and only part of that is how to build software. Sure, just about anything outside of pure CS theory requires programming, but producing the working program is not the end in itself. A big problem is that we really don't know how to build good software. This does not mean good software does not exist. It means that we don't have reliable methodology to produce good software. In contrast, we have reliable methodologies to build good bridges.

The ACM studied this with the IEEE in 2000, and came to this conclusion (http://www.cs.wm.edu/~coppit/csci690-spring2004/papers/selep...): "Following a study by a blue ribbon panel of prominent software engineers, the ACM Council decided in May 1999 that it could not support licensing of software engineers. ACM's position is that our state of knowledge and practice in software engineering is too immature to warrant licensing."

I think it's important to differentiate between Computer Science and Software Engineering. That is, the difference between someone whose goal is contributing to the base of knowledge in their field, and someone whose goal is a stable, working system. There is, of course, overlap, but I think the distinction is still there.

I think that in the future, there will be separate CS and SE degrees. Much of what they learn will be the same, but the focus will be different. A CS education will prepare you to be a researcher; a SE education will prepare you to build software. (I know SE degrees exist, but most schools only have a CS program.) I don't think this split will happen until SE is mature enough to be licensed.

What does this have to do with your question?

We don't have reliable methodologies to build good software, and the only formal education people receive that involves building software isn't necessarily focused on actually building software. This is a nice way of saying "we don't know what we're doing." If even the best people in the field don't know what we're doing, then you can learn that on your own.

Personally, I still think a CS degree is the best preparation right now to be a professional SE. You will probably be exposed to more things than you would find on your own. But I also recognize that there are probably many professional developers without degrees who are better at what they do than people with degrees.

Also note that if you actually want to do research, then you need to get a degree.


You are right about distinguishing between CS & SE. At least here in New Zealand there is a distinction between the two. I have a BE (software eng), which is internationally accredited, rather than a BSc (CS). The SE degree involves general engineering courses, and has a reasonable focus on reliabiliy, quality, safety etc. A degree like this makes you eligible for the professional engineering body IPENZ.

There is a mismatch between the education and what employers seem to look for. You see jobs titled "software engineer" that really only want an html/js coder or someone to set up a wiki, requesting CS degrees or equivalent experience. Jobs that really do demand rigourous software practices will hire anything they can get, but again mainly looking for CS degrees.

> Personally, I still think a CS degree is the best preparation right now to be a professional SE. I have to disagree. The best prep for a professional SE career is a professional SE degree, and then joining a professional body. Sure you can get a CS degree and become a programmer, that's fine. But you aren't really a professional engineer are you?

I'd say that there are reliable methodologies to build software but a lot of times these are not executed in any meaningful fashion. For the price people are willing to pay, and the time they will wait, quality software is not what they want. They may say they want quality, but they don't really. They really want something delivered yesterday, for free or cheap, that works most of the time and does most of the things they want. And this is what cowboys (uh... I mean "software engineers") deliver.

I don't really like the bridges analogy. The complexity and environment are too different for it to be meaningful when compared to software. Thing is, bridges have a well defined function, the banks don't move, the load is generally known (vehicles, people, etc) and so a stable structure can be delivered. And besides, plenty of bridges collapse. If there is an earthquake, or they are overloaded, or they get old, they topple.


My comment about a CS degree being the best preparation for a SE career was assuming a SE degree is not an option. At most colleges and universities in the US - as far as I know - it's not.


1. academic study of computer science is an indicator of interest not ability

2. Computer Science programs vary widely in what they teach and at what level, ranging from 'All you need is Java' vocational programs to 'You might as well double major in Math' theory of computing. Two people with BSCS degrees from the same institution may have vastly different levels of ability and accomplishment.

3. There exists a spectrum from EECS majors who can write any program and build the computer to run it, down to BACS who can code a form in VB if someone sets up their IDE for them.

4. Because the demand for competent programmers is so strong, smart people who trained in many fields find employment as programmers and often do better than those trained.

5. If I have to explain version control to someone who graduated from college with a degree in computer science; I discount that person's ability, and my estimate of the program they graduated from.


I would never claim to be a computer scientist or even a computer programmer.

I am a web developer, I work with scripting languages to develop basic web applications. I do not develop complex algorithms or even know the difference between threads and processes (anyone want to enlighten really quick?).

</incomplete_thought>



Good question. I work with a team where a degree in CS "or equivalent experience" is considered a requirement. The other day someone asked me what Kernel#returning does in RubyOnRails. "It's the K Combinator" I replied.

Do you think they instantly knew what I meant? And would it have helped if they had?


Well, I know what K is (as well as S and I), and I don't have a CS degree. Which just goes to show that there are people out there who can acquire systematic theoretical knowledge on their own.


To be fair, I have two Computer Science degrees, I'm close to my third, and I had to look it up. Most people I work with right now (who have CS PhDs) would probably need to look it up since they do mostly systems and high performance work.


I'm not suggesting anyone ought to know it off the top of their head. The only reason I remembered it is because I am a big fan of Raymond Smullyan's "To Mock a Mockingbird," the best introduction to Combinatoral Logic ever written:

http://www.amazon.com/gp/product/0192801422?ie=UTF8&tag=...

As a result, I remember it as the Kestrel which he introduces in the same chapter as the Mockingbird, Identity Bird, and Lark.

But actually, I really don't expect anyone to remember it. My point was a little sarcastic, I was trying to point out that programming is at least as much about stuff you use regularly or read currently as it is about stuff you learned a few years ago.

If you don't use whatever you were taught, you will lose it. And if you learn it another way--I'm sure there are people who use #returning without knowing anything about combinbatoral logic--it might be just as good. Not knowing what a K combinator does is not particularly harmful to being an amazing software developer.

I am not denigrating a degree in computer science. I think it is an amazingly excellent way to start a career (be that working for others or yourself) in software development. But, OTOH, after a person has been working for a while, I think it carries less weight than what they have done with themselves since graduating.

If a really good degree leads to a really good first job, which leads to a better seond job, and so forth, I am all for the really good degree that started the process.


There is a psychological effect called "Choice-supportive bias" which I find sometimes explains the positions that people take when describing CS degrees.

http://en.wikipedia.org/wiki/Choice-supportive_bias


I don't think it's a cut and dry matter.

Formal CS education matters in many cases, but is clearly not a distinguishing factor in many others. It all depends on what it is you're evaluating.

Let's be blunt, 95% of Web 2.0 startup stuff is purely programming. These are practical problems that require practical solutions. Although a CS degree is probably a plus, experience and a few working examples of work are more than likely bigger pluses.

But that's a very specific subset. If you're doing advanced and technically challenging work like say, trying to beat google, the foundation that you gain by having a formal CS degree starts to matter a little more.

I don't think anyone discounts anything, but there are different levels of application depending on the situation.


I think it should be noted that pius is an MIT alum (in EE & CS) so is obviously biased here.


We should not discount formal education. Reason: http://www.cs.utexas.edu/users/EWD/transcriptions/EWD06xx/EW...


I dropped out of a top-ranked (undergrad) cs program my senior year (to work on my startup, natch). This was in '99/'00, and a lot of my classmates who graduated took .com jobs in the valley. A lot of them ended of getting laid off, so I don't regret leaving.

I would say some of what I learned in school has been helpful at my startup (OOP, testing/qa, and team stuff). But probably more of what I do day-to-day comes from independent learning, trial and error, and experience.


I took Software Development because it had an AI minor. I didn't take Formal Systems, because of my AI, which made things easier. I also learned Scheme in the CS lesson, which led me to Lisp.

But now, I'm sure I use skills learned from the course, even if I didn't get a job out of it.

This University was BCS accredited, which means a lot in the UK. Unrelated, but I met the at-the-time President of the BCS at a conference in 2003.


which means a lot in the UK

Really? In 12 years experience I've yet to encounter any situation in which the BCS was even slightly relevant. Everyone who actually needs/cares about CEng status goes to the IEEE instead.


in line with what axod mentions: as a young field, software engineering is still pretty meritocratic. That is, the only standard a software engineer is held up to is if his code gets the job done. All fields start off this way, but over time formal institutions grow up around them. Eventually, just as there is an American Psychological Association, I expect there to be an American Software Association. When this happens it tends to create new ways in which you can be successful in the field. Just as not all (or even most) of the members of the American Psychological Association are good practicing psychologists.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: