

Why do people discount the importance of a formal education in computer science? - pius
http://news.ycombinator.com/item?id=313700

======
scott_s
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...](http://www.cs.wm.edu/~coppit/csci690-spring2004/papers/selep_main.pdf)):
"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.

~~~
tjpick
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.

~~~
scott_s
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.

------
ajmoir
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.

~~~
swombat
_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.

~~~
nostrademons
Craigslist.

~~~
swombat
Ah yes, true, they're even closer.

------
axod
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.

~~~
gaius
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.

------
wheels
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.

------
yters
Cuz they think programming is computer science?

~~~
andreyf
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...](http://www.windley.com/cgi-
bin/printthis.pl?url=http://www.windley.com/archives/2006/02/alan_kay_is_com.shtml))

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.

~~~
yters
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.

------
olefoo
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.

------
auston
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>

~~~
aaronblohowiak
<http://www.cafeaulait.org/course/week11/02.html>

------
raganwald
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?

~~~
scott_s
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.

~~~
raganwald
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=...](http://www.amazon.com/gp/product/0192801422?ie=UTF8&tag=raganwald001-20)

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.

------
run4yourlives
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.

------
mrjbq7
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>

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

------
honne
We should not discount formal education. Reason:
[http://www.cs.utexas.edu/users/EWD/transcriptions/EWD06xx/EW...](http://www.cs.utexas.edu/users/EWD/transcriptions/EWD06xx/EWD690.html)

------
callmeed
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.

------
zandorg
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.

~~~
gaius
_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.

------
nazgulnarsil
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.

