Sebastian Thrun made headlines recently when he quit Stanford to launch Udacity, an online university offering free courses. He believes (and I agree with him) this education initiative that will have greater impact and reach than he could ever achieve teaching at Stanford. Such an odd (and beautiful) world that we live in that you can make more of an educational impact leaving Stanford than joining it.
Udacity is currently running two courses to start, CS 101: Building a Search Engine and CS 373: Programming a Robotic Car. The latter is Sebastian Thrun’s baby while CS 101 is mainly taught by David Evans, a professor from the University of Virginia. Four more intermediate-level courses begin April 16th.
First off, learning to build a search engine is just about the coolest thing I could ever think of doing to learn a programming language. It just warms this librarian’s heart! I also love that this course is project-based with a specific outcome. Rather just learning a language in a logical way it’s more about “let’s build a search engine” and along the way you’ll learn Python and computer science concepts.
The course is just 7 weeks long so it’s pretty quick. Each week’s unit is divided into an education portion which consists of videos and coding exercises or quizzes, as well as a homework section. If you need extra help there is also a pretty active discussion board and “office hours” where the instructors answer the questions students are having the most trouble with. Each week’s content also includes supplementary material.
I’m super behind already but I’ve done the first unit and I’m halfway through the second. It took about 2 hours for me to go through the videos and another hour to do the homework for unit 1. Each topic is neatly distilled into short, digestible videos. They’re Khan-academy-like with Dr. Evans illustrating and writing with a pen while he lectures. I was surprised by the transition from video to quiz to interactive coding environment. It’s not seamless but I didn’t even know this was possible, well done!
Udacity is just getting started, with more courses coming soon. I am especially excited by “Building Web Applications.” Go check it out!
Instruction for Masses Knocks Down Campus Walls (New York Times)
So I have spent exactly 50 hours learning to code.
100 deliberate hours (minimum) over a 4 month period: October 2011-January 2012
Status: MAKING PROGRESS
Obviously I am way over my original schedule. It’s taken me a while to rack up the hours but I’m getting there. Here is an exact breakdown of what I’ve spent those hours doing:
20 (CA) + 14 (LLC) + 7(U) + 5.5 (LPTHW) + 2 (TC) + 1 (NPT) + 0.5 (EJ)
LLC = Ladies Learning Code: Toronto workshops for women.
U = Udacity: Online video class that teaches you to build a search engine using python.
LPTHW = Learn Python the Hard Way: Ebook for self-study.
NPT = Non Programmer’s Tutorial for Python: Wikibooks tutorial.
100 Hour Plan: What I planned to do vs. what I actually did
1. Ladies Learning Code: Attend every programming workshop they offer.
Status: MAKING PROGRESS
2. Learn Python the Hard Way: Go through this book without cheating (too much).
Status: NOT EVEN CLOSE
I WAS really enjoying this. I made it to exercise 10 before shifting my attention to Codeacademy in late December.
3. Hackers and Painters: Read.
Status: NOT EVEN CLOSE
I read the first chapter over Christmas, titled “Why Nerds are Unpopular.” It was awesome. I will definitely read this book soon. Right now my excuse is that I’m working my way through Steve Jobs’ biography.
So, it looks like 2.5 big fat FAILS, right? Well, not quite.
Theme for the first 50 hours: Big, new, shiny things!
I don’t know what’s in the air but it seems that I am learning to code at exactly the right time. There is a wave of learning platforms coming into existence and new coding resoures are being created every day. Doing this project a year ago would have been very different (harder I suspect, and less fun) than doing it now.
While I started out learning from Learn Python the Hard Way (LPTHW), I got completely hooked on Codeacademy once Code Year began. I found the weekly lesson combined with immediate feedback to be more motivating than LPTHW. Then along came Udacity, taunting me with building a search engine using Python.
So I’m officially changing my 100 hour plan to include both Codeacademy and Udacity. Learning is about adapting, right?
Goals: An Update After 50 Hours
Here’s a look at how I’m doing with the original goals I set for myself.
1. Learn the basic principles of programming.
Status: SUCCESS IS AROUND THE CORNER
2. Become familiar with various programming languages and their uses.
Status: SUCCESS IS AROUND THE CORNER
3. Learn to code in one language.
Staus: MAKING PROGRESS
4. Build something using that language.
Status: NOT EVEN CLOSE
Until I learn one language to a decent level I feel like I am still far away from this. I’m not sure this will be doable within the 100 hours. Of course, “build something” is kind of vague. I think what I initially had in mind was something that would actually go live online which requires learning a bunch of other things in addition to a language.
Learning to Code: Successes
I am loving it. I am surprised by how much I love it. I like my brain while I am doing it. Problem-solving is something you think you do all the time as a knowledge worker but you don’t. This is different. I actually think it sucks now to type and not have something happen other than words. And the high you get after you’ve solved something hard that you thought was impossible, is there a name for that? Ha, and I’m just talking about a Codeacademy problem. Anyway, if you can’t tell, I think I’m in love. And that is always a good thing.
Learning to Code: Challenges
These 50 hours have not been without challenges.
1. Finding the time.
This has really required a behaviour change from me to develop the habit of practicing coding. See more below.
2. Finding the focus.
Trying different sites, different languages, reading articles, collecting resources, messing around with this blog. It’s all useful but takes away from time spent actually learning.
Learning to Code: Lessons Learned
When you’re learning a new skill it’s important to not let too much time go by in between sessions for practicing that skill. I found that if I let just a week go by I’d forget what I had learned and would have to go back and waste time reviewing.
Finding the time (and discipline) to practice each week was challenging so I enlisted the help of Habitforge, an online tool designed to help build habits. With it, I ended up doing 30 minutes or more every day for 21 days. This daily practice (spent mostly on Codeacademy) really helped me to advance and get over that hump.
I’m going to continue with Codeacademy, Udacity and Ladies Learning Code which will fill 50 hours easily. I may try Stanford’s CS 101 if it starts soon.
Big, new, shiny things are distracting but I’m loving it!
Ryan Betts presented Concept to Code: the importance of Code Literacy in Interaction Design at the Interaction Design conference a few weeks ago. It’s a little long but I recommend you take a look. Here are a couple of things that stood out for me.
First, I love, love this quote:
“The illiterate of the 21st century will not be those who cannot read and write, but those who cannot learn, unlearn, and relearn.”
~ Alvin Toffler, Rethinking the Future
He also describes four archetypes of programmers (starting on slide 42):
- Enthusiast: groks the vocabulary; understands basic programming concepts; engages in meaningful conversations about development
- Mashup Artist: reads and understands short blocks of code; articulates the basic differences between languages; cuts, pastes, and makes small iterations to code; uses code to communicate pieces of functionality
- Inventor: knows one language enough to write code from scratch; understands the constraints of a language; can differentiate between good and bad code; can code a prototype of anything
- Wizard: can learn any language they need for a job; knows which language is best for the job; knows exactly what is and is not possible; able to conjure anything they envision with code
Ryan encourages his audience to be somewhere between a mashup artist and an inventor. Pretty cool, huh? I’m working on ‘enthusiast’ right now.
How’s it feel? Pretty damn good, I must say. Pretty. Damn. Good.
After struggling to get into a regular habit of coding practice for my first Learnworm project, I happened to stumble across the very cool blog of Randall Degges. I found this post mentioning Habitforge and decided to try it to acquire the habit of “coding for 30 minutes.” And it kinda worked.
The premise is very simple. You set a goal that you wish you accomplish for 21 days. Why 21 days? This is how long research shows it takes to develop a new habit. After 21 days the new behavior tends to be more automatic requiring less of your will power to achieve.
Habitforge sends you a daily email checking to see if you’ve accomplished your goal. If you have, one of your dots in a circle of 21 dots gets filled red. Each day you succeed, these red dots add up, creating your streak. If you fail to accomplish your goal on a given day the counter resets to zero and you must begin again (with empty dots).
I highly recommend it. It’s simple and the psychology of it worked for me. Once I got to 10 days in a row I really didn’t want that counter resetting back to zero.
I did set a very modest goal on purpose. If I had started with an hour I probably would have failed. On busy days I would sometimes split the 30 minutes into two 15-minute increments. This sounds ridiculous, but that’s what I had to do to some days. The main benefit was this helped me to just sit down and start. On many days I would actually end up working on coding exercises for 1 or 2 hours.
I’m trying it again to make sure it’s not a fluke. My new habit is to “write for 30 minutes every day” in an attempt to write more blog posts here. While 21 days of coding practice was successful, it adversely affected blogging. I hope this new goal does not adversely affect coding.
Give it a try, let me know if it does (or does not) work for you. It’s free (with ads) to monitor one habit, which is what I’m doing right now. A membership allows for unlimited habits, gets rid of the ads and costs $9.95 per year.
HabitForge (affiliate link)