Hacker News new | past | comments | ask | show | jobs | submit login
Ask HN: What are the best advanced computer science courses online?
345 points by st1x7 on Dec 1, 2020 | hide | past | favorite | 89 comments
It's easy to point to good beginner material like CS50 for example. But what about more advanced topics for non-beginners?



Stanford's experimental operating systems course[0], where you buy a Raspberry Pi and write your operating system on the bare metal by using the reference specifications.

"You should take this class if: 1. You write code well OR (you don't yet write code well AND have a lot of time to devote to the class); 2. AND you find these systems topics interesting.

The people that found the class valuable in the past were entirely drawn from this demographic. (In particular: I would not take this course if you were looking for an easier way to satisfy a cs140 requirement.) We are trying to go as far as possible as quickly as possible with a group interested in doing so." [emphasis mine]

[0] https://github.com/dddrrreee/cs140e-20win/


The actual page seems to be here now: https://cs140e.sergio.bz/syllabus/

Also of note is that it seems to be in Rust now.


Hmm, that actually seems to be an older version of the course? The page you posted is for the Winter 2018 semester, the page the parent posted is for Winter 2020.


Georgia Tech took this course added the missing assignments 4 & 5. You can find it here: https://tc.gts3.org/cs3210/2020/spring/lab.html


Holy crap that sounds fun. Thank you for the rec!


Does this have video?


> This is a lab-based class with no explicit lectures

I would assume not


This is awesome, thanks. I was planning to experiment with bare metal programming on x86 but, that'll be my entry point.


Have you done it without the video lectures ? How hard was it ?


It doesn't have video lectures. > This is a lab-based class with no explicit lectures. [source](https://github.com/dddrrreee/cs140e-20win/)


This is going to sound dumb, but in case this is something you could possibly get excited about: research and build chess engines. There is almost no part of computer science that hasn't at some point intersected with chess computers, from early forays into game theory, through close-to-the-metal optimisations like bitboards and vector operations, right up to the state of the art in deep learning. I genuinely think you can get a fairly complete CS education just by building a series of increasingly complex engines (and UIs!) and you will find yourself in the company of basically all the greats like John von Neumann, Alan Turing, Donald Knuth, Ken Thompson etc etc.


I was thinking about this last week and maybe like to try some time. How does one start out?


I would check out Michael Genesereth's course on general game playing [1] -- I don't remember if we specifically implemented a chess engine, but it's more or less exactly what you're looking for. Once you've mastered that, I'd move on to Mykel Kochenderfer's series on decision making under uncertainty [2], which extends to more state of the art approaches to the problem (ie. MCTS + deep Q learning + better encoders, which is basically what got us AlphaGo, AlphaStar, Atari agents, etc.). Once you've got that down (or before), you should start reading whitepapers.

Genesereth and Kochenderfer also have books on the subject; Kochenderfer's is extremely good (I haven't read all of Genesereth's).

[1] http://ggp.stanford.edu/

[2] https://web.stanford.edu/class/aa228/cgi-bin/wp/ and https://web.stanford.edu/class/aa229/cgi-bin/wp/


You need three things:

0. A function A(s) to generate actions (moves) A given a state s:

1. The state evaluation function v(s) to distinguish good from bad states. I would start by using only piece value, then add mobility, piece-field values, ... You can find a few simple elements of such a function here: http://manual.freeshell.org/gnuchess4/HEURISTICS

With this you can generate s'=as (Successor state is action a applied to state s) and choose the action a=argmax(v(s))

2. A simple minimax implementation that searches the possible moves https://en.wikipedia.org/wiki/Minimax

From there you start optimizing your both by adding additional features to the evaluation function and improving your search using pruning and caching


But also think about all the potential projects that branch off this! Say you want to code your own eval heuristics... how can you find what's significant? Well, let's build a database of games and plug them all into a decision tree or something and see what rules are most important to work out winning or losing positions. Now, what if that database has 1.7B games and is 412GB, like Lichess's? And what if you want to search it fast? So many fun problems to solve!


And this only takes into account Chess. General Game Playing (referenced by a sibling comment) allows in its simplest version to encode all deterministic games with complete information (which is an infinite set but includes Rock Paper Scissors, Connect 4, Checkers, Chess, Go, ...).

Now finding heuristics there given only the game description is a completely different set of problem but for quite a few Chess-like games it boils down to valuing pieces (proving that something is a piece is a problem by itself), positions and combinations thereof which again all are derived of "mobility", i.e., the number of possible moves in a given situation.

In that sense, piece value is a mere "maximum mobility" indicator per piece. Positioning is a "real mobility indicator" but not only affecting your own mobility but also reducing your opponents. Check is then a mere reduction of your opponents mobility, promotion is a great enhancement of your piece value and castling a way of reducing the chance of "immobilizing your position" via check.

TLDR: Machine Learning aside, you could also deduce all Chess heuristics from first principles.


The Chess Programming Wiki is one of the great wikis:

https://www.chessprogramming.org/Main_Page


CMU 15-445 Database Course and accompanying Youtube lecture series is a great intro to understanding the inner mechanism of a relational database.

https://15445.courses.cs.cmu.edu/fall2019/schedule.html


Coming back two weeks later to say thank you for this. 10 lectures in, and it's been one of the best courses I've watched in the last few years.


Thanks you for this, I managed to miss this page and thought they only had the Youtube channel.


If you're interested in low-level systems concepts and learning how to write exploits: I highly recommend Modern Binary Exploitation by RPISEC.

[0]: http://security.cs.rpi.edu/courses/binexp-spring2015/


Are there any associated lecture videos?


Advanced data structures: http://courses.csail.mit.edu/6.851/


I usually prefer reading over watching videos. Can someone recommend a book that covers all the topics in this course?


the page lists :

There's no perfect textbook for this class, but there are some relevant books:

Data Structures and Network Algorithms by Robert E. Tarjan (covers BSTs, splay trees, link-cut trees)

Open Data Structures by Pat Morin (covers BSTs, B-trees, hashing, and some integer data structures)


Is there any places these are used?


Yes... tries, suffix arrays, sketching, cache oblivious data structures and algorithms, splay trees, persistent data structures, etc. are used in a wide variety of places ranging from compilers to compbio to distributed systems, to give some examples. I know I've written applications for which I wanted to use some of these to get a nice speedup, but in most cases I just never got around to them. Of course you'll find ones that are more obscure too. I'm not sure how to give a more useful answer to such a broad critical comment though...


Tries are useful for IPv4 prefix lookup. Routers that don't have hardware acceleration use them. Indeed, some hardware devices map a s/w trie to analogous h/w structures (some use TCAMs). Also interviews...


Interviews.


So many interviews have a tries question and a recursion question.


This class isn't good interview prep. These are a mix of theoretically interesting and/or practical but somewhat difficult (not intro level) data structures/algorithms.


OMSCS by Georgia Institute of Technology is by far the best course I have come across. You get a degree too in the end. Caveat: It takes a lot of effort. It is like doing a full time course and the degree they award in the end is indistinguishable from a full time degree.


Not surprising for a program that is literally called Online Master of Science in Computer Science. It's a master's degree program, in computer science, delivered online, by a university.


+OMSA (Analytics) +OMSCY (Cybersecurity)

These are fantastic programs that cost only $7-10k. https://omscentral.com has reviews of the classes, for the curious. My personal favorites are:

- Reverse Engineering and Binary Exploitation

- Reinforcement Learning and Decision-Making

- Bayesian Statistics


Have you gone through it?


I'm 6 classes through it. Classes vary wildly in difficulty and applicability.

Favorites so far for me were AI4R (Ariticial Intelligence for Robotics) which is a more rigorous version of Udacity's Self-Driving Car course, ML4T (Machine Learning for Trading) where you implement various algorithms to optimize trading strategies, and ISYE 6501 (Intro to Analysis), which is a survey of various analysis techniques and ML algorithms.

Still have to take the reputed hardest course in the program, the General Algorithms course, the ML course, and an elective.

Worth the money, though I have had to skip a couple of semesters due to burnout. Work and this program are hard (for me).


I just complete my 9th class (GA) and have really enjoyed most of it. AI4R was great, but so was Adv Operating Systems and High Perf Computer Arch.


I've dropped out. It's a lot of work, but the hardest part for me was staying engaged with the process without in person interaction.

Pandemic has been hell for me, too.


How did the program try to get students to interact with each other and with faculty?


Piazza (forums) and office hours (bluejeans--think youtube livestreams but on a proprietary platform.

For me, this semester, I finished a group project where we coordinated over slack/google hangouts. After that project, I didn't have anything left to finish the semester. I felt like I was done because the reinforcement loops I get from work (virtual back-clapping) were done and I had a hard time separating that from the "here's the next task. Also no one is talking to you about what needs to be done."


I'm another dropout (loved some of the courses, especially the OS ones, have close-to-zero interest in machine learning, though, and that's maybe half of the class offerings), but to answer your question, all the courses I was in had a "participation" component to the grade where you were expected to ask/answer questions on the online forum thing for your class. There were also optional office hours, as I recall.

It was certainly nothing like just hanging out with colleagues in the cafe between classes, but for those (like me) who just can't go to a school like GT in-person, I'm glad the opportunity is available even though I'd say it's probably the hard-mode version of the program given the limited course catalog (not all courses are integrated into the program yet) and lack of in-person interaction.


Interesting. I would imagine that doesn't make you feel like your classmates are your peers, and it would be hard to make friends with them. Friendship or at least friendliness goes a long way towards motivating people to learn stuff. Moreover, networking is an important reason for going to grad school, but it seems like the school is not encouraging this.


Not typical computer science courses, but the following video series really improved my understanding of how computers work.

- Build an 8-bit computer from scratch video series - https://eater.net/8bit

- CPython internals: A ten-hour codewalk through the Python interpreter source code - https://www.youtube.com/playlist?list=PLzV58Zm8FuBL6OAv1Yu6A...


Wow that CPython course looks interesting


CMU's Ryan O'Donnell's YouTube channel certainly deserves inclusion on any such list: CS Theory Toolkit, Street Fighting Math, Quantum Computing

https://www.youtube.com/channel/UCWnu2XymDtORV--qG2uG5eQ


I have to thank you for such useful link and course. Thank You.


Mining Massive DataSets (MMDS) from Stanford professors.

Videos: https://www.youtube.com/playlist?list=PLLssT5z_DsK9JDLcT8T62...

Book: http://www.mmds.org/


I remember reading that book in 2012, and it absolutely blew my mind.

The map reduce stuff hasn't aged well but the model for thinking about complexity in distributed systems is worth the price of the book alone.


- CMU's database systems courses on Youtube. Even the intro one is pretty advanced.

- MIT 6.824 Distributed Systems also on Youtube


I’m about halfway through 6.824 it has been challenging but very worthwhile.


MIT's 6.824: Distributed Systems (taught by Robert Morris, of both Morris worm and Viaweb/Y Combinator fame) is completely open and available online, and it includes video lectures, notes, readings, and programming assignments from as recent as Spring 2020 (including half of the lectures recorded from home as the pandemic strikes). The assignments even include auto-graded testing scripts, so you can verify your solution to the assignments.

https://pdos.csail.mit.edu/6.824/


Check out "Artificial Intelligence" on MIT OpenCourseware:

https://ocw.mit.edu/courses/electrical-engineering-and-compu...

OpenCourseware was historically one of the first offerings of its kind. I remember using it almost 20 years ago, and it's still a great offering.


Somewhat related, does anybody know any "beginner material for non-beginners".

Pretend I want to learn web development. I have been doing desktop programming and data analysis for many years, so I know all about programming but nothing about how a web-app works.

I would be looking for something that explained web apps assuming I know little to nothing about them, but not "how to program" because I don't want to sit through learning about loops or variables.

And pretend I'm also the type of person that wants concepts and not just tutorials.

Anything like that?


Any university web dev course assumes you can already program and has pretty good architecture summaries you can go off like https://stellar.mit.edu/S/course/6/fa19/6.170/materials.html or https://cs.brown.edu/courses/csci1320/lectures.html


perfect! me too.


Does anyone know of entire degrees/programs with the kind of rigour in these courses, especially with regards to assessments, and direct access to lecturers and tutors etc?

I'm going back to physical university and the driving factor was the inability to get help when I needed it. I tried a few coursera courses and many of my questions sat unanswered on forums for days and even weeks. I'd be happy to pay a reasonable premium for timely access to experts on the subject like you get at a real university.


I graduated from GA Tech's online masters in Computer Science and I felt like it was worth the time and money. Some courses were better than others, but it's constantly improving. I know a ton of people in the program too who are enjoying it. Think the entire program cost me a little over $8k USD. https://omscs.gatech.edu/


Sorry to ask, will this help with the H1B 20K cap?

I already have a Cs master but I would like to work in the US for a couple of years instead of Europe.

Also, I would like to be challenged again as web dev isn’t challenging, not where I work that is.


I have seen it does.


This seems to be as close as you can get without matriculating: https://bradfieldcs.com/csi/


I did the [Computer Architecture and the Hardware/Software Interface](https://bradfieldcs.com/courses/architecture/) course and really enjoyed it.

I applied for the CSI program and really hope I get to do it this coming year. I got a ton of value out of the above course ($1800).

The CSI course is 10-20 hours a week for the year.

Lastly, up to this point I've been self-taught through Udemy. The problem with that is, sometimes, if you're stuck on something, it might take you 8 hours or more to figure it out. Where if you have someone knowledgeable, they can explain it in 15 minutes. Bradfield seems to do the best at that.

I've tried hiring a tutor outside of a MOOC and asking them for help, but it wasn't quite the same as a teacher who is actively engaged with the material.


That looks like a nice way to throw away 20k USD.


You could say that with some truth about nearly any course of study (modulo the price tag). What's the GWH quote? “You wasted $150,000 on an education you coulda got for $1.50 in late fees at the public library.”

That general cynicism about paid education notwithstanding...

Having looked over Bradfield's curriculum, I think they've made some very savvy choices, that would definitely benefit students. Also I know two Bradfield alumni, who were both quite pleased with their experience there (though neither went for long enough to spend 20k USD). I think you can probably do a lot worse than Bradfield.


Hardly.

Let's see the options:

- A masters degree outside USA, it is probably way cheaper and extremely more prestigious, with better job prospects connections.

- A masters degree in America, it more expensive, but gigantically superior in all the other points.

- An online masters degree like Georgia Tech. Better, cheaper, more prestigious.

- A CS degree online at OSU: https://ecampus.oregonstate.edu/services/tuition/?p=computer.... 1.5 X as expensive but you will get a real degree (No ABET accredited).

- Coursera/Udacity/Edx. 10% of the cost, courses taught by first-rate universities.

- OCW: Totally free.

- FreeCodecamp: Totally free.

So this program has the cost of Ivy-League universities program with 0 of the benefits. If you think this is a good proposition for your career, I as a hypothetical recruiter, would highly question your common sense as a prospective employee.


You should at least take a look as CS classes offered through Harvard Extension.


If someone has a recommendation for how to build/architect large GUI applications like Photoshop. For e.g., how to think about Undo operation right from the get-go . I think that would be amazing to learn if there is a course like that.


Hey. Check out Juan Pedro Bolivar Puente's talks om value oriented design. He worked on Ableton which is a large application. He specifically speaks to Undo. He describes a much better pattern than the Command Pattern.

He also released his source for Value Oriented Data structures

Juan Pedro is a next level programmer who I think has pushed the craft forward through his work on bringing Value Oriented Design into the C++ world.

Talk I https://youtu.be/sPhpelUfu8Q

Talk II https://youtu.be/SAMR5GJ_GqA

Data Structures: https://github.com/arximboldi/immer

Application Structure: https://github.com/arximboldi/lager

Text Editor: https://github.com/arximboldi/ewig

Good luck.


Wow. Thank you.


Check out Game Programming Patterns (https://gameprogrammingpatterns.com/) and the Architecture of Open Source Applications (http://aosabook.org/en/index.html).


Undue can be fairly trivial if your data structure and controls are implemented correctly, for example a common undo redo pattern is to have an immutable structure in a vector, new operations clone the last good object, add an entry on top of the vector, and undo is to just move your reference to the previous object, redo you move it forward.

There are other patterns but this one works fairly well for simple time-travel undue / redo operations.


FWIW Undo was one of the use cases when the Gang of Four described the command pattern all the way back in 1994.


Open Security Training, everything about assembly and reverse engineering

https://opensecuritytraining.info/


Might not be exactly what you're looking for, but if advanced ML and related application topics are of interest to you, please check this out - https://www.reddit.com/r/MachineLearning/comments/fdw0ax/d_a...

It's a (organised) dump of advanced courses from some of the best researchers in the field.


I would say Roughgarden's four CS Algorithms courses on Coursera are somewhat more advanced than CS50: https://www.coursera.org/specializations/algorithms

It covers foundational topics like asymptotic notation. However there is some reading required if you a C in high school calculus like me.


CS50 is more like a intro course (although it just keeps growing so much).


https://pwn.college/ (CSE466 at Arizona State University) is a great offensive computer security course. The lecture videos, slides, labs and lab infrastructure from this semester are all open to the public.


Thank you so much.


Great causal inference course from Brady Neal

https://www.bradyneal.com/causal-inference-course


Understand computers from the ground up with

https://www.nand2tetris.org/


> Competitions resulting in multiple winners are rare, but this may have something to do with this particular sequence.

So if you're going to play the lottery understand that the EROI is actually lower on patterns that humans may follow (like 5-10, birthdays etc) .


I've been working on some that're released on https://qvault.io

Specifically I'm working on an advanced algorithms course (think CS 3XXX in university). Should be out in a few weeks


I was interested to see "Intro to Functional Programming" on the front page, but it is actually a link to a go course? Just a linking problem presumably. There is a stub about Purescript but no detail? https://qvault.io/2020/10/19/free-functional-programming-cou...

It feels like this site is pushing me very hard to "sign up". I immediately feel that I'm being conned in some way and feel an irresistable urge to close the tab. Bad vibes.


Hey is love to fix this, but I'm not seeing the same problem. The first link on the page you linked goes to the FP course page, and that page has a link to the demo (which doesn't require a sign in) and the demo is in JavaScript.

Can you point me to what I'm missing?


The link on the front page where it talks about functional programming goes to https://qvault.io/go-mastery-course/.


Thanks! I'll fix that RN.


I've been working on some that are released on https://qvault.io

Specifically I'm working on an advanced algorithms course (think CS 3XXX) in university. Should be out in a few weeks


An advanced course is — almost by definition — not general, and geared towards a specialization within a context.

So an advanced course would be about data science, cryptography, machine learning, vector calculus, autonomous vehicles, object recognition or some other “vertical.”

Do you know which direction you want to go in and what you want to learn? Depending on that answer you might get a different recommendation.

Having said all that, the answer is Udacity.


Stanford is a treasure trove of advanced courses in ML/AI.

Reddit has also this pretty great list of advanced courses in ML: https://www.reddit.com/r/MachineLearning/comments/fdw0ax/d_a...

There is this from MIT (Graph Analysis) https://people.csail.mit.edu/jshun/6886-s18/

I like the distributed systems class too (The assignments are in Golang) : https://pdos.csail.mit.edu/6.824/

My "loose" definition of advanced: "If you follow the class and do the work you will be able to implement something not trivial"





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

Search: