Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Ask HN: So What Universities Are Good?
32 points by davidalln on June 6, 2010 | hide | past | favorite | 67 comments
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 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?



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


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.


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.


MIT has a school wide UROP program (http://web.mit.edu/urop/) that generally grants credits during the school year and wages in January and summer, with the attractive bonus that a professor doesn't have to pay the stiff overhead usually required on the latter.

I would expect that as ramchip notes informal arrangements can be done most anywhere, although getting paid in any way other than experience may not be.

One maybe not so minor note: according to one school that is ABET accredited, only 210 in the US have ABET accredited CS programs. E.g. my home town 4 year public college doesn't have one, I'd have to go to a larger regional one 70 miles away.


> That's not computer science, that's software engineering.

If he wants something very "applied", there's also computer engineering. I've been doing research since my first year as an undergrad (mainly through Canadian research grants, which offer paid summer internships). We do mainly C++, Java, VHDL, Verilog, assembly, but there's fairly little actual language education - they teach the semantics, we learn the syntax by reading and trying stuff.

On the more CS side of things, we did state machines, graph theory, recursion, formal proofs, and a good dose of math: solving differential equations analitically and numerically, calculus applied to force fields, Laplace, Fourier, complex analysis etc. Of course there's also electronic circuits, networking, computer architecture, (object-oriented) architecture... It's possible to study more web-related things such as databases, but I'm in embedded systems so we don't really touch this.

It's as applied as you can get: I have co-authored several papers and I'm only in my third year. But if you want to do research, you'll have to work for it a little. Go speak to teachers, do projects on your own, etc. AFAIK it's possible pretty much anywhere, but you won't necessarily get paid for it or get to choose your topic.


You are right, I did not make myself clear. I was trying to keep my description as general as possible as to not make it entirely self centered.

By "diverse" I mean going beyond software engineering and touching on graphics, AI, simulation, AR/VR, hardware architecture, and so on. My main worry is ending up in cookie cutter classes for four years. Then again, my idea of what college is truly like may be skewed due to the romantic idea of higher education that is sold to us in high school.

Thanks for the suggestions!


As elblanco said, any program worth its salt will have most of those as requirements or electives, even tiny ones like Georgetown. You should be able to check the school's CS department's website and see what their curriculum looks like (example: http://cs.stanford.edu/degrees/undergrad/ProgramSheets.shtml). My email is my profile - if you want me to take a look at any specific school I'd be happy to.

More generally, I think the anti-education sentiment you mentioned is unfounded. I'm colored by my experiences, of course, but I don't think I'd be half the engineer I am today without the education I've had, and I'm not a stupid guy.


If your school doesn't offer graphics, AI and hardware architecture as either required coursework, or electives in the Junior and Senior years, it's probably not a good program.


I have lots of friends who went to Stanford and did CS/CE/EE and absolutely loved it. I visited occasionally and was extremely impressed with their ability to merge Business (real world) with academia. Most schools don't do this well.

Also my favorite Quake server (kitty1.stanford.edu) was run from a Quake CS Lab :)


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.


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


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.


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


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.


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


Or instead of independently reinventing the wheel while living in communal apartments we could just choose to learn from people smarter than us who have already invented the wheel. I'd rather spend an hour of my time learning reductions from a really smart person than four hours independently stumbling through the problem. Indeed, the more complex the problems get, the less likely it is that the problems are even solvable independently. Seems like you are trivializing the process of learning. The time savings I get alone from having access to professors is worth the cost of tuition. Not to mention the research opportunities.


I do agree with you; I was just taking the idea that "the value of attending university is in the connections you make" as assumed by the root of this thread, since I inevitably see that comment be used as a summary of these discussions. That idea implies that, if you don't care for the connections, self-teaching or learning in industry is somehow "good enough." And that thought implies that you could get the same connections, and therefore the same value, by just shacking everyone who would be attending the university together and letting them simmer in their own intellect.

While it's probably true in the marginal case—the 10x increase in tuition to go to an Ivy League school certainly doesn't cause a 10x increase in education, but it may well cause a 10x increase in connectivity—it's false in the general case. To simplify that: some university is good, but more university is not necessarily better. And you could probably get all the learning you wanted from just having your "apartment building" hire lecturers, and establish a good working relationship with professional research institutions (supposing most of the Ph.Ds, displaced, would end up working at Bell-Labs-like places.)


When you're in a good class with other smart people, you get to see their brains in action. You end up talking about interesting things with the classmates you like, and who like you. This is the foundation of a genuine intellectual network. It is difficult to obtain this seed network in any other way, except perhaps by email in a hopping open source project, or by getting into an interesting clique like Y Combinator.


True—I think I just have a problem with the fact that the University is the one in control of it. If, instead, the social network was the core organization and free to join, and the students rented out/purchased the buildings and equipment, and hired the lecturers and administrative staff, I can imagine it costing a might bit less and having a much tighter feedback loop in instructor, student, and course quality. (Plus, matchmaking would be made an explicit goal, rather than assumed.)


"True I think I just have a problem with the fact that the University is the one in control of it. If, instead, the social network was the core organization and free to join, and the students rented out/purchased the buildings and equipment, and hired the lecturers and administrative staff, I can imagine it costing a might bit less and having a much tighter feedback loop in instructor, student, and course quality. (Plus, matchmaking would be made an explicit goal, rather than assumed.)"

Students generally don't have any money. Even if those same students put all the money into your new group idea, there would need to be some form of central administration that manages all of the hiring, courses, etc. Also, it's not really free to join if the students need to rent the buildings, equipment, and lecturers (and wouldn't be fair to the ones that pay if it was).


1. Student loans and such—all the machinery students today use to get their tuitions—would still exist; they'd just be given directly to the student. 2. It would be a workers' cooperative, with the labor being learning. 3. Joining and participating would be different steps. The network would be free to join, but each class would still cost money, raised and pooled to create the class (in the fashion of groupon.com)


"1. Student loans and such all the machinery students today use to get their tuitions would still exist; they'd just be given directly to the student. 2. It would be a workers' cooperative, with the labor being learning. 3. Joining and participating would be different steps. The network would be free to join, but each class would still cost money, raised and pooled to create the class (in the fashion of groupon.com)"

As a student, I would still need to pay for infrastructure, a professor, and any other costs associated with the class. In addition to this, most students have no idea what they want when they start college. They need to be guided. Unless there is some sort of central authority creating all of the classes, I think it just wouldn't be practical.

If you joined for free, what would be the purpose unless you were going to actually get an education/pay for class?


> If you joined for free, what would be the purpose unless you were going to actually get an education/pay for class?

For the connections. That was my original point.

> most students have no idea what they want when they start college

They should speak to a guidance counsellor, then. No one invests in a business not "knowing what they want"; why should investing in an education be any different?


"For the connections. That was my original point."

Is it really that difficult to find these connections on your own? sites like meetup.com have local groups where you can just go and meet up with other like-minded people. In some groups (especially college towns), many are students. I have gone to many different groups and made lots of connections in my area. I graduated and got my bachelor's degree in '06, but there are many people I meet that have not. Most of the time, the subject doesn't even come up.

"They should speak to a guidance counsellor, then. No one invests in a business not "knowing what they want"; why should investing in an education be any different?"

I really don't see how this is any different than a university. You would still need some sort of central authority that you would be giving all of your money to (and they would be managing classes and everything else).


They still function as a better matchmaking service than what you'd accomplish by pretending to be a student, I bet. Unless you were really good at pretending to be a student.


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!


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.


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. :)


I also recommend UIUC. They have an excellent, rigorous program with an incredible student ACM chapter. The ACM chapter does lots of great technical projects that really help polish up your skillset (plus the projects are loads of fun) UIUC grads were highly regarded at companies Ive worked at (cs program is generally ranked 5th, ee is highly ranked as well)


Similarly, if you're interested in Northwestern University (per that thread) you're welcome to contact me. I am an undergrad and also the current ACM chapter president there.


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.


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.


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


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.


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.


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 :)


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 ;)


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

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.


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.


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.


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.


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.


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


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.


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.


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)


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.youtube.com/watch?v=HuY5XeEhX4g


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.


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/


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.


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.


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


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.


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


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


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


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


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.


Having art in that same hierarchy as physics seems kind of beside the point. There are plenty of good physicists who wouldn't be able to pass an art course (and vice versa).


I suppose. I didn't make the hierarchy, it just seemed to be informally observed. There were definitely a fair number of people in the technical fields that took art courses for an easy A, almost no artists ever attended a course on discrete circuit design, or took a course in algorithm evaluation.


Well, I guess it depends on how tough the art courses are. My point was just that becoming a good artist is as hard as becoming a good electronic engineer. But if the art courses aren't rigorous then I guess that fact isn't relevant.


I'm not an artist, and I'm likely influenced by the perceptions (fair or not) of my alma mater. I have taken a few art courses for hobby and thought they were fun. I wasn't great, but probably nothing that practice and perseverance wouldn't overcome. But could you elaborate a bit on what might make an art major hard? Honest question, I really have no idea. To me it seems like mostly learning technique and practice practice practice. But I'm sure that a B.A. in Fine Arts involves something more than an extended 4 year crafts session.


>But could you elaborate a bit on what might make an art major hard?

I'm kind of baffled by this question. It's very difficult to create good art. If it is necessary to create good art in order to get an art major, then getting an art major will be correspondingly difficult.

>To me it seems like mostly learning technique and practice practice practice.

You could say the same thing about learning a musical instrument. I guess it's true that with enough practice, pretty much anyone can learn to play a musical instrument with some degree of competence. But that doesn't mean that it's easy to become a good musician, or to reach a standard that's high enough for a music major.

Come to think of it, you could say the same thing about math (at least at the undergraduate level). Solving differential equations is largely about learning a certain set of techniques and practicing them.


I don't think I said anything about being "good" at art. There are sadly a great many artists that aren't particularly good.

I don't know what the admission standards are to get into an undegrad art program, but at least at my alma mater, there are a great many pieces of junk littering the grounds that are apparently supposed to be showpiece works of the art students, apparently actually being "good" is not a prerequisite.

I'm just not sure what exactly is "hard" about getting an art degree, and I'm perfectly willing to say that's because of my own ignorance. Some of the art history classes might be toughish, perhaps learning specific techniques, or comparative art across cultures or something. But nothing more difficult than say, a technical writing class.


I think that it's hard to get an art degree because you need to be able to produce good art in order to get one.

Granted, you don't have to be very good, but then you don't have to be a very good physicist in order to get a physics degree.

>there are a great many pieces of junk littering the grounds that are apparently supposed to be showpiece works of the art students, apparently actually being "good" is not a prerequisite.

What if undergraduate work in math and physics were put on display? Would it necessarily be any more impressive? You don't expect undergraduates to be world-class physicists, and you can't really expect them to be world-class artists either.


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.


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




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

Search: