Ask HN: how do you deal with the job skills chicken-and-egg problem?
say I want to break into internet startup world, but my programming skills are currently confined to desktop dev. many job listings I've looked at want experienced software engineers that can build highly scalable web sites. how exactly do I build these skills without actually having a web site that has millions of visitors? and how do I demonstrate these skills to a potential employer? it seems like I can't get the job without the experience, and I can't get the experience without the job :P
Scaling each website is different, after you get the low hanging fruit (cache control, output caching, gzip ), it's a matter of investigating where your load is and reducing it. This means profilers, debuggers, etc. It's a process not a product, however most people think it's a product.
It's easier to integrate a bunch of products than convince someone that their approach to solving the problem is wrong.
The scalability issues most sites have are that of attracting users. Since no one knows how to scale it, and it probably doesn't have any REAL scalability issues what I would do is in your current position unnecessarily add things to whatever you manage to help it scale. Scalability always sells well to management so it should be easy to get approval.
What you then want to do is google "website scalability" and add something like memcached or output caching / adding cache control headers to your site. You'll want to pick whatever is popular as whoever is interviewing you for will think you know what you're talking about when they google for "website scalability" and see a list of the same technologies. Also, the various language camps have their preferred solutions, so you'll want to pick technologies to integrate that will mesh with whatever language you want to get a job in. Don't worry whether it is the preferred solution for your current language camp.
Also, you'll want to use some kind of load testing framework inappropriately to load test your site. Get caching working properly, then run apachebench <yoursite.com/mainpage> Take however many users you have and the current requests per second and then multiply to get the new number of users your site scales to. ((curUsers / curReqPerSec) * newReqPerSec) = newUsers. Use that number on your resume / to management when you declare success.
When you actually get the job, use Google Chrome to test your site, attach a profiler to your webserver and profile it to see what actually takes the longest. (Make that thing take less time) Also, read about human perceptions of load time so that the site appears fast even though it isn't.
Build something. If no one will give you a project then give yourself one. If you want a rails job then:
1. build a rails website and put it out there. It doesnt need users just great functionality with no bugs. Thats impressive.
2. contribute to open source. These guys wont let you commit till you get good enough and when they do its the best resume you can get for a coding job.
Just get off your ass and build something.
I have a degree in English, and until a few years ago, I had no "real" web development experience. I have done web design as a hobby since 1998, but companies want to see experience at other companies, not just your own sites. Here's what I did:
2006: Formed my own web design company and built a portfolio
2007: Used the strength of my portfolio to get a freelance gig at a startup
2008: Used the experience working at a startup to get a job at a medium-sized company ($6 million/year revenue)
2009: Used the experience at the medium sized company to get a job at a bigger company ($30 million/year revenue)
At my current job, I work on several sites with millions of unique visitors and I've learned a lot about scalability that I'll use in my own projects or at future jobs.
If you're in Los Angeles, we're always hiring.
If nobody else will hire you, hire yourself.
Teach yourself skills that companies with huge web sites value, parlay that into a job at one, and then learn all you can while you're there.
I went into Java desktop apps when I got out of college, mostly because I'd done Java desktop apps before I went into college. After about 8 months of that, I realized there was no future in Java desktop apps. So I started hanging around the interaction/web designer at my company, got him to teach me some CSS and JavaScript, supplemented it by reading voraciously, and got on a web project at my employer. (I wasn't exactly a complete web newbie either...I'd done a fairly major PHP app in college, but I viewed that as a technology dead-end that I didn't want to get into.)
My employer's technology stack was a dead end too, so I quit to found a JavaScript gaming startup. The startup died, but in the process I learned more JavaScript than I ever imagined I would. It was enough to get into Google.
Once you're at Google, you'll learn all about building highly scalable web sites. I work on search, one of the most highly trafficked web sites out there. I think this focus on scalability is rather silly, though - I'd rather learn about machine learning and data mining while I'm here, because those are the skills that can open up big new startup ideas for you.
Never be daunted by job-posting lingo. Half the purpose of that lingo is to rule out people who are uncomfortable with the terms. Learn a popular web development framework and start building. Today. With or without a job.
Then parlay that into your interview process. Do NOT get hung up on "gee, I have no idea how to scale to ~1 million users." Almost nobody entering web dev for the first time knows how to do this. Many who've been doing web-related work for years don't know how to do this. Scalability is just one aspect of web dev and for a majority of projects (corporate IT projects with 1 - 100 users) it's a complete non-issue. Nevertheless, they might still say "experience building scalable web applications". Do NOT let this stop you from interviewing.
You have one huge advantage while seeking a job in web dev as opposed to the desktop world: your work is immediately visible to anybody in the world. Every website you build is a portfolio piece. And if you can discuss these in the interview, and communicate above all your enthusiasm for the work, you'll get the job. Somewhere.
Good luck!
Take internships. Even if they're unpaid. This may not be popular advice, and you do need to watch out for internships that are truly exploitative, but many small startups simply have limited resources, and are looking for people who want to make the experience instead of pay tradeoff.
Ability to learn and solve problems will be more important for these positions than previous experience.
Also, nthing the advice of work on your own projects. If you can't think of an original problem you'd like to solve, choose a web app you really like and try to recreate your own version of it. The main thing is to have a complete goal, like "Learn how to build a site with Rails that shows me graphs of a user's twitter network's activity", not "Learn Rails".
I guess this would be a really good time to build your own web site. If you are really serious, get a few old computers and serve your own site. You could then simulate high traffic in the comfort of your own intranet.
I got my current web dev job by building my own website in my spare time. I don't have a CS degree or any other programming experience besides what I built. If you want those skills, go out and get them!