Hacker Courses The online courses programmers keep recommending, ranked from 20 years of public forum comments.
i
#25 overallClassic

Algorithms: Design and Analysis, Part 1

Coursera

17 recommenders · 17 threads · recommended in 10 years, 2012–2022 · score 24.9

Go to course ↗

Stanford's introductory algorithms course taught by Tim Roughgarden covering asymptotic analysis, divide and conquer, sorting, and graph algorithms, with programming assignments checked against data sets. It was offered on Coursera and later moved to edX.

Commenters call it a challenging, well-taught course with practical implementation assignments that work in any language, and recommend it for interview prep and for learning algorithms.

Algorithms & Data Structuresintermediatefreevideo lectures#algorithms#big-o#graphs#divide and conquer#sorting#roughgarden

Recommendations by year

20062026

What commenters said (21)

  1. Strongly recommendssamsin2022in “Ask HN: Which MOOCs in Math/CS are worth still worth taking in 2022?”

    Tim Roughgarden’s algorithms course is great, pretty sure it’s on Coursera, Edx and YouTube

  2. Strongly recommendsbhrgunatha2020in “Ask HN: Top Coursera Courses?”

    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

  3. Strongly recommendsmonster_group2018in “Ask HN: What are the best MOOCs you've taken?”

    I did not run into any trouble with Sedgewick's course. His coding assignments are the most elegant and comprehensive I have seen which leave virtually no room for ambiguity. But they are challenging indeed.

    "he gave you a mostly finished program..." What? He gives you an API with public methods and you have to do the implementation. How is this a mostly finished program?
    "The issue I had was that there was basically no feedback"

    The tests are your feedback. When a test fails you need to figure out why the test is failing and what's wrong with your code or if you understood the requirements incorrectly.

    I absolutely enjoyed his courses and finished both of them with all the assignments. His assignments are not something you can knock out in an hour. It usually took me at least 3-4 hours to complete any assignment sometimes even more than that.

    I also did Roughgarden's course and loved it. He is an awesome teacher. Both Sedgewick's and Roughgarden's courses are very good but they have different approaches. I found Roughgarden's coding assignment a lot easier than Sedgewick's.

    Make use of the course forum. If something is not clear ask questions on the forum. Though I found that Sedgewick's requirements specification are very comprehensive and unambiguous. In fact while doing the course I wished software requirements on the job were anywhere close to that comprehensive in real life.

  4. Strongly recommendsdeepGem2018in “Ask HN: What's the best algorithms and data structures online course?”

    Tim Roughgarden is a fantastic teacher. I personally love his style and speed. He throws in some humor here and there and makes learning a lot of fun. His lectures on graphs are absolutely brilliant.

    This same course is available on Coursera as well.

  5. Strongly recommendsafs35mm2016in “Ask HN: Is it worth paying for a Coursera course?”

    I took and completed Algorithms: Design and Analysis, Part 1 (https://www.coursera.org/course/algo) for free, and it was 100% worth it. It was just the right amount of challenging, intellectually stimulating, and language agnostic so I think it actually made me a better JavaScript programmer in addition.

    I made it a point to meet all the deadlines and assignments, which kept me honest and forced me to be timely. It was free when I did it, but I'm not sure if that's changed since looking at other courses I don't seem able to receive a certificate or weekly grades if not paying... Point being it may be worth it to pay just so you feel incentivized to finish the course with a passing grade :)

  6. Strongly recommendsmmihaljevic2012in “Introduction to Algorithms”

    I highly recommend this course https://class.coursera.org/algo-2012-002/class/index

  7. Recommendswly_cdgr2021in “A framework for grading your performance on programming interview problems”

    "Preparatory industry" is a bit much. The only thing people really need or use for interview prep is Leetcode, which costs about as much as Netflix if you buy an annual subscription, and provides hundreds of hours of what should be at least somewhat fun to anyone who actually enjoys programming

    If you wanna get fancy you can throw in a $59/month Coursera Plus sub for those big-name-university math and CS courses. There are some good ones that I think would help people who focus exclusively on LC improve faster and/or get a deeper understanding

    Ok, so we are now talking about ~$900 over the course of a year. Even throwing in some a la carte courses from edX, like the Programming Languages sequence from Washington that OSSU recommends, you can now give yourself a thorough and marketable CS education in a couple years of hard work for under $3k. That doesn't sound like a predatory industry....that sounds like excellent progress towards equitable opportunity

    P.S. And you can even be a cheapskate and just use the Sedgewick booksites and do the UCSD and Stanford discrete math and algos courses on Coursera and get your interview prep done for a grand total of like $200

    P.P.S. The reason you don't need algos in your day to day is because you are not good enough at algos to get a funner, better paying, more impactful job where you do

  8. Recommendsbhrgunatha2021in “Big O Notation – Explained as easily as possible”

    I'm assuming you want something rigorous - based on the comment you replies to.

    Many people will recommend CLRS [0] but I prefer it as a reference, rather than a learning resource. I feel it's very dry and academic.

    Instead I'd recommend Tim Roughgarden's series of books Algorithms Illuminated for learning about analysis and algorithms. He also has courses on Coursera and Edx to cover the material. It's thorough rigorous and shows algorithms that apply to different paradigms - lke divide and conquer, graph theory.

    Sedgewick and Wayne's Algorithms has a companion website with lots of additional material (heavily Java based) - and courses on Coursera too. Again I think it's more approachable than CLRS while still being detailed and covering the theory.

    [1] https://mitpress.mit.edu/books/introduction-algorithms-third...

    [2] http://timroughgarden.org/books.html

    [3] https://algs4.cs.princeton.edu/home/

  9. Recommendsiangregson2019in “Ask HN: How do I choose the right resource to learn CS fundamentals?”

    Being self taught, I often wonder the same thing. I don't know that this is "THE ANSWER" but I was impressed by the job done here of curating a bunch of disparate CS materials (including some from the universities you mention) into some kind of structured learning approach https://github.com/jwasham/coding-interview-university

    As the url suggests, it's got an agenda about interview prep but the materials do not - they're straight up CS resources. Like I said, this may not be exactly what you want, but it could be helpful.

    On a different note, I have completed the Stanford Algorithms Course part 1 (currently working on part 2) and I can recommend it.

  10. Recommendsrashkov2018in “Ask HN: What are the best MOOCs you've taken?”

    I enjoyed the lectures quite a bit, but ran into a lot of trouble with the problem sets. I'm wondering if anyone else had a similar experience, or if I should give it another chance and try some different approach?

    The problem I had was that he gave you a mostly finished program which utilizes the percolation algorithm, but then asks you to fill in some data structures and functions to make it work, and finally a test suite should let you know if you've completed that successfully. The issue I had was that there was basically no feedback, or incremental progress that you could make towards a solution. You either understand the full requirements and are able to implement them, or your tests fail and you have to scratch your head some more wondering if you misunderstood the problem or what.

    I loved the approach that Tim Roughgarden's stanford algorithms class took on Coursera, where you're actually implementing the full algorithm and are given some data sets to test them on. You could even write it in whatever language you choose.

    I really wanted to do professor Sedgewick's course but I felt like I couldn't do the assignment even if I understood the algorithm perfectly. Would love some advice if anyone has any suggestions, or even if someone can confirm that I'm not crazy for having a bad time with it.

  11. Recommendssn92016in “Big-O notation explained by a self-taught programmer”

    Coursera also has two great sets of Algorithms courses: one on analysis and one on implementation (the latter by Sedgewick).

    Self-taught programmers really have an embarrassment of riches these days.

  12. Recommendslewisl90292016in “Ask HN: Been in dead end job for too long. Quit without offer in hand?”

    I'd like to echo the sentiment that quitting without an offer in hand seems like a risky idea. The extra time to prepare for interviews can definitely look appealing, but plenty of others here have outlined all the ways quitting prematurely could work against you, so I won't repeat that here.

    Instead, since you don't have a formal CS education, I'd recommend checking out an online algorithms course like this one: https://www.coursera.org/learn/algorithm-design-analysis/hom...

    Practically speaking, like it or not (and trust me, I don't), programming interviews tend to involve a lot of algorithms and data structures problems, so having "never really thought about algorithms" puts you at an immediate disadvantage compared to other candidates. Plus, gaining a grasp of the basics of algorithms and data structures is going to be worthwhile regardless as it will make you a better developer.

  13. Recommendsbrudgers2015in “Ask HN: What are some good resources for learning Algorithms and Data Structures?”

    I learned a lot in Roughgarden's course on Coursera:

    https://www.coursera.org/course/algo

    but I'll be first to suggest going to font of computer science that is TAoCP, not because you're likely to understand most of Knuth, but because it's unlikely that anyone will understand half on the first pass, so there will be something else to learn for a really long time.

    Good luck.

  14. Recommendsninjakeyboard2015in “Ask HN: I got let go this morning. What should I do next?”

    I have no compsci - I would recommend you do some interviewing to find out what you don't know and fill in the gaps on coursera. Mostly the stanford algorithms 1 course will ensure you have what you need to interview IMO. Apart from that, I don't see much else you miss compared to your compsci peers that isn't directly obtained by work experience and effort.

  15. Recommendsavinassh2015in “How can I learn algorithm from scratch”

    CLRS is quite 'academic' and requires good understanding of mathematics. It's a great book, but not a good one for beginners, imo. It will be difficult as self study for first timers. You can start with Datastructures and Algorithm Analysis in C by M. A. Weiss[0]. One more alternative is The Algorithm Design Manual by S. Skiena[1]. It's also good and focuses more on algorithm, implementation (as opposed to math-y stuff of CLRS). If I were you, I would get both the books and read alternatively. Don't miss out on exercises, they are very important.

    I also suggest you to join this Coursera course, Algorithms: Design and Analysis by Tim Roughgarden[2]. Currently the course is open, so you can sign up for classes. The course is offered in two parts[3], complete both of them.

    Once you are comfortable with basic concepts start solving questions/puzzles online on sites like SPOJ[4], UVa[5], (YC-funded) HackerRank[6]. You could try TopCoder[7] also, but the questions are bit difficult. Hope this helps.

    PS - You should study math, because it is important in Algorithms Analysis. You could try reading required parts of Concrete Mathematics by Knuth[8] or as you come across new concepts, Google and understand them.

    [0] - http://www.amazon.com/dp/8177583581

    [1] - http://www.amazon.com/dp/1848000693

    [2] - https://www.coursera.org/course/algo

    [3] - https://www.coursera.org/course/algo2

    [4] - http://www.spoj.com

    [5] - http://uva.onlinejudge.org

    [6] - http://hackerrank.com

    [7] - http://www.topcoder.com

    [8] - http://www.amazon.com/dp/0201558025

  16. Recommendskarmicthreat2014in “A Contrarian View of MITx: What Are We Doing?”

    I am currently taking the edX Intro to Linux course. I don't actually need the course, but since I am self taught I wanted to see if I missed some things. Popd/pushd come to mind as a feature I've never used.

    The course though is rough. I have found frequent spelling and grammar problems. The English is plain broken in the recorded examples. The interactive portions don't attempt to emulate a terminal, it is just straight string matching. Plus, it is amazingly easy even if you are unfamiliar with Linux.

    To contrast this Udacity has made some great interactive learning experiences. Their python based courses were very good. The only disappointing this is that they were fairly watered down.

    Coursera is in the middle. Some courses are great in the content aspect. Tim Roughgarden's algorithms course comes to mind. But at the same time they are usually a rough port of the classroom material with a slight amount of interactive window dressing.

    As I try to pull myself from being a crap programmer to being a good software/hardware developer I am begging for difficult content. Everyone has a bunch of lower division courses in various subject available. I want hard courses that shape my thinking as I try to solve them rather than easy courses that stroke my ego about how "smart" I am.

    Also I really wish Udacity and GIT would have opened their 7000$ masters up to people that never finished university. Though I probably wouldn't attempt all the coursework quite yet, I feel shut out of that option. The whole point of pervasive online learning was to remove barriers and friction to learning. By having a arbitrary degree requirement it just takes a step back to the old system that it shouldn't have.

  17. Recommendsexplor3r2013in “Ask HN: What are some good books on graph theory in software dev?”

    From a self-study perspective, the Coursera (online course) offerings around Algorithms may be worth a look as well: https://www.coursera.org/courses?orderby=upcoming&search=alg...

    Robert Sedgewick (Princeton) and Tim Roughgarden (Stanford) run independent 2-part courses that are pretty comprehensive, and both have upcoming sessions. Robert in particular provides many thought exercises to clarity and reinforce understanding.

  18. Recommendstsurantino2012in “A Gentle Introduction to Algorithm Complexity Analysis”

    I've been doing the Coursera course on Algorithms (from Stanford by Tim Roughgarden). He's going over concepts like Big-O notation as well as analyzing algorithms. This particular article is a refreshing read, and I would highly suggest the Coursera course as an accompaniment if someone wants to go deeper.

  19. Mentionsrashkov2017in “A Comparison of Four Algorithms Textbooks (2016)”

    I found the assignments to his class to be really weird and challenging. The first one had you fill in a few functions of a half-complete percolation simulation, but without having written the other part of it, it felt like having to reverse engineer and guess at the solution. There was no real way to measure your progress. Either it runs or it doesn't, and there's no incremental progression towards a solution.

    I'm curious if anyone else experienced this or could point out where I went wrong. I really wanted to do the class and I liked the lectures, but i started it after finishing Gardner's Stanford algorithms Coursera class which had some of my favorite exercises ever. They had you write an algorithm in it's entirety, gave you sample data sets to check against, and let you write it in any language. Compared with that, Sedgwick's assignments were like coding with one hand tied behind my back.

  20. Mentionspyvek2015in “Ask HN: What are you currently learning in your spare time?”

    That's awesome! I hope to go through that course soon. I just finished 2nd week assignments of Algorithms- Design and Analysis on Coursera - https://www.coursera.org/course/algo

  21. Mentionsnborwankar2013in “Why there is no Hitchhiker’s Guide to Mathematics for Programmers”

    Re: the original post IMHO, I find it has many logical flaws and while it is trying to draw attention to the fact that programmers need to learn math it may end up scaring people away.

    Background: I have a BS in EE from IIT Bombay, An MS in Applied Math from USC and an almost PhD(everything but thesis) in Pure Math.

    I also loved teaching math as a TA and was able to teach engineers multivariable calculus and differential equations so that they lost their fear of it.

    But for the last 20 years have been in the database business. I am very enthusiastically returning to math in the form of data science in the last year.

    I find that especially today it is necessary for math to be made accessible without having to prove theorems - that's for professional mathematicians.

    Programmers use hardware often without knowing diddly-squat about semiconductors. And that's just fine if you don't want to or need to. We drive cars, use mobile phones and all sorts of machinery without needing to know anything about internal combustion or the CDMA algorithms or even how theory of relativity figures into GPS.

    I think the insistence on setting a high bar for people to learn/use/apply math is unnecessary mystification and obscurantism.

    Math is beautiful, useful and powerful. If you know math you should be wanting to simplify it's teaching and instruction, thinking hard about making it useful for the non-mathematician and also making it easier to access in a breadth-first fashion rather than the depth-first fashion in which it is currently practiced.

    I know many people, engineers and mathematicians who believe that simplification is "dumbing down". I disagree vehemently.

    Today if you are a programmer and want to learn math I have a few of suggestions

    a) If you want to apply it in engineering take a couple of classes on Coursera/Udacity - it will be a slow an steady way to re-activate your math neurons (it's also insurance against Alzheimers to keep learning new and hard stuff).

    b) Learn some statistics, learn to use R. (Coursera again)

    c) Learn some linear algebra, minimal, then learn MATLAB (Andrew Ng's Machine Learning class on Coursera or a similar one by AbuMustaffa (sp?) of Caltech)

    d) If you absolutely don't want to learn a new language then look at Machine Learning by Marsden which uses Python and then pick up NumPy/SciPy and look up the exciting stuff that's happening with the IPython Notebook.

    e) If your focus is on pure CS the take the Algorithms track(s) by Roughgarden (Stanford) or Sedgewick (Princeton) on Coursera

    This way you dont have the notation issues - R has a syntax, MATLAB has a syntax just learn it. Python hopefully is note even an issue.

    Start using your math brain a little at a time - absolutely no proofs required - and THEN once you see the beauty and want to learn more and want to learn why, THEN dig deeper with the fundamentals. If you don't that's fine too - use it, put its power to use and become a better developer and engineer. Math is not trivial but it's not as hard as it's made out to be. There's way too much noise in the channel.

    Good luck.

    (feel free connect with me on twitter if you want to get more help (@nitin))

Related courses

Keyboard

In the course grid
←↑→↓
Move between courses
Home End
Start / end of row (with Ctrl: first / last)
PgUp PgDn
Jump several rows
Enter
Open course
S
Save / unsave course
1–5
Best, Trending, Hidden gems, Evergreen, Saved
[ ]
Previous / next topic
On a course page
← →
Previous / next course in your list
S
Save / unsave
O
Open the course website
Esc
Back to the grid
Everywhere
/
Search
T
Light / dark theme
?
This help