April 15, 2009
I'm a big advocate of learning on the battlefield. And that certainly includes what may be the most epic battle of them all: open source software.
Contribute to an open-source project. There are thousands, so pick whatever strikes your fancy. But pick one and really dig in, become an active contributor. Absolutely nothing is more practical, more real, than working collaboratively with software developers all over the globe from all walks of life.
If you're looking to polish your programming chops, what could possibly be better, more job-worthy experience than immersing yourself in a real live open source software project? There are thousands, maybe hundreds of thousands, and a few of them have arguably changed the world.
Unfortunately, that wasn't what happened for one particular open source developer. In an anonymous email to me, he related his experiences:
I'm a programmer with 14 years of experience both inside academics and in commercial industry currently looking for work. In both my cover letters and my resume I indicate that I am the architect of a couple of open source Java projects where the code, design and applications were available on the web.
One company seemed impressed with my enthusiasm for the job but it was part of their policy to provide coding tests. This seemed perfectly reasonable and I did it by using the first solution I thought about. When I got to the phone interview, the guy spent about five minutes telling me how inefficient my coding solution was and that they were not very impressed. Then I asked whether he had looked at the open source projects I mentioned. He said no - but it seems his impression was already set based on my performance in the coding test. The coding test did not indicate what criteria they were using for evaluation but my solution seemed to kill the interview.
In another call, I was talking with a recruiter who was trying to place someone for a contract Java development assignment. I told her that most of my recent work was open source and that she could inspect it if she wanted to assess my technical competence. Five minutes later she phoned back and said I appeared to lack any recent commercial experience. I had demonstrable open source applications that used the technologies they wanted, but it didn't appear to matter.
With yet another recruiter I told him that even years ago when I had worked on commercial projects, before I went back to school, the proprietary nature of my jobs prevented me from mentioning the specifics about a lot of what I did. The badge of commercial software experience didn't necessarily prove either my technical competence or my relative contribution to the projects. What my experience of working in industry long ago did teach me was how to fill out a time sheet and estimate time for deliverables. But this experience would seem a bit dated now for recruiters.
That's a terrible interview track record for the open source experience that I advocated so strongly. He continues:
I think it's important that I try to see their point of view. A lot of open source projects are probably poorly written and made in response to a neat idea rather than to requirements from some user community. In academia, the goal for development is often more about publishing papers than establishing a user base. Industry people sometimes have the view (sometimes justified and sometimes not) that open source developers who emerge from academic projects lack practical skills. I don't necessarily claim my open source code is the best in the world but it works, it's documented and it's available for scrutiny. One of the reasons I worked so hard on open source projects was to make job interviews easier. By providing prospective employers with large samples of publically available working code, I thought I would give them something more useful to think about than my performance on a particular coding test or whether the acronyms in the job skills matched my "years spent". I am very aware of the hype behind open source. I've heard it, lived it and even spun some of it myself. But sometimes it's good to take a sobering reality check -- is open-source experience overrated?
It's disheartening to hear so many prospective employers completely disregard experience on open source projects. It's a part of your programming portfolio, and any company not even willing to take a cursory look at your portfolio before interviewing you is already suspect. This reflects poorly on the employers. I'm not sure I'd want to work at a place where a programmers' prior body of work is treated as inconsequential.
On the other hand, perhaps the choice of open source project matters almost as much as the programming itself. How many open source projects labor away in utter obscurity, solving problems that nobody cares about, problems so incredibly narrow that the authors are the only possible beneficiaries? Just as commercial software can't possibly exist without customers, perhaps open source experience is only valid if you work on a project that attains some moderate level of critical mass and user base. Remember, shipping isn't enough. Open source or not, if you aren't building software that someone finds useful, if you aren't convincing at least a small audience of programmers that your project is worthwhile enough to join --
Then what are you really doing?
Posted by Jeff Atwood
One problem is that in most cases interviewers won't spend much time on each candidate, its natural. That's why they say don't send in a 10 page C.V, because they will go directly to the trash.
Saying here look at my 20K L.O.C. on the web to see how good I am, is practically the same thing. Unless you shine in their interview process, no one will look at the code, it'll go directly to the trash
Someone mentioned the guy being a mediocre programmer.
Sad fact is that most of us programmers are mediocre programmers as most plumbers are mediocre plumbers.
I am probably a mediocre software engineer just as you are.
If that hurts you then tough.
If the standard of work by the mediocre engineer is not acceptable by society then there is a problem for all.
Damn! I miss being able to upvote comments/answers.
perhaps open source experience is only valid if you work on a project that attains some moderate level of critical mass and user base.
Harumph! I'd actually go along with that for the most part, but there *are* very narrow projects out there for very specific niches. We need them too.
For instance, try searching the web for how to develop Flash on Linux. There's maybe four tiny living projects out there, the rest are DOA. But having a complete FOSS toolchain for making Flash apps is honey to me. In fact when I have been blogging about SWFTools and the cool stuff I'm making with it, people are starting to quote me as an authority on the subject. That's right, idiot little me!
Take another example, ReactOS. An open source Windows! Should be big news - hardly anybody on the planet seems to know or care, and they're still piddling along in Alpha versions after 10 years.
Really, I wouldn't rip open source experience out of a resume based on this one anecdote. There's plenty of jobs that even involve working directly with open source software. Companies that make Firefox toolbars and Wordpress plugins, for two examples.
But yeah, walk in saying ReactOS or SWFTools or Nethack, I'm sure there's some headhunters whose eyes would glaze over. That's because software in general isn't nearly the glamorous job we all wish it were.
I would say that merely contributing to some random open source project isn't necessarily a helpful addition to your portfolio. Anymore than spending X years at some random job would. Making solid contributions to a reasonably high-profile open source project (mozilla, apache, jquery, linux, chrome, etc.) definitely punches up a resume. Though to be honest I think having a well-written blog would be even better. Determining code quality is non-trivial, even for open source contributions. But it's far easier to get information about someone's skill level and passion for software development from a blog.
I put on my resume that I had written and published a free/open source World of Warcraft add-on. In one of my interviews, 2 of the 3 interviewers played World of Warcraft, and asked me about the add-on...I think it may have (slightly) helped my chances of getting the job, but I wouldn't say it was a key item that swayed their opinion (for one thing, WoW add-ons are written in Lua, which is not used much elsewhere in the industry). But I guess what Jeff said is true--*what* you contributed to or authored may be more important/relevant than the fact that you did it.
I agree completely with Bruno. I've worked with people who have comp sci degrees, install different OS's, learn new languages, jump on all the latest tech bandwagons, contribute to open source projects. And they are terrible at their jobs, I'm so glad they've moved on to other jobs and I no longer have to correct their work. You're either a great programmer or a mediocre (and in some cases terrible) programmer. When I hire programmers now, I base it solely on coding tests. I never trust resumes or prior experience anymore. Both can be and usually are exaggerated.
If I'm hiring an actor for a movie, and one of my applicants tells me that he's been pretty active in Sheboygan community theater, I'm not impressed.
I think this person's experience has less to do with open source v. commercial biz experience (he seemed to have both), but rather with the total inadequacy of most recruiters - and some interviewers. Let's face it, most recruiters don't have a clue - they send spam emails to anybody and everybody that might remotely qualify for a position, then shoot them down for the most trivial things which they don't have the slightest understanding of. Most recruiters don't have the foggiest idea regarding the differences between different languages, APIs, frameworks, technologies, protocols, etc.
I try to avoid recruiters at all costs. No independent recruiter has ever resulted in me getting a job and they are mostly a waste of time. At least half of the recruiters can be bypassed because they don't have an exclusive relationship with the employer and the employer is often accepting direct resume submission (if they are smart).
As for coding tests - eh. I would rather see code someone has put some time into, that has gone through some refactoring, testing, thought and user feedback. If there is a source repository with a history, then it would be nice to see how the code evolved. That could tell me a lot about how well a person can write/design code, and how deep their understanding is of any frameworks/APIs they used.
I also like to see the docs. If at that point the code (and docs) suck, then I can eliminate them from the candidate pool. What most people come up with off the top of their head in five minutes on a white board, or on paper at an interview stands a good chance of being crap. Coding tests that where you give a person a day or so may suck less - depending on how much time they could devote to it (they may have a day job, kids, be taking five other coding tests, be sick, whatever).
Ok, I'm not going to read through all of the 93 comments currently attached to this post, so I may be redundant at this point.
However, businesses work off of a bottom line. They want someone that either saved X corp Y amount of money, or helped to improve X corp's process.
Saying you worked in open-source, however significant, has no bearing on the bottom line. They want active, tangible achievements from a recent employment.
I guess not all the companies and software segments work the same, but my personal experience is that contributing in Free Software projects have opened many job opportunities for me.
When I hire someone I receive between 20 to 40 resumes. I don't look at cover letters, but just at the experience simply because I don't have the time. Based on the experience/skills and what I'm looking for, I call for an in-person interview.
During the interview, open source experience is not relevant because:
1) I don't have the time to dig through god-knows-how-many diffs to find the prospective employee's code.
2) He claims he worked on it, but I can't verify the claim (while with a company I can at least call someone who can lie to me about how wonderful Joe Coder was), plus he's 99.9% inflating his impact on the project.
3) Very often open source projects are frameworks and not concrete solutions, thus not quite what I look for, which usually is people who can hit the ground running.
4) A coding test, in person in front of me, will tell me a whole lot more about how you think and what you do when presented with a problem, than a project out there.
I guess the main reason is #2. I've been lied so much, so often, and so blatlanty, that I don't put much faith in what I'm told.
For me hiring comes down to answering well to some key questions (data structure and caching questions are my favourites), writing code in front of me, and having a personality my team can go along with.
I'm no Linus Torvalds, but I'm high profile enough that I was beating out a congressman and a big name professor at the top of all the search engines for awhile.
I can't get a job operating the computer at Burger King.
I do have to agree with the others. Saying you worked on an Open Source project won't mean much to corporate grunts. No one cares but even if they did they probably wouldn't believe you.
Especially if you can't code to their satisfaction right in front of them. I think there was a Daily WTF about a guy that went online during the interview to get answers to a coding test...
So! Asking them what they are looking for is akin to asking them what answers they want. Ask for clarification, make sure you understand the problem, then code in your own style and if they like it they like it.
Then again they may just be incompetent and don't want you to get the job because they know they'll be working for you in a few years.
A couple of years ago, I took a year off from working, for personal reasons. When I was ready to get back to work, there were some recruiters who assumed that after a year off, I knew nothing about how to code any more (despite seven years of experience), and was basically starting over at an entry level position. I was glad that they said so up front, so I could avoid wasting my time, and instead I talked to the 20 other recruiters who actually had useful things to say.
There are always going to be idiot recruiters. As long as you can find some of the good ones too, it doesn't matter how many idiots are out there.
That recruiter was probably reviewing hundreds of applications and didn't have time to go through everyone's examples of work. Plus, they were not satisfied with his coding solution on a test. When you have a lot of potential candidates to choose from, you don't loose your time on those who didn't pass the test you gave them, and check their additional coding work they suggest.
I think this case isn't good example of underrating open source experience, but just a poor job interview.
There's a simple reason why firms put so much store in 'commercial experience' - basically it means someone else thought you were competent enough to get paid for coding, which assures your potential employers of a certain level of competence. How to get it in the first place though...mmm...
have to agree with what 'bruno' said days back, people who program in their spare time just scream no life, cheesy puffs and tab clear in a darkened room to me, once you're past the undergraduate stage you really have to snap out of that, and you have no choice if you have a family or significant other (or ever want one). If you want me to program, you have to pay me, I've got more enjoyable stuff to do if I'm not.
In most of cases where OpenSource developer is rejected, HR/Job recruitment company are culprit.
It's true, currently the amount of employers who'd check your free-software track record are few and far inbetween.
But, on the flip side of the coin, I believe that within 5 yrs of time, if you haven't worked on free-software for at least 10 yrs, you'll have a hard time landing a job with *any* serious employer.
There's also a vast difference in the general quality of open source software, depending on how high level the language is.
Scripting languages such as java, PHP etc. will never lift your portfolio as much as a programming languages.
Most of the serious free software is written in C (kernel, gnu etc.) and that's where most of the action and qualified code review is happening.
Oy vey....multiple thoughts here:
First - I think we're confusing two issues here:
a) Value of contributing to an open source project
b) Lack of Recent Commercial Experience
His problem is the latter not the former - there are significant differences in the day-to-day workplace culture and expectations between a corporate/consulting position and an academic or public sector enviroment. Specifically: greater focus on results and/or deliverables, more accountability for quality, easier to get fired, adherance to acceptable standards/architecture, better documentation, more competition with peers, stronger engagment from the customer (I'm aware there are probably some snickers out there but you get my drift...any GOOD corporate IT department will be have some of these). His challenge, pure and simple, is to show that he can run with the big dogs and toe the line on quality, efficiency, and teamwork... (incidently, there is probably a converse of this for corporate IT people going into the public sector....to be fair balanced....)
Unfortunately, contributing to volunteer open-source projects has about as much relevant to proving you can function in a corporate technology organization as being president of the board for your homeowners association has to proving you can be mayor of a city. While both roles involve exercising the same underlying skills, there's a big difference in standards/pressure/margin for error.
The recruiter is just being honest...your counterpoint (that you have used the same technologies in open-source) doesn't refuse her view. Your real issue here is that the company she is working on behalf of wants people with a commercial background...probably because they've experienced the same fit issues I mention above. Speaking as a hiring manager myself...we don't (usually) impose this stuff just for fun - generally speaking, certain backgrounds tend to work out for certain roles and others...struggle.. which isn't fair to the company, other qualified candidates, and ultimately the applicant (while we all gotta eat, do you really want the stress of struggling at work because I hired you for a role that my experience tells me you aren't well prepared for? I don't....it's a slow painful death of the soul).
Second...there is another major red flags in your approach:
If I give you a coding test, I expect to see some solid answers to MY PROBLEM, which should be fairly strongly related to what you will encounter in the daily job. That should also be a very MAJOR signal that I'm not interested in analyzing your open source code which - by the way - I'm not even sure you personally wrote (if these are collaborative projects). Not sure about the rest of you, but it usually takes me about 5 - 10 minutes to understand how another coder is approaching the problem (assuming it's a decent sized piece of work) and figure out their coding/commenting style as well as any unique objects/libraries which they are using. I'm going to invest that time later - before I hire you - and after you prove yourself worthy of my attentions by solving the exact same problem I gave the other four candidates. Bringing up the open source work as a rebuttal to failing the test is ARROGANT...and ultimately burns bridges...
(actually, in my case, you would probably get a piece of my mind about how small time open source projects don't always run with a high level of rigor, admittedly with some significant exceptions)...
So...regarding the first point...as a corporate IT hiring manager, I DO see significant value in open source experience..particularly if you are working on problems and/or using languages that indicate you're smarter than the average bear (major applications, crypto, unique services, early adoption of new technology, LISP, etc.)
But don't expect me to use that in lieu of relevant experience in my space...
Some OSS bashers just don't get it. I've coded OSS for years and every once in a while, I get a call from company "x" or "y" stating that they want to hire me to customize my OSS app to their specific needs, I charge them for my services and in return I earn probably more than selling a "commercial" application, heck for at least 6 years this model fed 5 mouths and was enough to pay for the bills and then some, with the additional benefit of allowing me to be *with* my family and all.
And to the "work 9 to 5 and then forget about programming" drone, I feel sad; this is a passion, an art, there is no "switch" to turn it on or off, I would not want to participate in any project with you, do you like to paint? or play guitar? do you stop doing these things "at 5:00PM sharp"?
Sometimes you need to "live" the OSS freedom to understand it.
When I'm hiring, I'm attracted to open source projects for one reason above all others: it shows a degree of passion. It shows that you're really not just a clock out and forget about computing until you come in the next day kind of guy.
It's certainly true that not all places will care about that - and in particular, HR staff and general recruiters may not be particularly interested - but if you can get as far as other developers, and if *they're* passionate about development, it can help a lot.
OSS is helpful - but anon was using OSS to break into the wrong IT job market.
There are really 2:
* Commodity Jobs - ones you get through recruiters, to companies that are not going to know you from the masses.
* Network Jobs - ones you get through your relationships.
OSS helps in the latter, but unless you are Joel Spolsky or Phil Atwood famous, is patently useless in the former. The commodity job market exists because there are companies that run such bad IT departments that nobody would recommend a friend from inside the network to go there. You think places like that give a rats ass about OSS? Most of them are mills where you will probably be miserable anyway.
You know this really is a shame. One of the reasons I actually got my current job (though not the current position anymore) was because of my contributions to open source. I was able to say I did this that and the other thing, and they literally googled my name to see if it would come up on these projects. When they did show up, it gave them a reason to believe me when I said I could do the job.
You know Jeff, you might tell the person this blog is about to contact these employers again, and have him emphasize that he has the experience and it is demonstratable. Just because a person hasn't done Exactly what you are looking for, having a reviewable code base shows perspective employers that you can code, and good coders can be coached and steered. Maybe not all coders, but most coders I know are very happy to learn how to do things better.
It also seems since I didn't read all the comments that the original job seeker is also here. To the job seeker (who seems to have a job now), what I might recommend next time you have to go through this and have to do a code test is ask, What are you looking for?. Answers might be time to completion, execution efficiency (coding efficiency and execution efficiency are not necessarily the same thing), readability (good commenting), creativeness, and others.
Just an idea for anyone who has to take a coding test. Find out what the interviewer wants to see.