Ahh, graduation time.
I just came back from Redmond and found my 10rem contacts email
full of several messages like this:
I'm a computer science graduate with a 3.x ... 4.0 GPA, and am
looking for a job. Can you help?
In my previous life, I hired a number of people, and also helped
my clients interview prospective employees. It has been a while
since I went to school, but let me tell you what worked then, and
some of the things I looked for as a hiring manager at my last job,
whether the candidate was coming right out of school, or had a few
years of post-graduate employment.
Position
First, some background.
The positions I typically needed to fill were consultant
positions. Consulting requires people who can code well, stay on
top of new technology, communicate with the client, write documents
and contribute to proposals. It requires the ability to look and
act professionally, and the ability to always be one step ahead of
the client in terms of technical ability and knowledge.
Most importantly, the people I hired had to be flexible in terms
of what technology they'd work in. They could have a favorite
technology, but had to be able to incorporate others as the project
dictates. You can be passionate, but not a zealot.
Foundations
There are some core things that I think are always needed,
preferably in your education. There's a lot more than what I list
here, but I figured I'd cover the ones that are not often
considered.
Writing, Spelling, Grammar
It is rare to find the old "shove a pizza under the door and
leave me alone" programmer jobs these days. Programmers, especially
ones on teams or working for consulting companies, need to be able
to communicate in writing. Writing, Spelling and Grammar all count.
No one is going to hang you for a dangling participle, but
confusing "you're and your" in documentation or an email to a
client makes you, and the whole team, look uneducated. Typos can be
forgiven, but using the wrong "it's or its" is rarely a typo.
If your spelling is sub-par, use a spell-checker. If your
grammar is poor, make an effort to fix it using books and on-line courses.
In all cases, have someone review your resume to make sure you
don't
Data Structures, Algorithms
Most Computer Science programs include information on data
structures and algorithms. Understanding how pointers work and how
linked lists can be built is essential from a thought process
standpoint. I've only had a few instances where in modern times
I've needed to create low-level data structures. However, there
have been many times when I've needed to understand how existing
ones perform in order to select the right one for the
situation.
Languages
I like to see a couple languages in the candidate's past,
including at least one unmanaged lower-level 3gl like C, C++ or
Pascal, with a experience with pointers and memory management.
Patterns
A decent understanding of patterns is essential these days. It's
one of the things that makes it possible for you to cross language
boundaries, and make the most of your skills. I don't know if
schools today teach patterns (the closest we came was an algorithms
class). If they don't, pick up a decent book or surf a bit to
understand the basic patterns and their uses in software
development.
Extracurricular Activities
Once you get past the foundations, you should be working on your
own time to improve. Sure, you don't have to, but it will greatly
improve your chances of being hired.
Reading
This may be controversial, but I've found the correlation
between people who read regularly (not necessarily technical, could
be, and often is, fiction or non-fiction) and people who do well in
the community and on the teams to be pretty high. I would usually
ask about the last few books the candidate read, and what they
liked to read.
It has been proven that reading helps keep your brain sharp. I
also think it helps your imagination, something I consider
important for developers. I also think you shouldn't force yourself
to read. Instead, you should find something you like to read. For
example, despite having tried a bunch of times, I simply can't read
books about business or being successful - they bore me to tears.
If Neil Stephenson puts out a new book, though, you bet I'll be all
over it.
Here are the results of a recent informal twtpoll I conducted.
If you compare this with the national numbers outside of our field,
you'll see that developers tend to read quite a bit more.

The poll shows the developers were pretty evenly split between
2-4, 5-8 and 9+ books read in the past 5 1/2 months. I've read
around 8 books, mostly science fiction.
This poll shows that 1:4 adults read no books
last year (poll from 2007). I've seen other statistics that said
1/3 of high school graduates never read another book. On NPR one
day, I even heard the number 65%, but I find that hard to swallow
given college enrollment. The state of being able to read, but
deciding not to, is called Aliteracy.
So, this is highly subjective, but all other things equal (which
they probably wouldn't be) I'd take a reader over a non-reader. It
never came down to that decision, but it was a data point in a few
cases.
Coding for Pay
I went through a few iterations of things that did not work for
me in school. The final one which worked, and worked really well,
was to arrange my classes so they were all in the morning. I then
worked in the afternoon. I wasn't flipping burgers, though, I was
working as the sole programmer/it department (later had a total of
three people) at a medical billing company in Massachusetts. The
real-world experience I gained there was worth almost as much as my
education. The two combined were exactly what I, and my future
employer, needed.
If you can code for pay, even if it is low pay, do it. Few
things are worth more than experience when it comes to making your
resume pop.
Coding for Fun
I always looked for people who were passionate about
programming. Few things prove that like coding for fun. If
programming is not only your education and your job, but also one
of your hobbies, chances are you like doing it.
So, I would ask candidates what side projects they worked on,
even if simple or incomplete. Writing some apps for your
sister-in-law's business, writing code for a cool lego robot, or
creating a game were all plusses. Running an open source project
was a huge plus as it showed not only coding, but also
collaboration and a number of other skills.
Blogging and Speaking
This is not essential, but I always considered it a huge
plus. I like developers who give back to the community either by
speaking/teaching, or writing. This not only goes back to
communications skills, but also shows (in most cases) continuous
improvement and leadership.
Keeping up with the Joneses
This falls under "Extracurricular", but I wanted to call it out
as it is one of the single most important things
You need to continuously improve your skills and knowledge.
You should be reading blogs on a regular basis, maybe subscribe
to a magazine, maybe even buy books. Whatever you do to keep your
skills fresh should be a continuous process.
I can't tell you how many people interviewed for positions at my
last company, and told me they only learned what they had to for
their day job. That is a complete and utter FAIL when it
comes to succeeding in our industry. If you don't branch
out and learn things from other people working on different
projects, your skills will stagnate and your code will stop
evolving.
It sounds cliché, but your graduation really is the beginning of
your learning, not the end.
Keep Busy
So, if it takes you six months to find a job, and you really do
want to find a job, be sure to do some of the things here. You
should be coding, speaking, writing. You should be able to put
something new on every batch of resumes you send out. If you can't,
all you're doing is serving up the same information that was
rejected in previous rounds.
Want to get started writing applications so you can learn more,
but aren't sure how? Check out my post on creating awesome apps when you're
clueless.