How To Teach Yourself Programming
This didn’t come through my new web-crush Mentii, but it is another bit of advice that I thought deserved to go farther than one email. This is a friend that lives near a tech center and wants to learn programming, but has no background or experience other than normal computer usage. I looked at some of the university programs near him and gave my recommendations, but that’s not widely relevant. The important part was:
tl;dr: YOU HAVE TO TEACH YOURSELF PROGRAMMING
The full version was this:
I highly, highly recommend doing a lot of programming on your own.
First, the programming requirements for college aren’t a perfect match with what you need for a job, and there are not enough intense programming courses to get you fully proficient. You wouldn’t expect to get in shape if you only took P.E. classes, would you?
Second, some people just don’t enjoy or “get” programming – it’s a specific way of thinking that some people take to naturally, lots can learn, and some people truly do not enjoy it. Doing your own will make school easier, prepare you better for work, and let you know really quickly if programming is not for you.
There are many, many sub-fields within programming, but for beginners, I would recommend choosing one of these 2 paths:
- Web programming – server-side languages, HTML, Javascript, CSS. This is probably the skillset that currently has the lowest bar for getting a full-time job. There’s an infinite amount of knowledge above those 4 components, but you can learn enough of these in 6 months to contribute to a web development team.
- “Maker” programming – Arduino, Javascript, electronics, robotics. Smart devices are just now hitting the early adopter phase (Pebble watch, Nest thermostat, lost of stuff on Kickstarter) but there are tens of thousands of products that need to be reinvented with network connectivity and inexpensive microprocessors, and probably thousands more products that haven’t been imagined yet (this smart fork is probably my favorite). In 3-5 years, I think an interdisciplinary electronics+code prototyping skillset will be the next big class of technical skills, alongside web, mobile apps, and desktop software.
I know much, much less about Maker programming than web programming, so I’ll withhold my advice there. For teaching yourself web programming, I recommend the following resources:
- Learn Python the Hard Way (free online) – Python is a simple but powerful language. It’s probably the language that looks the most like the process it describes. It’s also used heavily by Google and NASA, as well as being the most prominent language for science and math. This book assumes no previous programming knowledge and only basic computer usage. It’s 52 lessons going from printing text to a screen, all the way to storing data collected from a web page. It’s a very, very solid and broad introduction to programming.
- Codecademy (free online) – this is a series of online lessons and exercises. This is probably narrower than LPTHW but includes interactive elements and has lessons for more technologies (LPTHW only uses Python but covers a wider range of programming topics)
- Try Ruby (free online) – a short (~15 min) online interactive tutorial to learn the Ruby programming language (that’s what I use and lots of web companies use)
- Rails for Zombies (free online) – a series of interactive lessons to learn Rails, a set of tools in the Ruby language that makes it fast to build web sites. These are aimed at beginners and released by the same people that make Try Ruby
- Rails Tutorial (free online) – an intermediate set of lessons about building websites using Ruby and Rails. It assumes more programming familiarity so it’s not great to start with but if you finish RFZ you’re probably ready for it. It covers more advanced coding practices, web site principles, and more. Very, very thorough.
- Code School (paid ~$25 courses online) – a collection of high quality courses with video and interactive lessons covering a variety of web technologies.
I have dabbled or perused most of these but I’ve been programming for 20 years and professionally for almost 10, so I’m not the target audience. I have heard good things about them and they all come from sources I trust and respect.
The most successful programmers I know are the ones that are the most prolific – they write a lot of code, of different types, to solve different problems, because that’s the way you learn. And the more you learn, the better equipped you are to solve the next problem you face. So no matter what you use to learn, you should program a lot. University CS programs have some intensive programming courses, but it’s too small a percentage of the time you spend learning. You have to supplement it yourself.
Mentoring Made Easy
I came across a new site that has completely captivated me: Mentii. It’s a matchmaking site for people looking for mentors and people willing to be mentors.
The signup process was simple – you can import your profile from LinkedIn, you can import your contacts (I always skip this step), and write a statement of what kind of mentoring you can provide. The next screen is a list of people that have recently asked for advice.
I feel great about my career now, but I made some uninformed choices earlier in my career that cost me a lot of time and money. If I had a trusted mentor when I was at those junction points in my life, I might have ended up where I am much earlier. So giving me the opportunity to be that helpful person for others is irresistible to me.
I contacted a few people still in school who were in situations I could help with. It felt great!!! Thank you to the Mentii team for creating such a rewarding service.
Here are two emails I sent, with the personal bits removed. This is similar to earlier advice I wrote to a college sophomore and someone whose resume was misrepresenting them.
Thank You Andrew Mason
Today something sad but not unexpected happened. Andrew Mason was fired as CEO of Groupon. I worked at Groupon for two years, from late 2010 to late 2012, and while the experience was a mostly positive mixed bag, Andrew was definitely one of the highlights. Even though I knew it was a matter of time, I was still sad to hear the news.
Makers – Inspiration and Limitations
I just finished reading the book Makers: The New Industrial Revolution by Chris Anderson.
tl;dr version: It’s a well written, entertaining read, it covers some exciting possibilities, but while it describes some society-wide changes, I think those will take 15-20 years. Most of the benefit in the short term will be to individuals and companies who enjoy making things.
Long version:
When We Build – Notes and Quotes
I just watched an inspiring video about what it means to be a designer today. It’s called “When We Build” by Wilson Miner.
Wilson Miner – When We Build from Build on Vimeo.
It’s worth watching the video because the images, music, video, and his hypnotically powerful vocal pacing are outstanding. But if you don’t have time now or you need more convincing, here are my notes. Most of the quotes are word for word because he chose his words and ideas as carefully as he chose his media.
Wilson, thank you so much for this talk – I can’t even imagine how powerful it would be in person.
[1:00] Warning that it’s going to be a strange talk
I’ve been cynical about the potential of what we do – “It’s just a website, get over it”
This is a uniquely exciting time to be designing digital tools and products
Fast Rails Tests
News: A few months ago, I took a job at Manilla.com and moved to the Bay Area! I wrote a post at the tech blog there about writing fast tests in Rails – check it out!
Notes on DIYDrones/3DRobotics Talk by Chris Anderson
[Last night I went to the Silicon Valley Automotive Open Source meetup where Chris Anderson of DIYDrones/3DRobotics told his story. Here are my notes, slightly rewritten and re-ordered to make more sense if you weren't there]
DIY Drones talk by Chris Anderson, 3D Robotics
1/16/2013, Nokia Sunnyvale
Backstory involving building a Lego Mindstorms autopilot with his kids in 2008 (this is a good story worth watching, e.g. from his Maker Faire talk)
DIYDrones Community
- He fostered the community by “being dumb in public”, and letting interested people come and teach him
- DIYDrones is now the biggest community of people building drones, ~30K registered members, bigger than any aerospace company
- Ground control software written by an IT guy in City Hall in the Outback
- Smartphone processors and sensors have revolutionized robotics sensors and components
- Powerful, light, small sensors and processors are the “Peace divided of the smart phone wars”
Understanding the Clojure Development Ecosystem
Lots of books, talks, and blog posts help people learn Clojure the language, but leave out prosaic issues outside of the language, like development environments and using libraries. This covers the gap between dipping your toe in and confident proficiency.
This guide assumes you are aware of Clojure and want to become a Clojure programmer.
Sections
Why Clojure?
The Philosophy of Clojure
Language Tools
Rich Hickey’s Talks
Baby Steps
Leiningen
nREPL
nrepl.el
Helpful Tips
Appendix – Links
Master the Chrome Developer Tools
Every few months I get in the mood for intense learning and saw-sharpening. Inspired in part by Cal Newport’s Textbook Technique, I’m writing and summarizing things I learn to make them easy to reference later.
I decided to start by getting to know the Chrome Developer Tools better. I always like to find a broad overview when I study something, and I found a great video by Ben Orenstein of Thoughtbot. It’s a 22 minute video that goes over all the major features and common usage patterns of the Chrome developer tools. It’s $15 but Ben was kind enough to let me watch it for free in exchange for a review.
As far as tutorial videos go, this is exactly the style I prefer. He started with a summary of what he would cover, kept the sections to no longer than a few minutes, and each section includes a description and an example. He covered all the basic usage, and threw in some cool advance tricks too. And for things he mentions but doesn’t go into depth about, he shows where to find more documentation.
I’ll share the three favorite new things I learned. First, clicking on a color in the right-hand CSS pane of the Elements tab gives you a color picker – no more RGB hunting! Second, the right hand pane of the Elements tab includes an Event Listeners section, so you can see which Javascript events an element responds to. Matching elements to Javascript code is one pain-in-the-rear problem that I’ll be happy to avoid. And third, the Page Speed add-on gives you a score, prioritized recommendations, and links to documentation for all the parts of your page that affect speed.
At $15 for a 22 minute video, it’s more expensive per minute than other programming screencasts like WatchMeCode.net, Peepcode, Destroy All Software, and more, but it’s tight, broad, and well done, making it still a great value. Frankly, I think high quality screencasts are waaaaaay underpriced and this is a step in the right direction. If producers could sell a 1hr screencast for $50 instead of $12, there would be more competition and more, better material. So I support Ben’s price.
I’d especially recommend it if you’re new to web programming or to Chrome – more experienced developers will already know a lot of the material. It also has me interested in the other screencasts that ThoughtBot has released – maybe tmux is next. I use screen all day, every day but people are always saying how tmux is better.
Thanks Ben and please, more Thoughtbot training videos!
More links on Chrome Developer Tools:
- Modern Web Development – Part 1 – The Webkit Inspector
- Things I Didn’t Know About the Webkit Inspector
- Hacker News discussion on the above article
You owe it to yourself to read The Education of Millionaires
I’ve been putting off an item on my TODO list for years. Years! I had an insight about a Laws of Physics style Definition of Business that would help technical types understand that building a great product isn’t enough, and that they also need to engineer their marketing and sales. I never found the right way to phrase it, but it was something like this:
“Business is when a customer is convinced that you can solve their problem for less cost than the pain of the problem, and you can do so profitably.”

Even though it’s not perfect, it stuck with me because it was a sentence you could mine for insights:
- Building a product is not enough, customers have to know the solution exists
- Customers being aware of you isn’t enough, they have to be convinced of your claims
- Solving a customer’s problem is not enough, you have to do it a profit that lets you justify continuing to work
- and more.
To anyone experienced in business, all of these are “duh” insights. To a young, inexperienced, myopic nerd turned slightly outgoing engineer, they were blindingly eye-opening.
I no longer need to to write that blog post, because Michael Ellsberg’s book The Education of Millionaires covers these topics oh so much better than I would have.

