EDIT: Hello from the future! This post is part of the old blog. That means it may be deprecated. However, I deemed it valuable enough to keep around. The new blog starts here!
So I said I was going to do more "essay" style posts. Well, I guess I have to start somewhere. And I guess it will be here. With this.
I hate interviews. No let me rephrase that. I detest interviews. I loath interviews. I abhor interviews. I <insert expletive> hate interviews!
Now, now. I've had my phases like most people where I just exclaimed "I don't know this stuff, why are they even asking me?". Or this phase "I coded this website all on my own, in a language I taught myself. I am good. I should be picked". Or that yet another phase "I am hard working. I got a degree from a good university. I got good grades. Even if I suck they should hire me because I can learn. I can do better."
You probably had those phases too. Or you still do-don't worry I won't tell you that you shouldn't have. I am just letting you in on my point of view.
Unfortunately, I think all of these don't really cover the real deal. The last one has the 'rightest' thoughts, but doesn't follow its full logic: If you can learn and do better, why didn't you learn and do better for this interview? It's not like you didn't fail the last one. Or the one before that.
So what's the real deal? I. Suck. At. Interviews.
I am not saying I failed as a software engineering student. I am not saying this is the end of the line i.e. I suck. That's it . Good-bye . It's more like I currently suck at interviews. Exempli gratia, in my latest interview I am presented with a new concept I never heard of - Hadoop! Map-Reduce! - and I am now asked to to do a trivial averaging over some values. Do I understand what Map-Reduce is more-or-less about? Yep. So what's the problem? I literally forgot what averaging over a set of values means! I've got to sum some numbers and divide by some numbers...right? Right?! (Imagine a guy with a distressed and haggard look with a tooth brush nudged between his ear and temple instead of a pencil)
Could you write code on the whiteboard also? At that moment in the interview, I just want to go to bed or shoot myself.
Why am I like this?! What is wrong with me? Given in a test I could zoom through that. You want an in-order depth-first search with that? Here you go! I can manage in a test. In an interview, my brain is mush and I just can't think of anything. Quick drink from that cup of water they gently gave you! It might help! (btw no, it won't).
So what now? You're probably doing your best imitation of Sheldon Cooper at this point - Hmph! You're weak! But you are also wondering about the use of 'currently' above. No? Well you should. Isn't there some ray of light in your story? I think there is. And I think this blog post is the start of it.
I admitted that I suck at interviews. I've never read about any programmer/software engineer admitting they suck at what they do or an aspect of what they do. Actually scratch that. This might only be a rare occasion on Hacker News or other forums where chest-beating and other displays of geekhood are the norm, but almost all of the software engineers I look up to have done so in some way or another. Steve Yegge, Zed Shaw, Matt Cutts and others have all shown humility (maybe not like what I did, but you get the idea). Like rehab admitting there is a problem is the start -ok maybe that's not*such* a good analogy. (also I kid HN, I really enjoy it -most of the time)
I think one of the reason for me entering in a state of stupidity during interviews is a lack of knowledge about the basics. Although you learn about them in school, you don't really use them. I know I have to use locks to prevent starvation and deadlocks in multi-threaded applications. We've seen how locks work and how you can implement them. Once. In that 5th semester course. During that class where we sat in front of the professor going through his Power Point bullets. No not that one, the other one! Another example. I honestly did not know, until today, what a HashMap was! It's just a HashTable. But, why didn't we discuss it in class? Oh, that's right, we were taught data structures in a class using Java. A HashMap and a HashTable are actually different in Java (again, don't get me wrong, Java is ok in my book). They just didn't want to confuse us...
Do I have the final answer? Will I now succeed now that I have come clean and tried to emulate the people I admire? I don't have the answer, but I know that what I learn at school is not enough. I know I am not one of those super duper smart programmers. I know I will bomb other interviews. I know I will have to continue on learning and working hard.
I know all that and yet I won't stop. I am here for the long-haul. I've shed some ego today and hopefully it will make me better able to tackle the rest of my life. After all à vaincre sans péril, on triomphe sans gloire.