Preparing Yourself, a Student, for a Programming Job

Posted on September 29, 2008
Filed Under Computer Science |

Congratulations, student! You’ve made it through college, aced your interview, and now you are starting a job as a programmer!

If you’re like me, you want to know what you can do before you start. For my previous 2 programming jobs, I asked my interviewer what I could do to better prepare myself for my first day. They both laughed and said, “Just show up!” True story.

I ended up working on personal projects instead of preparing for the job. It didn’t really hurt or help in the long run, but I felt that the time could have been better spent.

If you really only have a few weeks before you start your job, don’t keep preparing for your interview. Don’t practice arcane language trivia questions and don’t try to solve programming puzzles (unless you do it as a hobby!). Avoid trivia in this stage. If your interviewer was competent, s/he already thinks that you can do the work. Diving back into Meyers, the Gang of Four, or Knuth might give you a trick or two, but in the long run it’ll all get lost in the noise.

Don’t get me wrong! Studying is never a bad move. I graduated 3 months ago and I still spend a lot of my time studying. It’s not the best short-term solution to getting you started in a programming job.

One of the things you should do (but not the most important) is to read domain and company-specific material. Academic journals, conference proceedings, blogs, company websites, and Econ books all fall into this category.

If you’re still in school, take a Microeconomics course. Trust me, it’s worth it. Look at the press releases on your company’s website. They’ll give you a hint at the focus of your job specifics.

Why should you waste your time with this crap? Odds are that your company has a few goals:

  1. To contribute to its particular field of expertise.
  2. To do better than its competitors, for some value of better.
  3. To turn a profit.

It is certainly possible to make good programming/GUI interface/business decisions without knowing anything about your field, your competitors, or your business.

Is it easier with the insider knowledge? Probably. If you didn’t spend time thinking about your field in college, you should at least flip through an Econ textbook or a few trade journals.

This shouldn’t command the bulk of your time. At the end of the day, you won’t master your new field in the few weeks before your job starts. I don’t mean to undercut the importance of this step! You will learn your business sooner or later, and starting early will give you a big help on your first day.

What will REALLY help you prepare?

Use, read, and modify code written by other programmers. A lot.

Why? You’re going to spend most of your career as a programmer doing two things:

1) Reading and correcting what others have written.
2) Building on top of what others have designed.

Likewise, other people will spend time correcting what you have written, and building on top of your designs.

Unless you have donated a significant amount of time to Open Source projects, s/he has minimal experience dealing with unfamiliar code. Maybe a few libraries here and there, but not much else.

Many of my friends and I were very active programmers in our spare time, but we spent our time designing our own code, not using the code of others. I started seeing the light towards the end of my senior year, but the full implications never struck me until I entered the work world as a professional programmer.

Most of my school assignments were based around creating new code. Sometimes I didn’t even have to design it! Use the professor’s framework, fill in the blanks, get an A, and move on to something more interesting.

I landed a Summer of Code project, but the project was based around creating a helper for some Boost libraries (for being a messy solution to an ill-defined problem under time constraint while working another full-time job, it ended up producing decent results). I learned how to use a few of the useful Boost libraries, learned I never wanted to use others ever again, and got a window into the OSS world. Unfortunately for me, my experience reading and modifying the code of others was minimal.

Some of my harder assignments were still reasonable projects to complete from scratch. I took a cryptography class, and my final project was to implement the quadratic sieve. I used GNU’s MPZ library, and built the linear algebra/number theoretic functions from scratch. I just as easily could have used a library like LAPACK++. In fact, it’s very likely that such a library would have been much faster than my personal implementation, and the project would have been finished sooner.

If it is so important, why weren’t you asked about using the code of others in your interview? It could be any number of reasons, really. Maybe the company’s code base is so massive that EVERYONE needs time to digest the structure. Maybe they haven’t hired a junior developer recently. Maybe the company wants to completely mold the habits of new developers, before they learn naughty practices.

Will you be OK without doing this? Yes. I started my job with only minimal experience with unfamiliar code, and I haven’t starved to death on the streets. Yet. However, I wish I had spent more time figuring out how to use different libraries.

Popularity: 43% [?]

Comments

6 Responses to “Preparing Yourself, a Student, for a Programming Job”

  1. Bryce on September 30th, 2008 11:38 am

    Heh, there certainly isn’t a substitute for getting good at understanding code that’s already been written.
    I’m currently working on a few patches for RawStudio to properly support Fuji raw files. It’s been a trip so far. And I won’t lie, it’s only a small project.
    When I was working on MyNoteIt.com that place was/is a shitnest of code with no real consistency in the php/javascript/html/css. Talk about a pain in the ass….
    Heh but who knows where I’ll go when I graduate, maybe I’ll do IT related instead of programming, I mean I’m sure i’ll still program in my spare time, but who knows.

    We need to do dinner/lunch/drinks or something sometime soon.

  2. Dan C on October 2nd, 2008 6:54 am

    Hey, thanks for the advice. I’m a college computer programmer approaching my final year. Though I do want to go into computer science at the local university before I hit the job market, your insights are very helpful.

  3. Jason on October 2nd, 2008 9:21 am

    Thanks for the advice, but what about those who have graduated, ace interviews/tests, and for some unknown reason don’t get it? I’ve been told I do very well on the tests companies give, and I’ve been told by interviewers that an interview was great. Two years and counting from my graduation and still fast food.

  4. Bryce on October 2nd, 2008 8:19 pm

    Hey jason try getting some real experience coding. Try working on an open source project. Look for some basic bugs in some software packages you use and get some patches in there. From there look into adding small features.

    If that doesn’t get you in then maybe you should get different recommendations and references….

  5. Bryce on October 2nd, 2008 11:51 pm

    Also @Jason. I just re-read what I wrote and I sound like a supreme cock. I totally didn’t mean it that way at all, I just mean to get involved in a current opensource project. Jake went over how it was important to have real world experience with other people’s code. This is a great way to do it.

    Again, sorry for sounding like a total jerk.

  6. Jeff on October 3rd, 2008 8:39 pm

    Some things never change. It’s been over 15 years since I was programming for $, just out of college. But I didn’t have a clue about the real world. When I learned that I would be modifying existing code, I damn near quit, it was quite a shock.

    But I survived…kinda. :D

Leave a Reply