Ask HN: Top Coursera Courses?

486 points by joshlk ↗ HN
In any field that “interesting” to HN

157 comments

[ 2.8 ms ] story [ 238 ms ] thread
Nand to Tetris: how a computer is built from the ground up. Starting from nand logic gates all the way to OO programming

https://www.coursera.org/learn/build-a-computer

The course is good, the book is better, in my opinion. Although it covers the same, but I like its presentation much better than the video course.

Nisam/Schocken: "The Elements of Computing Systems"

I have only finished the hardware part, so far, but skimming the rest I can't find Tetris anywhere. Is that really missing, although it's in the title?

(I know that you can program Tetris on the machine you build in the course, but is it an exercise somewhere?

One section asks you to learn Jack (The high-level programming language) by writing a medium-complexity program. The goal of the exercise is not to get proficient in Jack (which is a Java-like-language), but to just learn it well enough to implement the compiler.

I wrote a Tic-Tac-Toe variant - but you could write anything, including Tetris.

On Coursera, if I remember right, the first course gets you to the point where you have a CPU that can run machine language and an assembler. They give you an assembly version of Tetris that will run on what you built.

In the second course you build the programming language that could be used to write Tetris, though I don't think you actually go through it as an exercise.

The second edition of the book is actually slated for release in July. You can preorder it on Amazon.
Seconding this. It's the most fun I've ever had on a technical project (with the possible exception of tptacek's microcorruption.com), and really opened my eyes to all the problems you have to solve to get a working computer.

Note: you can also complete all the course materials just by going to nand2tetris.org.

My presentation slides promoting nand2tetris to the Austin python group: https://docs.google.com/presentation/d/1fGf2eZVOM2lHL8hFVyd2...

Have never done the course, but I did work through the entire book some years ago and it was an intensely rewarding experience.
I am going to take this next! I am excited to see what it has to offer.
Scott Page's Model Thinking course: https://www.coursera.org/learn/model-thinking. Broad overview of how to think in models to understand the world around you.
What does that mean to think in models?
Models are tools to help us reason clearly about the world. They help us deal with complexity in manageable chunks by focusing on salient parts of a problem, rather than the whole.

From my course notes, a nearly comprehensive summary of how the social sciences use models was presented:

16 uses of modeling outside prediction include from Epstein, Joshua M. (2008). Why Model?. Journal of Artificial Societies and Social Simulation:

1. Explain (very distinct from predict)

2. Guide data collection

3. Illuminate core dynamics

4. Suggest dynamical analogies

5. Discover new questions

6. Promote a scientific habit of mind

7. Bound (bracket) outcomes to plausible ranges

8. Illuminate core uncertainties

9. Offer crisis options in near-real time

10. Demonstrate tradeoffs / suggest efficiencies

11. Challenge the robustness of prevailing theory through perturbations

12. Expose prevailing wisdom as incompatible with available data

13. Train practitioners

14. Discipline the policy dialogue

15. Educate the general public

16. Reveal the apparently simple (complex) to be complex (simple)

Think scientifically/mathematically. It what most people who hang out HN do intuitively, but most of the general public does not. (Like how Dr Fauci talks about COVID-19 vs how Donald Trump does).
For me, this was also the most interesting course. But I don't think you can still access it (I tried a couple of months ago to revisit it). But Scott Page also has a book out on the topic "The Model Thinker", which covers most of the course.
I think Dan Grossman's Programming Languages courses are amazing if you have slept through the subject in university: https://www.coursera.org/learn/programming-languages
+1! This is a three-parter and it was such a fun hobby for a few weeks when quarantine was kicking up. I had played with plenty of languages before but didn't realize the gaps in my knowledge. Would recommend.
I did this course 5+ years ago and I still remember it fondly! I can pretty confidently say that it made me a better developer
I wish there was a follow up. Brown published their book online, but it's not as fun without a structure.
As someone who learned to program outside of college, this course was one of my favorites.
I took it the second time it was offered. One of the main reasons was it was as an excuse to learn Emacs. Does anyone know if the course still encourages using Emacs?
Great class that really challenged me as a self-taught programmer. Rewarding assignments that pushed back the basics you often find in MOOCs
These are absolute gems! I remember how bummed I felt watching the last video of the last course because it was ending.
I quite liked "How to win a data science competition" (https://www.coursera.org/learn/competitive-data-science) where I learned a lot about validation strategies and machine learning on tabular data. The course has its own Kaggle competition.

I also really liked "Discrete optimization" (https://www.coursera.org/learn/discrete-optimization). At the time that I took it it also had a competitive element where you would solve optimization problems and there was a leader board comparing all the students in the current batch. That was when courses still started in batches and were free so the experience would probably no longer be the same, unfortunately.

> I quite liked "How to win a data science competition

As a machine learning researcher I am on the one hand glad that folks are learning more about the topic. On the other hand, this is totally the wrong approach and it will teach you the wrong lessons.

The idea that you can just treat data as a uniform dump of tables and that grinding your way to high numbers is somehow worthwhile is simply terrible. The resulting systems won't work well in the real world and they produce horrific explanations of what is going on. This class teaches you not just the wrong tools, like boosting, it teaches you the wrong mental model.

I really can't think of a worse introduction to ML than this class. Even not knowing anything would actually be better.

Interesting. I definitely would not recommend this course as an only course in machine learning or indeed as an introduction, and I see where you’re coming from with the wrong mental models. I can’t be sure that I do have the right ones but I have taken a number of other courses as well and my sense is they’re ok.

My main takeaway from the course was definitely not that just grinding away for higher numbers is the right thing to do (but it might be a necessary evil in a competition context). The key thing I learned here was much more about paying very close attention that your validation strategy and your testing strategy are compatible because there are many ways you can mess it up, making your models valid in-sample only. Most of the other things I had done before were also more around SVMs and neural networks and getting some experience with decision tree based algorithms was interesting.

I really enjoyed Tim Roughgarden's 'Algorithms' specialisation. The first half are actually on Stanford's online learning platform for free.

https://www.coursera.org/specializations/algorithms

Highly recommend this course. Good coverage of topics and the explanations help build intuition.
I took his 2 algorithm courses on Coursera's original platform. They were stellar. In particular making practical problems that have a calculable answer that you implement yourself in whatever language you choose and check as part of the course. As opposed to having some online interpreter for some specific language.

That was then hosted on Stanford's own Lagunita platform (based on the edX platform I think.)

Stanford then split those 2 courses into 4 on Coursera's new platform - the same material I believe but packaged differently.

Stanford then closed its Lagunita platform and those original 2 courses are now offered on edX.

A similar story with Alex Aiken's excellent Compiler course and Jeffrey Ullman's Automata course too. I'm not even sure if they are still available on Coursera or not.

[1] https://www.edx.org/course/algorithms-design-and-analysis

[2] https://www.edx.org/course/algorithms-design-and-analysis-pa...

[3] https://www.edx.org/course/compilers

[4] https://www.edx.org/course/automata-theory

What level of math would you recommend for the courses?

This is always a difficult question, because it's always "high school level math" which is rarely true. Then again, some algo courses focus highly on math and proofs while others focus more on implementation.

I prefer the Algorithms course by Princeton but I still really like this course. The deep dive into the mathematical proofs and timing of these algorithms is what gives this course an advantage over Princeton’s course.
Not coursera but I'd definitely recommend Helsinki university's Elements of AI course [0].

It's quite accessible and a good introduction to artifical intelligence.

[0]: https://www.elementsofai.com/

Programming Languages, Dan Grossman, UW. https://www.coursera.org/learn/programming-languages It is a 3 part course and a bit more intensive than other courses on Coursera with challenging assignments. It helped me gain a deeper understanding of statically vs dynamically typed languages. Designing a tiny language in Part B is the best part of the course. Concludes with a nice comparison between OOP and functional languages.
Did this one when it was just one single course. The content is great, but the best thing by fat is the teacher. Dan Grossman is a natural teaching talent, and this course shows how one single teacher can make a difference.
dan is awesome. nice guy too.
Did that too and it totally changed how understand programming (was a newbie back then).
Dr Barbara Oakley’s “Learning How to Learn” [0] is great.

Edit: It gives an important understanding on how our minds function and how we learn, which, I think, forms the basis of effective work. Knowing how to work, and being an effective learner are incredibly important qualities in life.

[0] https://www.coursera.org/learn/learning-how-to-learn

What’s good about it?
You can get a sample out of her Google talk on YouTube. Basically the course tells you ideas about how to read/manage time to learn things more efficiently.
And most importantly, why you should study and manage your time in certain ways.

A lot of things in that course feels like it fairly obvious when you hear it, but often you might not have thought in those directions, and often it helps to get those things spelled out.

If I had had that course in my early teens that would have helped me a lot.

I really enjoyed the part about recollecting vs rereading. This changed my perspective on how to read things. I have noticed I read less nonsense and retain more of the important topics. Also tried it with software docs. Although recollecting API names didnt help me make better software decisions but it came in handy while writing code. A bit of fluency helped reduce friction since I could code with less context switches.
Ah yes, that is an important part. I certainly often fell into the trap of looking at the material, feeling it was comfortingly familiar and thus believed that I knew it. And then of course struggled to recall it when I needed it.
Thanks. I added some more comments.
Also, it is free as in beer, and since its very fundamental, that is important. It is also useful for high school students as well. I actually had various of these subjects at high school (in my native language and without these experts though).
If you define "work" rather broadly, to include hobbies and the pursuit of personal goals, in addition to laboring for remuneration, then I would argue that knowing how to learn is probably the most important meta-skill one can have.
Agreed. This is a great point.
I really enjoyed that course my-self as well.

One thing that stood out for me was that I realised that the basic concept of the course was already familiar to me. Breaking down something new to learn into chunks, then forming a high-level picture of the unknown landscape and then starting to connect those chunks as you go deeper into the details.

I wonder how many people have already in some way used that process to learn something new without realising that it is indeed the most efficient way for the brain to learn a new concept.

I would recommend skipping this one. It contains fairly obvious advice, the information density is low and it isn't delivered very well. I really don't know why it's recommended so often.
It is recommended often because Learning How To Learn is a very fundamental part of your skill set which, sadly, many people either lack or do sub-optimal. Precisely because of that it can contain "obvious" device; because you are already (partly) familiar with it. I find it rather arrogant to say its useless for everyone. Its a fairly quick course, where you can spend more time on aspects if you desire.

This topic about the top Coursera courses or which ones you recommend comes up regularly here on HN.

On top of the mentioned Learning How To Learn I can recommend the following:

Terrorism and Counterterrorism: Comparing Theory and Practice by Edwin Bakker [1]

Securing Digital Democracy by J. Alex Halderman [2]

Cryptography I by Dan Boneh [3]. I didn't finish this one, but its very good...

[1] https://www.coursera.org/learn/terrorism

[2] https://www.coursera.org/learn/digital-democracy

[3] https://www.coursera.org/learn/crypto

That first one is not something I’d expect to find in on an IT site. Thanks for posting I’d like to check it out.
I don't know... I would summarize it as:

- You will get good at anything given enough practice, so don't worry about thinking you're bad at X

- As you get good at X, you will start to like it

- Pomodoro

I'm over-simplifying of course, but I felt like the course provided a lot of concepts with very little actionable advice.

It's a very popular course because it "feels good". It is motivating, and has a very positive message. I wouldn't consider it very useful for already highly motivated and self-driven people.

You overlooked the two states of learning: focused and diffuse. Each is important. That was a big eye-opener for me as I used to blame my mind needing to take frequent breaks and thinking about other things on my inability to focus. Then I realized that it's just a natural way to learn.
so you're describing diffused learning? is that the default mode? havent taken the course so idk what the take on it is
There was lots of actionable advice. Just as an example: frequent self testing. Incorporating this into my studies more intentionally has helped me learn quicker.

I'm highly motivated and self-driven. This course isn't about motivation. It's about how we learn and how best to take advantage of that.

But I will say that knowing how the brain works and how we learn has motivated me to change my study habits. Knowing that I learn in my sleep motivates me to prime my brain for learning every day to take advantage of that. So I rarely skip a day now. Even ten minutes gets my subconscious primed and working while I sleep. The mental models you get out this course will last a lifetime.

You missed the most important part: Which is to jump between advanced/beginner content to build a better image. i.e.: If you are learning a programming language, you start with easy and keep going, but along the way you jump to very hard/advanced stuff. This technique really boosted my learning and solidified it.
The Python for Everybody course was great. I was excited to complete it (well, the first 3 courses in the roadmap): https://www.coursera.org/specializations/python

As a non-programmer but a decent mather, I thought it presented the materials in a way that was easy to understand. In my mid-thirties now, I feel like I could have handled this at 18 just fine--but not in a patronizing way. It was just very clear and the professor had a good sense of humor.

I just built my first time-saving Python program and it felt really satisfying. I built a few others that were cool but none actually saved me time. Very satisfying! At the end of the 3 courses (~60 hours) and some additional tinkering (~40 hours), I had the skills and that's pretty cool.

+1 for Dr Chuck! Echo your sentiments exactly.

Had I taken this course when I was 18, I surely would have gone for a CS degree.

As someone who has been both 18 and 30, 18 is a much easier time to learn a programming language.
Princeton's and Stanford's Algorithms are fantastic.
I was disillusioned by Princeton's Algorithms course when I took it. I felt like I was fighting too hard with eccentricities of Java than actually learning about algorithms. In retrospect, I was wrong, because one of the things I realized that it taught me was that implementation details of algorithms are _hugely_ important, and can cause drastic differences in time and memory utilization. I can easily forget the details, but I haven't forgotten the experience of hacking out my stupid mistakes until the implementations fit the requirements.
That was a learning for me too, but I thoroughly enjoyed the psets. I don't mind Java - setting everything up can be annoying but I find it fairly straightforward and its massive standard library comes in handy for a class like this.
https://www.classcentral.com/collection/top-free-online-cour...

(Not just on Coursera, but also others. You can filter for the Coursera ones.)

Not Coursera but I really enjoyed the "Intro to Complexity" course from the Sante Fe Institute; it's highly recommended on classcentral. It gives a broad overview of how complex systems emerge from simple phenomenon and shows how cross-disciplinary some of these insights are.

https://www.complexityexplorer.org/courses/104-introduction-...

My personal favorite, Statistical Mechanics and Computations.[1]. Excelled introduction to MCMC methods, lots and lots of python programs and filmed against a green screen.

Obligatory, Stanford CS231n: Convolutional Neural Networks for Visual Recognition [2] The assignments are excellent and will let you implement a deephish network from practically scratch, before diving into modern frameworks and applications.

[1]: https://www.coursera.org/learn/statistical-mechanics [2]: http://cs231n.stanford.edu/index.html

Andrew NG Deep Learning courses were nice, especially for an absolute beginner.
Cryptography 1, time well spent. ~3000 reviews at 4.8 stars

https://www.coursera.org/learn/crypto

+1 for this... Really good. Did it years ago and it was all very clear to me.

However as I don't use this in daily life I pretty much lost all the knowledge again :)

Same. Having finished the course years ago, I remember most vividly the following: never implement your own crypto. Not many details survived the time but it was intellectually rewarding.
Just don’t hold your breath for Cryptography 2
I was hoping it would finally be available this year. Now I think it's never going to happen.
The course is apparently being released when the accompanying book is complete. The book is free, and you can see the current version here: https://cryptobook.us/
It's super dense though, even with a math background I struggled to make headway.
That perennial reddit thread on this is priceless, it should be an official meme now!

Also pretend or real J.P Aumasson handle?

I invest a lot of time in data storage and synchronization tools (i'm a fan of immutable stores), but i know very little about crypto.

I'd like to know enough to be able to confidently use existing tools to encrypt data at rest, transit, pub/priv key, etc.

Would this course give me such a foundation to achieve this?

I'd say yes, provided you complement the better mental model this course will give you with a reputable cookbook list of how to do X in practice (maybe start at https://latacora.micro.blog/2018/04/03/cryptographic-right-a...), and everything you'd like to do falls into some well-established pattern.

But then you probably shouldn't trust my opinion, because I'm not a domain expert (although I have been involved in security design together with people who are domain experts), and whatever understanding I had is probably somewhat rusty by now .

I have no idea how 'Machine Learning' from Ng is not mentioned.

It's fine in teaching you introductory (although it seems to cover more basics than a lot of other courses do, somehow) ML. But more importantly, it's a well designed course. You can see how each piece uses previous pieces and how it solves problems and edge cases not covered earlier.

Yes!! Though I did it a long time ago and I'm not sure if it's been modernised for current ML norms?
AFAIK it wasn't. Ng just makes new courses for new methods.

That said, I'm yet to see better coverage of that topics (If someone knows, I'd really like to get them. I forget pieces every now and then, and having more efficient refresh method is always welcome).

I appreciate his attention to pedagogy. Even small things like noticing that students learn better with Matlab/Octave than with R or Python is the kind of observation that takes a combination of knowledge, effort and caring about teaching.
I could be wrong, but I think it has nothing to do with that, and now to do with the course being so old that R and Python weren't the standard ML languages yet.
You are right. Recent offerings of the course are in Python: cs229.Stanford.edu.
I still think that for learning the math behind ml Matlab still makes the most sense though. It takes the focus off the programming itself and enforces the matrix concepts. Although python is the undisputed king in that regard so unfortunately it makes more sense to teach that
This is probably right. But I am surprised there isn’t a python library that is equally expressive.
That's not the entire explanation for Ng's use of Octave though.

At the birth of Coursera in 2012, R and Python were already clearly established in the field of data science. R was the dominant open-source language for data science, with Python very close behind (and already gaining ascendancy among folks who identified with "machine learning" rather than "data science"). I remember Matlab/Octave being more associated with academics/students in EE (signal processing, wireless communications, and the like); if you want clear insight into matrix operations, Octave is great.

I think Ng made a very conscious decision at the time to eschew built-in functions and not get distracted by trendy languages - hence the use of Octave to learn how to implement algorithms at the most basic linear-algebra level.

Even at the time his decision was not well understood nor popular - way back then I remember people asking "Why Octave instead of R or Python?"

I think his choice of Octave was really just to avoid using Matlab. I had taken several other courses around the same time, and they all used Matlab. All of the courses had arranged for a free Matlab license for the time the course was active. You also were given the option of buying the Student version for $99. That didn't last long, I haven't seen any courses offering a free license (or even using Matlab for that matter), and to get the Student license you have to be enrolled at a 4 year institution.

In those classes that did use Matlab, there were quite a few people sticking to Octave, though it wasn't 100% compatable. And when I got to Ng's course, I (and I imagine a whole lot of others) were really happy to see he went 100% with Octave. Had he gone the Matlab route, the old course would be pretty worthless now.

We'll never know what happened behind closed doors, but I think Matlab was sponsoring some courses in order to get new people hooked on Matlab and it just didn't pay off.

Why would they be worthless? Octave is Matlab clone.
That's certainly the goal, but in the courses I took, the Octave users always had Octave specific issues they had to work through, so there were some incompatibilities. This was about 10 years ago, so I imagine Octave has made some progress in that area too.
I've taken 3 MATLAB courses on Coursera this year and they've all included free student access to MATLAB online. Also, a home use license for MATLAB is available for $149.
In his video for the course, he explains that he tried python and R but found students grasped the concepts better with Matlab/Octave. If I recall, it is in the video for the first lecture.

I agree with a sibling comment that it was python and R were well established at the time.

Also makes you think about how comprehension is closely tied to expression even for ostensibly similar languages.

I can still hear him saying multivariate. Amazing course.
it was mentioned 3 hours ago (by you)
Interesting, I found the course disappointingly shallow. I did do it soon after it came out, maybe it got much better with time. I also have a background / job in statistics, though not ML as such.

While it does talk through the basics of ML, it is really barely a taster. It doesn’t leave you with any skills, other than, if you buy a book and work through it, you will know what a “decision tree” is ahead of time.

With something like ML, the real value is in the deep nitty gritty, building intuition about methods you use, fighting the unfair battle against broken data etc, and all those things were missing to me.

Have you tried the deep learning courses? They steer away from statistics and proofs, but all the math required to build a convoluted network is covered. Lib use is very low level at first; not too far removed from doing it all from scratch it you really wanted to waste the time.
I haven’t done the deep learning courses, only the Machine Learning one.
I have as well. I wish it would have been a little more challenging but in the end, I still learned a lot.
This was the first course I did on Coursera and it is by far the best introductary course for machine learning I have ever seen, but my sample size is pretty small ;)
I agree it's the best out there from the few that I've see that gives you fantastic intuition into what's going on. I see it as the best "invitation-to-further-exploration" available.
It's good, but also very, very introductory.
Just btw, I find a machine learning course at Charles University by Milan Straka better (deeper, more entertaining). Maybe I have bias, I'm studying at that school. "Thanks" to COVID, it's online and public - https://ufal.mff.cuni.cz/courses/npfl129/2021-winter#lecture.... You'd be interested in the EN lectures, CZ stands for Czech. You just won't get any certification, of course.
I can think of many - I have taken several starting since 2013. The tricky thing is that Coursera classes seem to get merged, re-mashed or otherwise re-branded. And as such only one currently is listed in my "Completed" courses section of my profile.

Having said that and with the caveat that these probably changed since I taken them, I recommend the following:

- Cryptography - https://www.coursera.org/learn/crypto - great introduction to the fundamentals and math behind cryptography. A lot of theory but also some practical exercises. This is my top recommended.

- Machine Learning - https://www.coursera.org/learn/machine-learning - a good introduction to the basic of machine learning; focuses on octave/matlab and does not dive into frameworks like scikitlearn or tensorflow

- Introduction to Interactive Programming with Python - https://www.coursera.org/learn/interactive-python-1 - I took a course from Rice University on Python programming through making games that was fun. As far as I can tell, this is the modern incarnation in two parts.

- Software Security - https://www.coursera.org/learn/software-security - goes into stack / overflow exploits, tools for testing, and web-based attacks

- Functional Programming Principles in Scala - https://www.coursera.org/specializations/scala - this was a good introduction to scala and functional programming - it got me thinking in a different way

- C++ for C Programmers - https://www.coursera.org/learn/c-plus-plus-a - I think this was the first coursera class I took. This course dove into the C++ STL and a lot of modern features introduced in C++11.

> as such only one currently is listed in my "Completed" courses section of my profile.

That's surprising to me: wouldn't Coursera want learners to be reassured that whatever signalling benefit there is to completing a course will remain forever?

I took a few courses in 2013 just to see what MOOCs are really like and completed two (Programming Languages, as taken by many here, and Introduction to Mathematical Thinking, which IIRC was mostly about logic) which indeed are not listed under "completed" in my profile. I found them at https://www.coursera.org/accomplishments though.