#60 overall
Algorithms
Coursera
7 recommenders · 7 threads · recommended in 5 years, 2012–2026 · score 8.5
Algorithms is a Coursera MOOC from Stanford (taught by Tim Roughgarden) covering core algorithm design and analysis, including sorting, time complexity, and classic algorithmic techniques. Commenters describe it as a free online course taken alongside work or college.
Commenters call it an excellent, useful introduction that fills gaps in algorithm knowledge for people without a formal CS education.
Algorithms & Data Structuresbeginnerfreeinteractive MOOC#algorithms#time complexity#sorting#coursera#stanford#roughgarden
Recommendations by year
20062026
I loved his Algorithms course on Coursera which I did during the brief moment Stanford MOOCs were all free. So useful for a non-CS grad doing any kind of algorithmic programming.
Those were good days.
Also, in a lot of cases the choice isn't between taking a class online or taking it face-to-face at a college. It is a choice between taking it online or not taking it at all (for all sorts of reasons: money, geography, timing etc).
Btw, I just finished one of the algorithm courses from Coursera (taken at night, from Sweden, for free). The course was excellent, I've reviewed it here: http://henrikwarne.com/2013/02/18/coursera-algorithms-course...
I did a minor in CS, and was blocked from taking algorithms coursework due to budget cuts. I read Cormen's Intro to Algorithms last year, but coursera's algorithms course has been amazing for filling in gaps in my knowledge. I absolutely recommend it :)
If you do not have a math background , I suggest you start with Logarithmic analysis and properties of logarithms ( many tutorials in youtube ), then attend the Coursera algorithm courses and some selected courses on CS50's youtube channel.
Take it easy, there are lot of options available online if you are not enjoying what is being taught in college but you have interest in particular subject. For e.g.: When I was in college I felt my profs. are boring , so I always used to take online courses , like algorithms , operating system through ocw.mit.edu or stanford.edu or coursera , It helped me a lot to maintain interest in subject , and at same time participate in discussions online , there is always a big community somewhere which will be happy to help you .
The coursera algorithms course are great introductions.
Anything that strengthens your algorithm and implementation skills is a good idea.
SRM matches are unique in the way that forces you to come up with a working implemetation in relatively short time. The problems present there will definitely help you to hasten your thought process.
In addition to this, I suggest you to check coursera's algorithm classes if you haven't already. Besides classic MOOC stuff they have an explicit section named job interview questions. These should help you better your algorithm knowledge.
Often, the first examples of computer algorithms involve sorting. There will be some discussion of "bad" sorting algorithms that run in O(n^2) time. This will illustrate how to use algorithmic analysis to understand time complexity. Then the faster merge-sort will be introduced as an obvious improvement to O(n log n) time, followed by quicksort with O(n log n) time and O(n) space...and at this point you may reasonably ask, "So what?"
The thing is is that merge-sort was discovered by John von Neumann [1] and QuickSort by CAR Hoare [2]. The less accomplished of the two won a Turing Award and one might quite legitimately walk away with the belief that developing algorithms from scratch may be non-trivial simply because the subject is really hard.
Which is a round about way of coming to some advice: if the very subject of algorithms isn't enough to scare you off, don't fret the fact that the presentation looks difficult. The apparent difficulty is in the subject itself and the only thing a gentle introduction or simplification means is that someone is pretending that the subject of algorithms is not really really hard with the natural consequence that when it does get hard, you're more likely to see the struggle as a failing of the student rather as inherent in the subject matter. And everything interesting and important in algorithms is hard.
This is why I don't hesitate to suggest people consider TAoCP. It covers the "easy" parts as well as or better than anything else I've seen. It just requires being ok with not understanding everything or even most things that Knuth covers because he finds them important and interesting. Because I'm never going to be that smart, I might as well work at my own pace, and celebrate the small victories like grasping the answer to one of the easy exercises that a year ago, I wouldn't have grasped.
The other recommendation is to take an algorithms course on Coursera. It's free.
Good luck.
[1]: https://en.wikipedia.org/wiki/John_von_Neumann
[2]: https://en.wikipedia.org/wiki/Tony_Hoare
I like MOOCs, but I am using them as continuing education while working, not as a replacement for college. For that purpose, it works quite well [1]. However, one problem is when you study a subject and get a bit stuck (currently taking Pricing Options [2], and there are a few tricky parts so far). Ideally I would like to ask questions and based on the answers continue to ask questions until I understand. As it is now, it is pretty painful to try to use the forums, and maybe get an answer. In person (or live video) with a professor or TA would help a lot. But of course that doesn't scale well.
Also, the fact that the completion rate for MOOCs is very low doesn't mean much. It is free to sign up, so many (including me) sign up only to check out a course, or to just watch the lectures.
[1] http://henrikwarne.com/2012/05/08/coursera-algorithms-course...
[2] https://www.edx.org/course/v2/pricing-options-mathematical-m...
Whether its Javascript or any other language, I think writing algorithms is a great way of driving home certain concepts when you are learning algorithms. Its even more fun to use your data structures and algorithms to solve toy problems and see the difference. Obviously, this is not recommended in production where one must use battle-tested code.
I did a similar exercise when I was doing a course on Coursera in Python - https://github.com/prakhar1989/Algorithms
First of all, how much time do you have to devote to this? Will you be quitting your full time job? Will you be doing this over all your free time? The amount you want to accelerate is entirely dependent on how much time you have to devote to it. This is also a question of how much patience you have and how you get started. Programming really is all about peeling the onion. It's easy to write an Hello World app but there are so many layers below that it can become very overwhelming. I will make the assumption that this is a side thing you want to get going.
Programming by itself is not hard. What is hard is the amount of implicit (or explicit) knowledge that exists in the profession that isn't directly related to writing a web application or another piece of software. Now, its not hard to pick up this knowledge but its a barrier. To be a good programming you need to understand computer architecture, TCP/IP networking, HTTP protocol, how a piece of text written in a programming language ultimately gets turned into assembly language and then run on the CPU. There is a lot more along those lines. Now, I am not saying you need to understand it at a PhD level any of this but you need a more than basic understanding to be effective.
What most of us that have been doing this for a long time don't realize is that our passion for technology and computers in general at a young age had given has a head start since we've picked up most of this knowledge (either self-though or going through CS or engineering programs).
My recommendation would be to sign up for the online Stanford Introduction to Computer Science courses:
http://see.stanford.edu/see/courses.aspx
And start to do the first one on your own.
Alongside that you can also start the Coursera courses: https://www.coursera.org/courses?orderby=upcoming&cats=cs-th...
The Learn to Program and the Algorithm courses are good.
If you are keen you should be able to go through these courses fast. The Stanford ones are not easy but will give you a taste of what a real computer science curriculum is all about. The lectures themselves are extremely worthwhile (Mehran Sahami is a great teacher).
The point of these are not to make you a Ruby on Rails developer, or Python whiz, etc. It's to help you understand the fundamentals.This will also help you determine if it really is the career path you want to take. It takes a certain type of person to sit patiently in front of a glowing screen for hours and studiously write code and actually enjoy the process.
If you want to build your own start-up ideas, don't bother learning to develop. Save enough money and hire it. There's very competent developers around the world that will make whatever you want (I am not saying its easy to find quality developers, but they are out there).
Personally, if I was in your shoes, I would give myself six months to really delve into the fundamentals. If by the end of six months, you feel its a chore and the thought of sitting in front of the screen for another couple of hours learning something else just turns you off, then please have the honesty to stop. But, if its the opposite and you are able to keep going then please don't stop. I would say if you still have the drive to learn and practice after six months, you will be on your way to picking up whatever knowledge gaps you have.