5 Steps to Cracking the Coding Interview

Software engineers typically face a double whammy when it comes to a job interview. They not only have to ace their meeting with the hiring manager and team members, but also need to score well on their coding tests.

Gayle Laakmann McDowell knows a lot about this. She’s the author of Cracking the Coding Interview: 150 Programming Questions and Solutions and The Google Resume. She’s got good advice on acing coding interviews.

[youtube http://www.youtube.com/watch?v=aClxtDcdpsQ&w=560&h=315&wmode=window&h=315]

Prepping for the Phone Interview

For starters, never assume the pre-screen phone interview will be a breeze. It never is.

Even during this initial screening, coding tests can be as rigorous as they are in the  second round of coding tests, says McDowell, a former software engineer who once served on Google’s hiring committee.

Typically, the interviewer and you will share a document in which you are expected to do some coding. In other cases, you’ll take an online multiple choice coding quiz or use an online test site like Interviewstreet.

And don’t think you’ll be dealing with HR on the pre-screen. “Usually, it’s a peer who will do the pre-screen because the information they’re evaluating is very technical,” McDowell says.

This interview is meant to evaluate you for:

  • Knowledge of computer science fundamentals, such as data structures and algorithms.
  • Analytical skills.
  • Coding skills.
  • Cultural fit.

On to the Second Interview

The second interview is usually with the hiring manager, members of the team you’d be working with, and frequently, a third person from an entirely different team. It’s this last person you should pay especially close attention to.

“You may have a team that’s been short-staffed for months, so they’re eager to hire anyone. This [neutral third-party team member] is a bar raiser. Their questions may not be harder, but their standards are higher,” says McDowell. Usually, she adds, the bar raiser asks harder questions.

5 Winning Steps

When faced with a whiteboard test, McDowell advises taking these critical steps:

  • Ask questions. You want to make sure you understand what you’re being asked to solve.
  • Talk out loud as you solve the problem. The interviewer wants to know how you think and problem solve. If you remain quiet, it’s harder to ascertain that.
  • Openly discuss the trade offs in your algorithm decisions. Acknowledging the weak links in your approach demonstrates that you’re aware where potential trouble spots may arise, and offers up why you were willing to make your trade-offs.
  • Write code. Although you can sketch out pseudo code for an outline, you need to inform interviewers that’s what you’re doing so they don’t assume it’s your final version. After writing pseudo code, you’ll need to hunker down and write the actual code.
  • Test your code. Interviewers expect to see bugs, so don’t be shy about fixing them. What they’re looking for is how you fix the bugs. If each interviewer notices a pattern where you take a band-aid approach that’s likely to introduce other problems, don’t expect to be hired.

Here’s a close-up of McDowell’s coding on the whiteboard:

Bombing the Interview — or Not

After an interview, you’ll want to assess how you did. But it’s not worth the effort, and you’ll often be wrong.

“I’ve found there is zero correlation between how you think you did and how you did,” McDowell told me. “You may think you did well because the interviewer was nice to you, but it could be because they felt sorry for you. Or, you may think you didn’t do well because the interviewer was tough, but the interviewer may have been pushing you harder because you were doing so well.”

Keep in mind that interviewees are graded on a curve, McDowell says. So, just because you think you completed the coding test in a fast 10 minutes, you don’t know whether the other candidates have been doing it in five.

Reasons for Rejection

Not getting these jobs often boils down to a lack of problem-solving skills, or not being able to solve the problem quickly enough. It means, unfortunately, the interviewers didn’t think you were smart enough to handle this particular test.

Another deal breaker is arrogance. Remember, you often have to work as a team. “Engineers are consistently rejected because of arrogance,” McDowell says. “Be careful how you answer questions. Rather than say something like, ‘I did all the hardest parts of a problem,’ be specific and explain what you accomplished.”

If you know you tend to be arrogant, temper it by demonstrating how well you can listen and remain cool if the interviewer challenges you with questions like, “Can you further optimize your code?” Says McDowell: “The worst thing a candidate can do is argue with the interviewer.”

If you want to grab more of McDowell’s advice, she’ll be one of the speakers at Silicon Valley Code Camp this weekend. It’s a free event at Foothill College in Los Altos Hills, Calif.

Related Links

51 Responses to “5 Steps to Cracking the Coding Interview”

  1. Arrogance, or confidence? They are not the same. It’s been my experience that the label “arrogant” is used by folks who are insecure in their own abilities but full of self-esteem. That is, they know they do not know, but they know they are great. Hence, anyone with confidence will typically be seen as a threat and tagged as arrogant. Your mileage may vary.

  2. The article states: “Dawn Kawamoto is the associate editor of Dice. She is an award-winning technology and business reporter, previously working for such publications as CNET’s News.com where she reported on a wide range of sectors from enterprise software to mobile computing to Internet darlings and the funding that fueled their growth. In 2002, she was a Gerald Loeb Awards finalist for coverage on Oracle’s sales practices.”

    So what do you know about programming? As much as I can ascertain – nothing. How harmful is it to publish garbage information / advice that you nothing about?

    This kind of info just contributes to the further decline of the US.

    It really makes me angry!

    • Gayle Laakmann

      She spoke with me for about about 2 – 3 hours, so she was pretty well informed to write this article. There were a few minor things I would tweak with what she said, but nothing major. It was almost entirely correct and coming from what I told her.

      Did you have a specific objection to what was said?

      • Proud Paulbot

        As a former copywriter (who still takes freelance gigs every now and then) and the wife of a copywriter, I’ll have to agree with Gayle. If you’re a good writer, you don’t *need* a strong background in a particular subject to conduct an interview with an expert about it. You just need to ask the right questions of the expert, and ensure that you’ve got the terminology down.

        I couldn’t have written a single line of that code. I do understand parts of it–i.e., I know what a function is, I know what an int is, I know what a for loop is, and I know what comments look like–but there’s no way I could have passed the test being discussed in this article. However, I am confident that I could have conducted an interview about it with someone who actually knew what they are doing, heh, and then wrote a coherent article that puts what they told me into writing.

        If you feel the information in the article is faulty, then fault is with the interviewee, not the writer. However, in looking at what Gayle said, I don’t think she’s disseminating misinformation regarding what the hiring process at tech firms looks like. (And remember, this is coming from someone who had to give up on tech and go walk dogs. It’s because I cannot pass tests like this that I was relegated to walking dogs.)

  3. What I want to know is: who is still coding like this? It’s 2012 and if you’re practicing 20th century algorithms and ignoring established frameworks, then your usefulness borders water cooler jockey and lawn statue.

    The world needs more enterprise developers and bleeding edge trend breakers that build upon the progress of others. If we all sat down, isolated, left to whittle a wheel until we each get it right, then you get a society full of wheel makers.

    Like, yeah, I memorized the top 4 algorithms to humor you but, I’d rather be furthering my education in clustering.

    tl:dr: It took 9 minutes to write that buggy mess of code that rotates god knows what. It will take 10 minutes for someone to comprehend your poorly named variables just to gain some context. Let’s grow up, stop swinging our intellectual nuts around, and import a 1-liner that does that exact same thing, but better.

    • Gayle Laakmann

      Doing well in these interviews is not about memorizing algorithms, but rather about being smart and a good coder.

      I totally agree that, in the real world, you should use a library to do something rather than doing it yourself from scratch. No one is disagreeing with that.

      Does that mean interviews should test your knowledge of libraries? No. That would be just memorization, and would be useless. You can search for the libraries when you need them.

      The goal of these interviews is to test how well you can code, how well you solve a hard problem, etc.

      I’m not why you’re saying that it’s a “buggy mess of code”, that it “rotates god knows what”, and that is has “poorly named variables.” It seems like you’re just ranting here. What it rotates is very clearly explained in the video. The variables aren’t poorly named. And the code isn’t buggy.

      • In real life we deal with shapes, send them to a function, and tell it how much to rotate. And we also use adjectives to describe our variables so the next person can pick up the meaning in a glance. That is the considerate and kind way to leave code behind.

        The reason I “rant” is this: we are here to find out about the real world and get real jobs. These problems are a niche platform for people to sell “how to pass the interview” books.

        It goes out of its way to give momentum to a paradigm that should be dying down by now. This kind of thing gives even expert programmers poor self-esteem even with a proven track record of delivering products on time and above standard. Lastly, it gives power-tripping interviewers too much enjoyment.

      • Gayle Laakmann

        No, they aren’t a niche platform to sell books. These are actually what the interviews at top tech companies, and many other tech companies, are like.

        Go check out CareerCup and Glassdoor and read their interview questions for software engineers, as posted by actual candidates. You’ll see that they’re much like this.

      • Perhaps the confusion is due to the use of the word “rotate”? Gayle is not actually rotating a shape in the manner I could hold a block, piece of paper, or toy and rotate it to show a different angle, she wants to process the contents of a matrix which in this case is a 2 dimensional array. That’s why one of the first statements she makes in her presentation is the importance of asking a questions to determine what is meant by “rotate”.

  4. jjacobson

    I automatically assume I will not be hired when faced with white board coding as I simply cannot do it. Throw me on a laptop and any compiler or scripting language you want me to use and I am a wizard. Throw me in front of a white board though and I completely go blank, hell I would have a hard time writing most simple loops.

    In the end though it really does not matter, who you know and how you perform takes the day. The last three or four contracts I have worked have started with would you please come work with us.

    • Gayle Laakmann

      But you CAN do it — you just need some practice! If you’re going blank and unable to write a simple loop, then your probably just confidence. Practice, and you can do well on these types interviews.

      And at many, many companies, these sorts of interviews are standard and you won’t be able to get the job without doing well on them (regardless of who you know).

    • Exactly. This man obviously knows enough to impress a company through concrete work.

      Remember when articles here and at monster.com said Google likes to give people riddles? Well it turns out they’re not even allowed to. But we all felt the pressure to go study riddles and probably wasted a good month.

      Adults shouldn’t be influenced by fads that come and go like kids under peer pressure.

    • Me too! I freeze up. I think it’s because a jo interview uses the language part of your brain when you’re asked to describe experiences, approaches to problems (right brain) etc but coding uses sybolic, nonlingual, mathematical left brain tasks. To be asked to switch to it in front of the interview team is extremely stressful and does not at all model what kind of tasks you will be faced with at work!

      • I agree. I sometimes have trouble switching between thinking about things like high level system architecture and software frameworks (like WPF, WCF) to raw back algorithms. You need time to get your brain primed for the algorithm/puzzle solving etc. . Once I was asked to write a sort routine on Colabnet using c# collections List but only wanted an Array algorithm. Crazy interview.

  5. James Green1

    Lately I have been extremely critical of dice articles, but every once in while they have a good one and this one. Although a lot of hiring is ‘who you know’,Networking’, ‘Nepotism’, etc,etc.For jobs such as Game Developer(AI Programmer), Trading Developer and highly technical software engineering or application development jobs, I would think the interviewer would need to gauge your knowledge. I am going to buy Gayle book, I could use the refresher. The only real problem I have is with indian interviewers. I had a recent phone interview with an indian who accent was so thick I could not understand what questions she was asking. I would like to ask Gayle how would she handle a situation like that?

    • Gayle Laakmann

      That’s tough, especially in a phone interview. Many other candidates probably have the same issue with that interviewer, so you may not be faring worse than others.

      What I’d recommend is repeating questions back to an interviewer before answering them. If you only heard part of the question, then repeated back what you did hear and ask relevant questions. For example, “I’m sorry, I’m having a bit of trouble understanding you. I heard you said something about rotating something. What type of object did you say?”

      If necessary, you can ask your interviewer to speak more slowly. But keep in mind that it’s difficult for the interviewer to remember to speak slowly throughout the interview, because speech habits are so ingrained.

  6. Thrice have I had an actual coding interview.

    The first time involved a written test using a language I knew of but had never used. I was told to plan on 2-3 hours, bring paper, and pencils. I aced the test, and the interviewer told me he especially liked my responses to questions that asked for opinions, and such.

    The second time involved being shown code in a language I knew of but had never used. I was asked to describe, as best possible, the flow. I was told I understood more of it than folks who claimed extensive use of the language.

    The third time was “on line” and would determine my aptitude for programming. At that point in my career I learned I apparently have no technical ability. At least that’s the conclusion I drew after never hearing from the company.

    • Proud Paulbot

      A lot of online exams are coded horribly. They are difficult to navigate and the questions aren’t clear (many were obviously written by people who read and write English on a fifth-grade level or less).

      I’d rather take a whiteboard or pencil-and-paper exam, or one that’s done on a computer, but does not depend on an “exam in a box” program. For example, an employer sits you down in front of a computer and asks you to write a program that does x, y and z.

  7. Yes I guess I’m speaking about the problem in general, including all job sites. Nothing personal to Dice or the author. I actually have this woman’s book, and it is good quality. It’s just that in an economy where we have to jump from graduation into a job with only months to learn, it sucks to be told that the standards are growing arbitrarily.

    My advice to new graduates is to find out what your local job market looks like and go from there. Many successful people aren’t memorizers. As Einstein once said, “Never memorize what you can look up.”

    • It could be worse. You could have been working for years and learned much (much of it OTJ), yet because you are “old”, were/are middle management, do not know “x” you will end of walking dogs like the Proud Paulbot.

      • Do you give your doctor a test? your lawyer? auto mechanic? cpa?

        I’ve been a software developer / technical guy for 42 yrs. As a consultant (for 25 of those years) nobody even asked for a resume. Now all of a sudden they want you to take a bulls**t test. We should all politely refuse.

      • Gayle Laakmann

        “Do you give your doctor a test? your lawyer? auto mechanic? cpa?”

        No, but:
        (1) You do assume that their skills have been tested in order to have such a role. And in the cases you listed above, I believe that’s the case.
        (2) You don’t have the skills to test those roles, so you wouldn’t be able to.

        “Now all of a sudden they want you to take a bulls**t test. We should all politely refuse.”

        They are interviewing you for a coding role. Doesn’t it make sense that they’ll want to test your coding skills? Wouldn’t you expect a journalist to have to demonstrate writing skills?

        • “Doesn’t it make sense that they’ll want to test your coding skills? Wouldn’t you expect a journalist to have to demonstrate writing skills?”

          No it doesn’t make sense when you have a STEM degree, and programming experience, and references. To me it’s a reflection of a really ugly, controlling, work environment, with microcephlic mangers.

          Corpratism has taken programming, a once enjoyable persuit, and made it a nano-managed hell.

        • After reading your resume, I looks to me like you programmed professionally for 3 – 4 years. The careercup site looks just like any other head hunter site.

          Frankly I’m fed up with all the ’empty advice’, “junk information”, and the ‘5 things you need to know about your ….”.

          The US economy is in free fall. Senior STEM people are just thrown away. Corps want to import H1-B’s, a lot of people are suffering.

          In a way, Dice and all the others like it, create a phoney enviornment where they can inundate employers with resumes, which just creates more confusion.

          So someone with a couple of years of experience is going to tell us what to do and how to act? I guess if you’re desperate? I’d rather live off the grid.

      • Gayle Laakmann

        “Doesn’t it make sense that they’ll want to test your coding skills? Wouldn’t you expect a journalist to have to demonstrate writing skills?”

        No it doesn’t make sense when you have a STEM degree, and programming experience, and references.

        Sure, you have a CS degree. And you have some programming experience. But how good are you?

        That’s like hiring someone to be a writer because they have an english degree and has written before — but never seeing a writing example.

      • Gayle Laakmann

        “After reading your resume, I looks to me like you programmed professionally for 3 – 4 years.”

        Closer to 8.

        “The careercup site looks just like any other head hunter site.”

        Huh. Really? What kind of head hunter sites are you going to? CareerCup doesn’t even *do* head hunting, and I’ve never heard of a head hunter site that looks anything like CareerCup. CareerCup posts thousands interview questions. Do head hunting sites?

        Are you angry ranting?

        Frankly I’m fed up with all the ‘empty advice’, “junk information”, and the ’5 things you need to know about your ….”.

        “Corps want to import H1-B’s, a lot of people are suffering.”

        That’s not true. The H1B visa process is expensive, time consuming, and risky. If companies are hiring H1B visas people, it’s because they can’t find good enough people within the US.

        “So someone with a couple of years of experience is going to tell us what to do and how to act?”

        88+ reviews on Amazon on Cracking the Coding Interview and still at 5 stars. Speaks for itself.

        • In a positive note. Write something that will elevate IT people. Not down grade them. Taking tests is a down grade.

          Give me some proof you’ll be a good wife… how fast can you iron 5 shirts 🙂

          Get the point?

          Sure I can give my doctor a test …. there gotta be an online for doctors, lawyers, auto mechanics. Everyone should take a test, every time they do work for anyone. Yeah.

          According to the resume you have (that I found with google) you’ve been programming (as a real job – not a student) for four years. Two jobs in four years. Really, it takes a 6 months atleast to get into a job. IMO, you don’t have enough experience to give advice to anyone!

        • 88 stars on Amazon…. Maybe you’ll get a plaque 🙂 If you get enough plaques you can burn them to keep warm.

          As Andy Warhol once said: We will all get our 15 minutes of fame. I have several million dollars ‘in the bank’ from writing software. All it really means is that you can buy a car for cash.

          Alternatively, you can prostrate your self with coding interviews, and become a grunt.

          I’m disappointed you didn’t comment on my microenceplohalic manager quip, or even a brief acknowledgement of nano-management.

          • I can never understand why people jump in with nothing but insults when someone is giving advice in good faith. You may not like coding interviews, but the truth is they’re a fact of life. If you’re good enough to handle them without preparing, that’s great. If you’re talented enough to refuse to take them and handle any consequences, that’s even better. But if those are the cases, remember that not everyone’s as good or as experienced as you are. Why would you attack information that’s meant to help them? I see you criticizing, Doug, but you haven’t said a thing that can help anyone else. “Prostrate yourself with coding interviews, and become a grunt”? I’m sure that’s very helpful to people who’ve been out there for a year looking for work. So, I invite you to put up or shut up. If you want to write a post or have us interview you about coding tests, even something about why they’re useless, send me an email and we can talk.

            Career advice, no matter who gives it, is always a “take what you like and leave the rest” proposition. Not every tip applies to everyone. Just because you disagree with something, or it doesn’t compare to your experience, doesn’t mean it’s wrong. That said, critiquing advice is a perfectly valid thing to do, but there’s a difference between critiquing and criticizing, and between criticizing and insulting. You’re just being insulting, Doug. (I have to point out that you’re way out of bounds of our terms of service, too, but I’ll leave that be for now.)

            So, Doug, I’m looking forward to hearing from you about that post.


      • Interesting questions on “CareerCup”. Many of them from places like MS, Apple, Google, etc.; i.e. the high-profile companies seeking to invent “the next big thing” and “change the world”. Please. Give me a break. There are many tech jobs that consist only of processing rather boring data. Those folks really could not care less about transporting cannibals and missionaries across a river. Sadly, just as too many tech managers now strive to emulate Steve Jobs, too many not-Apples-etc seem to believe asking clever questions will result in a staff filled with geniuses. Perhaps, but only if they are planning to pay a sizeable wedge of dosh.

      • Gayle Laakmann

        “According to the resume you have (that I found with google) you’ve been programming (as a real job – not a student) for four years. Two jobs in four years.”

        Then you found an old resume and/or didn’t look carefully enough. 8 years professional experience.

        “Really, it takes a 6 months atleast to get into a job. IMO, you don’t have enough experience to give advice to anyone!”

        People seem to find my books very helpful, so they would disagree with you. In other words, you can assert that I don’t have enough experience, but those who have used my advice have found it very valuable.

        “In a positive note. Write something that will elevate IT people. Not down grade them. Taking tests is a down grade.”

        How so?

        “Give me some proof you’ll be a good wife… how fast can you iron 5 shirts. Get the point?”

        No, I don’t. If ironing quickly were an essential skill, and not trivial to pick-up, then it wouldn’t be a crazy thing to evaluate.

      • Proud Paulbot

        The sad part is that if this dog-walker were handed a calculus exam, I could pass it. I would need a few days to prepare–I haven’t used the material in awhile–but I could pass it. It doesn’t matter, though. Employers don’t care about one’s ability to perform calculus, or any of the other advanced math I have. Those skills are considered useless.

        As I said in another post, I don’t have any beef with the notion of being given a hard-skills test, provided the test being given is relevant to the job. For example, it would annoy me to be given a calculus exam to qualify for a $10.00/hour clerical job. But that’s not what the article is talking about. This person is being given an exam on a language they are expected to use on the job.

        A well-written test is focused not on rote memorization, but on how to apply one’s knowledge in real-world situations. In the math world, this is what word problems are for. Granted, a lot of pre-employment tests are focused only on rote memorization, which is why so many applicants manage to pass a test, only to go into free-fall when they are put on the job and asked to actually use their alleged knowledge to solve problems.

        It’s like memorizing a bunch of words, and perhaps even verb conjugations, in a foreign language, but having no idea how to use them to construct sentences.

      • Dawn Kawamoto


        You are out of control. You’re personal attacks and insults to experts like Gayle who have volunteered their time to provide extremely useful advice is getting way out of line.

        Your comment: “So someone with a couple of years of experience is going to tell us what to do and how to act? I guess if you’re desperate? I’d rather live off the grid”

        Gayle has huge following. Look on Amazon and keyword “interviews” and she is one of their top selling authors. Check out YouTube and there have been 108,000 views on her white board example. She normally charges to view that video but you and the other readers got a look at it for free.

        And regarding your other comments:
        “Frankly I’m fed up with all the ‘empty advice’, “junk information”, and the ’5 things you need to know about your ….”In a way, Dice and all the others like it, create a phoney enviornment where they can inundate employers with resumes, which just creates more confusion.”

        If your are fed up with those types of stories, then don’t click on them. But others find them highly useful, as indicated by their comments.

        Secondly, I have a strong interest in helping people by providing them with useful information. That is why I became a journalist. I am extremely passionate about finding ways to help you and all others reading our site to find ways to land a job. I’ve been laid off before, my husband too and a countless number of my friends. This is what drives my passion. I have walked in your shoes.

        So, I look for the brightest and best folks out there to offer advice, I also seek out hiring managers who are willing to donate their time to give you the real low down. I am also open to suggestions and constructive criticism. Not rants.

        Doug, why don’t you help out this community of your fellow IT pros with suggestions of people who you’d like to see interviewed? I am making an honest request.

        Take care, Dawn

  8. software-engineer-20

    I expect interviewers to be knowledgeable enough to determine skills/capability just though discussions about the problem domain / industry. Nothing wrong with presenting problems and asking how would you solve it. HOWEVER, coding tests really push the limit on what I consider acceptable.

    • Well stated.

      To add to that, there is such a thing as a ‘probationary period’ where you can let the person go for any reason – as long as it’s stated in the terms of employment. So if the employee lies / doesn’t perform you can say good-bye.

  9. I went in for an interview once, and some guy from India, who i could barely understand asked me this:

    You have 3 cannibals and 3 missionaries on an island and a boat that can only hold 2 people ….

    If you have never seen this problem before, there is little chance you are going to solve it at the white board… I looked it up on google when I got home and glad I just told them “I don’t want to stand up here and waste any more time… I am going to sit down now.” after about 2 minutes at the board.

    I think alot of interviewers get a kick out of humiliating people by giving them impossible questions.

    Needless to say, I didn’t solve it and didn’t get the job.

  10. Curious Cat

    Thanks Gayle and Dawn for this.

    I wish I hadn’t wasted my time reading Doug_b and Kadavi’s comments. They really have no clue.

    But to respond to them:



    Doctors do need to pass board certification tests(or similar), and need to do that regularly (I believe in USA it is every 7-10years). If they fail that, I suppose I would not even be seeing one. Besides, as a patient I am not even qualified to give a test.

    And, your analogy about giving your doctor/mechanic a test is completely bogus. Companies conducting interviews is akin to Hospitals conducting the interviews, not the patients/customers.

    You might have STEM degree and years of experience, but your logical/analytical thinking is completely off. From your comments about Gayle’s resume, you reading comprehension skills seem off too.

    And how is talk about H1B even relevant? Are you claiming it is the H1B holders who have made the interview process to be what it is currently? Bullsh*t.

    Now why would someone want to hire your experienced a**, again?


    You seem to be in the same boat as Doug_b when it comes to logical/analytical thinking.

    Established frameworks are written by people you know. They don’t grow on trees. I would rather hire the person who can write a framework than the person whose bleeding edge trend breaking knowledge about the framework will get outdated in a few years. Your talking of adjectives and verbs makes me think you might be an established COBOL programmer 🙂

    Your talking about ignoring established framework just shows that you are clueless as to what is actually being tested. While it is true that some interviewers are also clueless about this, there is no disagreement that things are far from perfect. Besides, if you want a job, you have to deal with the interview process, and this article definitely helps in that regard.

    • So you’d rather hire a person with 50 years experience that can write an API over a cheap labor intern/outsource with 2-4 years out of school? Because most companies don’t agree with you. Look around friend; low level lackeys that don’t get “the big picture” of architecture are disposable. Why? Every fresh college kid knows how to fizzbuzz, so good luck standing out with that.

      The highest paid engineers don’t write low level code. They draw the line that connects two components and make it work, and respect the dudes that crafted a fine API for us to use and refine.

      Name one successful programming rockstar that succumbs to menial labor, and name another that bases their life on primitive ints and chars to craft a holistic system. Doesn’t happen anymore, and never will from now on due to things called innovation and evolution.

      For example, we all felt high and mighty when we “mastered” one language. Welcome to the real world of sunshine and competition: the guy next to you knows 30 frameworks in 10 languages and generates a professional website in a week. Meanwhile, deluded “engineers” reading Top 5 articles spent the last 3 years figuring out what a Socket is. Are you getting the picture? Not the big one, because you’ve used lego pieces to build bricks one at a time.

      “…if you want a job, you have to deal with the interview process”

      Or put the last guy out of a job for taking too long to deliver on deadlines. There’s not just 100 of us anymore, there are millions. Learning to play “original vanilla” will impress your friends but it won’t amuse an Exec that needs to compete with Fortune 500 companies that use colossal cloud clusters like Amazon.

      But maybe we’re talking about different things completely. I’ve been referring to actual challenging jobs that are in high demand. You seem to be thinking about the typical $60k .NET gigs. So let me help us find a common zone of understanding. Since 2005, 99% of companies in existence realized that a business can only survive by using the latest technological practices, and learning how to find the people who can get behind the big wheels. Every piece of paper is replaced by SOA and databases that use ORM to store complex objects. If you graduate at 22, and take 2 years to learn these technologies well, you’d have hope by 24 and become senior by 29. Add the year or two it takes to memorize these silly algorithms and you prolong your career success by that much. Time is precious in the “instant” economy, and if you don’t pick your battles, we’ll find ourselves as 50 year old newbies.

      • KADAVI I do agree with you that keeping yourself in head of the current standards and practices is required. Of course in our world things get deprecated fast and you need to adjust and also yes time is certainly precious.

        But I see you are mentioning “memorize silly algorithms”, what exactly are you referring with this? Is it that rotate matrix example?
        I mean common… you need to memories this in order to solve it?
        Is that how you work, yes some frameworks do have an already existing API for this task, but what if you are presented with a problem that does not have an out of the box solution? Will you then wait for someone to implement an API for you to use it?

        “So you’d rather hire a person with 50 years experience that can write an API over a cheap labor intern/outsource with 2-4 years out of school?”
        This purely depends on the job position, as for a specific examples actually two companies come to my mind:
        – One company has a rapid development and provides custom mobile and web solutions and they only hire cheap labors and that works great for them.
        – Other company builds programming language, a platform, a framework and/or framework components… how can you even consider hiring an intern in this case. You really cannot as you have an obligation to all your framework consumers to provide the best that you can. Also a strong API design skills and problem solving skills are needed, we just cannot hire a labor (a leeches) in any circumstances. Believe me having a programmers as your end users and having a typical non technical end user makes a great difference.
        If you disagree first please check this presentation from the Joshua Bloch:
        You will notice that even a highly experience developers can (and do) make mistake, but you learn from it and you provide a standard, or a practice, or an API for others so that they can avoid it (or better jet never encounter it).

        “Every fresh college kid knows how to fizzbuzz, so good luck standing out with that.”
        The sad thing is that unfortunately this is not true, see this article from Jeff Atwood (I know its a bit old but it still applies to current situation):
        You need to understand that that is one of the main points of online test sites, like the one mentioned here Interviewstreet or the one I’m familiar with:
        These sites provide a great filtering mechanisms for participants which do not have the bare minimum requirements and if you ask them you’ll be surprised what percentage is filtered out just by asking a the basic knowledge.

    • Proud Paulbot

      Maybe it’s just me, but I never minded interviews where I was tested on hard skills (provided I had the skills I was being tested on, of course).

      What I hate–absolutely despise–are ridiculous, mini-MMPI questions like, “If you were a fruit, which kind would you be?” I never found those questions funny or cute, perhaps because I DO realize they are asked by wannabe amateur shrinks who feel they can diagnose psych disorders based solely on answers to questions like that one. Freud turns in his grave…

      Give me a hard skills test any day.

      The only way I would see a hard skills test being inappropriate is if you are applying for a position for which those skills aren’t relevant, i.e., asking potential receptionists and file clerks to solve combinatorics problems.

  11. The vast majority of questions in this new quiz testing form of interviewing, are actually covered in the first year, if not the first course, in ALL Computer Science degrees. At that point you’re no longer testing the interviewee, you’re trying to determine if the university granting the degree should indeed accredited.

  12. Genuinely trying to help by adding ideas to a popular topic. Not sure why I’ve evoked a string of personal insults from you. You keep saying ‘wasted time’ and ‘LOL’ but what does that mean? Please elaborate on why you feel that way because out of your last 13 sentences, 12 of them begin and end in wild jabs. I’d much prefer to read your thoughts rather than your reactions on the subject.

    I read Gayle’s book from Amazon and study it with glee, because it’s a compact book of gems that will teach me interesting and helpful code tricks. But do I agree that a person’s worth these days is based on algorithms? Maybe, but not from what I read when I open job listings from Dice and Simplyhired or Cybercoders. They want SOA, and I believe them, because SOA is used in nearly every language and company. I’d be glad to take a basics test, if we will get to discussing SOA eventually (for instance). But if the test leads to more and more about the “language”, I’ll start to think that the role will be mostly about fixing spaghetti code or that the company has no organized system in place, which is a red flag to get out fast!

    Yeah, I do study the nuances of languages and am prepared to pass or fail based on those fundamentals, but I also want a future of job growth. Instead of getting shoveled around from one junior position to another, I want to show that I can be trusted with long and complex service buses and business workflows. For those with an intense love for software, maybe the basics just aren’t enough anymore. At the end of the day, “how can I get this HR person to notice all I have to offer” instead of focusing on skills that make me look not so special sitting on a bench with 20 other candidates.

    I’m not even against Google’s way of interviewing. I simply quoted someone who works there who wrote in a blog that they generally “aren’t allowed to give riddles in an interview”. Before that clarification, we all seemed to think that they tested interviewees with puzzles and unanswerable trivia. Any engineer worth their salt wouldn’t try to humiliate another like that, and instead, would lead to a conversation where deeper ideas are revealed relating to architecture, code philosophy, and elegant design. This is a culture where we stick together and create collective ‘best practices’ instead of dividing, competing, and impressing with college-level algorithms. That’s fine for an entry level person trying to break into the industry but the same truth hits most of us eventually: minimum is not enough. Real world software is frickin hard and keeps you away from your family and friends. If you think this is all there is to it, there will be stress to pay when you have a month to deliver a demo using a framework you didn’t know existed. I’m neither old or new to the game, but even I can see why some Senior roles have grayed hair. They need someone strong on the team that can do these algorithms, but they themselves hardly ever think of software as code, but more as logical architectures and best practice design patterns.

    You think I’m mediocre because I care about organization. I think you’re dangerous because you may leave behind code for others to fix and rewrite. Therein reveals our polarity.

  13. M.Kennedy

    After reading the article and comments I bought Gayles book and I definitely enjoyed the sections I and II , the Interview Process and Behind the Scenes:Miccoosoft, Yahoo!, Google, Face Book and Apple. Also your section on Startups, although short of very insightful. I’m targeting smaller company(s) and found your advise valuable. What I was dis-appointed was your “Getting the Right Experience” section, I don’t know how you were given assignments at Google, but the companies I worked for stuck you in a Silo and it was very hard to get out. For example at one of my jobs I was a Lotus Notes Developer and I was only given only Lotus Notes assignments. I tried to get move into a position where they were developing in C#. I was proficient in CC++ and Java, but the manager of that department would not let me transfer. When I was laid off it took me nearly a year to convince a company to hire me as a C# developer. Despite the fact that Lotus Script and C# are very similar. I picked up C# on my own and the agency I went through gave me a proficiency test and I scored high enough to get a three month C#/SQL contract and the rest is history. I

  14. Roman Shuba

    The video is misleading. In real life why would I reinvent a bicycle if I do not know the solution but am certain I am not the first one facing the problem?
    A few minutes of searchin give us 2 potential solutions:
    1) If you can reserve memory for another matrix, this simple formula solves the problem:
    a[i,j]->b[n-1-j,i] for a matrix n x n.
    2) For an in-place operation do matrix transpose (main diagonal mirror) and then horizontal mirror.

  15. I don’t think I’d be able to solve these kinds of problems quickly or well anymore. It’s been like 15 years. Even though I am extremely productive developer/architect, I’d probably bomb on something like this in an interview. Not all programmers are equal. Some of us are actually really good big-picture, abstract type of thinkers but are enormously week when it comes to algorithms and detail-oriented stuff. Tell me to write some brilliant class diagrams, and I can do that in my sleep, but ask me to do this, and I’d probably walk out.