Your github account is not your portfolio, but it’s a start

August 24, 2011 Job hunting, Open source 6 comments , , ,

Gina Trapani started a Google+ thread about using Github as a portfolio of your work to show potential employers. This in turn was prompted by a blog post by PyDanny titled “Github is my resume.” It’s a great idea, but it’s only a start. Your portfolio should be more curated than that to be effective.

I shouldn’t complain too much. Far too few job seekers consider the power of showing existing work products to hiring managers. That’s probably because so few employers ask to see any. In my book Land the Tech Job You Love, I cite Ilya Talman, one of the top tech recruiters in Chicago, estimating that only 15% of hiring managers ask to see samples of work.

Consider the manager looking to hire a computer programmer. She has hundred résumés from respondents, all claiming to know Ruby and Rails. She knows that anyone can put Ruby, Rails, or any other technologies into a résumé without knowing them. Even well-meaning candidates might think “I read a book on Ruby once, and Rails can’t be too tough, so I’ll put them on my résumé.” Looking at sample code is a great way to separate the good programmers from the fakers.

Since creating a repository of someone else’s good code is only slightly more involved than putting “Ruby on Rails” in a résumé document, a good hiring manager will ask in the interview about the code. When I interview candidates, I ask for printed code samples of their best work for us to discuss. Pointing at a given section on the paper, I’ll say “Tell me about your choice to write your own Perl function here instead of using a module from CPAN“, or “I see your variables seem to be named using a certain convention; why did you use that method?” In a few minutes, I can easily find out more about the candidate’s thought process and coding style than a mile-long résumé. This method also exposes potentially faked code.

So as much as I applaud candidates having a body of work to which they can point employers, simply saying “Here’s my Github repo” is not enough. The hiring manager doesn’t want to see everything you’ve written. Although everyone is different, she probably wants to see three things:

  • quality of work
  • breadth of work
  • applicability to her specific needs

Most important, she doesn’t want to go digging through all your code to find the answers to these questions.

Consider my github repository as an example. There are 28 repositories in it. Of these, nine are forks of other repos for me to modify, so clearly do not count as code I’ve written. Three repos are version control for websites I manage. Some are incubators of ideas for future projects that have yet to blossom. My scraps repository is a junk drawer where I put code I’ve written and might have use for later. How will an interested employer know what to look at? It’s arrogant and foolish to tell someone looking to hire you “here’s all my public code, you figure it out.” It’s the RTFM method of portfolio presentation, and it doesn’t put you in the best light possible.

For an effective portfolio, choose three to five projects that show your best work, and then provide a paragraph or two about each, describing the project in English and your involvement with it. There is literally no project or repository, on Github or elsewhere, about which I can say “This work is 100% mine.” Everything I’ve ever worked on has had work contributed from others, and the nature of those contributions needs to be disclosed upfront and honestly.

None of this is special to Github. There are plenty of online code repositories out there, such as Perl’s CPAN, which can act as a showcase for your work. Of course, you can also create your own online portfolio on your website as well. The keys are to highlight your best work and accurately describe your involvement.

A common complaint I hear when I discuss code portfolios goes like this: “Most of my work is private or under NDA, so I can’t have a portfolio.” Hogwash. You can go write your own code specifically to show your skills. If your area of expertise is with web apps, then go write a web app that does something fairly useful and publish that as your portfolio. Assign it an open source license so that others can take advantage of it, too. You’ll be helping your community while you help your job prospects.

Do you have an online code portfolio? Let me know in the comments, and include the URL for others to see.

Should I put ____ on my résumé?

August 15, 2011 Job hunting 3 comments

I read Reddit’s résumé subreddit regularly, and it’s one of the most common questions asked: “Should I put such-and-such item on my résumé, or leave it off?” The variations are endless:

  • Should I put a job on my résumé that I was at for only three months?
  • Should I put my college work on my résumé, even though I only was in for two years of a four-year degree?
  • Should I put my hobbies on my résumé?
  • Should I put my volunteer work on my résumé?
  • Should I put my high school education on my résumé?

The answer is the same for each of these examples: It depends on the job for which you’re applying.  Here’s how to analyze the situation and make the right choice for the job.

First, remember that the purpose of a résumé is to get you a job interview. Therefore, the question you have to ask yourself is “Will this piece of information help convince the reader to call me in for an interview?”  If it won’t, then leave it out.

Second, every position is different, so you must ask the question as it relates to the job for which you’re applying. You don’t have a single résumé that you blast out to the world. Consider every point on your résumé as it applies to the job for which you’re applying. For example, you probably don’t want to put on your résumé that you play guitar when applying for a job as a system administrator, unless you’re applying for that sysadmin job at a music publishing house.

All that said, here are a few items that you should almost definitely leave off a résumé:

  • “References available upon request,” which is assumed and is therefore noise.
  • A list of references, because these will be asked for at a later point in the hiring process
  • A photograph, which is inappropriate in the United States

Band naming made easy

August 9, 2011 Internet 1 comment , ,

My friend Rob Warmowski has a new band named Sirs. They have a show coming up with another band opening for them. The second paragraph is key.

Join Sirs Saturday, August 20 at 4 PM with a live performance to celebrate the release of our 12″ EP “Boo Hoo”. Where better to do this than at Saki, the fine purveyor of records located at 3716 W. Fullerton in Chicago? Nowhere, that’s where.

Opening band: Small Trabajo. (Note: nobody in Small Trabajo yet knows that their name is Small Trabajo. We were told by store staff that the band, being very new, was having a hard time coming up with a band name. Hearing this, I went to the first Captcha I could find (http://captcha.net) and solved the problem immediately.)

The Internet has a solution for every problem!

No, you can’t ask about money in the job interview

August 2, 2011 Interviews 6 comments , ,

So often I see it posted to reddit: “When do I ask about money?” You don’t. You don’t ask about money in the job interview. You wait until the company brings it up, often in the form of a job offer. There’s a time and a place for everything, and the time and place for compensation discussion is in the job offer, or when the company chooses to bring it up.

When you go into a job interview, your focus must be on the company’s needs, or what work the hiring manager wants you to do. You want to talk about what you can do for the company, not ask about what they can do for you. Asking about salary, benefits, vacation, or other forms of compensation tells the interviewer that you’re more concerned with what’s in it for you, rather than how you can help her. Whether that’s true or not doesn’t matter. You still run a risk of coming across that way.

(This is also part of why an objective is the worst way to start a résumé, because it says “Hi, I’m so-and-so, and here’s what I want from you.”)

The goal of a job interview is for you to get a job offer, or to move closer to getting one. If you don’t get the job offer, it doesn’t matter how much the job pays.

An interview isn’t a one-sided affair, of course. It’s also about you finding out about the company, about worklife, about the sorts of projects you’d work on, because these all fit into things of benefit to the company. Compensation, however, is a one-way benefit to you. What if the interviewer doesn’t discuss salary? Then you just wait for the second interview or the job offer, where the specifics of compensation will all be laid out.

People have countered my stance on this with “I just want to know what it’s paying so that I can save time for both of us by not going through an interview for a job that’s not going to pay enough.” That’s what we programmers refer to as a premature optimization. Just as it doesn’t matter how fast your program runs if it gives the wrong answer, it doesn’t matter how quickly you get through the hiring process if you don’t get the offer.

Have some patience. Focus on selling your skills and experience to the interviewer. Talk to the interviewer about her problems and how you’ll solve them. And don’t ask about compensation.

Distracting examples ruin your presentation

July 26, 2011 People, Social , , ,

At OSCON today, I went to a talk called “Why Know Algorithms” by Andrew Aksynoff. I was pleasantly surprised to see that the speaker was the author of Sphinx, a powerful full text indexing engine that I’m considering adopting for a project.

However, halfway through I was shocked, especially in light of all the problems with sexual harassment and sexist attitudes at conferences that have been brought to the fore lately, to see the example that Andrew used: Selecting women from a database, ranked by “hotness.”

Here’s the table layout he used (and I apologize for the blurriness):

CREATE TABLE usertest (
    id INTEGER PRIMARY KEY NULL,
    sex ENUM ('m','f'),
    age INTEGER NOT NULL,
    hotness INTEGER NOT NULL,
    name VARCHAR(255) NOT NULL,
    INDEX(sex,age,hotness)
)

His sample code revolved around ways to optimize this query:

SELECT *
FROM usertest
WHERE age >= 18 and age <= 25

The latter half of the talk discussed various ways of creating indexes to efficiently provide answers to that query, and which queries would run best with different indexes, in case you want to order by age instead of hotness, for example.

I was angry about two things. I’m specifically not going to address the crass sexism here. I know plenty of others can (and will) address it better than I can.

I was more upset about the effects of the sexism in the classroom. When I’m here at OSCON, I’m both teacher and student. When I’m a student at a session, I want to pay attention to the content, not wonder how the women in the audience feel about the instructor’s attitudes towards them. Are they offended, but afraid to leave? I saw no women leave, although plenty of men did.

Andrew clearly knew his material, and he explained it well. Strictly from a teaching perspective, Andrew’s problem was that the examples overshadowed the lessons to be taught. It’s the same frustration I had with Steven Feuerstein’s book from O’Reilly on Oracle 8 where his examples included a table of war criminals including Henry Kissinger.

When you’re teaching a class, don’t include anything that detracts from the message you’re trying to teach. A LOLcat slide is fine but include too many and that’s what people will remember rather than what you’re trying to teach. It should go without saying that examples that make the audience uncomfortable will also ruin your class.

Note: I will delete any comments that include personal attacks on anyone.

401 passwords Twitter won’t let you use

July 25, 2011 Internet, Programming 2 comments

Twitter has a list of 401 passwords that they disallow, not because of content, but because of how commonly used they are. A common password is easier for a bad guy to guess. None of these are passwords you’d want to use anyway, because they’re so easily guessable by a simple dictionary attack. Bad guys have lists like this anyway, and Twitter is trying to make the most common and unsafe passwords unusable. I wonder how many people would use “111111” as a Twitter password if allowed.

The list is embedded in the JavaScript of the website. Search in the page source for “BANNED_PASSWORDS”. The list is ROT13-encoded, but with Perl that’s trivial to decode:

$str =~ tr[a-mn-z][n-za-m];

The list contains a fair amount of profanity and sexual language below, as you might expect, and geek words like “ncc1701“, “thx1138” and “rush2112“, but also plenty of sports teams like “steelers”, “broncos” and “arsenal”. Many common names like “jennifer” and “michael” show up as well. Note that shorter passwords like “asdf” aren’t included because Twitter requires a minimum of six characters for passwords anyway.

As I write this today, there are 401 passwords in the list, which is 31 more than were reported in 2009. It seems from that article that they weren’t ROT13ed at the time.

The full list (slightly expurgated) follows:

(more…)

Six tips for preparing to attend a technical conference

July 21, 2011 Open source, Social 4 comments , , ,

I’ve been going to technical conferences since YAPC::NA 2002, and next week I’ll be at OSCON 2011 talking about community and Github. Preparation is important to getting the most out of the conference with the least amount of hassle. Here are some tips I’ve learned along the way.

Bring power tools

Power cord, display dongle, cube tap and business cards

Not electric drills and saws, but tools for getting power. Conference organizers may not have planned adequately for the influx of laptops, and electric outlets can be a rare commodity. If you’re flying to a conference, it can be especially difficult to find a plug at the airports. O’Hare in Chicago is especially bad.

If you can fit a power strip into your laptop bag, good. If you want to go cheap, go buy a cube tap at your hardware store for two dollars.

Make sure you bring your cell phone charger and a USB cable to hook up your phone to your laptop, too.

Label your stuff

If your forget your laptop power cord in a room, whoever finds it isn’t going to know whose it is. At the Apple-heavy conferences I usually attend, everyone’s cords all look the same anyway. Label it with your name and cell phone number. Same goes for anything else that you might use and lose, such as display adapter dongles. It’s frustratingly expensive to realize you lost a $25 piece of plastic.

Plan what you want to see

If you leave conference talk planning until the day of the talk, you’re more likely to miss seeing the really good stuff. Amidst all the talk in the hallways and hanging out in the exhibit halls and hackathons long lunches with new friends, it’s easy to forget about that one talk you really wanted to see until you look back on the schedule and realize it ended half an hour ago.

The OSCON scheduler makes it easy to mark the talks you want to see, but for the most important ones, I suggest adding them to your calendar on your phone and setting an alarm.

Bring business cards

You’re going to meet people, so give them something to remember you by. I’m talking about making your own business card, not your company business card. Your card need not be fancy, but if you can get a graphic designer friend to put together something nice in exchange for lunch and/or a few beers, so much the better. At the very least, you’ll want to include your name, website, email address and cell phone number. I also put my Twitter ID and Github ID on mine.

My box of 500 business cards was only about $20 delivered to my door. It’s fantastic bang for your buck for keeping in contact with the people you meet.

Get a laptop bag with a shoulder strap

While you’re at the conference, you’re going to take your laptop with you at all times. AT ALL TIMES. Every conference, someone gets a laptop stolen. You’re not going to let it be you.

Do not trust the guy next to you to “watch this while I run to the bathroom.” When you go to the bathroom, or grab a drink, or whatever it is that you do that isn’t seated at a conference table with your laptop in front of you, you’re going to have your laptop zipped up in your bag, with the strap over your shoulder. This goes double for airports.

Bathrooms are an ideal place for a thief to take your laptop. I assure you that standing at a urinal trying to take care of business with a laptop tucked under your arm is not fun. If you’re in a stall, be aware of how easy it is for a thief to grab a bag from under the stall, or from reaching over a door and taking the laptop from the hook.

A laptop bag with a shoulder strap is the only way to go.

Clean your house

Wash the dishes. Empty the garbage. Take stuff out of the fridge if it’s going to go bad in your absence. A lot of nastiness can happen in five days.

Other tips

I asked on Twitter for suggestions for conference prep. Some replies:

  • Give a practice session of any talk that I haven’t given before. — @mjdominus
  • Make a checklist of all cables I need. Then research where to buy them in Portland just in case. — @rjbs
  • Get a lot of sleep the week before. — @adamturoff

What suggestions do you have? Please leave them in the comments below.

Toward ending RTFM marketing in open source

July 20, 2011 Open source No comments , , ,

Too many times I’ve seen a conference announced once, and then never heard about it again. It’s what I call the RTFM method of marketing: Either you happen to know about the event, or you lose out. This year for YAPC::NA, the annual North American grassroots Perl conference, lead organizer JT Smith isn’t going to let that happen.

No sooner had the 2011 conference wrapped up when JT started daily postings about 2012’s event to the YAPC::NA blog. He plans to keep that pace going for the next year, until June 13th, 2012 when 2012’s event start. The goal is to keep people thinking about YAPC::NA in the next eleven months, and to keep everyone’s expectations high. “Everyone at YAPC 2011 laughed at me when I said I was going to do a blog post a day,” JT told me on Sunday, “but I’ve got the next 300 postings planned out.”

It’s not just frequency that’s different this time. JT’s writing about the details of the conference, and why you’d want to attend. His posts give tips about the best way to travel to Madison, and attract potential attendees with views of the conference location on the lake. A “spouse program” for the non-hacker members of the family is also high on his publicity list.

As JT and I ate lunch at the bar where he hopes to have a YAPC beer night, we discussed the mechanics of this ongoing communication campaign. JT has the next thirty postings written and posted to Tumblr with future publication dates, letting him create postings in batches, rather than every day. “I chose Tumblr for the blog because it has the best posting scheduling system,” he told me.

You can follow the YAPC::NA Twitter stream at @yapcna, or the blog itself at blog.yapcna.org.


I give “RTFM marketing” that name because it’s an extension of the geek notion of RTFM. “RTFM” comes from the rude geek response of “RTFM”, or “Read the F-ing Manual”. It’s used as a reply to a question that the geek thinks should not have been asked, because the information exists somewhere that the querent could have looked himself. It’s as if the rude geek is saying “The information exists in at least one place that I know of, and therefore you should know that information, too.”

The idea that one should just have known about a given piece of information applies to this sort of undermarketing as well. Project leaders seem to think that when information has been published once, everyone will know about it. The RTFM marketers expect that everyone know what they do, read the blogs they do, travel in the same online circles as they do. This is a recipe for failure.

This mindset can be crippling when it comes to publicizing projects and events. Organizers do their projects a disservice when they market their endeavors with the expectation that everyone will automatically know about something simply because they’re written one blog post about it.

RTFM marketers also don’t spread their messages wide enough. They advertise to the echo chamber of the circles in which they normally run. They’ll post to the standard blogs, post to the mailing lists they read, or discuss it in the IRC channels they frequent. This limits the potential audience for the project to the one with which the project leader is already familiar.

Tips for doing open source project marketing right:

  • Write & post frequently.
  • Write & post in many disparate locations.
  • Explain the benefits. Explicitly tell the reader why they would want to attend your event or use your software.
  • Change your messages. Don’t post the same thing twice.
  • Never assume that someone will have read your previous message. It’s OK to repeat something stated in a previous message.
  • You don’t know your potential audience as well as you think you do. Think big.

I’d love to hear stories and ideas about how you got the word out about your project.

“Building and Maintaining a Project Community with Github”, my talk at OSCON 2011

July 16, 2011 Open source No comments ,

Here’s the OSCON page link to add to your schedules.

github.com has taken open source by storm, but it’s more than just a code repository with the latest hot source control system. It’s a new way of working with open source projects.

The web-based social aspects of github can change the human and technical dynamics of working on open source projects. Some of the issues I’ll discuss include:

  • Easier access to code means lower barrier to entry means more people submitting patches. This is a boon, and brings challenges.
  • People seem to expect patches to be accepted because of the ease with which change sets are created. These expectations may clash with project goals.
  • Watching the github fork network lets you see what other people are doing with their forks. It allows me as a project admin to see what people are doing with the code.
  • New workflows are required. A branch and merge strategy for development is crucial.
  • Projects need a guidemap to tell people what to do, because people may think it’s just a simple matter of creating a fork, making a change, and saying “Here’s my work, now integrate it.”
  • Project branches can easily become large, hard-to-handle change sets. Less care and thought is put into change sent back to the project because merging is so easy. Contributors still must work together to coordinate work.
  • Discussion of patches has moved from the mailing list to the change request itself. This can diminish visibility and discussion.

I’ll discuss these and other aspects of community and project management and give examples from my own experiences migrating existing projects to github.

The touch command does more than just create empty files

July 10, 2011 Unix 6 comments , ,

Beginners to Unix/Linux learn about the touch command as a way to create an empty file.

$ ls -l /tmp/foo
ls: /tmp/foo: No such file or directory

$ touch /tmp/foo
$ ls -l /tmp/foo
-rw-r--r--  1 andy  wheel  0 Jul 10 11:56 /tmp/foo

But there’s more to it than that.  The main job of touch is to modify the timestamps on a file.  Creation of a file is almost a side effect.

The -t argument to touch lets me specify a date and time to set on the file.

$ ls -l /tmp/foo
ls: /tmp/foo: No such file or directory

$ touch -t 201107010930 /tmp/foo
$ ls -l /tmp/foo
-rw-r--r--  1 andy  wheel  0 Jul  1 09:30 /tmp/foo

If I don’t specify a date and time, then the current date and time are used.

$ ls -l /tmp/foo
-rw-r--r--  1 andy  wheel  0 Jul  1 09:30 /tmp/foo

$ touch /tmp/foo
$ ls -l /tmp/foo
-rw-r--r--  1 andy  wheel  0 Jul 10 11:58 /tmp/foo

You can also use the timestamp from another file and apply it to another file by using the -r switch.

$ ls -l /tmp/someotherfile
-rw-r--r--  1 andy  wheel  0 Aug 12  2005 /tmp/someotherfile

$ touch -r /tmp/someotherfile /tmp/foo /tmp/foo2 /tmp/foo3
$ ls -al /tmp/
-rw-r--r--  1 andy  wheel  0 Aug 12  2005 /tmp/foo
-rw-r--r--  1 andy  wheel  0 Aug 12  2005 /tmp/foo2
-rw-r--r--  1 andy  wheel  0 Aug 12  2005 /tmp/foo3
-rw-r--r--  1 andy  wheel  0 Aug 12  2005 /tmp/someotherfile

man touch will give you all the details.