Friday, October 31, 2008

Interviewing Lessons

This semester has been brutal. I have 17 credits right now at Michigan State University (say what you will, its an awesome school) - and am planning on graduating in December. Why so many credits, you ask?
Well, back when I sent you my first post, I was working. A LOT. We are talking full time in Ann Arbor working for Toyota. It was actually a very interesting experience, but I rarely took any classes during the 16 months I worked there. I came into college with 18 credits (from Community College classes I took during high school and NOT the "accellerated" program I fortunately dropped out of, but that is another blog entry), but after taking basically 16 months "off", here I am working hard to graduate in 4.5 years. Anyway, looks like this blog is titled "Interviewing Lessons", so I guess I should talk about that.

The point

Since this is my last term, I have been interviewing like crazy. I probably should have been doing this during the Summer, but it is so much easier to do it after MSU's "Career Gallery" in early October. Tons of companies show up and each are receptive to my kinds of jobs. However, I have never really had a "serious" interview (except maybe for my NSA interview, but thats another blog entry ;) ), so its an understatement to say I learned a few things.
I have always dreaded interviews, or any sort of social construct that forces me to "prove myself", because I tended to freeze up and forget everything that makes me a valuable person. Since I learned a couple common tips about interviewing, I have changed from a person terrified of getting asked a tough question, to someone who looks forward to interviews to see if they can give me one that actually takes more than a minute to figure out. If you feel the same way as I did, then there is definitely one thing you can do to change that and take control of your emotions.
The thing to do, if you are planning to be a Software Developer, is to get the book Programming Interviews Exposed: Secrets to Landing Your Next Job. It has been key to me getting up to speed with the types of questions to expect. Generally the questions are really easy if you are at your computer with Google and a compiler at your fingertips. However, when you are being choked by your tie, sweating profusely, and asked to jump through hoops by writing code on a whiteboard, it helps to be confident.
I made the mistake of not doing any sort of "brushing up" of my skills or even looking up common questions. Just because you are a senior in college and have developed large systems in multiple programming languages, doesn't mean that you know how to do a simple command line program they ask you. If you paid attention in class, really all you need to do is look through the book during lunch and try and solve the problems before reading the solution. It will awaken that "algorithms" part of your brain that you may have let atrophy while developing "real world" systems.

An example

One question I found particularly interesting was a light switch problem. You have three light switches connected to three light bulbs in another room. The problem is to determine which light bulbs go to which switches. You can't see the light bulbs from where you stand, and you only get to go into the room with the light bulbs once to check. The first thing you try to do is flip one on and then check. Well, now you know one light bulb and switch, but what about the other two? You are screwed. Obviously this isn't the solution, so if you'd like, go ahead and try to figure it out before going to the next paragraph.


Got it yet?...


The solution given is that you are supposed to flip two lights on and then wait for 5 minutes. After waiting, turn one of the lights off and go into the room. Now, you can determine which is which by one light bulb that is on, one that is off and warm, and one that is off and cold. Tricky, huh?
The point is not necessarily to solve the problem in an interview, but to show the thought process you go through. Talking through your problems helps you not only to show the interviewer that you are smart and analytical, but actually helps you to solve it. So just sitting there and telling the interviewer that it can't be done is bad. All you have to do is realize there is a trick to it and break down your assumptions. Doing this alone should at least help you make some progress and show the interviewer that you are able and willing to methodically work at a problem even if it is tough (or seemingly impossible).

Conclusion

This really helped me to think in the right way for my interviews, and since I got this book, I have been "knocking them out of the park", so to say. I hope this little bit of advice keeps you from dreading your interviews, and makes them exciting challenges that can always be solved if you get all those mental cylinders running.