The Coding Revolution (TEDx talk)

Related Posts:

An approximate transcript of the TEDx talk is below. I’ve starred points that I intend to write follow-up posts about, for my own reference.

The written word has been the foundation of our society ever since it was invented. But for most of human history, the only ones who could write things down were professional scribes (or people who could afford to pay them). This was not very many people, so most of humanity’s ideas went unrecorded.

Then came the printing press, and widespread literacy. All of a sudden, anyone could write down their thoughts, and it was much easier for them to spread. This lead to revolutions in everything; governments, business, learning, culture — everything changed.

We’re in a similar situation today. The foundation of our society now is technology, and the only ones who can shape our technology are professional programmers (or people who can afford to pay them). This is not very many people, so most of humanity’s ideas go unbuilt.

But I have good news. Recently I’ve discovered that the tools have gotten good enough so that anyone can learn to code. You don’t have to be a math person; you don’t need a technical background.

And I believe that everyone should learn to code, because when more of us begin to see our technology as builders and not just consumers, I believe that we are going to see a whole new set of revolutions. 

Let me tell you a bit about why I came to believe both of these things.

I’ve always been an “ideas guy.” I spend a lot of time scrawling things down on the backs of napkins. But I was lucky enough to get the chance to try and execute on some of my ideas. When I was around 21, I dropped out of Indiana University, and went to India to start up some ventures.

Now, why India? Well, it’s a long story. I was 21, and I thought I had it all figured out. It turns out, I had nothing at all figured out. I knew nothing about India, startups, or life in general. But slowly, very slowly, I learned a little bit about each of these things. And eventually I reached a crossroads.

I had to decide between continuing to grow the business, and exiting. I chose to exit because, at heart, I’m a huge nerd. I love to learn. So, of course, I dropped back into college here at UChicago.

One of the things I was most excited to learn was how to program, because the story of my life as an entrepreneur was one of being constantly frustrated by my inability to code. To build the simplest prototypes, you have to attract developers, you have to afford them, and you have to communicate your vision to them. Something usually got lost in translation.*

So I took a couple of computer science classes as soon as I got here. They were interesting and challenging, but I didn’t come away with anything I could immediately apply to any of my ventures. It was all very theoretical. It felt like I’d have to do a couple of years of groundwork before I got to the practical applications, which was discouraging.

And then there were my classmates, the computer science majors. They were very smart. They used bigger words than I knew, and generally were very intimidating. So I thought maybe programming was best left to the professionals after all, and I kind of gave up.

But then, last fall, I heard about a school here in downtown Chicago. They claimed to be able to take complete beginners and teach them how to build fully functional web apps in 11 weeks.

Now I was skeptical of this, but I was desperate; I wanted it to be true. So I gave it a shot. And I’m happy to say that it worked. Code Academy showed me just the right tools to use as a beginner, and just enough of how to use them so that I got productive in just a matter of weeks.**

Now you might be thinking, “Hang on, this guy is not really a beginner — he took some computer science classes, he had a technical background.” And that’s fair. But let me tell you about my friend Tom.

Tom was one of my classmates at Code Academy. He came in as a true beginner. He didn’t know anything about programming a computer; he wasn’t even the best at using a computer. We were all a little bit worried about Tom.

But he had an idea that he was passionate about building. He wanted to make a real estate search engine that lets you find homes based on their distance to public transit, which I think is a great idea.

The very first week, our instructor gave us a basic exercise: we were supposed to model a bank account. Tom and I were partnering up, and I was getting ready to do as I was told. Tom said, “Hang on, can we make a real estate listing instead?” I said, “… well, yeah. Yeah, I guess we can.”

See, I was used to doing a bunch of theoretical exercises and not thinking about practical applications until way down the road. But Tom, no matter how little he knew, wanted to immediately get as far as he could toward building a solution the problem he was passionate about solving. So, I might have come in knowing more than Tom on Day 1, but by Day 2, as far as building real solutions to real problems, Tom had already left me behind.

Tom continued like this. Every day we’d learn a little bit, and every night he’d go home and plug in that bit to his app idea. And at the end of the program he had built this. This is LiveByTransit. I’ve asked it here to show me homes within a 5 minute walk of a Metra stop. You can see that the results neatly trace out the Metra lines.

You can do all the standard real estate filters and sorts. He figured out how to make this map dynamic, so as you pan and zoom it updates the search results. He even figured out how to pull in Chicago Public Schools data, so that you can rank and filter your results by school district.

(Since then, with the feedback he’s gotten from his first prototype, Tom has evolved his idea and is now focusing on SchoolSparrow. This is the kind of evolution that cannot happen when your idea is still living in your head.)

This is a sophisticated, powerful, useful site, and it was built by a guy who had never seen a line of code just three months before.

Given the right instruction and the right community, it is possible, with passion and persistence, for beginners to learn how to build meaningful apps. The tools that enable this for beginners have just recently come into existence, and they are just getting better all the time.

Alright, maybe anyone can learn to code, but why should they? Let me tell you a couple reasons why I believe they should.

There’s been a lot of ink spilled lately over the jobless recovery. Basically, the stock market is back to where it was before the recession, corporate profits are at record levels, but the jobs haven’t come back.

A lot of people think this is because technology has gotten so good that the remaining employees have become so efficient, they just do all the work that there is to be done; and that we are just going to see a continually rising trend of systemic unemployment as technology gets better, especially as artificial intelligence technology matures.

But I read a book recently called Race Against The Machine. In it, the authors describe events in the world of chess, which is the classic area of application of AI.

In 1997, for the first time ever, a computer beat the best human chess player in the world. This was big news at the time, but it’s kinda become old hat since then, and no one talks about computers beating humans anymore. The action shifted to AI versus AI to see who the best in the world at chess is.

But today, the best chess playing entity in the world is neither a human grandmaster nor an AI; it’s a team of humans and computers. The humans aren’t grandmasters; they are actually amateur chess players, but they are very skilled at coaching the computers at which moves to look deeply into. And there’s something about that synergy that pure AI hasn’t been able to replicate.

The authors observed this pattern in industry after industry: teams of computers and humans defeat the best AI as well as the best human experts.

To me this is a hopeful takeaway. It tells me that we are still going to be useful, but that the ability to communicate with our machines, or program, is going to be fundamental in the 21st century economy.

Now, I am not saying that everyone has to be an engineer.*** Exactly the opposite. You don’t have be a professional author to create value by writing, and you don’t have to be a pro photographer to create value by taking pictures.

I took up photography a couple of years ago. I read somewhere that the mere act of carrying a camera with you, even if you never take any pictures, changes the way that you look at the world. When you are always looking for a shot, you take less for granted, you notice more things, and you are just generally more engaged with the world around you.

Now I noticed a similar phenomenon after I learned to code. I wasn’t expecting this, it was a surprise to me. Before, if I ever noticed a little annoyance or irritation in my day to day life, I would just be annoyed for a couple minutes and then I would forget about it and move on.

But now I look at things with a builder’s eye, and if I notice one of these “pain points,” I analyze it, I search for existing solutions, and if there aren’t any, I make one.

One of my favorite things to do is taking long road trips on my motorcycle, and one of the best things about road trips is stopping at all these nice little local gems you find along the way; coffee shops, restaurants, local attractions.

I was worried that I was missing out on a lot of great stuff that might have been just a little bit out of my way and I wanted to be able to search along my whole route before I left home. I couldn’t find a way, so I made this.

You give it your origin and your destination, it goes to Google maps and figures out your route; and then it goes to Yelp, searches along that route, finds the best spots, and shows them to you.

I made that before Thanksgiving Break and I used it on my way home, I gave it to some of my friends and they used it to plan some road trips, and it added just a little bit of value to our lives.

Another one of my pain points: I get a bunch of fun sounding Groupons in the mail all the time. But I don’t wanna go by myself; I want at least, say, 3 of my buddies to come with me. Now, at least with my friends, trying to get everybody coordinated over email, figure out a date, and figure out who’s in never happens before the Groupon expires. So we miss out on a lot of cool stuff.

So I made this. It pulls in your city’s Groupons. If you find something you like, you’re a click away from inviting your Facebook friends. They all get a notification, and when, say, 3 of them commit, the deal tips, everyone gets a text message, it makes a Facebook event, it puts in your calendar.

I made this tool and we’ve been using it, and because of it, we’ve all gone out together a few more times than we would have otherwise. To me that’s very valuable.

If it were up to me, the University would make a course on building web apps part of the Core curriculum, and it would count towards the art requirement; because it all feels the same to me.

The first time you make one of your ideas real, and you push it out live on the web, and you see it, and people are using it, and you built it with your own hands — you feel like Superman.

The ability to make your ideas real is a superpower. Could you imagine what the students here would build if they all had this ability? What would the literature majors build, or public policy majors? What would the athletes build, or the dancers? What would you build?

So far, the only pain points that get addressed are the ones experienced by professional developers (or people who can afford to pay them). This is not very many people, so most of humanity’s ideas go unbuilt. Programmers are the scribes of the modern age.

What happens when people from all walks of life gain the ability to make their ideas real, based on what they observe in their unique experience?****

When you give experts from other fields the ability to code, they become dangerous, and I think that this is going to lead to a whole new set of revolutions. I can’t wait.

This brings me to another crossroads. It looks like I might actually finally graduate from college. The question is, what do I do next?

I could return to the world of business, where there are still many opportunities, especially now that I can code.

But I’m also happy to say that I was accepted to some of my top choice grad schools, and that’s been a lifelong dream of mine. And so I’ve decided to… do neither.

After I learned how to code in the fall, I was invited to be a teaching assistant for the winter class. And it turns out that the only thing I love more than building my ideas is helping other people learn how to build theirs.

So after I graduate, I’m going to be dedicating myself full-time to teaching beginners how to code, and doing everything in my power to usher in the coding revolution. Thank you.

Follow-up Posts To Write:

  • * How learning to code has made me 10x more effective as a manager
  • ** Why a tight feedback loop is so important for beginners’ learning
  • *** What it will mean to create value in a no-scarcity economy
  • **** How widespread code literacy will enhance the app ecosystem

Immersion

After taking two years of Spanish in high school, and another two years in college, I still can’t even understand Spanish conversations I overhear, let alone participate in one. But, during my time working overseas, I picked up enough of the native tongue to get by — just by accident.

I think it’s pretty common knowledge that, for most people, immersion in a foreign language is necessary for real learning to take place (and the science and tools are starting to catch up to this conventional wisdom).

In my previous post, Getting Started Building Apps: Concrete Steps For Beginners, I described a path for starting to learn how to program. It is a guide to online resources and books that a motivated beginner can follow to get up and running.

As much as I wish I had this guide when I was trying to get started, I have a confession to make: it wouldn’t have been enough for me to get to where I am today as a developer.

I tried for years to teach myself to code using books and online tutorials, even college courses, but always failed to gain a critical mass of useful skills. It was like my Spanish courses in school: after class was out, I was back to worrying about other things, and I had no way of knowing which parts of what I was learning were actually useful.

Programming languages are just like any other language, so, unsurprisingly, it took total immersion to finally get me usable, practical fluency. I found this immersion at Code Academy.

Code Academy is a physical school in downtown Chicago that teaches passionate and persistent beginners how to make their ideas real through code. The development classes are during the day, and the people who attend them have made the conscious decision to make learning to code their primary thing for 11 weeks.

This creates an environment for learning unlike any I had ever seen before. You and your peers are all struggling to learn together, and you are thinking in code all the time. Also, Code Academy is now located in 1871, Chicago’s intriguing new technology hub; observing coders in their natural habitat is like picking up just the useful, conversational parts of a language by listening to native speakers.

Sure, we all know one or two polyglots who seem to be able to pick up a book or an audio course and learn a language. Likewise, some people have the aptitude and discipline to teach themselves programming out of books or online tutorials.

But for most of us beginners, immersion is key. If you can’t join a program like Code Academy, I strongly suggest taking the last step of my guide very seriously — Join the Community.

Move to Paris to learn French. Move to Chicago to learn code.



It also helps that we were taught by Jeff Cohen, one of the best instructors on the planet. But that’s a subject for another post.

Related Posts:

Getting started building apps: concrete steps for beginners

The Short Version

  1. Note down an idea that you want to make real.
  2. Mock it up.
  3. Make the mockup real with HTML/CSS.
  4. Lay the foundation with Ruby.
  5. Bring the static mockup to life with Rails.
  6. Join the community.

The Long Version

For beginners who want to learn to code, the problem today is not that there aren’t enough learning resources; it’s that there are so many it’s hard to know where to even begin.

In this guide, I’ve outlined a list of concrete steps that a beginner can take to start building real, useful apps. The list is as small as I can think how to make it while not leaving anything essential out.

For each step I’ve tried to suggest at least one free resource that you can get started with right this minute. I’ve also included some paid book suggestions, but I recommend starting with the free resources and only using the books if you need references later on.

Good luck and happy building!

Step One: Note down an idea that you want to make real.

Does this deserve its own step on our minimal list? I believe it does, because I think many people underestimate the value of having a clearly defined goal drive your learning.

It’s truly amazing how good the tools of the trade have gotten — good enough to allow complete, non-technical beginners get productive quickly. But programming is still hard at times.

Having an idea you are excited about seeing made real helps keep you going through the rough patches. So always keep your eyes open for little “pain points” in your life that you can build a solution for.

Resources

Free: the backs of napkins (my tools of choice), Evernote (freemium)

Paid: Field Notes

Step Two: Mock it up.

Really, two steps in and still no code? Yes, really. An idea in your head or on a napkin is good, but a mockup really gets you thinking about what you are going to need in order to make it real.

And the mockup is one small but tangible step closer to a real product — every little bit of progress helps keep you going.

It doesn’t have to be super detailed, just rough it out for now. We can paint in the details later.

Resources

Free: pencil and paper (my tools of choice, I guess technically not free)

Paid: I’ve heard good things about Balsamiq and Keynote as mockup tools (both have free trials).

Step Three: Make the mockup real with HTML/CSS.

HTML tags are the clues web browsers use to understand content. For example, in the actual code of this page, the title of this step is enclosed in strong tags, like this:

<strong>Step Three: Make the mockup real with HTML/CSS.</strong>

This lets the browser know to draw it out bold. There’s a bunch of other tags, like <p> (for paragraphs), <img> (for images), or <a> (for links).

Once you’ve got all your data tagged up with HTML, you can use CSS to customize the look of your page. CSS lets you tell the browser to, for example, use Helvetica font for all the stuff inside of paragraph tags but use italic Times New Roman for all the headings.

Your next task will be to translate your mockup into actual HTML and CSS code. It’s just going to be a static page, for now; it’s going to look the same for everyone who visits it. You’ll have to manually type in data, even for stuff that you would want to be dynamic on your real site, like the current user’s name.

But this is the critical first step to making your idea real. The code you write now will come in handy later. But don’t get too bogged down in the details; just get the basic structure of a page or two written to whet your appetite, and then move on.

Resources

Free: A Beginner’s Guide to HTML & CSS, by Shay Howe. Shay is a designer and user interface engineer at Groupon, and the HTML & CSS instructor at Code Academy. He has made his course notes available for free.

Paid: Head First HTML with CSS & XHTML. Be careful not to accidentally get Head First HTML5 Programming: Building Web Apps with JavaScript, which is not quite as beginner-friendly.

Step Four: Lay the foundation with Ruby.

Ruby is the language we’re going to be using to start making our site smart. For now we’re just going to be doing some basic exercises which might seem like they have nothing to do with building apps, but hang in there: getting familiar with Ruby is going to pay dividends very soon.

Resources

Free: Learn to Program, by Chris Pine. If you can get through all these free chapters, you’ll be in good shape. Some of the exercises are tricky, but try to complete each one.

Paid: Learn to Program, Second Edition. This is the physical version of the online tutorial above. It’s a great reference to have around. Make sure to get the second edition, which is updated and improves on the online version.

Step Five: Bring the static mockup to life with Rails.

So now you know some basic Ruby. You could theoretically go out and program a web server, a database, and all the 1001 other things you need to run a website. But fortunately, someone has already written all that Ruby code for us, and released it for free.

This framework is called Ruby on Rails, or just Rails for short. Rails is how we’re going to finally bring our idea to life in a real, functional, dynamic web app.

Resources

Free: Ruby on Rails Tutorial, by Michael Hartl. This tutorial basically walks you through building Twitter from scratch. Really. Right now that might sound scary, but it’s not; if you’ve done the steps above then you are more than ready. In fact, Hartl assumes that you don’t know HTML or Ruby, so you are ahead of the game.

It will tie together all the things you’ve learned about HTML, CSS, and Ruby, and even introduce you to some other cool stuff. It also, within just a couple of chapters, walks you through how to get your creation live on the web for free.

Be sure to do the Rails 3.2 version; it just came out recently. Don’t do the 3.0 version.

Paid: I could recommend any number of great books to go deeper into Rails than the Hartl tutorial does, but I’m not gonna. Because if you can get through most of Hartl (in other words, you can build Twitter) then you are ready to start building your own app idea. And that’s by far the best way to learn.

You will run into specific questions not covered by any of the resources above, and at those times Google and Stack Overflow will be your best friends. If you can find a RailsCast on the particular technique you need for your site, like how to map an address, you’re usually all set.

Step Six: Join the community.

One last thing that’s going to greatly improve your odds of success: join the community. I can’t emphasize enough how much this helps motivate and educate you, and it’s also just plain fun. By and large, the Rails community is shockingly friendly and welcoming to beginners. Turn up at some events, find someone who sounds like they know what they are doing, and offer to buy them lunch once a week if they answer some questions.

Finally, try to find a friend to join you on this journey. Having a partner in crime to talk with makes learning much more fun and effective.

If you can’t convince anyone, get a rubber ducky and set it on your desk. When you get stuck, explain the problem to the ducky. Nine times out of ten, before you are done asking the question, you’ll have figured out the answer.

Now go forth and build!



I will be continually updating this guide as I come across better resources and strategies for learning. If you have suggestions or feedback, please let me know in the comments or email me@rugb.com.

Related Posts: