Tuesday, August 23, 2011

Github is my resume

I remember the first time I heard that statement - a couple years back Eric Florenzano said it to me on Twitter when I posted my resume publicly and asked for opinions. At the time I laughed at his statement, because it felt like naive arrogance to ditch the idea of a resume and 'traditional' social networking like Facebook and LinkedIn. How wrong I was...

Before I go any further, this isn't to say that education, job history, and references aren't important in getting jobs that utilize a lot of Python. They are important, but I think they go more towards shaping you as a person than getting a job. So if you want access to Python jobs (and possibly other open source languages), you need to be able to show working code. Why is this the case? I can thing of several reasons:
  1. It is much harder to forge your style of code, comments, tests, and docs in a repo than it is to make false claims on a resume.
  2. Development team managers don't take LinkedIn references seriously because how often we see them gamed.
  3. Code gives us a body of work employers (including me) can use in order to help evaluate your skill and ability levels.
Let's summarize that into a bold statement:

Python employers want to review your code in a public repo.

That puts the pressure on you doesn't it? Now you've got to show working code. One extremely unethical way to do that is to copy/paste other people's code into your own repo and claim it as your own. The problem with that is real reviewers know good code doesn't just magically appear in gigantic chunks. Which I'll sum up with another statement:

Python employers are smart enough to read your commit log.

So as a beginner, what can you do? A lot of shops will want to see your code but if you put up your early code, doesn't that mean they'll see your ugly, mistake-ridden work? Yes they will - but if you keep at it with tutorial examples you are working, whatever pet project you cook up, or even submitting patches to various existing projects, they'll see how your code improves. I am much more inclined to hire a person able/willing to learn than a jaded expert who doesn't want to grow - which is why I always try to think like an eternal beginner. Which brings me to my third statement:

Python employers are willing to hire bright, hungry developers willing to learn.

Getting away from employment, let's talk a little about the Python development community. This community is a meritocracy with amazing foresight. Passion for code and/or natural talent is often recognized before skill is achieved - but only if you show the community you are learning. Get your code onto Github, or BitBucket, or SourceForge so it is seen, and keep at it! Try to commit every day and if that isn't possible, then once a week!

Because if you write code every day or every week, over time your code will get better, you'll also be able to demonstrate a consistent body of work, and your passion for software development will be obvious. Also, try to comment your code as much as possible.

One good trick is to put your ongoing notes in a repo. I do it myself at https://github.com/pydanny/pydanny-event-notes. My early notes are very, very different from my later notes. Often embarrassingly so, but to a Python employer I'm pretty certain they are a useful reference into just how I think.

Github, not LinkedIn

LinkedIn (and Facebook, Google Plus, et al) are a place to define your profile and nothing more. That profile should include a link to your code. Python employers will be looking your for links to your code, not for any sort of networking you do on those sites. Employers get annoyed by 'developers' who excessively network but have no links to code samples on Github or other similar sites. If you have no code to find then it means we can't see your work, your thought processes, or your passion.

One common technique you see by a lot of Python developers is posting quick links to their projects and efforts on Github using various social networks. You can and should do the same.

You make connections by showing you want to learn


Alex said...

s/github/{github,bitbucket,django's SVN, CPython's hg,etc.}/

pydanny said...

Yup! There is BitBucket, SourceForge, various SVN repos and more. I really honor and appreciate the work and presence of those other tools. However, this is a really, really concise way to get across my message to new people coming into the field of Python and open source programming and community involvement.

Therefore, I'm going to ask commenters to focus on the message of putting code up on public repos rather than the fact that the open source community is much, much larger than Github.

James said...

I have a post scheduled to publish this morning that says something rather different.

As someone who does a lot of interviewing and has a voice in a lot of hiring decisions, active projects are incredibly valuable, yes. You're 100% right about that.

But I really need to see the job history, too. I have to know what teams you've been on and what you're role has been. A well-written resume will tell me that you, for example, introduced CI and took ownership of your last project's test suite. Sure you can lie, but I'm going to ask you about it, in detail.

Because it's not just about "oh hey this person writes awesome Python" or even "this person is a great open source contributor" but also "this person is a good fit for this team."

Github isn't a resume, it's a portfolio. You need both.

Tomek Paczkowski said...

How about that: http://resume.github.com/?pydanny

Michael Foord said...

I've never met an employer who wanted to read through commit logs *instead* of having a resume. (Not that they don't exist - I've just never met them.)

Ultimately I agree with "Github isn't a resume, it's a portfolio. You need both."

Anonymous said...
This comment has been removed by the author.
citadelgrad said...

I recently starting looking for full time development work and pretty much every employer has asked for my "github" profile. As a non-professional developer, I originally did it because it was free but as I transition into professional development I'm glad I did it.

Parag said...

Great post. I agree that a programmers code which is publicly available on the Internet (through GitHub, or some other code repository) is very valuable. Far more valuable than a resume.

However, I would like to add one more facet to this. What a programmer really needs is a portfolio. A blog is probably the best way to create a portfolio. Just as code on GitHub can show the persons coding skills, a blog will show communication skills, thought process, etc...

Sorry for plugging my own website here, but I am working on a social learning environment for computer science where people can learn, and also document everything they did in a course, thus creating a portfolio of all their learning activities.

Posting the link, in case you find it interesting http://diycomputerscience.com

Anonymous said...

Very good post and discussion. I think working on a project on a public repo (either having your own, or contributing) is just A Good Thing, and you will find benefits wherever you look. Just remember it is In Public (so don't over-reach, don't pretend to be something you're not, etc).



mhr said...

Having been on the hiring side a fair amount, I think a resume is very important. Interviewing is a somewhat uncomfortable process for everyone and a well crafted resume is a candidates best way to show me what he wants me to ask about. So, a good rule of thumb is if you aren't prepared to talk about it in depth, it probably shouldn't be on your resume.

Anonymous said...

The only thing I don't like here is the notion of "Python employer". Python is an implementation detail.

Don't you just want good programmers, regardless of which languages they've used in the recent past? Seems like all of the denominationalism around language/stack does more harm than good.

Will Luttrell said...

I might read over someone's code, but the interview is going to be far more important. I'm pretty much only going to the code once I'm ALREADY interested. Resume gets you the interview which gets you further scrutiny which gets you hired.

Anonymous said...

During a recent job search, there were multiple companies who would not even interview me because I could not show them a github account with personal projects and commits to open source software.

Perhaps the better title is "You need a resume and a portfolio". Unfortunately, this model doesn't quite work right. For the artist, an illustration done for one company is an example of the type of work they can do. Unfortunately, the code I write for one company is usually proprietary. The idea of a portfolio doesn't quite carry over.

This means that in addition to keeping up with research in my field, new libraries, innovations in tools and programming languages, I must also contribute to OSS or create my own projects.

Oh, and if you're getting an advanced degree...leave it off your resume or be prepared to explain why you're not "just an academic".

Dale said...

I think this good advice for consultants.

Typo alert: thing for think

ps Dear Captcha, Yes I am a robot but choose not to reveal it as this time.

Remco said...

Besides the importance of having a portfolio. I think the mindset of having public repo's is also of importance. If I hire people I would really like the type that thinks about sharing code, contributing back and very importantly someone that sees code as a passion.

I think in the end for every company that hires technical people it is important to involve technical people in the hiring process. And for them being able to see it all (even individual commits) gives them much more info about the skills of a possible new employee than a resume does.

Unknown said...

Very true! And not necessarily limited to Python. Any employer who is worth his salt should, if not must, check what his possible employee has coded in his "master" language and how he coded - how did the code evolved from basic to complex or vice versa...

I also liked the idea of holding notes in github. I probably will use it too... Thanks for the suggestion and example.

Anonymous said...

I can see how having public code is valuable for potential employers. Then again, a source code repository doesn't necessarily mean it even compiles, much less works, or usefully. How many employers who care about your source code are also going to download, build, install, and run it?

I think that even more important than a pile of source code is a working website that shows off your code. Employers largely care about being able to ship the dang thing, and a website makes it really quick and easy for them to see that you can do this.

Fernando Gutierrez said...

I am a developer and I am searching for a job. The first recommendation I heard came from a friend who told me exactly this, just fill up your github account with your code.

The big problem comes, I have 8 years of projects in Python but all of them were for private companies, internal systems that end up being not my property. So I can't publish them like they are. I have been working for a couple of weeks in cleaning up the code of some of them and untie it from the business logic of the clients they were made for, it is a lot of work but I hope to finish it soon.

So I am going to PyCon and I hope that showing some of my working, telling people about my experience, having some recommendations and just making relationships can help me to find the job I would like. Even if my github is not full of code.

Unknown said...

"Then again, a source code repository doesn't necessarily mean it even compiles, much less works, or usefully."

Which says a lot about you also. Because, I don't know about the majority so YMMV, as far as I've seen there is a credo among git & githubbers: "master must build!" or "you don't break the master!" which is a reasonable thing as far as I am concerned.

itoctopus said...

I believe that Github is your resume when the person who's first scanning your resume is very technical! Other than that, it won't do you any good in the initial hiring process - one should always focus on the traditional methods to get a job.

Javin @ interivew question spring framework said...

That is something anyone can proud. code.google is still waiting to be resume for some one :)

difference between LinkedList and ArrayList in Java

Gerardo said...

As a hiring manager I have started to look at people's GitHub's contributions, so I agree. I probably missed it, but let me state that there is a way to show your GitHub projects using a LinkedIn app on your profile. Finally, I'd like to encourage people to consider contributing to Humanitarian FOSS (#HFOSS) projects as a way to do good and build up your resume and skills. You can learn more about HFOSS projects to contribute to at http://socialcoding4good.org

Gerardo Capiel
VP of Engineering, Benetech (.org)

Mark Gisleson said...

Burned out resume writer here. Going for _the_ job as opposed to _a_ job has always been a top strategy for people who have the skills, connections and knowledge to act on such a strategy.

Drawbacks: In my experience (7k clients, 50k related archived files), people who do well by this strategy are not necessarily the best people for the job. The ability to use this strategy rarely involves any skills you would need to do the actual job, and those who excel at this process are often the last people you'd want to hire.

Put more succinctly, does the opening you're seeking to fill benefit from the hiring of someone who routinely "jumps the fucking line"?

I'm not defending our current process, just stating that this is not a new approach to getting a job, and in fact, this is the kind of process favored by narcissistic managers, about whom more than a few books have now been written.

Fwiw, I've long thought that the creation of HR depts. destroyed the hiring process. Only supervisors and managers should make these choices, and to the extent that HR screens, recommends and/or makes hiring decisions, the company suffers. If you want top people on your team, ride herd on HR to make sure they understand what you're looking for, or you'll end up with new team members who are "safe" hires.