Wednesday, October 20, 2010

Wherein I help you get a good job

Edit: The response to this post was kinda overwhelming. I've modified some of the steps below to require less manual work by me.

From a recent post on Hacker News:

Friends of mine are in the same position as this guy. They recently graduated with good degrees from a decent university with no illusions that finding a job was going to be anything but difficult. Rather than feel like they're owed a job the ones I know have spent hours _every_ day applying for jobs for the past (up to) 2 years with no success. Most of the time they get no reply from these companies (fair enough), but the few times they do get an interview someone else with more experience gets the job.

This sucks. There has been an education bubble over the last few decades that has told kids that all they need to do to guarantee success is go to a good school, make good grades, and get a degree. The result is that in many fields, there is vastly more supply than demand.

But there are a few fields that are hiring like crazy. One of them is mine: software engineering. Major tech firms cannot hire fast enough. And the barrier is low enough that you can start learning today, for free. If you work hard, you can know enough in a year to get a good starter job. It's been this way for more than a decade, and I suspect another decade of growth at least.

That's the good news. Here's the bad news: It's going to be hard, and you'll need to give up on whatever you went to school for and spend a year learning something new.

But remember: the time you spent in school is a sunk cost. You can't get it back. Doing nothing just makes matters worse. I'm offering you a way to make progress today.

Ok, still here? Here's how to get a good job programming in six easy steps:

1. Download and build Google Chrome
  • There are also build instructions for Windows and Linux if you prefer
  • If you don't like Chrome, you can also work on Firefox or Safari, but the rest of these instructions are optimized for Chrome since that's what I'm familiar with.

2. Browse the bug database to find something to work on. Here are some useful queries:
I can personally review changes in these areas, and I try and keep these lists well-stocked with good starter bugs. You can also work in other areas, but you may have to find someone else to review your work.

If a bug has an owner assigned, but there has been no activity for a week or so, comment on the bug and ask whether you can take it over.

3. Once you have picked a bug, comment on it saying you're going to work on it. If it is in feature:extensions,apps, I will get notified of your comment, and will mark the bug as owned by me so nobody else grabs it. I will probably also add some comments about where to start.

4. Study the code, referring to a C++ tutorial as needed. You may also want to buy an actual paper book on the subject. Make the changes required to fix the bug. Once you have it working, send me (aa-at-chromium-dot-org) a code review with your changes.

5. Repeat steps 2 and 3 about 50 times.

6. Update your resume to say that you are a junior software engineer and you have contributed significant code to Google Chrome (or Firefox or whatever), and provide a link showing your work.

Ok, so these steps aren't really "easy". Some of them will take months. Just getting Chromium compiling is going to take awhile. I've purposely been vague on the details so you can figure it out on your own. You'll need ingenuity, a search engine, and a lot of patience.

But I guarantee, 100%, for-sure, that if you complete my program, you will be able to easily find a good starting job programming.

Hiring programmers is super hard. It's nearly impossible to evaluate whether someone is good without examples of their work. By working on open source projects like the ones I've listed, you make it easy for hiring managers. They can see what you can do and how you work with others.

There's nothing stopping you from making this happen. It's going to be hard, but you can do it. And there's lots of people that are willing to help once you take the first few steps.


Mohamed Mansour said...

Excellent write up Aaron!

Initially, I (significantly) contributed to Chromium because I was bored in my day job. It was a journey because I didn't know C++/JavaScript/Python before, but I enjoy challenging myself after work.

I never bothered placing open source involvement in my resume because I was already working. But once I placed my open source involvement in my resume, recruiters started becoming more interested in me. It was pretty cool. I am just waiting patiently for a call from the one company that I would like to work for. :)

I personally recommend everyone to join an open source project that they like, it doesn't have to be just Chromium, they should choose the project based on what they are really interested in. It really helps you individually, and it is super fun at the same time :)

Lloyd Hilaiel said...

The importance of having contributions to open source projects on your resume shouldn't be underestimated. This tells me that the applicant cares about software as more than just a means to make a living, and gives me concrete work that I can review.

I'd double Aaron's 100% guarantee that if you follow such steps (with emphasis on the fact that the specific project isn't so important), you'll get a job. So that's like, a 200% guarantee!

One thing I take issue with is that it'll be hard. Making time and supporting yourself while you bootstrap, *may* be hard, but the actual work should be sufficiently rewarding and fun -- that you'll say its easy... Otherwise, maybe your true muse lurks in some other place?


The Progressive said...

Very cool of you to give this advice -- and I'm sure it's sound. It's also cool that you can get a good job without a degree. I have no doubt you're making more with your AA than I am with my MBA (btw, how do you know what a "sunk cost" is w/out a business degree?). Keep looking out for the unemployed out there struggling to find work.

Henry Warmoth said...

Depending on where you went to high school and how much attention you paid, sunk cost is in some HS econ classes and definitely any econ 101 in college

boots said...

And more to the point of the original post, you can learn about 'sunk cost', and many other wonderful things on the internet!

Anonymous said...

Thanks for the suggestion, it is also good for those who are already somewhat experienced programmers who are trying to change their "spots" as it were.

cotsog said...

Great post!

May I suggest this link which list all Chromium bugs tagged as "HelpWanted" and occuring on Windows or all OSes?

IMHO, it's a great starting point for newb.... errr junior software engineers ;-) and handy to have in your bookmarks.

Paolo Victor said...

Okay, I'll bite. I'm downloading the source and shall soon stalk you on IRC.

Hey, you asked for it :-)

Anonymous said...

Tell the Chrome team thanks for getting some kind of active accessibility working. Scrolling the website does not update the MSAA tree when it should. That's a bug worth fixing. Probably super easy for some new guy to break in. :)

Kevin said...

Hi Aaron, Thanks for this post. Things that you haven't tried always sound hard and even though it sounds really easy when you explain how to get involved with open source, if you have no clue it can be hard to put two and two together, so I appreciate this.

Anonymous said...

I would add learn some time management and project management skills. Read "Getting Things Done" and the wikipedia page on Scrum. "Rework" is free online, too.

imperial said...

This is excellent advice.

From a hiring perspective, I would add that self-motivated open source project experience holds more weight for me than most junior/entry level job experience. Open source projects tend to mandate higher standards, strictly adhere to workflows, and use better tools (not all of them, but many). There is also the added benefit of being able to provide your code and the resulting functionality to anyone hiring (this will likely not be the case for most non-open source projects, who will do everything in their power to keep your code a secret).

John McLear said...

Contributing to an open source project is a great way of getting experience & contacts. The Etherpad foundation now employs a lot of the people who worked on the open source project.

Kevin Fairchild said...

Love it! I'm not in need of a new job right now, but I've never worked with C++ before, so I guess this will be a nice way to get my feet wet, if only just for fun.

--Kevin Fairchild

Anonymous said...

Sounds like a great way to get started. I'll give it a shot.

Anonymous said...

What time(s) are you usually on IRC?? I haven't seen you on at all, and would like a starter bug to work on! :)

Jeremy said...

Would be interesting to know *where* these hirings are happening in software engineering at such a manic rate; as it's not here in Vancouver. BC. San Fran maybe.

It's dead like Zed here, I'm starting to look further afield.

Jeremy said...

Oh and yes, good advice for people new to it all !

Anonymous said...

Does anyone Know a Java based project to contribute with? I really think the idea of working on an open source project is the way to go. But I do not want to move right now too far away from what I know best.



boots said...

I'm in the SF area. I don't have much experience outside the major metropolitan areas of SF, Seattle, and NYC.

I'm on IRC during working hours PST. I should have mentioned that. I've ignored a few pings because I was busy, but I try to get back to most of them. There's been a lot more response than I expected.

Jeremy said...


Have a look around Apache, I'm going Java myself and have found it a good place to start with lots of projects.

Just have to find something/one you can get excited about :

Personally I'm torn between Tomcat dev, or writing apps/examples for Jetty (even though it's a different license it's all HTTP servlet Java).

James Remo Pfeiffer said...

I think the link to "show your work" should be here .