Learning Programming: First Two Year Goals

(update: a repost from 02 September resurrected from Google cache after a wordpress upgrade problem nuked the post.)

(also, notes from the programming and other journeys are now going to be at RootNoob.com)

“A journey begins with the first step” and like advice is notionally true, but perilous. More often than not for me is an invitation to dilettantism. In practice it has been the jump between buying an O’Reilly book on some programming topic and actually learning it has been illusory.

Computing instruction taking place largely on computers, means being inescapably immersed in a distraction-prone environment. How can I get python to talk to a website I fancifully browse some article on Fortran, or just how good Jeff Dean is as a programmer. Oooh, Spanner. Sounds cool. Wouldn’t it be nice to figure out really what Spanner does?

Just now, a friend has pinged me over steam which mellifluously popped up in the lower right hand corner — do I want to play DoTA 2 instead of writing this blog post? (The friend has put in 297 hours so far on the game.) A temptation, but resistible as clearly non-productive. In programming, there are too many things that can look productive. More notably, a limitless supply of general business-tech-gobblegook of wildly varying quality that would feel productive. Read Pando Daily or really digest what “hashing” is? Hashing is up against alluring competition.

The perfect is the enemy of the good. The enmity is mutual. Good is also the enemy of the very good.

The semi-productive byways one night of surfing led me to the Churchill Club’s 15 Annual Tech Trends predictions. Steve Jurvetson’s prediction that “Machine Learning Innervates the Tech Frontier” and that virtually all the interesting things we would see come from some application of machine learning hit me with unusual force. It is the natural, practical extension of the conclusions of Ray Kurzweil’s How the Mind Works (read this spring.) This took me through a surfing tour back to Hadoop and MapReduce, in fact even purchasing the O’Reilly book on the matter. A whole bunch of computing concepts clicked for me – from virtualization to the cloud to machine learning.

And by “clicked” I mean just a stronger form of familiarity – sufficient to be powerful at the conversational level I normally use in business. And that too is a peril. The incremental return in my current occupation is to just learn enough of these concepts at a beyond-surface but not meaningful level. To even know about Spanner is something most PR folks aren’t going to touch. The incremental gains of learning more about Spanner aren’t much until I would really really learn about it. I’m financially incentivized to spread myself out this way.

The Hadoop book mentioned key:value pairs. Wait, I know this from python! That’s something it could be used for. Or is it, uh, could I really explain this? Should I be self-satisfied or ashamed? Is this is what the French mean on the difference between connais and sais?

The Norvig essay describes a calling beyond a depth I can meaningfully imagine. Am I going to be joining standards committees of programmers? No, but I can see the smaller vision he concludes with: “How about working hard to continually improve over 24 months? Well, now you’re starting to get somewhere…”

I want to get somewhere here, and stop day-dreaming about it.

There is always an excuse not to be learning: I had promised at the beginning of the year to make this one of my goals and went decently far in (and enjoyed while doing) the MIT EdX Intro to Computer Science course. Still I was often cranking on homework on the Sunday before the homework was due. Then even a two week break turned into a twenty week break and I’m feeling like I’m back at zero.

I have no excuse not to be learning. I’ve worked with many professional programmers who have offered to help me. I’m in an unusually fortunate position I have not taken advantage of here.

I’ve made good progress on other things. I’m putting in serious time to be a good dad and husband: it remains the top priority. I’ve been swimming a lot in the morning, and marching through books on Teddy Roosevelt. Maybe even to the point of picking up some expertise regarding him. This is useful and satisfying but is not at the center of the fascinating technological maelstrom that is the reason to live in the Bay Area.

I’m pushing one daughter to concentrate 20 minutes a day on an instrument she likes. No, loves. She asked for a Harp for years and finally we gave in. When she practices she loves it. If she doesn’t for a while she falls off. Whether she plays Carnegie Hall or not it seems good in itself, if for no other reason than seeing incremental practice makes you better at stuff. I’m starting to feel hypocritical periodically pushing her to practice, to see through her wish to learn.

So: time to stop blogging and start learning. It’s past midnight. I’ve set up a tumblr, bought a URL and got the twitter account for “Zetta Journal.” This is name is the best hybrid of ambition and prosaic names I can come up with quickly tonight and may iterate thereupon. I’ll keep daily (save for Sunday, or another rest day) notes on what I’ve learned and progress towards goals.

* I can find the time to spend 1 hour a day on programming. I will revisit learning Python from scratch to be sure the basics are mastered. I’ve tried making that lunchtime but distractions always intervene (and are embraced.) Such serious concentration probably best comes in the morning, and in clearing out particular days. If I can’t, no watching sports, no beer.

* I’ve signed up for a variety of MOOCs, I’ll analyze later which will be productive uses of my time. I’ve also un-signedup for others. I’m also putting dreams of learning a foreign language aside, and for that matter, serious marathon or other intense physical training. There are only so many hours in a day. They have to be allocated, and goals hit sequentially, not in parallel.

First Pass on Goals – surely achievable within the 24 months Norvig teases as a meaningful benchmark. They should be the proverbial Big Hairy Audacious goal. I’ll contemplate their realism later:

1) Create a website that solves some problem, no matter how minor. I have notions of a variant on mortgage calculators that I could work on.

2) Use Python and learn to program some physical device: a camera-wielding drone over a swim meet? A cat-tracking GPS device? MakerFaire was awesome. Go to it with a product. Or just be able to make cool birthday presents for my kids.

3) Make a program that will optimize some element of TriplePoint’s business.

4) Be able to volunteer as a tutor/coach for some class of kids at the end of the two year path.

5) Stretch Goal: a comprehensive analytics and reporting engine for the communications industry.

6) Five-year goal: Become deeply knowledgeable about fields outside of where I gain technical competency to be able to properly incorporate the trends into a larger work of history.

I already feel my fanciful self drifting off, into ever-more ambitious goals. Why not memorize whether [1, 2, 3] is a list, tuple, or dictionary? (answer: list.) But I am going to get away from the computer. O’Reilly’s Learning Python book on a couch beckons.