
Go To University, Not For CS - jordanmessina
http://sheddingbikes.com/posts/1275258018.html
======
wheels
It was a great post right up until the part where he started talking about
computer science. It left me with the feeling that either Zed did not study
computer science, and is just talking out of his ass, or went through a very
bad computer science program and has generalized that all of them must be that
bad.

How arrogant can you be? There's nothing for you to learn from 100 years of
algorithms, complexity theory, language or operating systems design? Nothing?!
All you need is code?

~~~
hga
The termination with _extreme_ prejudice of 6.001 suggests that some people
mostly agree ([http://www.wisdomandwonder.com/link/2110/why-mit-switched-
fr...](http://www.wisdomandwonder.com/link/2110/why-mit-switched-from-scheme-
to-python)).

Certainly there's an ever increasing role for people pasting together big
libraries and frameworks without a deep understanding of what goes on behind
the curtains....

~~~
alexgartrell
I think that there's a big factor that goes largely unacknowledged. Lots of
non-Computer Science students have to take introductory programming. Given the
choice between teaching a mechanical engineer something like scheme, which he
will in all likelihood never use again, and python, which is a lot more widely
useful, the choice is clear.

Introductory programming is all about what functions, variables, etc. are. I
doubt many intro-level students ever grasped the fact that they were working
on more or less the raw AST or the "code as data" thing anyway.

~~~
hga
BZZT!

6.001 was never a service course and while it was taught the EECS department
even stopped teaching their service course due to lack of resources (MIT
doesn't let departments get too big for a _long_ time until they're sure they
aren't going to suffer a crash like Aero/Astro, which of course turned out to
be very wise after the dot.com bust).

Other departments taught and still teach their own relevant for their fields
programming service courses, and surprise, surprise, the EECS department has
started teaching a Python based service course ... although partly because the
new 6.01 course doesn't have the time budget for students to learn Python's
syntax and other irregularities (you can't take 6.01 without proving you can
program in Python, as I recall).

ADDED: that said, there are a _lot_ of students outside the EECS department
who are very upset they can no longer take 6.001, which in times past quite a
few did.

------
archgoon
It's difficult to take this person's point seriously when he claims

>Another way to explain the shallowness of Computer Science is that it's the
only discipline that eschews paradox. Even mathematics has reams of unanswered
questions and potential paradox in its core philosophy. In Computer Science,
there's none.

No unanswered questions? Rubbish, 'P=NP' anyone? Correctness of the assumption
of the Church-Turing hypothesis (which is falsifiable if not provable) ?
Granted, I'm not sure exactly what he means by "eschews paradox", but I assume
this is mostly because the author doesn't really know himself. If he simply
means "lacks counter-intuitive ideas", than he's dead wrong. I'll put forward
the Halting Problem as an obvious example. Counter-intuitive if for no other
reason than people are simply _used_ to problems being solvable.

~~~
gwern
Just a quick nitpick - I've known people to be not particularly impressed by
the Halting Problem.

The _real_ result, if you want to wow someone, is Rice's theorem
(<http://en.wikipedia.org/wiki/Rice%27s_theorem>): 'Not only can you not
decide halting - you can't decide anything else either.'

~~~
archgoon
Really? They're impressed by Rice's theorem but not the Halting Problem? I
find that surprising, I would expect someone unimpressed with the Halting
Problem would simply view Rice's theorem as an obvious consequence of the
Halting Problem.

~~~
gwern
If you aren't impressed by the Halting Problem, you probably aren't so
sophisticated and able that Rice's theorem is an obvious extension of the
Halting Problem.

Intuitively, I can convince myself that Rice's theorem is true ('just write a
program that runs itself and halts or doesn't halt on whether it has that
property'), but I can't really follow the math and I only think of that
because I've already heard of a number of results that use similar
translations/compilations from one sort of program to another.

------
acangiano
> Another way to explain the shallowness of Computer Science

> is that it's the only discipline that eschews paradox.

> Even mathematics has reams of unanswered questions and

> potential paradox in its core philosophy. In Computer

> Science, there's none. It's assumed that all of it is

> pretty much solved and your job as an undergraduate is

> to just learn to get a job in this totally solved area

> of expertise.

Zed is confusing software engineering with computer science. CS is a branch of
applied mathematics, and it's not different from mathematics. There are
unsolved problems and plenty of areas that require further research.

~~~
robryan
It's not like software engineering doesn't have unsolved problems either, like
why is it still so hard to produce bug free software, why programmer
productivity has only gone up a small amount despite 30 years of language
advances and why most software still has to be mostly custom. The dream from
the earlier days of software engineering where we were eventually meant to
have components that could easily be mixed and matched to create whatever we
want hasn't eventuated.

~~~
rbranson
I don't think we'll ever get around having to build software with code and
highly trained developers. The world is still very much custom engineered,
from architecture to civil engineering, electrical to mechanical engineering,
even mass produced items have relatively few interchangeable parts.

~~~
prosa
I agree. However, it is worth examining places like Dubai -- the tallest
building in the world, and indeed practically an entire new city, was built by
unskilled laborers working for dollars a day.

That's a compelling case for commoditization of talent, but in the end I think
it's just a heuristic improvement. It gets you pretty far, but at the end of
the day you still have huge teams of PhDs and M.Archs doing the actual
engineering. (If _that_ was commoditized it would be a scary world indeed!)

~~~
rbanffy
> an entire new city, was built by unskilled laborers working for dollars a
> day.

Let's see if it's still standing a couple decades from now.

~~~
werrett
>> an entire new city, was built by unskilled laborers working for dollars a
day.

> Let's see if it's still standing a couple decades from now.

I didn't realise that it was solely teams of skilled engineers and artisans
doing the riveting on Empire State back in 1930.

~~~
rbanffy
You do, of course, understand how over-engineered is the Empire State by
today's standards.

I seriously doubt 30's margins are still being applied.

------
Emore
I must thoroughly disagree.

First off, I agree on the importance of culture. But equating a CS degree with
coding is just plain wrong; Dijkstra has a nice quote on this. CS is and
should be applied mathematics, and what more timeless topic is there than
math?

Secondly, there are some serious doubts whether university teaches you to
think independently. As a counter argument, read "The Disadvantage of an Elite
Education"[1]. Summary of this article: university teaches you--if you're
somewhat ambitious--to become an excellent sheep. In other words, it promotes
you into being the same mediocre person as anyone else.

That said, I still believe there's a ton of things to be gained from spending
four years in a university: network, culture, more-than-average-but-still-
pretty-mediocre ability to think, fun, and being inside a solid recruitment
base for cool companies.

[1] [http://www.theamericanscholar.org/the-disadvantages-of-an-
el...](http://www.theamericanscholar.org/the-disadvantages-of-an-elite-
education/)

~~~
devon_r_t
Where did you get your CS degree? Or more importantly, which institutions do
you know of that actually teach CS as applied mathematics and aren't just
"Java Schools?" I went to roughly a school with what was and still is an
incredibly mediocre CS department and, as far as I can tell, this is the case
more times than it isn't. I spent time working on a Pure Mathematics degree
but eventually switched to CS and I still consider it to be one of the biggest
mistakes of my life.

I agree with Zed to an extent, but only because so many CS programs focus on
the wrong things and are little more than trade programs. For most young
people I meet I strongly recommend they steer clear of CS unless they're going
to a school with a proven program.

~~~
enjo
I attended the University of Central Arkansas (Go Purple Bears!) starting in
1998. This is obviously not a top-tier school by any stretch.

I felt like it was an excellent program. We spent all of a semester on C/C++.
My program was heavy on the math (Calculus, Differential Equations, Linear
Algebra, Statistics, and a few others I can't bring to mind). We studied
algorithms, number systems, analysis, and all sorts of topics.

The amount of time we spent 'learning to program' was minimal. Maybe I was
lucky, but I have to imagine it's hardly different for the majority of
programs.

~~~
hga
You're lucky (you attended a school which is a variation of one of those
"hidden gems" benatkin talked about). ABET only requires:

" _One year of science and mathematics:

1\. Mathematics: At least one half year that must include discrete
mathematics. The additional mathematics might consist of courses in areas such
as calculus, linear algebra, numerical methods, probability, statistics,
number theory, geometry, or symbolic logic._"

([http://www.abet.org/Linked%20Documents-
UPDATE/Criteria%20and...](http://www.abet.org/Linked%20Documents-
UPDATE/Criteria%20and%20PP/C001%2010-11%20CAC%20Criteria%2011-16-09.pdf))

MIT requires differential equations _or_ linear algebra and no statistics
(although I think they used to before the '80s) and of course discrete
mathematics which is one of the things I'm sure you're not bringing to mind.
(MIT does demand a relative high level of mathematical sophistication, _every_
undergraduate must take or place out of single and multivariable calculus in
their freshman year (where it is taught at speed), and SICP/6.001 and 6.01
both use math freely (in 6.01 at least as initially taught you have to use
differential equations right off and they don't assume you've previously
thoroughly learned them).

I've worked very closely with a UVa Applied Mathematics graduate who was
taught C++ (but not C, I taught him the new/malloc distinction :-) back in the
early-mid 90s. He's not as good a programmer as I am, but he's _very_ solid
and most importantly understands what he's doing and the implications of it.
Our designs don't fail because we e.g. didn't realize or think correctly about
scaling issues.

------
beloch
A university CS program that only teaches you how to code is nothing more than
a technical degree. Some universities do this. Many, besides MIT, do not. They
should teach everything from hardware architecture to compiler design to basic
quantum computing in a decent undergrad program. Some of those will be
advanced options. That's fine. Depth comes at the cost of specialization, and
every CS grad should have a tiny bit of depth somewhere. The basic first year
courses often do not assume knowledge of coding, but they should have a point
_besides_ learning to code.

I think better advice for students choosing a program would be to go to
University, spend a year studying as many different things as you can,
including CS, to see what engages you. Learn how to code at the same time. You
might be happier as a physicist who knows how to code than a computer
scientist who wishes he knew more physics. There are plenty of coding jobs a
CS grad can't do.

------
philwelch
My main regret about university isn't that I studied CS, but that I didn't
study mathematics. Coming out of high school, I didn't have the faintest idea
what mathematics really was. I _did_ study philosophy, but the parts that
appealed to me most were, frankly, the most similar to mathematics (symbolic
logic and proof-writing). And then when I studied CS, my favorite parts...were
mathematics again! All quite ironic for someone who always hated what he
_thought_ mathematics was.

~~~
adzp
I studied mathematics as an undergraduate and am now pursuing advanced study
in computer science. The foundation that studying advanced mathematics
provided me for further study in CS is rock solid, particularly since my
interests lie in artificial intelligence realms of CS. I've also found that in
"the working world", once you prove you can code, you are a favored candidate
for more interesting, complex job assignments by your employer.

------
b3b0p
Don't go to a school that teaches programming.

There are many fine schools besides MIT, CMU, Caltech, etc. Saying you should
disregard CS as your major because you aren't able to attend one of the elite
schools is downright depressing. There are many great schools for an
undergraduate that have an excellent CS curriculum.

Any programming at the schools I attended were optional 0 credit labs. And
except for the CS 1 and 2 intro classes, there was no designated programming
language, you could use any language you wanted. Some chose Ruby, Python, or
Java while some others chose C or C++. They were more concerned about your
ability to design and implement a proper working solution to the problem
given.

~~~
hga
I agree it's depressing, but if your goal is to continue "programming" past
age 35-40 I'm not sure you can make the case for others. See my other posting
discussing autodidacticism.

However, there is one caveat: if you go into embedded or get a serious
security clearance and stick to government work that required it, you can with
much less difficultly continue programming. In the former case the field
appears to respect gray hairs, in the latter, it's pretty hard to get the
first job (they can't have you working on classified stuff until you get your
clearance and you can't apply for or hold one without a job requiring it) so
once you have your "tickets" you're in very good shape.

------
madmanslitany
I doubt this is actually what happened, but I can picture Zed finishing a post
suggesting that students take some time to learn about culture while at
university.

Then he decided that he wasn't going to piss off and fire up his usual quota
with just that so he added an opening and closing attacking a CS education.
I'm in pretty decisive disagreement with him on what he says about CS here,
but there's a valuable point in here.

CS students, and engineers in general, are a little too dismissive of the
liberal arts. There are some genuine reasons for this, but Zed is right in
that it's supreme arrogance to think we have nothing to learn from thousands
of years of human achievement in the arts. Ultimately, culture is how humanity
expresses itself with the time and energy we've bought for it by making life
easier with technological progress. Taking some time to understand the human
condition through culture before we transform it would be a good thing.

Plus, on a personal level, meeting people who aren't fellow engineers is
generally a good thing. Guys, there are a lot more girls outside of CS than
there are therein... Hell, girls, that goes for you too if you just want to
talk to another girl for once.

~~~
ilovecomputers
The last Art course I took was a digital art course:
<http://digital.arts.uci.edu/arts12/>

The impression I got was that not even the scholars knew what digital media
was. However, I did acquire a large pool of information of what this grouping
of similar people were up to. They were a great source of inspiration and if
art is one thing, it's building upon the works of others and the humanities
offers a larger pool for you to build upon.

However, when it comes to better understanding how people react to their
environment, I turn to the social sciences for a more concrete explanation. My
naive understanding of the humanities is that it's based upon assumptions and
opinions, but I bet a wiser scholar can show me differently.

BTW, depending on where you go, a CS degree can be more of a liberal art
education than a technical one.

------
amohr
If all you really want to do is code, my guess is all the art history and
romantic literature classes in the world won't result in a necessarily
cultured person. Culture doesn't just come from exposure, it comes from
receptiveness.

As Dorothy Parker said "You can lead a whore to culture, but you can't make
her think"

I think this post would be much more accurate if Zed had chosen a more fitting
marquis word. There's tons of things that you learn in college but wouldn't
pick up going straight to work. What I think has been most useful, for me,
that I would not have picked up on my own is writing for different audiences.

In high school, you most likely wrote like a high school student: (generally
speaking) unrefined, undirected, and usually lacking a clearly defined
audience. When you get to college, you get used to the academic environment -
you learn to communicate an idea efficiently to someone who isn't an english
teacher. It's where you learn that all those "rules" they taught you aren't as
steadfast as they would have liked you to believe. It is ok to start sentences
with "And" or "But" and end with a preposition.

~~~
lsc
learning to write, no matter where you do it, is an extremely valuable thing
to do.

Judging from the output I have seen, though, I'm not sure college is the best
place for that.

------
dustingetz
i agree, culture is important.

but, how much money is it worth? is it worth 20k? 50k? 200k?

on the flip side, not all of us are brilliant alpha programmers with
entrepreneur-class egos. the labor-class parents of one of my best friends are
incredibly proud of his BigCo software job, and BigCos don't hire without a
degree. The cynic in me wants to call a [software] degree an average person's
investment.

~~~
jrockway
What BigCos don't hire without degrees? I know people at Google and Microsoft
without a degree. I work for a giant corporation, without a degree.

~~~
sliverstorm
That brings up the question; when did they get into the industry? Back when
there was no such thing as a Computer Science degree, you of course didn't
need one to get a job as a programmer

I'm sure there are some people still who get into Google and Microsoft with no
work experience or degree, but I suspect that number was higher when these
things were new and all. I also suspect a good number of the people you were
thinking of when you made that post had good work experience to help them land
the job.

~~~
lsc
you need work experience /or/ a degree. If you have neither, you must first do
the job you want for the pay you are qualified for. I spent several years
doing computer work while earning a McDonalds wage. (I got lucky, and was able
to dramatically shorten this period of time because, well, it was dot-com
time, and I could spell C.)

As far as I can tell, though, requirements for degrees at BigCo type jobs are
becoming less stringent, not more stringent. (again, I emphasize, this is only
for people with work experience. BigCo is usually not the place to do the
skilled work at unskilled wages.)

My understanding is that in my father's day, it was /much/ more difficult to
get in without a degree. Sure, the degree was in math or business (my
stepfather has a degree that sounds like a business degree but that actually
was one of the early computer degrees.) or something other than computer
science, but my understanding was that degrees were more required then than
they are now.

~~~
ig1
It's incredibly hard to get that work experience without a degree. Why would a
company hire someone without experience or CS degree for a programming job
when they could hire someone with a CS degree for only a marginal amount of
extra money ?

~~~
lsc
It wasn't particularly difficult for me, and I don't think I'm particularly
exceptional. I was working phone support for nine bucks an hour; as soon as
the boss noticed I was a passable C and Perl programmer, I got my programming
job. (It was a while longer before I got paid like a programmer... but my
point is that if you have the skills, and if you are willing to work for
below-market wages, it's not too difficult to get the experience.)

------
curiousfiddler
Zed, unfortunately or fortunately there are good and bad universities (in
terms of CS). If you are in a good university, a lot of professors will teach
you lessons which will last a lifetime. You must go check the video lectures
on youtube by UC Berkley, MIT and Stanford. They will teach you the most
important lesson, time and again, till it becomes a habit for you - its all
about the fundamentals. They will teach you that computer science is as much
programming as it is applied mathematics (& lot more). I went to a bad school.
Teachers were not confident in their subjects, they could not inspire me and I
must confess I wasn't smart enough to inspire myself. 4 years later, now I
have taken a break from my work, and I am revisiting my fundamentals with the
help of the open course ware available on the net and boy, I sure have missed
a lot!

~~~
curiousfiddler
And about culture: if you question what culture is and what culture gives you,
you will figure, that it has a lot to do with habits. And in universities, you
definitely get a chance to pick up some awesome habits which will last a
lifetime. In good universities, the process is easier & the habits have a
wider range (not just discipline etc which are forced by the administration),
because your peer group is a lot more determined to attempt leading a
meaningful life.

------
thecombjelly
I agree. I went through my junior year of a CS degree and dropped out because
it wasn't worth it. If I was to do it over again, I would definitely have
chosen a different degree. I'm 100% certain that doing a different degree, I
would have turned out a better programmer and better at something else. CS (or
any programming degrees) are not as intellectually challenging as they should
be. If you want to learn how to program than, I have yet to find any degree
that will teach you much about becoming a good programmer, so I would
recommend going to school for something else.

~~~
mechanical_fish
I got a degree in physics which I regret not at all. I recommend the hard
sciences: Physics, biology, or chemistry. Or a similarly 'hard' engineering
degree: EE, ChemE, MechE, or whatever the engineering equivalent of biology
is. ;) (The name for that is still being invented. "Biomedical engineering" is
one term you'll hear.)

Take plenty of lab courses; try to get some summer science internships
involving programming -- science labs need programmers, so that should not be
hard to find.

I'd get a minor in CS, maybe. But, frankly, if I went back to school today I
might _still_ prefer to take courses in art and design -- a subject that would
sure be handy for my career -- or statistics, and teach myself the CS in the
evenings.

~~~
nostrademons
I always figured I'd do that - I entered as a physics major and spent six
semesters as one - but ended up graduating in CS and really wishing I'd done
CS from the beginning. I wanted to _be_ a physicist, I didn't want to _do_
physics; conversely, I didn't want to _be_ a computer programmer, but I liked
to _write_ computer programs.

If I were giving advice to incoming freshmen (which, I guess I am, since
there're bound to be some reading), I'd tell them to try out a whole bunch of
different courses, and then major in the one where the _homework_ makes them
come alive. Because when you end up spending a good chunk of your life in a
field, the important thing is that you enjoy the day-to-day work, not that you
enjoy the trappings of success. (Of course, you should probably keep an eye on
how marketable the field is - I don't recommend choosing a major just so you
can get a high-paying job, but if you find you like CS and you find you like
Beowulf, being a programmer will net you a much more comfortable life than
being a Beowulf scholar.)

Incidentally, I also took the "don't take courses in subjects you can teach
yourself" approach. It worked very well for things where teaching myself
involved reading a book, like history or economics. It worked not at all for
things where teaching myself involved working out problems, like statistics
and linear algebra. I suspect CS is closer to the latter than the former.

------
johnl87
I regret studying CS. I would have rather gone for CE and learned more in
depth about how the computer works. It seems like all the computer engineers
at my school are really good coders too, and they understand the hardware
better. Opens up more jobs where you can do more hardcore coding like drivers
and stuff.

------
allend
CS != Programming. Honestly. No, really.

Personal data points, third party anecdotes even less so, are not a reliable
way to extrapolate how CS (or any major) is taught outside of the MITs of the
world. Your experiences, shockingly, are one among many, and remain yours.

That said ...

The culture thing is spot on. That is what getting an education is all about.

------
donaq
Huh. I'm not sure whether to agree or disagree with this. On the one hand, I
learned a lot of interesting CS stuff (algorithms, complexity theory,
cryptography, parallel computing, compiler techniques, operating systems
design, etc) while doing computer engineering in a university in Singapore. As
far as I know, the CS courses in both the older universities in my country
also teach the same things sans the hardware stuff we also learned in CE.
These are useful things to know which would have been very hard for me to
learn outside of university, and we're not MIT.

On the other hand, there are a lot of other sources of accreditation available
here that conduct courses exactly like those Zed mentioned. In those cases, I
would have to agree that it's not worth the money to take those courses. Then
again, they're usually not called CS over here. They have names like Business
IT or some such. IMO, you cannot call yourself a CS course unless you teach,
you know, CS, which is pretty much the case here. What's the situation in the
States? Are there a lot of courses teaching you how to code Java billed as CS?

 _p.s. of course I've forgotten most of the CS stuff that I've learned in
university, but just knowing that they're there if I need them and gaining the
big picture How Things Work was worth the time spent and makes me a better
programmer._

------
hga
tl;dr: Don't major in it unless you're attending one of Stanford, U.C.
Berkeley, CMU or MIT.

OK, that's in part my spin---he only mentions MIT---but it's also my
considered recommendation post-the dot.com crash. If you plan on/desire to
stay programming, I think you _really_ need to be severe about approaching
this, seeing as how the normal career of a programmer is over by age 35-40;
beating that is going to take a _lot_ more than going to a Javaschool or just
starting with your native programming talent.

ADDED EVEN LATER: see this other posting in this thread for two exceptions to
the 35-40 problem: <http://news.ycombinator.com/item?id=1391516>

ADDED: going into serious debt to attend a Javaschool for the purposes of
becoming a better software developer strikes me as a particularly bad bargain
nowadays. If you don't have what it takes to be an autodidact after graduation
_for the rest of your career_ you should think really hard about getting into
this field to begin with.

On the other hand, now that we're in what looks to be a long Great Recession
at best, this may be your best bet, it's just probably not a good one if you
don't get into the best school you can and engage in serious extra career long
effort.

~~~
brent
I cannot let comments like this stand. I have seen little difference between
students from the top few schools and the rest. If you are only doing an
undergrad I see little reason to hold these top 4 on such a pedestal. Any
school in the top 20 or even probably 40 are more than a java school at the
undergraduate level. The differences are marginal. However, if you plan to go
to graduate school I would certainly try to attend one of the top 4 schools.

~~~
hga
Perhaps ... but that's not been my experience.

A previous HN discussion where there was not merely no agreement but no strong
opinions on what school ranked as #5 suggested to me that there's really
something to this.

At the very least they deserve their pedestal. On the question of whether it's
not worth going to a school that ranks below them, I'm not so sure.

~~~
madmanslitany
Dude, the normal career path of pretty much everyone is over by 35-40. Lawyers
that haven't made partner, traders that haven't made been made head of their
desk, engineers in general that haven't made it to management, teachers that
haven't moved into administration.

It's not like they take all the programmers over 40 out behind the cubicle
farm and shoot them or something. I also feel compelled to point out that
"programmer" as a career is a fairly new option and information technology is
still growing rapidly, so the field in general will indeed look a bit younger.

And, finally, I think your real point is just that going to a school with a
worthless Java-lego-blocks program for CS is well..worthless. Dismissing
everything but the top 4 schools is just inflammatory and obscures the real
point..and, admittedly, I couldn't keep down my gut reaction of inflammation
as an alum of one of the schools usually mentioned as a contender for #5.

~~~
hga
That's not been my observation for engineers outside of software (there's
_some_ truth to it, certainly GM plays that game) and certainly not for
teachers. Nor is it true for scientists. Don't know about mathematicians.
Certainly not true for doctors.

They may not "shoot them or something" but they _do_ stop hiring them. I have
some interesting personal anecdotal experience here:

I look _much_ younger than I am (at 49, until a few months ago when I started
getting a few gray hairs, I was routinely mistaken for an early '20s college
student (this is a family trait, no one thinks my 77 year old father is beyond
his early '60s)), so it's trivial for me to not let on to my age until I slip
and e.g. mention working on PDP-11s (had one interviewer exclaim "How old are
you?!?!!!" that time :-).

Starting about when I turned 35 I found it increasingly difficult to find work
in the D.C. area ... until in the middle of one job search I scrubbed my
resume of all the info that signaled my age, most especially when I attended
college. Bam, it was like night and day, in that job search and in future
ones.

Anyway, I believe that the nature of the field of software development rewards
experience in terms of quality ... but we all know that most suits are
interested in playing as little as possible, even if this results in technical
debt or outright project failure that kills the company (one problem is that
non-programmers just don't understand the field and its constraints and so
on).

To finish, I'm not dismissing all but the top 4 schools, I'm saying that if
your goal is to continue programming past age 35-40 attending any other is
going to put one more obstacle in your path and by no means will attending 1
of these 4 make it easy anyway. Since you don't believe in that goal I'm not
addressing you or your career or whatever.

~~~
hga
CORRECTION: but we all know that most suits are interested in _paying_ as
little as possible

------
DrSprout
>Universities are the last place where people actually attempt to expand human
knowledge through research and are willing to teach you their subject. It's
the one place where you can go study something entirely and totally useless
like Art History or History and Philosophy of Science and nobody is going to
ask you why.

And then immediately thereafter:

>Except for a few places like MIT, Computer Science is a pointless discipline
with no culture.

While I agree with some of the points made in the article (do go to college,
because you'll be a better person for it, regardless.) This is where the
article completely loses cohesion.

The way I see it, there are two ways you can teach computer science, and in
both it is useful to you as a programmer, provided you apply yourself.

1\. You are taking software engineering, learning to code. It may not broaden
your horizons, but you spend four years looking at code and writing code in a
structured environment, you're going to get better at coding.

2\. It is a hopelessly abstract mathematical endeavor that has nothing to do
with programming. If that's the case, it's just like philosophy of science.
Despite its apparent inanity, simply the act of dissecting the how and why of
computing will affect you as a person, enhancing the way you look at the
world.

------
Osiris
I started University in Computer Science, and then after some time abroad in
Mexico, I switched to International Relations and studied politics and
economics.

My plans to go into International Business haven't yet materialized and I'm
currently in IT, including both web and Windows client development.

Being a one-man programming team means I have to learn a lot by myself and
don't have the expertise of others to lean on. Because of that, I feel I'm
held back from my potential. For example, I'm having a hard time teaching
myself how to do TDD, or learning new languages or techniques.

I think a CS degree would have given me a great background to be a better
programmer. So, I wouldn't discount it and I think you still learn the culture
because of all the GenEd classes you have to take in University.

------
mattchew
> Chances are you'll end up going to some crappy Java school ... > This is
> what Universities do ... they train people to think ...

So your average university can't teach me to code, but it can impart to me the
wisdom of the ages. Not my experience.

At least at a state university, most kids are there to party and walk out with
a credential that (they hope) gets them an agreeable, good paying job. That is
the culture that the university has to share, at least by default.

Yes, you can get more out of university than that, and some do. But the idea
that your horizons will be broadened and you will acquire culture and Learn
How To Think just because you had to pay a pile of money get in the doors . .
. no, I'm afraid not.

~~~
hga
I wonder, how many universities and colleges can you attend and _not_ be able
to learn "the wisdom of the ages". All it takes is a few dedicated professors
who are _dying_ to be able to teach someone, _anyone_ , who, in my case (this
was MIT in the mid-80s), could identify the French Revolution. After that
seminar session my professor said he would have retired if no one could have
answered the question ... then again, history is my humanities specialty.
Hmmm, I still study about as much history as I do CS and software engineering.

I've observed this directly or indirectly at 2nd and 3rd tier schools as well
(and MIT's humanities departments aren't by and large first tier as far as I
know).

------
gcheong
I really appreciated my CS education after reading the following from Apple's
core data documentation:

"There are many situations where you may need to find existing objects
(objects already saved in a store) for a set of discrete input values. A
simple solution is to create a loop, then for each value in turn execute a
fetch to determine whether there is a matching persisted object and so on.
This pattern does not scale well. If you profile your application with this
pattern, you typically find the fetch to be one of the more expensive
operations in the loop (compared to just iterating over a collection of
items). Even worse, this pattern turns an O(n) problem into an O(n^2)
problem."

~~~
masomenos
to play devil's advocate, what you'd need to know to parse that paragraph was
covered by my CS 102 class. So you'd only need to have taken a couple classes,
rather than majored in the subject.

------
stipes
I'll throw in my voice that a "regular" University can still have a good CS
program. I am at a large state university. My theoretical courses have been,
by and large, quite good.

Our introductory course is based on SICP and Scheme (with a little Python at
the end). Our second course is roughly about OO, taught with Java (but without
letting us use most of the libraries at all).

The design of our program is that you choose an emphasis (I'm in network
security; there's also networks, graphics, AI, etc., and yes, software
engineering). All emphases have theoretical elements, at least to some degree.

I have also had great experiences doing research with professors, who are
_very_ open to undergraduates.

------
watty
I disagree with this article. I thought I could code prior to university but
had no idea. If you have a chance to go to school, go. If you want to be a
software developer, major in CS. Definitely have a minor or double major too.

------
robryan
While I agree that your not always learning useful things in a CS degree for
someone to have left high school and said they already know everything the CS
degree and industry will teach them would be very very surprising.

Personally I have little interest in the alternate university path he is
suggesting, I would probably eventually get sick of it and quit. That's not to
say I don't find a broad range of subject interesting, just that I'd rather
pick up that other stuff online in small chunks when it interests me and spend
the 4 years I have of study to focus on something that really interests me
like CS.

------
mehta
Love the post. Having done college and then post-grad, I have to say that I
missed out on the immense opportunities of learning about culture, art,
history and so many more things.

Additionally, One thing that that the article did not mention is the
environment in the CS departments(just for hanging out... and getting new
ideas) which is way more better then the things you'll learn in class.

------
meric
I agree with this article about CS to some extent but I don't fully agree.

I already knew how to program in Java (poorly) before going to university to
study a double degree in Commerce and Software Engineering (which is just CS +
1 more year).

So you have someone who's a proto-programmer - learning programming but not
quite getting there yet.

I don't go to any of the few places like 'MIT'. We have `learned` python, C,
Java and c++, so far. (I put the learned in quasiquotes because my classmates
tend to completely forget the language after the course finishes.)

Sure, some courses like Project Management is completely useless, but I do
study courses about machine learning, and how to design algorithms.

I'm now in third year and I feel that going to university to learn software
engineering has made me a much better programmer than I would have been
without it. Stuff like Object Oriented Design and unit testing, I wouldn't
have gone and learned it myself... It would take a university to teach me
that.

Funny... I was just having a discussion with my lecturer the other day... He
was complaining the university's courses were too `theory` and didn't help
students get jobs... especially compared to competing universities. I was
telling him the point of university isn't to get students jobs but to teach
them how to think. If students wanted a place to teach them so they can get
jobs they'd just go to technical colleges. I think he was convinced...
hopefully.

What about my commerce degree? Well its mostly boring but occasionally
something really interesting comes up... like e-business and economics. I've
only done commerce because my dad made me to.

The article makes me think though, maybe I should've gone for a
Commerce/Science degree majoring in Mathematics instead. Or a
Commerce/Engineering majoring in Electrical engineering...

~~~
StudyAnimal
"Funny... I was just having a discussion with my lecturer the other day... He
was complaining the university's courses were too `theory` and didn't help
students get jobs... especially compared to competing universities. I was
telling him the point of university isn't to get students jobs but to teach
them how to think. If students wanted a place to teach them so they can get
jobs they'd just go to technical colleges. I think he was convinced...
hopefully."

Probably not, if you look at magazines like the Communications of the ACM you
will see that academia sees their "failure" to churn out programmers for
industry as a crisis, and are more concerned with appealing to women,
minorities, and people who may not find theoretical CS topics like algorithms
and data structures easy or fun enough.

They want to increase their rolls basically, and they saw how switching from
CS to learn java style trade schools during the internet boom helped do that.

Now that the market has stabilized a bit, they hate to see rolls dropping,
they hate to see CS classes filled only with the right sorts of people (i.e.
geeks and nerds for want of a better term) to carry the discipline further, so
they want to dumb it down even further, make it more mainstream, get all the
cool kids in.

I don't blame them I guess. It is mostly the fault of industry blaming them
for not churning out experienced senior software engineers.

Computer Science should stay pure, the right people will always come, even if
it won't be the biggest or coolest department at uni it will always have a
rich culture.

People have their whole lives to gather experience and become great
developers, they can do that on the job. You only have a few years at
university so you shouldn't try to use it to become a good developer, you
should use it to learn core CS theory and whatever else leading edge topics
interest you that may or may not yet be used in industry.

Industry would be better off asking themselves why they don't do a better job
training developers themselves, providing great career paths, and even
contributing back to academia, cooperating with CS departments writing papers,
doing research and taking part in conferences.

~~~
stcredzero
_academia sees their "failure" to churn out programmers for industry as a
crisis...They want to increase their rolls basically, and they saw how
switching from CS to learn java style trade schools during the internet boom
helped do that._

There's a disconnect in the market here. Numbers like enrollment and hiring of
recent grads are easy to measure and make for fine report fodder on academic
committee meetings, but give a completely inadequate picture of the quality of
education. Hiring is a bad metric -- too much of hiring is through buzzword
matching, which is horrible. Then again, HR hasn't any reason to get better,
if the pool of available hires is so poor, buzzword matching is good enough.
This may not be so true in the startup world. It still seems to plague big
companies.

------
markbao
> You my friend, are an idiot. I hate to tell this to you, but your lack of
> education makes you that way. Your failure to expose yourself to literature,
> art, poetry, science (real science, the icky kind) has made you stupid.
> Another data point against you is that you learned to code and you are
> questioning whether you can get something out of a university education. How
> arrogant can you be? There's nothing for you to learn from 2000 years of
> Philosophy, Biology, Physics, History? Nothing?! All you need is code?

This is inaccurate, but excusable since I assume Zed hasn't been to high
school in a good number of years. Things have changed greatly from then—high
school courses are far more rigorous than what he describes as "failure to
expose yourself to <x>"—and if you're going to a top 30th percentile school,
chances are that you took an AP class as well, if not more than one.

~~~
hga
Hmmm, an interesting point. I'll note that my high school in the late '70s had
only one term of the calculus at the end, and the fact that the teacher
refused to teach, full stop, wasn't caught by something inconvenient like the
independently administered AP tests.

My school system had dropped its honors program because it was
"discriminatory", but somehow nowadays they offer 12 AP courses including
Calculus AB, the sciences, literature and foreign languages, music, US
history, etc.

~~~
younata
I'm currently coming out of high school (11 days until graduation), and, I
haven't learned much. 6 AP courses are offered at my school, none of them are
pushed on you until after you sign up for the class and decide that wasn't a
good idea. I haven't ever done "real science". AP Physics B (non calculus) is
the only ap science course offered, and it still was just "here's a lecture
about physics, do your homework, few labs".

~~~
hga
Sigh, algebra based non calculus physics is cargo cult science much in the
original sense that Feynman started the meme. _No one_ outside of education
does it this way, or as I like to put it, there's a reason Newton invented the
integral calculus to develop classical mechanics and why Edison couldn't
compete with Tesla (self-taught Edison didn't have the math to do polyphase
AC, which was the only practical approach back then).

Anyway, I feel your pain, I came out of my high school not having learned
hardly as much as I wanted to or needed. At least I had some good to great
math teachers until my senior year (that was a _literal_ life saver along with
a summer school course on a UNIX V6 machine). Senior year was a total loss
with no insurance, or "It's a bad sign when JROTC is _by far_ your most
interesting and useful class."

How well have you learned your math? That's a key foundation.

~~~
vault_
I just finished a 2 year course on Physics from a high school that was algebra
based. I'll attest that algebra based Physics is the biggest waste of time
ever. The worst part, if you know some calculus, is that you can glimpse what
is happening behind the scenes of the formulas they give you. All I really
learned from the course was a shortcut for doing the homework problems: make
your givens somehow come out to the units required by the solution; double or
halve in special cases. I just hope that mindset won't get in the way when I
take a real physics course.

~~~
hga
Indeed; I now realize I was really lucky when I took my high school physics
course in that the teacher didn't assign any homework, it was all lecture and
an automatic A. So the next year when I did physics for real with the calculus
I had nothing to unlearn.

Although at the same time due to the senior class math teacher having refused
to teach I had to learn the calculus at speed, but I managed and it probably
works better when you have real physics problems you're solving at the same
time. E.g. I learned why trig is really important.

------
stcredzero
_In Computer Science, you only get an expansion of the envelope when some
corporation makes a new toy everyone goes crazy over, not realizing it's just
like that other toy someone else came up with 10 or 20 years ago._

This is an unintended admission by Zed that he's working off of 2nd or 3rd
hand knowledge.

------
pedrokost
I will go to University for Computing. I am one of the apparently few people
who love studying - not the act of studying,but the reason to study. Any
interaction with people increases my ability to think and speak. This is a
quote from somwhere: "The rate of cultural and economic progress depends on
the rate at which ideas are having sex." Educational facilities (even if they
limit your creativity)increase the rate at which ideas have sex and that's
good. After spending two years in an International Baccalaureate program I
have found that I have completely changed my way of thinking and speaking. I
changed. I am more grown up. There are many people - those who don't
understand the reason to spend years in school - who can't even understand me
anymore. I ceased to speak in terms of e.g. temperature, but in terms of heat
radiation and entropy change. Common people can't understand me. That seems
pointless, but it has made my brain more agile in analyzing things that are
more complex and that would take too much work to resolve with 'common
language'.

This is the power of education. I agree, you don't have to study CS, but for
gods sake, if you want to be a programmer don't study a humanistic subject
(except maybe philosophy). Study something that can push your brain to think
and to create complex in-brain connections.

The reason I say don't study something like history is because I believe that
in some decades simple facts won't matter much, only analyzing the facts will.
I believe that in less than 50 years we will have computers connected to our
brains that will be able to hold all the facts we learn and even perform
simple analysis. But the complex tasks will be left to the brain, and so one
must learn to increase its mental processing capacity and not to increase
memory capacity The other reason for studying CS are connections. Meeting
people, potential partners, employers and all the rest. You don't get that if
you don't study CS. University is the easy way to come to meet people and get
a job. You'd have to have a much better portfolio to get a job if you don't
have a technical degree.

On the bad side, universities are expensive. But there's hope to earn the
money back with a great degree.

~~~
hga
Ah, but when you take your first _serious_ history course you'll study
historiography and ideally your professor will introduce you to Thucydides
whatever the course is about. And that's very relevant to "analyzing the
facts", especially since not all "facts" are created equal.

------
ephealy
Zed wrote "Your entire world has been this horribly inaccurate model of the
real world where you were basically trained to be a good little factory
worker." Are we sure that university life is any different? I don't discount
the value of the liberal arts, but will a college education really encourage
the artist within the coder, enabling him to be better? Is it possible that a
college education will simply magnify the 'factory worker' training that Zed
talks about? Is it not possible for an employer to take a promising coder out
of high school, mentor him in the ways of a professional programmer, and
provide a cultural education - all without the need for $xx,000 in debt?

------
sthomps
Nice post. The world is lacking tons of culture (although you don't always
need to go to university to get it, especially if you are a self-learner).
Enjoyed the post though.

------
evo_9
I thought the point of the article wasn't about the merits of a CS degree, but
rather if someone is a pretty sharp person that already knows how to program,
should he/she go to college for the experience and to learn about all that
other non-programming knowledge out there. I say, hell yes, the more exposure
to knowledge the better, and chances are they will be drawn into CS classes
because it truly interests them.

------
steveklabnik
I think lots of readers here are getting confused with the two kinds of
"computer science." We all know CS as a theoretical discipline, close to math.
But most American universities, it would seem, don't teach that. This is what
Zed is talking about, the "computer science" that makes up one of these
degrees.

Maybe, I'm just overly bitter, but he's absolutely right about the current
state of undergraduate level curriculum.

~~~
hga
I think a lot of this has to do with where the school's CS department came
from. For those few that started in the Math Department they tend to stay
close to the math. For the engineering based ones (e.g MIT's EECS) engineering
is _always_ the prime focus and CS theory is at minimum a means to that end
and for the serious CS types they can concentrate in it but they'll still in
theory be good engineers. (When most of a school's students are engineers it
just tends to rub off anyway, even on the theoretical physics types, it's hard
to escape without groking a fair amount about engineering which many realize
will be useful in the real world.)

Also, the ABET accreditation requirements _require_ serious teaching of
engineering whereas you could skate on serious math outside of the one
specifically required half-year discrete math course plus one other serious
one (no doubt most if not all require single variable calculus).

------
swolchok
People will most certainly ask you why you studied Art History in college if
it turns out that you came out the other end with no marketable skills,
especially when articles about your woes show up in the New York Times as
though your poor planning and choice of topic did not lead directly to your
inability to find work.

~~~
Lewisham
The thing that grates is that I am guessing he chose not to seek out the
multitude of ways that are offered at university to assimilate "culture"
(which, by the way, is a rather nebulous term. Does going and partying three
nights a week count?) There's the university newspaper. Bands. All sorts of
sports classes. Charity groups. Activism. In some countries, you can get
minors in things of interest, like philosophy of science or something.

His view seems blinkered, at best.

------
moolave
One good friend of mine best said it, (although university may not be the only
place to get all your programming skills honed) it is one of the best places
to meet future connections in business or just on a collaboration of a tech
project.

------
reader5000
You can dole out 40k/yr and isolate yourself from the real world for
"culture", or you can go to your local library (where they still are funded)
and read a book. Your call!

------
marstall
zed shaw is british?

------
georgieporgie
My take, for what it's worth:

I was a major nerd through high school. We got a great teacher my Sophomore
year who taught us all the basics of algorithms, and gave us enough freedom to
pursue our own interests. I taught myself 8086 assembly language, and thereby
grasped pointers in a way my classmates couldn't.

Fast forward to college. I wasted my time for four years. The most memorable
CS things I learned were i, j, and k as iterators (in other words: some
accepted formatting which makes reading each others' code easier), SQL (not
well, and how hard would it be to pick this up on my own?), and finite
automatons.

The memorable non-CS things are vastly more numerable. Anthropology, physics,
philosophy, and mathematics.

Ten years down the road, I've found that most of my career has consisted of a)
finding and fixing bugs and b) gluing code together. I have devised precisely
_one_ original algorithm (I don't mean simply writing fresh code, but writing
an original algorithm). An _awareness_ of computational complexity has been
necessary, but a deep understanding of algorithms has not.

Here's the kicker: getting a job without a lot of algorithm and puzzle talent
proves difficult. Of course, I find this hilarious in the face of my career
experience. If I were brilliant at algorithms and puzzle solving, I would have
been terribly, terribly bored for virtually _all_ of my career. It's been my
experience that interviewers tend to overestimate the complexity of the tasks
their team faces each day.

So, I would advise a young'un who already has substantial computer talent to
pursue education in a different area. You'll meet more interesting people,
develop your character, and have the option of a very different career path if
you tire of software or vice-versa.

Of course, all of this goes out the window if you truly want to be a computer
scientist. But it seems to me there are at least ten well-paying "code gluing"
jobs for every one research scientist position, so I hardly see this as
defining necessity for a career.

------
forlucy
I'm probably wasting my time posting here.

He's completely wrong about CS as a subject of study in general but very right
about the problems with CS as a formal academic subject of study. Academia is
a religion of sorts. It's primary goal is the replication of the academic
system itself, control over a generation who desire an education whereas
actual education of people is merely a secondary objective. Just one quote
from Chomsky among many regarding education : "A lot of the educational system
is designed for that, if you think about it, it's designed for obedience and
passivity."

Education is Ignorance, Noam Chomsky -
<http://www.chomsky.info/books/warfare02.htm>

------
c00p3r
Yet another coder converted to a great teacher of humanity?

------
petercooper
After reading this, I'd recommend "Subtlety" by Sarah Palin and "How to Manage
Your Debt" by Kostas Karamanlis.

