
Ask HN: So What Universities Are Good? - davidalln
I have been reading an unfortunately large amount of articles here on Hacker News seemingly deterring prospective students like myself from entering a university, especially from the field of Computer Science. They cite large tuition/living costs and "wastes of time" as not worth the potential four year education gained. These articles and blog posts claim that jumping straight into industry is an acceptable and perhaps even favorable alternative.<p>I refuse to buy into this idea as I crave the challenge that I feel a good computer science program can bring as well as want to experience the good ol' college life. Are there still places out there that offer a diverse undergraduate Computer Science program that goes beyond teaching Java and C++ and focuses on the application of these technologies to create things? Are there schools out there that will let undergrads touch research and tackle the problems that current computer scientists face today? Or is this asking too much of a pre-graduate program?
======
endtime
>Are there still places out there that offer a diverse undergraduate Computer
Science program that goes beyond teaching Java and C++ and focuses on the
application of these technologies to create things?

That's not computer science, that's software engineering. If that's what
you're interested in, you could look at RIT. That said, I'm guessing you're in
high school, which means you may well not really know what you want.
Personally, I wouldn't recommend doing a software engineering degree. If you
get a solid CS education, the software stuff is relatively easy to pick up.

If you can get in, I highly recommend Stanford. Your chances of doing research
as an undergrad aren't great, but you'll learn a lot, meet smart people, and
classes like CS210 will give you a little of the practical software experience
you mentioned. Plus, it's an awesome undergrad experience, one that I'm sad I
missed out on.

If you want to do research as an undergrad, I know from experience that this
is possible at Georgetown. The department there is tiny, but has several good
professors, and many of my friends there did research as undergrads. There are
definition downsides to doing CS there (department has less resources, you're
unlikely to meet any potential cofounders, etc.) but overall I think I got a
good education there (enough to prepare me well for a MS at Stanford, anyway).

~~~
johnswamps
Disclaimer: I am a PhD student at Stanford. Why do you say the opportunities
to do research as an undergrad at Stanford aren't great? The CS department has
the CURIS program (<http://curis.stanford.edu/>) which pays for Stanford
students to do research with faculty during the summer. A few dozen students
do this program every summer. We had a few students work with us last summer
and it was a great experience.

~~~
endtime
Ah, I hadn't heard of that. I was thinking more about RAships during the year,
though, which I had the impression are of limited availability even to
master's students (I've gone the CA route instead, so no firsthand
experience). In any case, I didn't mean to be misleading - thanks for
correcting me.

------
jtaby
Don't believe these people. A university education (especially in CS) will
introduce you to A LOT of people and opportunities in your field, will expand
your technical horizon, and will force you to learn things you wouldn't have
otherwise learnt on your own. In my opinion, all the anti-university hate is
from people who are too lazy to make the most of their university education on
their own and expect their money and degree to magically earn them money after
graduation. School will open doors for you, it's up to you to pick which one
to walk through.

Personally, I went to a top-10, big-10 school. If you wanted to go into
research, you had that opportunity. If you wanted a silicon valley internship,
you had that opportunity, if you wanted a startup position, you had that
opportunity. The money is optional, if you can stick to federal grants/loans,
you can consolidate them all into a single payment, and when you get your job
out of college, start paying it off, as far as I can tell, it's the private,
non fed loans that should be avoided like the plague.

I loved my school, I loved my college life, I loved my friends, and I wouldn't
trade it for anything in the world.

~~~
derefr
I keep hearing this, but I see no reason to justify paying exorbitant amounts
of money for it. Why couldn't you get the same opportunities just by _living
on/near a university campus_ and _actively meeting people_? Universities are
not matchmaking services; if they were, they wouldn't hire professors, just
staff TAs to teach undergraduate classes from material composed by corporate
research labs (where all the actual Ph.Ds would work).

~~~
swolchok
College students meet each other in ways that exclude non-students. For
example, a significant portion of the top EECS undergraduates at Michigan
spend a good amount of their social lives with a particular honor society.
This society is, of course, entirely closed to non-students. Another group
that doesn't leave campus all that much? Graduate students.

You can't just waltz into University buildings and be all "sup dawg???".
People are at least pretending to do work, you won't be able to access the
network, you won't have common classes to complain about together, etc. etc.
We're somewhat suspicious of non-students, too.

~~~
derefr
> People are at least pretending to do work, you won't be able to access the
> network, you won't have common classes to complain about together, etc. etc.
> We're somewhat suspicious of non-students, too.

Those are social-status problems [and thus, I could answer snarkily, amenable
to _social_ engineering.]

A University is a clique of people who pay a lot of money to attend a
University. If the only _technical_ advantage everyone gets from paying the
money is access to the lectures, and in the long run _the lectures aren't what
matter_ , then why is _anyone_ paying the money?

"University", in that sense, seems to be a Prisoner's Dilemma set up by
lecturers to rob students. No one individual can stop paying, because it
excludes them, even though the group as a whole would be better off if they
all just rented a few apartment buildings together instead of paying massive
amounts of tuition.

~~~
swolchok
It may not be just the _lectures_ that matter, but I definitely learned a lot
and developed technical maturity as a result of my _courses_. Could I have
learned them on my own if I had known exactly what to study? Maybe. Were there
bad courses along with good ones? Yes. Are there bad students that still get
degrees? Yep. Was it worthless? Absolutely not.

Example experience that could not have been had outside college, by
definition: after taking the introductory computer science with perhaps more
enthusiasm than was wise in my first semester, I TAed the course for my
remaining 5 semesters. Obviously, my experience was not typical. On the other
hand, if your experience _is_ typical, then you certainly need to learn from
courses rather than trying to do it all through self-study.

~~~
hga
" _after taking the introductory computer science with perhaps more enthusiasm
than was wise in my first semester_ "

That'll teach you ^_^.

MIT's new core courses are so teaching intensive the department is enlisting
undergraduates to help and I think it's generally been possible for a few
undergraduates to get some formal teaching experience of that sort.

I've always done some teaching informally and found the experience to be
_extremely_ valuable, it teaches you all sorts of things including a much
better understanding of the subject itself.

------
tsally
You might be interested in this thread:
<http://news.ycombinator.com/item?id=901782>. My response in that thread:
<http://news.ycombinator.com/item?id=901808>.

A couple additional notes. If you're interested in creating things, a small CS
program probably wont suit you. Those tend to be far more theoretical; what
you want is a CS department with strong systems. You might also consider
getting a degree in something else and minoring in CS and/or programming on
the side. Finally, undergraduate research is accessible at any research
focused university and I definitely recommend you participate. You'll have to
knock down a ton of doors to get a position, but it's worth it.

Feel free to email me if you want to know anything else about UIUC or just
have questions in general!

~~~
cpher
I highly recommend UIUC. I grew up there, worked there, and took a CS course
there for fun. However, I wouldn't reject small schools outright. A strong
liberal arts college will open your eyes to lots of opportunities and you'll
definitely have a more personal relationship with the faculty. Even at schools
like UIUC, you'll feel like a small fish in a big pond, and trying to make
sense of it all may be overwhelming.

~~~
tsally
I only reject small schools when it comes to technical disciplines like CS.
Size and funding make all the difference when it comes to the courses offered
and undergraduate research opportunities. I actually prefer small, liberal
arts schools for all other types of education. :)

------
ecuzzillo
Carnegie Mellon University is quite good at what you want, especially if you
maximize the courses you take and the research you do in that direction, but
it's still good for that even if you don't. There are a lot of really good
hardcore coding classes, and also a _lot_ of really good applications classes.

My impression is that most of the top-ranked CS programs also do this,
although at some of them it's more optional than others (i.e. you can get a CS
degree without necessarily having written very much code). CMU is arguably the
biggest in terms of number of pure CS faculty, and one of the only ones with a
CS "School" with subdepartments (including CS (aka "misc"), machine learning,
robotics, language technologies, software engineering, and some others I
forget).

Basically everywhere I've heard of that's an actual university does let
undergrads touch research. But, if you're interested in jumping straight to
industry, research may or may not be what you're after; you might be better
off with internships each summer and then your own side projects.

Also, the Java/C++ thing is more about employers complaining that they see
people coming out of random universities with CS degrees but no ability to
code. There are probably a fair number of universities that will let you
graduate with only a JavaSchool coding level, but most places also _allow_ you
to get a vastly deeper education if you don't dodge all the good coding
courses.

TL;DR: Yeah, go to a good CS program, it'll be worth it, and you'll be a lot
better at life, programming, and thinking afterward.

------
bg4
Check out Purdue University and the University of Texas at Austin - both
excellent schools. I'm biased to Purdue since I graduated BSCS from there but
it's a great (read: rigorous) school with a very 'collegiate' atmosphere.

~~~
tomh
+1 to UT - while I did not get a BSCS there, I did take some courses from the
program. They do start you off with Haskell, now a respectable equivalent of
MIT's SICP course. You could even work for a while in Austin and become a TX
state resident, after that your tuition rates go way down.

------
psyklic
The key at a university is that it will provide you resources to do whatever
you want to do ... you just need to ask and show passion, because 99% of the
students won't. Most people think that it is a very formal structure, but they
will often bend rules to accommodate you if you are genuinely interested in
learning. It's just up to you to take the initiative.

Want a research position over the summer? Ask professors and show them your
interest -- most freshmen will assume they can't, won't get to know
professors, and won't show passion. This is how I got a paid position as a
freshman.

Want to do applied stuff? Join a club such as DARPA Grand Challenge, RoboCup,
etc. Or, start a club. Or, you will likely have free time to work on personal
projects (moreso than at a full time job at least). I started a RoboCup group
my freshman year, met a lot of like-minded people, met a lot of professors.
What a great thing to do to meet people and learn what the university has to
offer.

Want to take an interesting upper-level class but don't meet the formal
prereqs? Just ask, they'll probably let you in.

Also, I must say -- it is completely inaccurate that universities just "teach
Java and C++". Almost everywhere, this is likely only a first, test-outable
introductory course. The topics you said you were interested in should be
available at any decent CS program as electives.

------
willscott
One point that is seems to come up over and over is that there really is no
classroom substitute to actually building something and making it work. Any
research you do in college is going to be very different from a software job
you get in industry. (There are exceptions of course - industry research labs
like microsoft research or maybe even Google can get pretty close)

However, college is still going to be a very valuable time in your life. It
often is the catalyst to forming a social network that continues through your
life, and also lets you see how the work you'll do fits into the larger
picture of human knowledge.

Big picture aside, one of the best things you can do in college is get summer
internships (hopefully every summer). That's going to give you some experience
with building real system, provide a low commitment way to figure out what
type of work you want to do after you graduate, and introduce you to people in
the industry that can be invaluable in getting or finding jobs.

Research is also great, but make sure that you're working on something that is
valuable to you. It is definitely possible to work on real problems and to get
published as an undergraduate, but it's also very easy to end up working on
someone else's project, and not getting much out of it.

I got a great education at Harvey Mudd (hmc.edu) and would encourage you to
look at them. It's a small school - which also means no graduate program,so I
was able to do research directly with professors. I had a job lined up at
Google when I graduated, and can't imagine being prepared for where I am if I
had skipped college.

~~~
jbeda
I'm also an HMC alum working at Google (and Microsoft before that). HMC has a
program called 'clinic' where students work on semester long projects for
partner corporations. It was useful to get an idea of how a real project with
industry works. Don't discount schools with programs like this.

Also -- +1 on internships. They were super valuable for me. For example the
summer I spent in the theoretical physics dept at Fermilab helped me figure
out what I didn't want to do :)

------
adrianscott
A few quick questions to help you think through your decision:

\- does your 'refusal to buy into this idea' prevent you from seeing
additional options?

\- is it really a binary question, or are there a range of possible solutions
to your need that include different mixes of university and work

I got a Ph.D. at age 20 by being a bit creative with the institutional side of
things. My university, rpi.edu, brought me in as a transfer student from
nowhere and gave me credit for university-level classes i had sat in on at
skidmore college and through johns hopkins cty program. i finished the last
2.5 years of my undergrad in 2 years by cleverly managing course requirements
and taking a few extra classes. Then i cranked through my ph.d. while getting
sent to japan for a summer through the nsf, and to conferences in Nice and
Hungary.

if you set out a list of all that you would like to do and view university
more as a mix-and-match opportunity, there are a lot of ways one can do
things, that can be more productive than the traditional route.

for example, one could camp out in palo alto and attend a pile of stanford
classes and events, plus tech industry startup events, plus ...

for two years i was on a campus without being a student there... but hey, some
people like to get a degree and have a student i.d. card. at what cost
though... food for thought ;)

------
vlad
Check out University of Massachusetts Amherst: <http://cs.umass.edu>

Read about courses offered this fall: [http://www.cs.umass.edu/ugrad-
education/fall-10-course-descr...](http://www.cs.umass.edu/ugrad-
education/fall-10-course-descriptions)

You can complete one of the 11 tracks leading to a B.S. in Computer Science.

As well, you can complete the new B.A. in Computer Science. Instead of
requiring Calc I, II, III, Linear Algebra, and three science courses like
Physics I, II and Biology, this program requires only Calculus I and II for
Life Sciences. The B.A. is designed for students who want to double major in a
non-science field, and are required to take four courses relating to
computing/technology in that second major. (As well, the student must take
five Computer Science electives, like students pursuing B.S. degrees do.)

It's not difficult to do undergraduate research by doing an independent study
with a professor for a grade, or by working for a professor for money during
the school year (which is probably a bit harder than for credit). One would
probably be expected to have completed the introductory coursework (data
structures, algorithms, discrete math), of course. Yet another option is
joining the honors program and writing an honors thesis, which could tie into
the undergraduate research you could do.

In the summer, there is an official REU program with a stipend and housing. On
top of that, professors also frequently have funds to pay
skilled/upperclassmen undergraduates for conducting research, similar to what
happens during the school year.

------
eel
I just graduated (in computer engineering, but more interested in computer
science) from an average (typically ranked ~60) department for computer
science, but I am glad I went through the university. I agree with much of
what several others have said, so rather than rewrite what has already said in
the those posts, I'd just like to add a couple things.

First, undergrad research. I was able to participate in undergraduate research
at my university. They offer an engineering (including CS) undergraduate
research initiative for students to work with faculty mentors, and some
professors receive NSF REU grants which allow them to fund undergrads for a
semester or more to do research with them. These opportunities don't jump out
at you, however, and you need to take the initiative to talk to professors and
discover the opportunities. Don't think you are too "inexperienced" either -
you can start looking in your first or second semester. If you decide to apply
for graduate school in a few years, you'll find that having undergraduate
research is a huge plus for your application.

Also, yes, my school offered C++ and Java as the required programming
languages. However it's not going to matter what they offer - you really learn
programming once (not a trivial task), and from there, you can pick up
whichever languages you need (a comparatively trivial task). Most importantly,
you should learn outside the classroom -- make your own
projects/applications/websites or contribute to existing projects. I did. This
helps in a lot of aspects -- it trains your motivation, improves your skills
in programming, can be used as resume fodder, and so on.

Do live on campus, at least for the first year, if not more.

------
cpher
Try thinking outside the box. I have a BA in Biology and MS in Environmental
Science, yet I'm a software developer today--applying my knowledge of the
engineering and environmental disciplines to computer science. It sounds like
you're interested in applied computer science and I can't think of a better
way to do that than to merge it with some other discipline. Even schools like
MIT (spec. the Media Lab) apply CS principles to solve industry problems or
blaze new trails.

Since hindsight is 20/20, I wish I'd double-majored in CS and biology (back in
the 90's), but you eventually find your niche and you can always keep
learning. I took a summer school course in CS at U of Illinois U-C while
working full-time and married. So don't think that all of your knowledge will
come in those 4 years.

I think the best argument for college is the immediacy for learning,
networking w/ classmates (not social, rather intellectual), and developing the
self-discipline to meet a well-defined goal. My wife has a doctorate in Music,
and watching her accomplish that goal was enlightening. Yes, there's lots of
b.s. to wade through, but that's exactly what's waiting for you on the other
side.

------
npp
To get some candidate schools, you may want to take a look at rankings (e.g.
US News) for Ph.D. programs in computer science -- if you're actually sure you
want to do CS, as people's tastes often change in college. The specific
rankings are not to be taken seriously, but the top, say, 50 schools on such a
list will all have a lot more than a "Java and C++ curriculum", and schools
with strong Ph.D. programs usually offer plenty of undergrad research
opportunities as well. The usual suspects are on this list but there are many
others you may not know about.

This at least avoids the "Java/C++ problem", but of course, there are many
other very important factors to consider in choosing a school, and in
particular, you should go with the best all-round school you have as an
option, not the one that has a slightly "better" CS program but not much else.

------
JangoSteve
In general people like to root for the underdog. Especially here on HN, people
like to root for the person who defies all odds to achieve success, the guy no
one would have expected to become successful. Why? Perhaps because when we see
it, it makes us feel as though we can do anything we put our minds to. And we
don't need to go massively in-debt to "the man" in order to do it.

That being said, I posted an essay to HN not long ago which received a lot of
positive feedback from the general public. However, it received not so much as
one up-vote here on HN and vanished into obscurity. It was entitled "Want to
be an Entrepreneur? College May Help."

<http://news.ycombinator.com/item?id=1315158>

Just remember, as great and intelligent as the HN community is, it is still a
very specialized group of people. No matter how unbiased a given community is,
you will never find very diverse points of view as long as you solicit only
one source for information.

------
fburnaby
> I crave the challenge ... Are there schools out there that will let
> undergrads touch research and tackle the problems that current computer
> scientists face today?

If you're actually as interested as it sounds you are, then go. Lots of people
have found university to be a waste of time, but I can't help but think that
it's mostly been the people who waste their time there.

I think it's a shame that so many uninterested people get 'duped' into going;
_they_ likely won't get much out of it, and it's horrible that their guidance
counselors (or whomever) are misleading them into thinking it's a necessary
step. But there's so much cool stuff that goes on there, and profs _will_ let
you participate in it if you actually show an interest.

------
h3h
I wouldn't recommend skipping college if you can get in and either afford it
or are willing to incur the debt. Even after $25K+ of debt and 5 years of
undergrad for two degrees, I don't regret it.

If I had to do it all over again, I think I would have angled very hard for a
Symbolic Systems degree from Stanford (<http://symsys.stanford.edu/>). It's a
very cool cross-disciplinary program and, if you can afford it (mentally,
financially), you can cram in more CS classes or whatever strikes your fancy
along the way.

------
m0nastic
I'll throw my vote for Worcester Polytechnic Institute (<http://www.wpi.edu>)
as a school that has a diverse undergrad CS program.

It also has a wealth of other engineering students (chemical, electrical,
mechanical, and industrial) who are forced to co-mingle to avoid going outside
in the awful Worcester winter.

Despite not being as well-known as some of the more famous engineering
schools, in the years since going, I've run into a lot of really sharp folks
who also went.

I'd at least recommend it as one to look into.

------
bdickason
Don't go to Purdue. Whatever you do, avoid it at all costs for CS.

Yes, you will learn Java. Yes you will learn compiler design. But you will not
learn ANYTHING about real world programming and you will find very few people
with an entrepreneurial spirit.

If I had to recommend schools it would go in this order: 1) Stanford 2)
Carnegie Mellon 3) Anywhere in NYC (only because you are exposed to the
opportunities of the city, regardless of school)

~~~
bg4
Purdue has a thorough curriculum and they've made changes to help students
better choose the direction they want to pursue (whether it be traditional
theoretical computer science or something more applied, like software
engineering).

[http://www.cs.purdue.edu/academic_programs/undergraduate/cur...](http://www.cs.purdue.edu/academic_programs/undergraduate/curriculum/bachelor/index.sxhtml)
<http://www.youtube.com/watch?v=HuY5XeEhX4g>

~~~
bdickason
They may have made some significant changes, but the curriculum that I see on
the site you linked still looks very similar. Relational database are taught
in 4th year and the curriculum as a whole has little to no grounding in modern
technology.

If you're looking to learn basic programming skills, it's great. If you want
to be part of a cutting edge program, as the OP seems to, look elsewhere.

------
ajju
Georgia Tech is great but tough. You will have to start early and work hard to
do good research, but the good thing is, they have a formal program for
undergrad research. Check out : <http://www.cc.gatech.edu/research/undergrad/>

------
miratrix
Would you mind going out of the country? I don't exactly know how University
of Waterloo's co-op program works for an American working in Canada, but I'd
highly recommend University of Waterloo (in Waterloo, Ontario, about 2 hours
from Toronto, 4 hours from Detroit, and 2 from Buffalo).

Before I start, I'll start by stating that I'm a U. Waterloo alum, though from
Computer Engineering, not CS... so what I'm describing in terms of their CS
programs might not be entirely accurate... and that I might be a bit biased.

1\. Co-op (or internships). University of Waterloo's CS and engineering
degrees are all 5 years long, with year-round 4 month terms in which you're
either studying or working. You have 8 study terms and 6 work terms in those 5
years, and in the work terms, you're hired in real life companies and work in
real life jobs working on real life projects, for companies like Google,
Microsoft, Qualcomm, Research in Motion, etc. Not only that, you get paid a
decent salary (enough for me to completely cover my tuitions + living costs)
and wide network of people to start from when you're finished your degree and
a nice thick resume to get balls rolling. The University actually hires a
bunch of people to go out and look for jobs, and if you're good, you'll
several offers from some of the top names in tech companies. The flip side,
though, is that companies will expect real work out of you.

2\. Waterloo's CS department is actually under the Faculty of Mathematics,
which shows you how seriously they take the mathematical roots of CS. I've
been told that they're very mathematically rigorous in their studies, and
their success can be seen from the Waterloo's rankings in ACM programming
competitions, as well as experts who teach in the field (like the people who
invented elliptic curve cryptography, etc)

3\. Waterloo has very liberal policies for Professors getting to keep much of
their research, patents, and IP on their own instead of assigning it to the
University, so a lot of professors are looking to get started on their
research and spinning out. You'll see a streak of entrepreneurship from both
the students and the faculty there.

4\. At least in the computer engineering curriculum, they never teach you any
computer languages. The first introductory class I took was in C++, but basics
of C++ was covered by a TA in help session. The data structures and algorithms
class is in Java, but the language itself was covered by another TA in a
single help session while the professor focused on the actual data structures
and algorithms, not how to write and compile java code. Through your 5 years,
concepts are taught, but not the specifics... or that's at least how I felt.
After the 5 degrees, I think I got most of the basic concepts to the point
where I understand how computers actually work at a fundamental level, and I
know how to get through the "abstraction" layers that so many people seem to
have issues with. If you understand how a transistor works, it'll give you a
better understanding of why writing to a flash device is different from other
memories. If you understand how flash devices work, then it'll give you a
better understanding of why you need different file systems to support it. If
you understand how the file systems work, it'll give you a better
understanding of why, for instance, opening a file with a million small files
might be slow in some systems... and so on and so forth. I think one of the
biggest thing that I got out of the school (besides not having a debt + thick
rolodex + all the intangibles like friend network, etc) was 5 years of just
learning and thinking about the concepts are all inter-related, so that when
something fails, you have the required tools and knowledge to actually dig
into it and figure out what's underneath all that abstraction that everyone
takes for granted.

I know this is little bit long winded, but I'm of the opinion that the 4 years
spent in college will not be a waste... On the flip side, it's my
understanding that the college qualities vary wildly in US (I once talked to a
Professor who turned down a tenure track position at one US college where they
were told they don't have classes on Fridays because of Football Pep Rallys
are on Fridays!!!). BUT, if you find a right school, just the people you're
going to meet and befriend I think is worth it all by itself. It's really
going to be what you make out of it.

Hope this helps.

~~~
icegreentea
I am currently a systems eng student at UW. Would like to add a bit to your
comment. In regards to computer science and the software engineering courses,
students are taught specific languages. Nearly all Engineering programs intro
to programming courses are in either C++ or C#. Software Eng plays with C and
Scheme. CS courses can involve three different languages during the first
year, and you're expected to actually know how to use Scheme (for some
reason.. this applies to Software Eng as well).

My understanding is that upper year courses are pretty language agnostic. They
just want to make sure that lower year students actually have some programming
knowledge in a common language, cause when you don't, your coop opportunities
are greatly reduced, as any first term mech/civil eng student will tell you.

------
known
<http://en.wikipedia.org/wiki/McGill_University> is ranked 18th in the world
and above several of the ivy league schools for just $3500/year

------
elblanco
If cost is an issue, go to your local state uni (not private). The education
will at least be credible and diverse, and you'll earn back your tuition in
just a couple years out. Depending on where you live, some state schools are
among the best in the country. It's terribly hard to justify going out-of-
state or to a private school on a purely monetary basis unless it's someplace
really very special or you get a free ride. It can take something like 12-20
years to earn the tuition back compared to a state school grad and the
salaries usually end up meeting parity within 3-5 years anyway.

As others here have said, what you describe is Software Engineering not CS.
But if you learn CS, Software Engineering comes pretty easily (which the
inverse is not necessarily true). Most credible CS programs will give you some
exposure to SE as part of the curriculum. If you find a program with very
little math, it's the wrong school. If you find a school with classes like
"Regular Expressions" avoid it. However, if you find a program with a lot of
math, and courses with names like "Formal Evaluation of Algorithm Design" and
"Regular Languages, Context Free Grammars and Compilers" it's probably fine.
Expect to take lots of course you don't find immediate application for, like
English Lit, Social Sciences or Communications. Take those classes and ace
them. They'll be cakewalk compared to the weedout classes you'll have to take
(most likely something like "Data Structures and Analysis or Algorithms" or
"Concurrent Processes and Distributed Applications" or whatever your school
has chosen). Expect to spend 40-60 hours a week on those classes and be one of
the 10% remaining in the class at the end of the semester.

Most good programs will take you through the entire computation stack, from
designing digital circuits to ASM and machine code, to C and/or C++ in terms
of modeling computation, operation systems and concurrency, networking
communication theory, algorithms, graph theory, Chomsky's hierarchy of
languages, probably some alternative computing principles and languages. If
you haven't spent time in at least a half-dozen different languages, from
Prolog to Lisp to C++ to ASM, it's probably not a good program. Expect to
write at least one toy Operating System, and design at least one function
8-bit clocked calculator (if you are lucky it'll be a stored memory computer
or a co-processor of some type). You'll need to take about as much math as a
math minor. If you can, take the extra 2 or 3 classes and just get the minor.
It'll put you out a whole semester since you'll be doing heavier loads than
most majors.

At least at my school, there was an informal hierarchy of undergrad majors
that indicated relative hardness (and therefore respect): Math > Physics >
EE/Engineering > Computer Engineering > Computer Science > Software
Engineering > Information Systems > Biology > _all soft sciences like poly sci
and intl relations_ > Art > Criminal Justice.

This hierarchy generally represents what a person from one major can do in
another. For example, a Math major can learn to be a Computer Scientist
without too much fuss, but not necessarily the other way around. A French lit
major wouldn't likely survive an EE curriculum intact. Everybody knows this
hierarchy and it can sometimes be the bases for clique formation and
preconceived judgement between members of different majors. It's weird, but it
happens.

Computer Engineering is a good applied program if you want to stay out of
computational theory for the most part and just build stuff. It'll probably
have lots of circuit design work and you'll spend lots of time with embedded
systems.

Research will more than likely happen as part of your MS program (or if you go
into it, your PhD), not your undergrad. But you better be ready to hyper-
specialize pretty quick if that's what you want to do.

Don't pick a school based on name brand recognition, pick a school with a
solid program -- some well known schools also have solid C.S. programs, most
do not. Do a B.S. program. If your school offers such a thing as a B.A. in
C.S. run far away and don't look back.

It will be challenging, and even if you don't end up doing pure C.S. work,
you'll be in good shape to do most of anything else, even non-technical work.
The best courses I ever took in my C.S. program were the required history
courses. My two semesters of Chinese history have probably made me a $80k in
salary doing research work for technical assessment papers early in my career.

If you get a chance to do a study abroad program for a summer, do it. Even if
you have no hope of ever making that money back. Those programs will also
really stick with you. Consider teaching English after graduation for a year
also in a foreign country. That stuff will make you ready for any crap the job
market will throw at you.

~~~
Locke1689
_At least at my school, there was an informal hierarchy of undergrad majors
that indicated relative hardness (and therefore respect): Math > Physics >
EE/Engineering > Computer Engineering > Computer Science > Software
Engineering > Information Systems > Biology > all soft sciences like poly sci
and intl relations > Art > Criminal Justice._

Former physics minor: your hierarchy is useless. Advanced classical mechanics
(a weed-out course) is no harder than EECS 310 (discrete math).

~~~
elblanco
I'm surprised classical mechanics would be the weed out course. I found
discrete mathematics quite a bit harder than that.

But then again I found field physics and quantum physics quite a bit harder
than discrete mathematics (and relativistic physics relatively straightforward
no pun intended). I could probably still derive most of the equations for
classical mechanics if I really sat down and worked at it (it's been many
years since I looked at any of that material) but would definitely have a hard
time with Maxwell's equations.

I didn't create the hierarchy, but I think it was the perceived hardness of
the applied calc in field physics and applied dif-EQ in quantum that led the
Comp Sci folks to hold the Physics majors in higher esteem (since we had to
take like 9 credits of Physics and at least 2 lab courses at my school).

~~~
hga
I'm sure it depends on the student; I sure remember my physics major
girlfriend struggling with Lagrangian mechanics in her advanced classical
mechanics course. 3 decades after doing basic classic mechanics I can see the
utility of Hamiltonian mechanics but I'm not at all sure I'd want to tackle it
(chemistry major here ... I wonder where we fit in the hierarchy).

~~~
elblanco
I can't remember where chem majors fit in. I think it was higher than bio
majors.

~~~
hga
That's what I remember as well; if you limit it to science, I've always heard
Math > Physics > Chemistry > Biology.

I've never heard of a ranking that mixes science and engineering before the
one you mentioned; at my school, at least, there was generally mutual
admiration, with math and physics ranking above any engineering field.

------
looprecur
_I have been reading an unfortunately large amount of articles here on Hacker
News seemingly deterring prospective students like myself from entering a
university, especially from the field of Computer Science. They cite large
tuition/living costs and "wastes of time" as not worth the potential four year
education gained. These articles and blog posts claim that jumping straight
into industry is an acceptable and perhaps even favorable alternative._

I don't think this viewpoint is credible, and you shouldn't listen to it. What
is true is that, for many people going into college, it's a misuse (but a
required one, often) of time because they're destined for non-college jobs.
Widespread higher education is a waste of society's resources, and a lot of
colleges out there aren't very good. But this decision isn't about society and
its resources; it's about what's best for you.

What's best for you is _probably_ to get a college education. It's very hard
to get a decent job without one (and not so easy to get one if you have one,
but that's another story).

Read every post on this thread. The advice here is great, and a good CS
education will put you miles ahead (in terms of skill) of where you'd be
without one. If, for some reason, you end up at a school that doesn't have a
good CS program (a "Java school") then major in math and take the CS courses
you like, plus independent studies.

As for which universities and colleges are decent, there are about 200 good
universities and liberal arts colleges in the US, including most state
flagships. You don't have to go to an Ivy or MIT to get a good education, and
the drop off from Harvard to (for example) Penn State is measurable but not
that steep; the academic job market is so rough that a lot of brilliant
professors are ending up at middling universities. After you leave the top
200, the dropoff is much more severe.

------
cdr
The best university is the one that gives you a full ride scholarship.

