Tuesday, February 4, 2014

"I'd Like To Learn To Code!"

So, you'd like to learn to code.

First things first: that's great news!

Making software is one of the more meritocratic pursuits we have going right now and, if your goal is to make it into a career, you can do it as a self-taught coder without a formal degree. Better yet, many of the tools and learning resources are free... and amazing.

What Do I Need?

You need to be smart, although not necessarily scary-smart.

You need to enjoy this stuff. And you need to enjoy staying on top of it because things change really, really quickly... usually in fun and awesome ways, but usually at a relentless pace. We are a young industry; just a few decades old.

If you don't want to constantly change and adapt, consider something like furniture making. I do not mean that as an insult. Making furniture is awesome and takes a lifetime to master. Your children are more likely to fight over a piece of furniture you made than some code you wrote. What I mean is that the basic practices of furniture making haven't changed much in centuries.

I am serious: for anything other thing doing this on a hobby basis, you really need to enjoy the "constant change" part!

You Don't Need To Be Good At Math

It helps, of course! There are coding jobs that require it. If you're doing number-crunching for scientists, you'll need to know statistics. If you're doing 3D game programming you'll need to know matrix math and such. And so forth. And in general there are quite a few parallels between the thinking one needs for math and programming.

But generally speaking, there's usually not any math involved.

The Thing Nobody Tells You

If you plan on making this into a career, you probably need to be good with people. I know -- nobody ever says this, right? I truly believe this, though. You will be working with others and your job is to understand what they want and translate the needs of non-coders into code.

What Language Should I Learn?

Practically speaking, you'll need a few.

The good news is that most programming languages follow the same basic principles. Programmers move between them fairly easily... and we generally find this process pretty fun!

The reason why we have lots of programming languages is because different languages are suited to different tasks. Just like in the real world where we have a "language" to describe music (sheet music) and another "language" to describe math and so forth.

For example, web application developers are at least conversant in...

  • HTML, CSS, and JavaScript+jQuery to describe web pages.
  • A language like Java, PHP, Ruby, Python, Javascript, or C# that runs on the server and talks to the web browser
  • Some tools to store data have their own language like SQL, though often you can do this right from Java/PHP/Ruby/Python/C#/etc.

There are plenty of other paths one can take. For example, complex games are usually written in a mix of a nitty-gritty language like C or C++ and a "scripting" language like Lua. Web games are usually JavaScript. iOS applications are written in Objective-C. Android applications are written in Java.

Where Do I Start Learning?

There are so many possible answers here!

I'm not going to pretend to have a comprehensive knowledge of every resource, because nobody does.

I'd recommend the following as a first step. These online courses run in your browser; you don't have to buy or install anything on your computer. These are good for discovering if you're good at this stuff and find it fun.

http://tryruby.org/
http://try.jquery.com/
http://www.trypython.org/
http://railsforzombies.org/

One that I personally use and recommend is: https://www.codeschool.com

They offer a lot of free resources and if you enjoy them, you can access all of their material for $29 a month. Their "courses" are split into short, fun videos. You watch a few minutes of video, do a coding exercise in your browser, and then move on to the next lesson.

I also recommend Code School because their courses are organized into various "paths" - they have a Ruby Path, a Javascript Path, an HTML/CSS path, and so forth. If you complete all or most of them, you'll be pretty darn ready to develop web applications.

How Do I Actually Get a Job?

Coding is great hobby, obviously... doesn't need to be a job. But if you are trying to get paid for it...

Well, you could make a great application and sell it.

If you want somebody to hire you to write code the best way to get your foot into the door (when you have no prior experience) is to write some sample applications. Put them online and then put the code on GitHub, which is kind of like Facebook for writing code. Or contribute code to others' open-source applications... most of which are on GitHub these days.

One other thing to keep in mind is that your choice of languages will influence your employability a bit. For example, Microsoft's C# and Sun/Oracle's Java tend to be used in corporations. Open-source languages like Ruby and Python are more likely to be used at smaller companies and start-ups. Don't take my word for it; check the local job listings on Craigslist and see what's in demand in your area.