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!
make a long story short:
- php is quite bad programming language (ive been there ive done that along with C++, Visual basic, Java, .net, ruby and few more). security is very poor, not object oriented, etc.
- Ruby on Rails is just a framework, the language is Ruby, but i would not recommend it to absolute beginners.
- if you know a language, it doesnt mean it know them all, it is not about the syntax, it is how you organize your code, different way of thinking, available libs, plugins, there is always a learning curve, more or less.
as bottom line, it really doesnt matter what is underlying programming language, as long as you do your job, fast nice and clean.
does it make sense to attend a programming bootcamp? is it even possible to learn programming in 3-4 months? I found many bootcamps reviewed at http://bootcamps.in, but i am kind of skeptical...
It definitely is an easy time to start a start-up. I have worked for two major tech startups and now started my own - learnpipes.com - it is all about learning programming. Right at the guts, right from the core development.
Well I'm a tech dude interested in finding non-technical partners. Someone with greater marketing savvy or a rock star designer who can quickly prototype concepts to gauge the market response.
You say "EVERYONE is looking for technical cofounders"
What are some ways for technical people to connect with the non-technical people?
I've been riding solo for years. It has given me financial freedom but I'm sick of the non-technical stuff. I would now rather just get paid or get a share of company for backstage input.
So if I am a new programmer (when I was 14 I learned java for about 2 months but haven't done ANYTHING since then) what should I learn?
Tynan, just curious, how much did you sell Conversion Doubler for and how long did it take you to code it?
ok, my conclusion is this, php is bad for many reasons (comparing to Ruby or Java, maybe few others) but if you are willing to learn, then fine, it does no harm.
you need to start with something, study it and achieve your goal. this is what matter after all.
Lulian your comment is so useless im in disbelief.
All you do is "piss piss piss" but you make no real decision. What in your opinion is right and why?
Anybody who doesnt know programming as well as you may do wouldnt even understand what you just said or feel confident in their direction.
Sure you said something but did you say anything? Say something useful next time.
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?