Learning Programming Isn’t Daunting

Your idea is cool, but you know what’s cooler? Building it.

Building software today has a lower barrier to entry than ever. Dan and Marco were just talking about how creation, deployment, and distribution is easier than it’s ever been.

That message wasn’t new to me, but getting from zero programming knowledge to shipping my first piece of software always felt like this daunting endeavor with packages to install and databases to learn.

But it’s not – programming is about taking something complex and breaking it down into small bits and pieces that are easy to learn and build. So in the spirit of breaking things down, I’ve found three steps that have helped me be successful this time around learning to build software as a business guy turned User Experience strategist/designer:

  1. Pick a project
  2. Learn the basics
  3. Build it

Pick a project

This endeavor must start with a problem you want to solve for yourself. Having a personal project will put the things you’re learning in context, even if you’re not building it yet. You’ll see the bigger picture of how you can build a part of your idea when you’re learning something basic and boring like loops or arrays. It’ll also motivate you to keep learning when something more interesting pops up.

In my case, The Syndicate is my fiddling option of choice. My project was to build a CMS for sponsors to submit their content and for me to distribute it to the writers each week. Yes, I’ll probably spend 100x the time building this than I’ll save each week, but it’s about the experience of learning.

Learn the Basics

Every time I’d tried to learn to program in the past, I’d barely made it past getting the environment ready. We learn by actively doing, not by learning, so it’s important to choose something that will get us “doing” quickly. I tried learning Ruby 2 or 3 times and couldn’t even get the language dependencies up and running on my computer.

My first programming attempt was JavaScript through Codecademy, which was fantastic for giving me a first pass at foundational knowledge. I’ve quickly learned that there’s a core set of knowledge that you have to know regardless of which language you choose – things like:

  • Variables
  • Logicals (if/then statements)
  • Arrays
  • Loops

As I progressed through my lessons on Codecademy, I hit a wall given my goal to build a CMS for The Syndicate: JavaScript is a client-side language. What that means is that without getting plugged into a bunch of other things (Node.js anyone?), all I can do is manipulate stuff that’s already in a user’s browser. As far as I could tell, there are no back-ends, no databases, nothing.

Lesson learned: programming languages are about picking the right tool for the job. There isn’t necessarily a “better” or “worse” when you’re starting out, but that’s where having a project in mind beforehand will help you start with the right language for the problem you want to solve.

In my case, I decided to give it another shot with PHP. Yes, it’s not a “cool” language, but it’s simple to get coding (it’s essentially dynamic html pages), and it’s easy to deploy.

I was about to order a PHP book off Amazon when one of my buddies recommended the Lynda PHP/MySQL Essential Training. It’s an 11 hour video training that walks you through all the fundamentals and a basic CMS build at the end. For $20 for a one month Lynda subscription, I’d have time to walk through everything – conveniently enough, I had three evenings in Florda on a work trip to do so.

Break it Down and Build It

Ironically, I didn’t even make it through the full Lynda training. I was about 2/3 of the way through, far enough to learn to write to MySQL databases. Absorbing the fundamentals a second time around made it very easy to learn.

But learning is about doing, remember? So I decided to start building, but I kept getting stumped when I started.

Break it down into smaller pieces.

It wasn’t about building a CMS, it’s about building a small feature, then building on top of that.

So I started small: one night I wrote a basic form that would post to a database. The next day I figured out how to return those values and display them in a table alphabetically. Each night I’ve built a small component of this entire CMS.

When I’d get to something that I didn’t know, Google was my best friend. Want to upload a file through PHP? Yep, there first two pages of results are loaded with ’em. If you have a problem, someone has asked it online before, especially with a widespread language like PHP.

Once you figure out these small pieces, they quickly build on each other, and before you know it, they’ve snowballed into your project. Being a creator is addicting – no wonder programmers stay up into the early hours working on their stuff.

Coming up soon, I’ll share the results of my currently in progress CMS for a peek behind the scenes of how The Syndicate is run.

August 16, 2012