Coding is hot right now. Real hot. I have had a few friends (and one or two strangers) ask me for help learning to code. I like to help, but admittedly I’m not much of a teacher. I’ve sent my friends a variety of different resources, and I thought I would consolidate them here so I can refer other people later.

Table of Contents

  1. Should I learn to code?
  2. What language should I learn?
  3. Where do I get started?
  4. Enough with the browser crap!
  5. Are there any courses or books to guide me?
  6. I made a web app! How do I get it online?

Should I learn to code?

Yes.

Here’s the deal; coding isn’t quite the new literacy, but learning to code gives you a fantastic knowledge of how computers “think” about things. It’ll give you an intuition into how these systems work. It will give you experience with what any developers you know are working on. It forces you to think logically, step-by-step about the smallest things, and understand why the tiniest imperfection can damage huge systems.

It is, however, an art. Like painting or playing the guitar, it takes a lot of practice to get the hang of it. If you find yourself hating that practice and dreading sitting down at the computer, then coding might not be for you. Don’t commit your life to it until you’ve tried it, experienced that rush of your first program actually working, and get enough joy out of it to keep practicing every day.

Top

What language should I learn?

Depends. What do you want to do? When coding, I am learning all the time . I’m constantly looking up libraries, documentation, language syntax, and best practices. You never quite “learn” a language to the point where you don’t have to look stuff up anymore. Ideally, you become familiar enough with the concepts so you can quickly pick up those concepts in any language.

I learn best when I have a goal. There’s something I want to do; what’s it going to take to make this happen? I think a lot of people learn well this way.

So the best thing to do is: rather than pick a language to learn, pick your first project. Keep it simple, but make it something you want to do - a forum on the web. A breakout-style game. An app to convert measurement units. A script to rename files. This will determine what kind of language you want to pick up. It will also give you a goal to progress towards which is not “grind through this tutorial.” When you find code online, you can copy + paste, then modify it so it does exactly what you want. This is a great way to read and understand code, rather than just following guides.

The basic choices are:

  • Blog / forum / web app of any stripe: Ruby, Python, PHP, or Javascript
  • iPhone / Mac OS X App: Objective C, which is based on C . You can also use Ruby via RubyMotion, or Javascript via a variety of frameworks (I have used Ionic and it’s not bad)
  • Android App: Java - though Android uses Google’s flavor of Java, called Dalvik
  • 2D Game: Javascript - you can use it with Unity, Enchant, and Impact . Javascript is very similar to Lua, which is the language of choice for gameplay programming in many game engines
  • 3D Game: Javascript works with Unity, Torque uses its own language, and Unreal uses its own variant of Java. You probably want to start with modding an existing game. You can also download Id Software’s source code archives to play around with C++, QuakeC, and several other languages.
  • Scripting: renaming files, command line applications, and other fun toys. Bash for Linux and Mac, and PowerShell for Windows

In general, if you want to learn web app development, I recommend Ruby. Why? Great community, lots of support, tons of “intro to” / “try out” / “getting started” tutorials, and it’s the language I know best - therefor it’s easiest for me to provide guidance and help out.

Be aware that for any of these languages, there will be lots of related knowledge you’ll have to pick up. How compilers work, version control software, IDEs or text editors, using the command line, databases, persistence, disk i/o, networking… There ends up being a lot you have to work with. For example, here’s the stuff you need to know to make a medium-scale web app with Ruby on Rails:

Rails competencies

Thanks to Brook Riggio for the image - and you can download the PDF version here.

But don’t be scared. The process is:

  1. run into a problem
  2. have no idea what’s going on
  3. google it
  4. read a “how-to-fix-this” article online
  5. try to understand what happened
  6. follow up with any related learning
  7. repeat

Top

Where do I get started?

This depends on what you are doing, what kind of computer you have, and how deep into software development you want to go. Here are some quick, easy, and free resources for starting out with a few different techniques.

  • ideone - try many, many languages in your browser. No setup, no installs, instant.
  • TryRuby - quick in-browser ruby tutorials
  • TryPython - same thing, but for python
  • JsFiddle - write some html, and mess around with it in Javascript.
  • Rails For Zombies - Learn Ruby, with the library Ruby on Rails, in your browser. With zombies.
  • Cloud9 IDE - make and deploy web apps in a variety of languages, collaborate with others, and deploy to free services.

Top

Enough with the browser crap!

Okay, okay! I get it. You want to run things on your own machine. Here’s the scoop.

I code on a Mac laptop. I love Mac OS X because it has a proper Unix-style command line, and a nice graphical layer for things other than coding. It’s got a lot of nice apps, too. Here’s a quick rundown of my setup for coding web apps with Ruby on Rails.

  • iTerm2 - free replacement for the default terminal
  • Sublime Text 3 - free text editor, though it nags you on startup unless you pay. It has highlighting for almost any language, and a great plugin architecture that makes it easy to find extensions
  • Google Chrome - indispensible. The fastest web browser, with great developer tools
  • XCode - not just for iOS apps, but it installs some command-line tools you need to install the other stuff below
  • Homebrew - installs and manages command line tools
  • RBenv - allows you to run multiple versions of Ruby on your machine. Some people prefer rvm which does the same thing in a different way.
  • Bundler - helps you manage your ruby libraries (called “gems”) on a per-project basis
  • git - lets you save your project code, and every previous version of it, ever. Use with the code sharing sites github or bitbucket to back up all your code from all time and work on it with other people. If you want to stay off the command line, here are some shiny apps for using git

So that’s Ruby on Rails on Mac. Let’s say you want to do something different. Sublime Text, Chrome, Rbenv, Bundler and git all work on any platform. You won’t need XCode, though on Windows you may want Visual Studio Express

If you’re on Windows and you’re not making games, you should probably install Vagrant. This will let you run a small Linux machine inside your windows machine. And it’s free. It does require Virtualbox, which is also free. But this will give you a real command line so all that terminal jazz on sites like StackOverflow makes sense.

Top

Are there any courses or books to guide me?

Tons. There is so much more available than when I started - and that’s great! Some of these are free, some are not, but they all offer a guided tour aimed towards a specific goal.

Books

Also, here is a giant freaking list of tons of free ebooks on all sorts of programming / compsci stuff.

Online Courses

Real Life Boot Camps (bay area)

More Lists:

Top

I made a web app! How do I get it online?

iOS and Android apps are simple, just submit it to the store. Same for Windows and Mac apps. For games, you can usually just build it, zip up the files and put it online somewhere like Box.com or Dropbox. But web apps need to be running on a server - all the time. Here are some free places to run your app.

Top