It's surprisingly rare for me to get emails with suggestions for posts, but since posting last week about my startup, I've gotten several requests for a post about programming. Good idea-I should have thought of this before.
Now is a particularly good time to talk about programming, because now is a particularly good time to start a tech business. Every two weeks I go to Startup Poker, where I play poker with a bunch of startup employees and owners. We don't talk about startups all that much, but when we do, a recurring theme is this: there has never been an easier time to start a startup.
The process of starting up a tech company has almost become standardized: two founders join together with an idea, they start building it, take funding, and change the idea along the way as necessary. Amongst the two founders, there are only two configurations that you'll see: either both are "technical" or one is "technical". Technical meaning that they can program and will actually build the product.
The thing is, EVERYONE is looking for technical cofounders, and no one is looking for nontechnical cofounders. The connotation of a nontechnical founder looking for a technical cofounder is: "Hey, I have an idea. I want you to make it for me."
In other words: by learning how to program, you make yourself extremely valuable in an industry that is currently at its peak. Even if you don't intend to do most of the programming, it's very useful to have a background in programming. At the very least you'll understand what can and can't be done easily.
Learning programming is probably less difficult than you imagine it to be. A cool property of programming is that as a bad programmer, you can actually build very cool things relatively easily. Your creations may not be very secure or efficient, but it doesn't take a high level of skill to make things functional. However, as you build these things you'll find that you get better and better, making each project coded to a higher standard. You can notice this effect even within a large project as a beginner: your earliest code will be terrible, but some of the last code you write will be decent. And by then you can go back and rewrite the bad code because you'll be more proficient.
There's a lot of debate on which language to learn. PHP is the standard language of the internet, while Ruby on Rails (and Django, to a lesser extent) are the sexier newer languages. I suggest sticking to PHP. It's way easier to get started with and is definitely powerful enough to build anything you'd want to build (Facebook runs on a modified version of PHP).
Once you get proficient, a lot of what you learned will translate to Rails or Django, if you really feel the inclination to switch. Meanwhile, you'll be programming in the best supported language, and will be in the best position to learn.
The best way to learn is to dive right in and get some hands on experience. Even though you'll be programming for the web, it's a lot faster to code on your own computer. To do that you'll need three pieces of software: Apache (the web server), MySQL (the database layer), and PHP (the programming language). These three pieces of software work together to turn your code into something that you can interact with (like this site, for example).
You could install these things separately, but it would be difficult and pointless. If you have a PC, download WAMP, and if you're on a mac, get MAMP. Each one of these is a preconfigured collection of Apache, MySQL, and PHP which you can install in minutes. Now all you need to do is code!
If you don't know HTML yet, you must learn that first. HTML is a markup language, not a programming language. It's what turns plain text into a well laid out web document. Here's a good tutorial on that. You should be able to learn the essentials of HTML in one day.
Once you've learned the basics of HTML (no need to get too advanced - learn the basics and you can look up the rest as you go), you need a good PHP / MySQL tutorial. The one that I learned on--- literally went from zero PHP knowledge to creating my first independent project on - is right here.
Now the important part: don't get intimidated. If you don't know anything about CSS and databases and webservers, this might seem like too much to digest. It's not. Just take it slowly. Programming is, by definition, logical, so if you get stuck you just need to take more time and really wrap your head around what's going on.
When you do the tutorial, DON'T copy and paste things, even though they might say to. Type it all out yourself. This mimics the actual programming experience and will ensure that you don't overlook anything. Yes, it takes longer, but this is your education!
After finishing the tutorial, think of something you would like to build, and do it. You won't be qualified, but you can at least start. This is how I wrote Conversion Doubler, which I later sold to another company. It was the first thing I tried to make after the tutorial. All of the code I wrote the first month had to be completely rewritten, and it took me five times longer than it would take me now, but that's irrelevant - the goal isn't to build something commercially viable, it's to learn. And you learn by doing.
Picture is from goofing around in the hangar when we went to fly helicopters. Surprisingly easy to maneuver when you're in the air, nigh impossible to hover close to the ground. Lots of fun!
I've been saying that college is obsolete for a very long time. I dropped out in 2000, because even back then I could see that it was a really poor value proposition. I didn't predict this because I'm some crazy genius, but because I'm willing to discard emotional attachment and stare plainly at the facts.
School is outrageously expensive, leaving graduates with a debt (or net expenditure) of tens of thousands of dollars-- sometimes even one or two hundred thousand. There are some things that are worth that amount of money, but for many people school isn't one of them. In fact, apart from very specific cases, I think that school is a bad thing, not worth doing even if it was free.
That's not to say that school has no benefits whatsoever. It does, and although I left with zero additional skills after my three semesters there, I had a good time and benefited from the social aspect. The problem is that you can't just compare college to doing nothing at all. You have to compare it to what you COULD have done.
Let's say that when you turn eighteen, it's a good idea to take four years to develop yourself. College is one way to do that. If we were to construct an alternative way to do that, what could it look like? One of the biggest weaknesses of school is how inflexible it is, so one of the greatest benefits of designing your own curriculum is that you could come up with one that uniquely suits you. That said, here's a plan that I think would benefit many people MORE than school would. Let's call it the Hustler's MBA.
Let's talk about programming. Everyone says you need it these days. Even I do. But, how should you learn to code? Codecademy, KhanAcademy, or other pseudo-learning techniques? Maybe a book, like Learn Code The Hard Way. What language should you learn, and what software should you code in? The questions are endless!
I'm here to give you a solution for you (and myself). Here's an 8-step guide for learning to code.
Everyone knows that goals are pointless if they're not specific. If you don't define your success, you're just flailing around randomly. Therefore, have something you want to build.
Think of coding like woodworking. You want to learn how to manipulate wood to make beautiful objects. Would you start hacking away randomly? No. Then why would you do that with code?