So You Want To Learn To Code?

The best place to start is by realizing that coding is fundamentally about solving problems. It's not about variables or subroutines or even the code itself. Those are just the means to an end. Coding is about identifying problems and finding the best way solve those problems.

In 1985, I was 8 years old. My father was working at a mid-size bank in upstate New York writing security software. He would come home at night with a giant stack of green-and-white striped printer paper covered with thousands of lines of code. Highlighter in hand, he’d pore over the stack, looking for bugs.

This was my first experience with code, and frankly it didn’t mean much to me. My dad tried to explain to me variables and subroutines, but he might as well have been explaining the stock market to me. I was too busy building forts in the woods.

22232_233137487201_7535400_n.jpg

I was, however, the benefactor of all of my dad’s technological hand-me-downs. My first computer was an IBM PC Jr. An 8088 processor with 16-color video support and a 3-voice sound card. It had two cartridge slots (MS-DOS stayed always plugged into one of them) and a a 5.25” floppy drive.

This became my sandbox. I took this machine apart—literally and metaphorically. I spent hours poking around inside that computer, trying to understand the logic behind it all. I also began playing around in BASIC, a simple programming language for beginners. I wasn’t building anything profound. In fact, one of the first programs I wrote placed a menu over a “curtain” on the screen that I created by repeating different ASCII characters. These early experiences in BASIC taught me to cause-and-effect nature of coding.

More importantly, though, I began to realize that coding was really about solving problems. Early on, the problems were trivial. In junior high, my friend and I wrote a program that tricked the local librarian into thinking the computer was faulty. But the idea that I could write software, that I could dream up something and make it a reality, limited only by my imagination—you can’t shake an idea like that.

As time went on and as I developed a larger view of the world and a better understanding of the problems that people face, the ability to create solutions became an even more valuable skill. Computers are all around us, and people want to do incredible things with them. Like a carpenter in a housing boom, coders are in high demand. But having the wherewithal to turn your own ideas into reality—there’s nothing like it.

Resources for Learning To Code

If you’re like me, you probably skipped the story and scrolled down to the list of links. Good for you, you’re hungry to learn and you’re not going to let some nostalgia get in your way.

Here’s a list of some helpful resources for learning to code. If you’re not sure which is for you, skip this list and check out my “which language is right for me” list below.

  • Scratch — A fantastic tool for teaching kids (and anybody, really) the basics of code. Drag-and-drop visual pieces of your “program” to control on-screen behaviors. The barrier to entry is low; you can literally have an interactive game running within 15 minutes. My 4-year-old son is already enjoying this.
  • Khan Academy — A set of free tutorials that teach the basics of coding. The training environment is especially helpful: an audio track with the instructor teaching plays beneath a live code box that the instructor updates as the lesson plays. Very helpful.
  • CodeHS — Three 10-hour modules that teach you the basics of Javascript online using your browser. Free to try, monthly subscription.
  • Code Academy — A free, interactive site for learning how to code. Tracks include: Web Fundamentals (HTML/CSS), jQuery, Javascript, Python and Ruby.
  • Code.org — A good resource for coding that combines most of the previous resources into one site.
  • LearnPython.org — Another great interactive, web-based tool for learning Python.
  • Lynda — An incredibly comprehensive online learning site. Lynda has video tutorials for everything from Photoshop to PowerPoint to iOS development. Sure, there’s a monthly fee, but it’s a much better investment than binging on Netflix.
  • Harvard’s Intro to Computer Science Course - If the previous links were practicing your scales and chords, this course is Intro to Music Theory.

Which Language Is Right For Me?

Ok, so you skipped the list above because you realize it’s going to take an investment of time and energy and you don’t want to waste either learning to use a tool that doesn’t help you do what you really want to do.

A few things to consider: much like learning to play an instrument or learning another language, when you learn the fundamentals and concepts of one, it helps you understand the others. Don’t be too worried about buyer’s remorse.

That said, choosing a language closest to what you want to accomplish can help you enjoy the investment and prevent frustration. Consider the following breakdown:

Beginner: HTML, CSS, Javascript

Because these languages deal primarily with the display and manipulation of presentational data (stuff you see right on the screen), they’re generally easier to understand. They’re also a bit easier to get into because you can view the results of your coding right in your browser.

Intermediate: PHP, Python, Ruby, Perl

These languages are typically related to web development. These are “scripted” languages, which means you can write them in a text editor and they’re compiled when you run them. It also means that you’re more likely to find people sharing their code. Setting up your computer to run them can be a bit difficult for newcomers, and the learning curve is a bit steep since they introduce the fundamental concepts of most programming languages. But learning any one these languages well means wielding a lot of power. For example, Facebook is built primarily with PHP; most of Google’s properties are powered by Python. Of the four, PHP is probably the easiest to start with since there are a lot of PHP resources online, though Python has seen a real surge recently.

Advanced: C++, Cocoa, Objective C, Assembly

These are some of the more traditional programming languages. They’re “compiled” languages, which is to say that you have to package the code before you can run it and typically have to write it in a program specifically designed for that language. Most of the software on your computer is written in one of these languages. For example, most Mac programs are written in Cocoa, most iOS software is written in Objective C and most Windows software is written in C++.

Keep in mind, these are just some of the big ones. There are all sorts of interesting languages and frameworks cropping up that are targeted toward specific tasks (ActionScript) or designed to make the original language easier to use (jQuery).

The best advice I could give regarding coding, though, is to come up with a great idea, then use Google to figure out which language is best suited to make it a reality. After all, the best programs come from developers solving their own problems.