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!

Visual Studio 2013

I haven’t been paying too much attention to the VS 2013 launch, but I did read a few blog posts about it yesterday, including this one. Honestly, I haven’t really done much with VS 2012 yet, other than using it to work on some Project Euler problems at home, and using it as a front-end to TFS 2012 at work. (My day-to-day programming work is mostly done in the AX IDE environment right now.) Some of the stuff they’re doing sounds interesting, but it doesn’t really apply to me right now. One of these days, I’d like to get back into some serious .NET work, possibly including some Azure stuff, and ASP.NET MVC, and maybe get a chance to mess around with stuff like Unity. I do have one new interesting side project going on right now, though, which I want to write up in more detail later.

Project Euler

I haven’t mentioned Project Euler on here in a while. Earlier this year, I got on a roll and solved the first 20 or so problems. Then, I got too busy with other stuff, and didn’t make any more progress. Well, I got interested in it again and finished through to problem 25. I’m hoping I can find time to get a few more done before the end of the year. I’m finding that Project Euler is a pretty good way to keep up some basic skills. The kind of programming I do at work is interesting, but it doesn’t really exercise certain “muscles”.