My question is, what skills do startups most look for, and when will I know I'm ready to start applying?
No you don't. This may be what you think you want, but it's not what you really want.
Why do you want to join an ambitious startup rather than creating your own?
Why does the startup you join need to be ambitious?
Why does it need to be a startup?
For that matter, why do you want to join as a programmer rather than, say, a graphic designer?
If the answer to the above questions is "because this is a route to making lots of money", then what you want is to make lots of money -- and you happen to have identified "joining an ambitious startup as a programmer" as a way to pursue that goal. Similarly, your goal might be "to change the lives of millions of users", "to become a world-famous hacker", or "to work with a bunch of really cool people".
But whatever you want... well, it's almost certainly not "joining an ambitious startup as a programmer".
--------
Now that I've finished ranting about desires vs. routes towards satisfying those desires: The above is actually relevant to your question. The skills looked for vary dramatically from startup to startup -- a startup which is likely to make you a millionaire isn't necessarily going to be looking for the same skills as a startup which is full of really cool people. Once you've identified what you find attractive about startups, then you can start thinking about which startups currently exhibit those traits, and what skills they look for.
I have never gone out of my way to learn a computing skill specifically for a job (or even for a "dream"). All was always out of personal interest. By that method, I have accumulated a skill set (including Ruby/Rails programming) that has allowed me to start my startups when the opportunity was there.
You should be wary of even being a programmer if your primary driver to learn new things is what might be useful to your career. All good programmers I know and know of would be learning and applying their programming skills whether or not there was money involved.
Programming is such a small part of the job, understand the OS and the DB and you own the house!!!!
In the end, if you can simply read the hot fix readme files and apply them correctly, you are valuable. Hello 6 figure income!
The administrator/programmer is a God among boys.
If I follow, you're just saying (if a little enthusiastically) that DB/server administrator skills for hackers matter in a startup.
You'd be right - at each startup I've ever been involved in I've done everything from written code, configured the server, fixed the server at 3am, answered the phones, licked stamps for invoices (ok, not in modern times) and fetched coffee.
Startups generally don't have enough scale to hire one trick ponys.
In a younger founder/early employee, I'm not looking so much at programming ability as entrepreneurial spirit and a willingness to get stuff done. Even the coffee run.
Versatility is important. Try to do many different things in your programming. Even if you don't like some problems, think about how you'd solve them.
At a startup, you'd be one of few employees so you could have many different tasks given to you. If you have experience or gut feelings on how to approach several problems, you're more likely to be able to jump in and not take time flipping through manuals.
Thanks for your advice. :)
I guess if you design your code on paper first and write it all out by hand, calculate bottlenecks etc based on cpu timing manuals etc....
Most people take a more iterative approach afaik.
Basically, you need to be able to do everything. From graphic/ui design/css, to html, to the MVC stack, to the database, to the system administration and the networking.
For a startup, being a jack of all trades is far, far more valuable than a specialist. How much use will a startup have for JUST a programmer that won't touch the database or the servers? If I'm hiring a developer who is ostensibly going to be coding in Rails all day long, their ability to do design and database work is just as important (if not more-so) than their actual experience in Rails.
Take a look at the stack above, and learn more about whichever one you're least comfortable with. If you've never touched photoshop before, download their 30 day trial and at least familiarize yourself with it (good frequently-used "beginner's" task: making a transparent PNG of something like an arrow). Never set up a linux system? Clean out that old windows box and install Debian (server) and set it up as a file system.
Rinse and repeat.
I think finding people who are masters of all trades (or important ones anyways), is more important than just finding rockstar programmers.
Best of luck
I'd say think of a cool project, a cool app you could write, and make it. That will be worth a lot more than learning any specific language.
(2) consilience, which I will arbitrarily redefine here to mean being able to keep the overall goal/strategy in mind even as you work on every detail. Then, you know when to cut corners and when to spend effort on key differentiators. (Or more generally: able to manage yourself once you know the mission.)
(3) speed, either because you've got such total mastery of some area that you can do expert work at an amazing rate, or because you can immerse yourself in learning something new and race through demonstrable progress, niggling details and usual engineering detours/affectations be damned. (This is a variant of the PG "could you describe the person as an animal?" test.)
However, if you focus on this, and just learn whatever specific technologies are convenient for you, then you could later spend only a short time (perhaps a week or two) learning specific skills targeted to a startup you want to apply at.