Well, so for the last couple of days I've been focusing on algorithms, not the least because it's the hardest subject I'm taking but also because I'm finding it quite interesting. Despite my lapse of giving up 2 points on the 3rd problem set, I bounced back to complete the 4th problem set with a perfect score, and in general I've been feeling pretty good up about the course.
Then suddenly, a link on the course webpage caught my eye - "Programming Questions." Huh? What's this?
Dun. It's 3 weeks of graded homework assignments that I hadn't been doing - plus a fourth one for this week. Urgh. I guess for some reason I had tunnel vision for the word "problem set" and didn't think there could be other graded work. Well, lesson learned and no sense crying about it. Besides doing the programming question for this week, I also have attempted to finish the other three I hadn't done, and now I've finished two of them and I'm inches away on the third.
As one might expect, these problems involve the actual implementation of some of the algorithms taught in the course, which is indeed nice to have the experience of. As I've learned, it's one thing to learn a high-level description of an algorithm in class, and quite another to translate that into working code. Oftentimes little things like how best to represent your data are big issues. Another is how that data changes - what should you change at the nuts-and-bolts level when you make a change like collapsing one node into another that's easy to understand at the high level? Anyway, it's interesting, but not a little frustrating. Anyway, here's the code for two that I've finished. I got full credit on problems 1, 3, and 4, but because 1 and 3 (and 2 when I finish it) are late, they only get half-credit. :(
Problem 1 - counting inversions
Problem 3 - calculating mincuts
OK, so a full update on progress. It wasn't all algorithms; I also got some Linear Algebra done.
Progress:
- Programming Abstractions: watched through lecture 10.
- The recursion topic, though not really new to me anymore, is still easily one of the most difficult for me to grasp intuitively. This is mostly true on the practical front - writing working code - but also on the conceptual front. So, I don't feel my time is wasting watching these lectures. But I'm still kind of skipping through them, as there is a lot of repeated information.
- Algorithms: watched the remainder of section IX and all of section X. Completed problem set 4 and programming questions 1,3, and 4
- In addition to the lengthy description above, I'll note that graph search is somewhat difficult in concept but is also very interesting. It seems like there must be loads of cool stuff to learn in graph theory.
- Linear Algebra: completed problem set 2.
- This is definitely the slowest-progressing class of the three. I hope to improve that and would say I aim to, but at the same time, there's a lot on the horizon and I'm not sure how much my available time for this class might wane as the new slew of courses begins.
Coming up:
Coming up is actually a lot! It's April 16th now, so all of the Udacity courses are going to start. And then on April 23rd, a new list of Coursera classes begins. There's hardly a course in those two lists that doesn't seem incredibly interesting. I hope to take most of them, and I hope I succeed therein. A lot of these are "periphery" classes when considered in the framework of a CS major, but are hardly periphery to the core of computer science. To wit, the planned course list is:
- Udacity:
- CS212: Design of Computer Programs
- Looks like it focuses on some key ideas in structuring larger-scale programs. Awesome
- CS253: Web Application Engineering
- Learning how to design web apps like a blog, and the associated stuff like user accounts. This one could be huge for any sort of business ideas or who knows what. Awesome awesome.
- CS262: Programming Languages
- I'm not sure how far it will go into the theoretical aspects of programming languages, but at the very least it teaches you how to build a web browser - wow! This knowledge seems to tie well into both of the above courses in that a central idea of programming is tying together disparate sources of information like HTML vs JavaScript, etc. Awesome awesome awesome.
- CS373: Programming a Robotic Car
- I was enrolled for the previous edition of this course but due to time demands and doubts about my level, I didn't actually do any of the class. Now once again I might skip this one, but I should be covering it either way through the machine learning class I hope to take at coursera. I'll start with both of them and pick the one that seems better - who knows, it might be both.
- CS387: Applied Cryptography
- This one seems very cool and I'd certainly like to learn cryptography, not only for practical purposes but it seems like a really neat aspect of mathematics. However, I must admit that if one course were to be knocked off, it would probably have to be this one because it's the least "essential" as in, what I feel I really need to know. I was going to say I'd try it out, but on second thought it seems clear that the time would be better spend elsewhere..
- Coursera
- Computer Vision
- What to say - this is what I'm the most interested in! At a very abstract level, I find this topic fascinating, and I would posit it's what I'm the most interested in studying. But, I really don't know the first thing about it. So, enter this course - I hope it's a good one.
- Machine Learning
- The natural component to computer vision, all under the AI umbrella. I'm definitely looking forward to this one. I'm not sure how much this one, computer vision, and the self-driving car class will overlap. If it's a lot, one of them might be forgone. Otherwise, it'll be a crash course in AI - hope it lives up to the hype.
- Lots of courses that I wish I could take!!
- Cryptography, probabilistic graph models, automata, natural language processing, logic... all in good time, I hope.
Looking over this list, it seems almost certain that I won't be able to handle all of this. This plus abstractions and linear algebra would make more classes than days in the week. I have to work out what my priorities are. One option is really focusing on the AI courses - vision, robotic car and machine learning - and letting the other ones go, or at least myself be lazy with them. Cryptography is probably gonna get the axe. Looks super cool, but it can wait. Plus, there's a coursera version that seems like it might be a little more rigorous.
Excited - but nervous - for what's coming up!