Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Can anyone with a CS undergrad from an elite US college (Stanford, Berkeley, MIT, Carnegie Mellon) comment on whether they feel their undergrad covered 100-200 hours worth of these subjects?

As someone with an Australian CS degree, I feel like my curriculum covered less than half of this properly.



Let's see; a one semester class is 3 hours/week, 15 weeks, or 45 hours of lectures. The semi-official ratio was to expect 2-3 hours of work in addition to the lectures (haha, yeah, I slacked off a lot), so that would be 135-180 hours. The books chosen sound appropriate. Sounds about right to me.

This was UT Austin, which may or may not, now or ever, be an "elite US college", and it was 30 years ago. (Holy crap, where's my walker?)


That's definitely strange. I studied at a university in the Netherlands which implemented what I think was a European standard curriculum, and what this article mentions is a subset of the first two years of the undergraduate degree if I remember correctly.

Some elective courses are missing, and AI though it is mentioned. We also used many of the books mentioned here. Also back when I did it there were more seperate math courses that we shared with the maths undergrads. I know that they stopped doing that after I graduated.


Undergraduate studies in the US in general are very different from in Europe.

I did my undergrad (EECS) at Imperial and MIT (for my final year), and the difference between the two was pretty enormous. My home department expected me to take five graduate classes (plus some undergraduate classes for "light relief") over the course of my year at MIT, something the other undergraduates there thought was very unusual.

In general US undergrad is much broader than in Europe, and doesn't go into as much depth, even though a US bachelors is a year longer than a European one. Not necessarily a bad thing, it just depends on what you consider the point of an undergraduate education to be; I'd say that most European universities try to structure degree programs which can funnel you straight into research or industry without having a sudden step up (the step up from undergrad to graduate studies in the US is pretty huge) whereas the US thinks it's more important to develop yourself in a broader range of areas rather than see the degree solely as a means to an end.

They both have strengths and weaknesses (having experienced both) and I don't think either can be said to be better.


I feel like a lot of my coursework was overstuffed with learning and re-learning waterfall vs agile, and fluff subjects like 'user-centred design' and 'professional computing practice'.

The latter was basically 'how to make a resumé' and 'how to not be an arsehole in email'.


That sounds like I might have been a professional education instead of a scientific education. Nothing wrong with that, you could get a full computer science degree from our university and not be able to code for shit. You definitely can't hire university grads blindly. You often see developers act tough about how knowing how a CPU works is important for being a developer, and it is, but knowing that doesn't make you a good developer. It just makes a good developer better.


Where was this?


MIT: A normal class will be 12 hours/week nominally. The average self-reported time is usually a little under this, in the 9-12 hour range. Most students are not taking databases or networking classes (not counting 6.033 which is a dud). Compilers, distributed systems, OSs are fairly popular classes but I'd hesitate to say most CS students take them. There are over 100 EECS classes offered each semester so there's a lot of variety in what people take outside of the requirements.


I'm currently studying CS at UNSW and half of these subjects I've taken relevant courses, and the other half are in my future. Where did you have your experience?


RMIT in Melbourne. UNSW is way better than the former, and from what I’ve gathered is the best program for CS in the country.


I went to Berkeley for undergrad.

Anyone in the EECS department who was serious about a future in programming took, at a minimum, two courses on algorithms / data structures (CS61B / CS170), one of which was required for the degree. I suspect that's partially covered by what any crack-the-coding-interview study course would try to teach you anyways (dynamic programming, tree / graph traversal; NP completeness and reductions probably less so).

In general, each CS course at Cal had ~3 hours a week of lecture, 1-3 of discussion / labs, and ~2-10+ hours of homework, varying on the individual and course (not to mention whatever auxiliary studying one might do for exams). With 15 weeks of instruction, that adds up to a minimum of 90 hours, but realistically, 200 might not even begin to describe some courses. A full courseload might look like 4 classes (potentially 3 CS classes + 1 humanities course) and is designed to be ~40 hours a week.

Agreed with the sibling comment that this list seems to have a number of notable omissions -- in particular, it looks to be very systems-oriented. But I also don't think that you _need_ all these courses to be a fully-fledged programmer. Sure, knowing how compilers / languages work might make it easier to pick up more languages, but learning languages across multiple programming paradigms (e.g. functional vs imperative vs declarative), which you'll get anyways if you follow this course list, is more valuable than implementing a recursive descent parser (which will make you really understand one language).

When I went there, Berkeley didn't have an undergrad course dedicated to distributed systems. But, to be fair, the MIT course listed is graduate-level. That seems to be the biggest outlier, as half the catalog consists of intro-level courses at Cal: Programming, Computer Arch, Math for CS, Algos / Data Structures (at least, the first half of the lectures mirrors CS61B; the latter half is closer to CS170).

If I had to suggest a sequencing based on the course parallels, I'd go with:

Core: Programming -> Computer Arch, (Math for CS -> Algorithms / Data Structures)

Intermediate: OS / Networking / DBs / Compilers

Advanced: Distributed Systems (probably want OS / Networking as prereqs, at a minimum)

But, I'd expect a small portion of undergrads took all of the intermediate topics, much less distributed systems.

Regularly-offered upper div courses that evidently didn't make the cut, off the top of my head: Security (this is a big one, IMO), AI, Graphics, Software Engineering, HCI, Computability / Complexity (automata theory among other things), Computer Architecture (beyond the intro-level treatment). Supposedly ML also started being regularly offered for undergrads (CS189).


I would say ML has blown up in the recent years. In addition to 189, all CS undergrads are now requires to take EE16A+B which, although focused on circuits, teaches a bit of linear algebra needed for ML; and some take in addition 126 (probability) and 127 (linear optimization).

To add on to the parent comment, a 4 unit class is usually considered to have a 12 hour workload per week (180 hours a semester). [1] Two caveats to this: 1. There was controversy in the past from a CS professor that students should actually be putting in 20 hours per week [2]. 2. With some project or pset heavy classes, I don’t doubt that 20 hours was irregular. For example with 162 (operating systems), every week we had a tight schedule of lecture, discussion, homework assignments, group projects, and possibly a midterm to study for.

[1] https://academic-senate.berkeley.edu/coci-handbook/2.3.1

[2] https://www.dailycal.org/2019/03/10/uc-berkeley-computer-sci...


Thanks for the detailed reply.




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

Search: