I recently decided that it would be a good idea to take an online course or two, from Coursera or EdX. I noticed that Algorithms II, a Princeton course with Robert Sedgewick as lecturer, was just starting up, so I signed up for that. I then also noticed that, while the Algorithms I class had ended recently, it was still possible to sign up for it and work through it. So I decided to do that first, and see if I could then move onto Algorithms II before it ended. Well, I’m getting through the material, but it’s taking some time, so I don’t think I’ll necessarily “catch up” prior to the official end of the Algorithms II class, but that’s not really necessary, though it would be nice.
The class uses Java, which I wasn’t initially that thrilled about, but I’m not really having any trouble with it. It’s similar enough to languages I know, like C++ and C#, that it’s easy enough to pick it up as I go. And the kind of work we’re doing in the class is such that I don’t need to worry much about user interface details or anything like that. Everything we’ve done so far is pretty much command-line stuff, with a little simple graphics work. So I haven’t had to worry about learning whatever the Java equivalent of Windows Forms or WPF is. (Swing maybe?)
The course material consists primarily of lecture videos (with Robert Sedgewick), programming assignments, and quizzes. For the first class, I’m choosing to watch the videos and do the programming assignments, but I’m skipping the quizzes.
The textbook for the Course is Algorithms (4th Edition), by Sedgewick and Kevin Wayne, who was also involved in creating the class, though he hasn’t shown up as a lecturer yet. (I’m not sure if all the lectures are by Sedgewick, or if they switch over to Wayne at some point.) The textbook is fairly expensive, but it’s not required. There’s a “booksite” for it that has all the material you’d need from the textbook.
The course recommends, but doesn’t require, that you use an IDE called “DrJava.” They even have a nice little installer that will quickly set up an environment for you with the JRE, DrJava, and some libraries that are used as part of the class. Very convenient and simple. I’m using the Windows version, but they have versions for Windows, Mac, and Linux.
DrJava isn’t a great IDE, but it’s simple and easy to use. I wouldn’t want to use it for day-to-day work, but just to write and test the kind of programs you need to create for an Intro to Algorithms course, it’s fine. (I do find myself falling back on Komodo Edit sometimes, though, when I need to do some “major” editing.)
So, basically, everything you need for the course is free (Coursera stuff, the textbook web site, and the development environment), which is great.
The lectures are quite good. I’m guessing that this is basically the same material that’s actually used for the Princeton undergrad Algorithms course, with some tweaks made to accommodate the requirements and limitations of the online course environment. Good use is made of visualizations for the algorithms, which is really key in understanding this kind of stuff.
The programming assignments are well thought-out too. They need to be structured in such a way that they can be run through an “auto-grader” that can evaluate and grade them in a reasonable way, so that imposes some limitations on them, but that’s fine. Basically, the programs need to be written to a well-defined API that the auto-grader will exercise, and then report on. It tests boundary conditions, large inputs, timing, memory use, and so on. The assignments are generally written so that there are levels of correctness that can be evaluated. There may be, say, 50 tests the grader can run your code through. Maybe the first time you submit your code, you’ll pass 25 of them. Then, you can tweak it and re-submit, and maybe get 35 right, and so on. So, the process of working through an assignment can be iterative, and you can learn as you go.
I think it’s great that stuff like this is available on the internet for free. I’m not sure where all this will lead though. More access to quality higher education for more people? Or will this stuff all be monetized at some point, leading to some kind of new status quo in higher education, where things are far more centralized than they are now, and the educational experience is far less personal? I don’t know; I’m sure people smarter than me have probably spend a lot of time thinking about that. For me, right now, it means I can take something vaguely equivalent to a Princeton undergrad course for free, in my living room!