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

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: