Stanford Free Classes – A review from a Stanford Student

Recently Stanford has started a new initiative to bring free classes to the public. From what I’ve seen from statistics, this venture has been extraordinarily successful with over 100,000 sign ups. Most likely only a fraction went through with the class, but that’s still a lot of people, especially for the first time. There has been quite a lot of press about these classes, but none seem to take into account the effects it has on the students that attend Stanford. Despite the success and the raves of great reviews, I was not at all satisfied by the CS229a: Applied Machine Learning, one of the three courses offered to the public fall quarter. Before I begin though, I want to say that I completely agree that education should not be locked up for only a few to use and I also agree that since education, in my mind, is a right, then it should be provided for free. Thus the Stanford initiative to do this is a great thing. However, there are quite a few things that hopefully Stanford will change in the future.

Rigor

First and foremost, the academic rigor of Stanford classes should be upheld. Going into CS229a, I knew it was going to be easier than its counterpart, CS229, since 229a focused on the applied side of machine learning and thus we didn’t have to learn the nasty mathematical part. In case you’re not familiar, the format of the class is such: watch 5-6 online vidoes (~10 minutes each), complete some review questions, complete a programming assignment for each week.

Since the video lectures were excellent in the class, I’ll start with the programming exercises. At the beginning, some of the programming assignments were challenging since I wasn’t used to matlab/octave programming or machine learning. However, the level of difficulty dropped off drastically as the quarter progressed. At its worst, I completed a few programming assignments without even knowing that the corresponding lectures had been released (I have never done machine learning in the past). This is not a tribute to a stroke of brilliance I had, but rather how worthless the assignments became. I completed the program without even knowing what I was doing. The pdfs and comments associated with the programming assignments became so informative and gave so many hints that almost no critical thinking was needed. After talking to a TA (teaching assistant), it seemed that the programming assignments were tailored to fit the needs of the public (apparently large streams of questions came in after the first assignment was released). It’s definitely fair that there would be a lot of questions, people come from all kinds of different backgrounds, but to sacrifice critical thinking so that there are less questions is not something I’m OK with.

Next, there were the review questions. These were simple from the beginning to the end. I don’t have as much of a tiff against these as sometimes it’s good to just refresh what you learned in the lectures, but the questions hardly ever asked anything that the lecture didn’t explicitly state. A little thinking would have made these more interesting.

If these classes are going to be labeled as Stanford classes, then they should be taught as such. CS229a has by far been my easiest CS class (besides maybe the final project) I’ve taken at Stanford. Normally, I wouldn’t have had a problem with this, except now that Winter quarter registration has opened and I have found that half of my classes are now open to the public in the online format, I’m worried that the rest of the classes will follow this trend. If all of my classes suddenly become as easy 229a, I will be seriously disappointed. I came primarily to Stanford to learn and study – classes like CS229a don’t satiate that desire. Perhaps it’s a fluke and the other online classes will be much more difficult, but it is still worrisome. Stanford needs to keep rigor even in their online courses – it’s useless to lower the bar so low that it only takes a small step to get over.

Separation

In the future, I think it’d be best for Stanford to separate the students from the public for a few reasons.

Online lectures suck. Sure, they’re great for rainy days or people learning at a distance or people that don’t go to Stanford. However, these new classes are getting rid of in-person lectures completely. I met barely anyone in my CS229a class. Everything was done alone in my room, which is kind of crappy especially when there is such a nice campus right outside. If Stanford is going to offer these classes, then by all means offer them, but don’t make students take them as well. Have the professors teach as many students as they can in-person and the rest can watch online.

Stanford “free” classes aren’t free. Stanford students have to pay for them. The fact that I’m paying for them doesn’t bother me, the fact that people who aren’t paying for them have changed the class more than the ones who have, does. I’m sorry, but if I’m going to have to pay $50,000 a year to go to Stanford then the classes should be tailored to fit the students – not a working professional who wants to learn a little machine learning on the side. That is why I propose that they should separate the classes. Then if the assignments aren’t clear enough or whatever, the online public version can tailor to suit their needs and the in-person version can tailor to suit the students.

If all of Stanford’s classes are to be open to the public, then all those classes will quickly lose their value. By establishing a separation between the students and the public, Stanford will maintain the value of the classes for its students and the public will still be able to learn about a variety of topics.

—-

The initiative that Stanford has taken to open up education is great. However, God help me if all my classes become 2 hour weekly online lectures with review questions and auto-graded programming exercises. Stanford can expect a letter from me asking to get a cut in my tuition if the classes begin to go the way of CS229a.

About these ads

God dammit, I bought a WordPress theme

I caved. I bought a WordPress theme. $45 I swore I would never spend, and what’s more, against the advice of my girlfriend (and she always gives good advice). I don’t know what overtook me, perhaps it was that ad that I have to look at everytime I log into WordPress, perhaps I was bored with the old theme. Whatever it was, it beat my resolve. I feel like the guy who buys the Snuggie because “if you call now, we’ll give you another for free!”.

While purchasing the WordPress theme was probably an impulse buy, it does bring up an interesting question. Does the look of your site make that much difference? Unfortunately, much to the chagrin of hard-core techie programmers, the wrapper often matters almost as much (if not more) than the content itself. People learn best by example right? So let’s look at one.

Hipmunk vs. Expedia

In case you’re not familiar with Expedia or Hipmunk, they’re basically services that allow you search for the lowest airfare. Both sites give roughly the same results back. Here’s a picture of the two homepages side-by-side:

Clutter

This is immediately obvious when you look at the two sites. When visiting Expedia my eyes seem to glaze over, darting from box to box trying to sift through the ads to find the actual product. I guess Expedia is hoping that by the time I actually find it, I’ll be convinced that if I buy a flight from Expedia I’ll have more money in my bank account (who wouldn’t after reading the word ‘save’ 17 times). In contrast, Hipmunk does away with all the useless ads (do people actually click those things?). The only thing that seems to distract me from finding a flight is the little chipmunk holding a slingshot. And let’s be honest, who doesn’t enjoy looking at the chipmunk? You can lose your audience in the few seconds it takes them to find your product, so although it’s tempting to rack in all  that money from ads, refrain from having more space devoted to ads than content. I understand ads can be an important revenue source for websites, but do it in more inconspicuous ways.

Simplicity

If your site is easy and simple to use, people will come back. Think of Chipotle, they make burritos, but so does every other Mexican restaurant. Chipotle beats them on simplicity, there’s no easier way to pick out a burrito than to simply walk down a line of ingredients and point at an intriguing looking salsa. Other restaurants will often bombard you with menu choices where you’re forced to read the fine print of every item, only to be foiled when mushrooms somehow slip into your burrito. The same idea applies to products. Sometimes choices overwhelm the user rather than aid in the decision process. Expedia presents you with a sea of radio buttons. To be exact there are 12 radio buttons and 1 check box – not to mention that the form changes every time you select a different radio button. Comparatively, Hipmunk has the 4 essentials for planning a flight. They offer more complicated features but don’t force them on you unless you need them. If most of your users only need a subset of your available features, then by all means, only present them with such.

Pizzazz

That extra somethin’ somethin’. Every site can more or less do away with clutter and make their site simple, but to really stand out you need something extra. Hipmunk accomplishes this with its friendly and inviting chipmunk. Apple accomplishes this with their sleek and slender products. Expedia doesn’t accomplish this. There’s no intangible force guiding me back to Expedia. Apple can captivate crowds of people in their stores, produce unwavering fanboys and sell ridiculously priced products all because they have pizzazz. Despite all the banter about Mac vs PC, for the lay user, Mac and PC provide very similar products. They both edit text, browse the internet and save photos. But they are sold for dramatically different prices. Having pizzazz is difficult to obtain, but creating a product that has it will elevate you above your competitors. This post talks all about how to give your product pizzazz.

So what can you do?

Cover your bases

Take care of the easy ones first. Make sure your site is simple, direct and to the point. Often this is difficult when you’re the one making the site. Feedback is critical during this stage.

Discover your inner product

Finding that pizzazz in your website or product is often the hardest thing to do. Obviously it takes a little creativity, but there are good methodical ways to help you through.

  • Create a word cloud – One good tactic that works for me is to create a word cloud. Mapping out a nice web of all the words that are related to your website can help you understand what your website it really about. Sometimes staring at your web long enough will reveal a common theme. Use that theme to make design choices in your product.
  • Take a shower – It’s no surprise that some of the best ideas are discovered during a nice hot shower. There are no facebook notifications or text messages to disrupt your shower time – use the time to brainstorm how you want your product to feel (will it be clean and crisp? friendly?)
  • Don’t stop until you get enough – It’s not enough to simply brainstorm one idea for your product. Maybe your first idea will be your best idea, but many times it is not. Keep thinking of how you want your product to feel. After you come up with 2 or 3 ideas, you’ll have more perspective and be able to choose the best.
  • Be bold – Some crazy ideas work well, some don’t, but either way you’ll get yourself noticed. Play with something bold and new. The Hipmunk chipmunk is a perfect example. A chipmunk as a logo isn’t usually one’s first idea for a airfare finder website, but it was bold, and it succeeded in creating a new feel for the product.
These tips will by no means guarantee success, but it can help you get on the right path.

—-

As hard as it is to swallow, design is important. So do what it takes to make an awesome website – grab those CSS stylesheets by the throat and wrestle them into submission and curse Internet Explorer all the while. You have one shot at impressing the user, so use it wisely.

Becoming a pale, pasty programmer

Becoming a better programmer is not for the faint of heart. It’s easy to succumb to boredom, the sunny outdoors, and women (or men) but if you’re up for the challenge, the real deal, then this is for you. Why are all master programmers pale, pasty, and afraid of women? Because they did not succumb.

Secret to life #1: Java for breakfast, Shell for lunch, Python for dinner

This one is obvious. You must program. Above all else, you need to do this. Whether it be for a class, a side project, or a job, practice really does make perfect. As Malcolm Gladwell makes clear in his book Outliers, it takes roughly 10000 hours to master something. Make it a point to start a side programming project. If you’re not one to come up with ideas then clone someone else’s idea. I wanted to learn how to make an Android game; I didn’t know what game to make so I simply replicated Frogger except with a dog instead of frog (the game is called Dogger). This is about as unoriginal as you can get, but I had fun making it and learned a lot in the process. I’d even say that it might be better to clone an idea first, this way you’re not caught up in the design/ideas – just straight codin’.

Secret to life #2: Have a strong forehead

What does it mean to have a strong forehead? It means that it is resilient to banging – whether it be from your hand, your computer or some other object. Programming is hard. There’s no way around it – you’re going to come across problems you don’t know how to solve and you will end up slapping yourself on the forehead time and time again. The persistence to get through them is essential. If you can persist, learn to solve problems, then this will make you better than even the prodigal  programmers whose first word was integer.

The ability to overcome obstacles is a much more valuable skill than unparalleled brain power. In the real world, problems need to get solved and often times whoever comes up with the quickest viable solution wins (obviously not always the case). Even the smartest find themselves humbled when faced with a problem one time or another; if they don’t have the wits or the experience to plow through, then all those smarts are a waste.

One last point on strong foreheads. Like everything else in life, a strong forehead can be acquired. It doesn’t necessarily have to come from programming either. Problems arise every day and every day you are presented with the choice to solve the problem or give-up. There are obvious times when giving up is necessary, but the vast majority of problems can be solved with a little perseverance and going the extra mile. That being said, take it to heart next time you find yourself in a pickle and work to get yourself out.

Secret to life #3: No shortcuts

In order to become a great coder you need to practice great coding (yes, I’ve read All code is crap, but there are definitely varying degrees of crap and you want to be on the less crappy side). If you realize you messed up your class hierarchy in some program and find yourself making quick hacks to make the system work, stop what you are doing and rewrite the class structure properly. This will give you invaluable experience on creating great object oriented structure and the next time you do it, you’ll make fewer and fewer mistakes. Some say the best software engineers are approximately 10-100x more productive than their lesser counterparts. Part of this productivity is their intuition to see the problem as a whole, design a solution that fits the problem and allows for expansion. This isn’t some inherited skill, it comes from making mistakes and learning from them. So, yes, make your mistakes, but fix them or at the very least understand what went wrong and where you can be better.

Secret to life #4: Become a codeworm

How do you know what sub-optimal code looks like? Reading other people’s code is a great way to see some great examples of what your code should look like. Now-a-days there is no excuse for not being able to find code (github, sorceforge, etc). Be warned though there are also very bad examples of code on the web as well, but you can learn just as much from those. I’ll admit it’s hard to straight up read someone else’s code and that it’s much more fun to write your own, but if you find some program you want to extend/fix, it makes it much more enjoyable.

Books and papers are also great resources for learning to code well. In case you haven’t seen this post, it points you to some good papers to start on. As important as it is to read and learn other people’s code, don’t spend too much time reading – focus more on the doing.

—–

So there it is, 4 easy-peasy secrets to becoming the next Don Knuth or Mark Zuckerberg. These are things that I’ve learned throughout my struggles in the programming world as well as in everyday life. The only hard part is actually doing it.