Tags: , | Posted by Admin on 5/9/2008 12:39 PM | Comments (0)
Below is a short list of tips and thoughts regarding the Google interview process that might be helpful to anyone interested in interviewing with Google -- but (as LeVar Burton would say) you don't have to take my word for it -- I didn't get the job. Know Someone (Networking): Like I had mentioned, I believe the statistic was that 1 million resumes were sent to Google but only 5000 people were actually hired last year. From that perspective, that means if you apply to Google, you have a .5% chance of actually getting hired. If you know a Googler who can refer you, the recruiters will most likely consider you before they consider a random applicant. Going through a referral will get you noticed quickly. From the time I was referred to the time I was contacted by the recruiter was a matter of days. Dont let this be your first interview in a long time: I'm copying this word of advice from a current Google employee who wrote a blog entry about interviewing and I can definitely agree. He said do not interview with your dream job first. If you are a bit rusty, you may have trouble interviewing at your 'dream job'. I think that was one mistake I made. I think after interviewing with Google I became a bit more refined in how I handle myself, what my career goals are, how I talk. Interview with other companies, let your thoughts, opinions and skills really sink in and then have a go at your dream job. Hammer down on the fundamentals: The recruiter will probably tell you this, that at Google algorithms and data structures are the 'bread and butter'. The interview will most certainly center around problem solving using algorithms and data structures. Given certain conditions, ie memory, environment, language, etc, what would be the most efficient way to solve a problem. Know your basics and be prepare for the twist. Old text books and even the AP Computer Science book are actually a great resource because they do just that. The chapter teaches about the topic but the question section always puts a tweak and presents a unique problem. Paper and pencil coding: As I prepared for the interview, I tried to code out problems on paper and pencil to mimic the actual interview process. I soon realized how much I relied on the IDE to help me code. There are so many things the IDE does for the coder that I was just kind of mentally screening out such as certain syntax or structure. Do your best to code using paper and pencil because that's definitely what I experienced. Talk a lot: I don't mean be annoying and just babbling, but speak your mind as you grind down into an algorithm or a problem. This shows a thought process and gives clues to the interviewer about your skills and personality. I believe the interview is meant to be somewhat of an exchange between the interviewer and interviewee. By keeping open, intelligent dialog, I think I was able to get through my questions much easier and even get help from the interviewer. Be prepared for a long process: I can't say this for sure (since my interview process ended rather shortly) but from what I understand and what I was told, the process lasts more than a month. With the myriad of interviews and reviews, the length of time is no surprise. Fortunately it just gives the interviewee more time to study and sharpen up. The interview process isn't always an accurate representation of a person: After having gone through what I have, I've been able to at appreciate what Google is trying to do. They are trying to produce the most effective interviewing process laden with tough questions meant to bring in the best of candidates. It seems to work, but at the same time an interview may not best represent a candidate. I know of interviewees who are bright, capable, technically strong and interpersonally gifted who did not get the job, but this just shows the arbitrary nature of interviews, which brings me to my next point. A bad hire is worst then screening out a good candidate: Anyone who has ever worked knows just how much a bad hire sucks the life out of an organization. A phone screen is named as such to show that it is meant to 'screen' out people who aren't a good fit. This interview process is so rigorous that bad hires presumably do not make it through. Unfortunately at the same time, the rigorousness will screen out some great people, but the ones who make it through all have a strong chance at actually being great employees. Contract to hire is good: From what I understand, a lot of the new hires are being brought on as a contractor before being hired full time. This is a really good idea in keeping the integrity within the organization's engineers. The probational period is just another screen to make sure candidates really do meet the needs and requirements of the company. If you make it far through the interview process, this may happen to you. Have Fun: So I didn't get the job, I never got to experience the free world class dining, the trip to Mountain View, or the subsidized massages, but through it all I'd say it was a pretty wild yet short ride which I enjoyed. If you are a software engineer and you are applying to Google, there must be a part of you which is genuinely interested in challenges and problems. There must be a part of you that gets geeky over these kinds of things. Go into an interview and do your best to enjoy and have fun in the moment. If you get it then great. If you don't then hopefully you gained something from it and enjoyed the thrill whatever the outcome -- I did. Original story
Tags: , , | Posted by Admin on 10/14/2007 3:10 PM | Comments (2)
A couple years ago, there were some HR trolls or maybe some some resume bots that figured out that I went to MIT and that I was a software engineer from my blog (yes, this one). A recruiter from Google emailed me asking me whether I'd be interested in a position at Google. Um yes, isn't that every software developer's dream? That initial contact didn't amount to anything as there was no local office, but they called again recently when an office opened in Cambridge, MA. My initial phone interviews went great where I kibitzed with the HR recruiter. But they sniffed me out as a faker during the technical phone interview. It's not that I don't know how to program, but having no formal education (let's just say MIT's first programming class 6.001 made me swear never to be a SW engineer), I sometimes leave some of the nitty gritty technical details to magic. Since the software application I'm currently developing for work looks great and works beautifully, this is all I need! I have Google for the rest. I had heard many about many interesting recruiting techniques that Google uses to get the best and the brightest. One of them is the billboard for Solve the Equation, Get an Interview. Yup, way over my head too. Another is the Google Labs Aptitude Test which is a half-serious spoof with questions like "In your opinion, what is the most beautiful math equation ever derived?" Geek alert! Most of my technical interview went pretty well as we got along fabulously. The coding sample wasn't too bad, although I was not extremely creative with my answer (reverse the order of the elements of a array in place). Luckily, I dodged questions about pointers since I've only done C# in the last two years and feigned forgetfulness (nothing the feign there, it was never my strong suit). But then I got tougher questions like how would you design a smart pointer interface. Yikes! She seemed happy with my answer, although she corrected me in that the interface must track the number of instances (seems obvious after the fact). I was encouraged when she asked if I could go extra time beyond our allotted hour. The she asked how I would design an assertion class, to which I responded that I use exceptions and not assertions in .NET. I think that was the WRONG answer. I could hear the BZZT! buzzer going off in her head. Since we got along so well, near the end of the interview I confided in her that I have had really tough technical interviews in the past such as with SolidWorks, where they asked questions about vector geometry as well as programming. She responded that at Google, they need people able to solve those kinds problems as well. Oops (reminder to self, never be so chatty and self-deprecating during interviews in an attempt to be funny). Suddenly the interview was rushing to a close and I knew I had flunked. Needless to say, I received the email with "After carefully reviewing your experience and qualifications, we have determined that there is not a fit for a position," a few days later. I kicked myself for weeks afterwards on some of my answers during the interview. The one thing that I did get out of this experience was a glimpse into the life of a Google employee. I had been fascinated by their culture (and gourmet meals) ever since seeing the Time magazine photo essay Life in the Googleplex. My interviewer was a woman who has worked at the Google headquarters in Mountain View, CA for 18 months and previously worked at AOL in Virginia. She was a technical leader and seemed quite ambitious. She lived very close to the office and worked long hours although not everyone is expected to (obviously no kids). The group sizes at Google are small, around 2-3 people, and the reporting structure is very flat. They use Agile, Extreme, Scrum and/or Test-driven processes depending on the group's preference. They test their own programs against the Google framework, which is like NUnit, and release products whenever they are ready. It sounded like a really cool, flexible environment, but I'm not sure how this old fogey would stand up to all the young whipper snappers who can name the first 10 digit prime found in consecutive digits of e.
Tags: , , , , , , , | Posted by Admin on 8/14/2007 8:35 PM | Comments (2)
This a follow-up to my previous post about my interview process with Google. Once a post gets as long as that one did, I’m sure to forget to say some things. Rather than updating that post, I thought I had enough new to say to warrant a new post. First is the picture I got of their development process. There are plenty of other places on the Internet about their development process, so I won’t go into detail about what they told me–it pretty much matches up with the available information. It really sounds like they try to match the amount of process required to the specific project at hand. Projects with a huge public impact have lots of process (Google’s front page, indexing, etc.), while those that are newer and much lower impact (stuff in the Labs section, and even graduates of the Labs) have a much more flexible, agile process, designed to get improvements out the door very quickly. I like that–no mandatory bureaucracy where it doesn’t make sense. Aside from process, however, it seems that they are very intent on giving developers an environment designed to help them succeed. From what I understood, the company actively tries to remove stupid barriers to productivity (needless paperwork, poor IT, bad workstations) and give you whatever you need to do your job how you think best. Obviously, there are rules and standards, but it just sounded more flexible. It really sounded like an ideal development environment: Obstacles removed, needs granted. Now, how much of that is the official “show” they put on for all interviews, who knows, but Google is obviously doing something right. Bottom-line is that Google is a company of engineers for engineers. They’re the ones in charge of what the company does. That is a very nice place to be if you love coding. Also, I should mention that the Google Boston office is MUCH smaller than their Mountain View headquarters. The way things are done, while it will still be “Googly”, will most likely have a different feel and pace than at headquarters. I had read many reports on the web about how people worked late hours, on weekends, and basically sacrificed their lives for the company. I did NOT get that impression in Boston. They were definitely smart and very hard working, but it sounded more like the company was flexible and if you got your work done, who cares? (That’s the way things ought to be done for sufficiently self-motivated employees). I did ask about inordinate over-time (mistake on my part?) and work-life balance and I came away with a satisfactory impression. Whether this means Boston is special, or the accounts I read on the Internet were not representative, I don’t know. Probably a lot of the latter, for sure. I also wanted to address my final link in my last post. I know it can be a little disappointing to read that kind of post and realize it’s not talking about you, because you’re interviewing for jobs. I wouldn’t take it too literally. Maybe my link text is a little black and white. I think the principle is definitely valid, though. The better you are, the more freedom you have to choose where you work and what you work on and the less chance your going to fall into a company’s hiring process. It’s really more about statistics from a company’s point of view of finding the best, not necessarily for individuals. Hopefully, that’s all I have to say on the subject, but if you have questions, just leave them in the comments and I’ll try to answer them! Original story
Tags: , , , , , , , | Posted by Admin on 8/14/2007 9:06 AM | Comments (18)
A few months ago I received an e-mail from a recruiter at Google asking for an opportunity to talk to me about available development positions. Needless to say, I was pretty excited. I’m fairly happy in my current job, but–it’s GOOGLE. You don’t say no to an interview opportunity at Google. I’m writing this account in order to contribute to the meager resources available on the Internet about the Google interview experience. I signed an NDA, so I’m not going to say what the specific questions were, but I think I can give a pretty good idea of my experience. I apologize right now for the length. I traded a few e-mails with a recruiter in Mountain View. I had a phone conversation with him, wherein he asked me general questions about my skills, desired work locations (giving me a choice of Santa Monica, Mountain View, and Boston). I have no desire to live in California, so I chose Boston. I was then passed to another recruiter, who setup a phone interview with an engineer in Mountain View. There was a false start, when they couldn’t do the interview at the original time, so we postponed. The phone interview went very quickly. He was very nice and asked about my specific talents, things I enjoy doing, and projects I’d worked on–especially those I listed on my resume. He asked about the ray tracer I wrote in college, since he had an interest in that. He also asked some general questions about the stuff I do for work. Then he got into the technical question. It was an interesting problem, and I asked follow-up questions, talked out loud, wrote things down in front of me (and told him what I was writing and why). I immediately thought of the naive solution–always a good place to start. He was interested in the asymptotic complexity. I knew there were better ways of doing it, so I started thinking of optimizations to the algorithm, trying to come up with ways of caching information, reusing previously-computed values, etc. He gave me some gentle prodding, and I think I understood immediately where he was going. I answered the question fairly well, I though. And that was it–just a single question. I was surprised. The entire thing lasted less than 30 minutes. I was almost disappointed, and thought–”well, that’s that–I won’t hear back.” I really wasn’t expecting any follow-up. The next week, I got an e-mail from my recruiter who said I had impressed and was going to get the opportunity for an in-person interview in Boston! They hooked me up to a travel coordinator, as well as the recruiter in Boston. Very exciting. I had a convenient time to go, so I set that up, took time off from work and went up to Boston, staying in the Cambridge Marriott. Very nice hotel. 40″ flat screen TV in the room ( which I never turned on). All expenses paid for, of course. I did have to pay for hotel and food up front, and save the receipts. (And yes, I promptly received a reimbursement check from them a few weeks after I sent them in.) I arrived on Monday afternoon, figured out Logan International (a very confusing airport, I thought), and got myself to Cambridge, in the heart of MIT, an hour or so later. I checked in, then went walking. I found the building Google is in on the very next block from the hotel. They have a floor in a building that MIT leases to startups, tech incubators, and the like. There are plenty of news articles about the Google Boston office–just…you know, Google for them. I walked past the ultimate geek bookstore– Quantum Books. Discount tech books. COOL. I would definitely have to stop there later. Then I got some cheap, awful Chinese food at the food court right under the hotel. Why? When I could go out on Google’s dime? I think I was just tired and wanted to get back to the hotel soon and start studying. I ate dinner in the room, took pictures of the wonderful view of the Boston skyline. Studying What did I study? I brought two books with me: Robert Sedgewick’s Algorithms in C++, and a C++ reference manual. I went over advanced C++ topics, STL, simple sorting and searching algorithms, properties of graphs, big-O, and anything else that popped into my head. By far the most valuable thing I did was write out algorithms before-hand. I picked something and wrote it out by hand in a notebook. It was hard going at first, but I knew it was the best thing I could do to prepare. I did selection and insertion sort in both array and list form. I did string reversal, bit reversal, bit counting, and binary search. All by hand, without looking in a book at all. As well you might know those simple algorithms, it’s harder than it sounds. I went to bed relatively early–9:30, and woke up the next morning at about 6. I went to breakfast in the hotel restaurant, got a rather large meal, and then headed to my room to study more. I wrote more algorithms and redid some I had done the previous night. Oh, I also wrote down in my notebook (beginning on the plane ride up) questions for Google, as well as answers to questions they could ask me (standard interview fare–projects, favorite project, languages, strengths, passions, getting along with people). My interview was scheduled for 10 am–I checked out at 9:30 and left with my bag (I had everything in a single bag I could carry–it was very heavy) and sat in a little square for a few minutes. At about 9:50, I went in, took the elevator, and was greeted with ... google. The Google Dr. Seuss land! Yes, that was my first thought. I think the door was green, the reception area was very colorful. The receptionist was very nice and asked me to sign in on a computer, which printed a name badge for me. They had some research papers by Google employees on a wall, so I grabbed a couple (their hard drive failure study, and map/reduce). After a few minutes, my Boston recruiter came out and greeted me, offered me a drink from their free fridge, and took me to a small conference room, furnished, it appears, from Ikea. It was simple, clean, and very nice. There was a white board. I would get to know that whiteboard very well. My first interviewer came in and we got started. I talked about my projects for a bit, they answered my questions, and then we got to the problem. Each interviewer asked me to solve a single problem (could be some sub-problems involved), and I had to do it on paper or on the board. I wrote C/C++ code. They take note of what you write and ask you further questions, especially if your first solution isn’t optimal. I tried to take extra care with my code and not let stupid mistakes creep through. I used good variable/function names, made sure my braces matched, and I ran through the algorithm on the board once I had written it. The first interview was one of the toughest. I was more nervous. I think I made more mistakes–I didn’t see things as quickly as I did later. I had three interviews before lunch. They then handed me off to someone else who would not be evaluating me, but would just be an escort for lunch. The Google cafeterias in Mountain View are legendary, but the Boston office is far too small to warrant such lavishness. Instead, they have a catered lunch every day. It was wonderful. They also have all the free drinks and candy you could want, available all the time. I spent much of the time asking my escort questions about Google, what he was working on (couldn’t tell me), the area, the office, the commute. We were also joined by the head of the office, who didn’t realize I was an interviewee, and we had a nice conversation as well. Lunch was an hour, and then I was back in the conference room. I had two more interviews. Then the recruiter came back in at about 3:15 or so and debriefed me–asked me my impressions, how I felt. I reiterated what I had told him on the phone previously, and that morning before we started: that I was trying to take this as easy and nonchalantly as possible, to have fun, and learn, and let it be a good experience. I had a job that I enjoyed, and didn’t NEED this one, but I think I would do well there and enjoy it very much. They came to me, after all. I think by the end of the day, I was really pulling that off well. Once I got over my nervousness in the first interview, I really did have fun and enjoy it. General Notes They didn’t ask me any stupid questions. None of this “what’s your biggest weakness?” garbage. Not even the recruiter asked me anything like that. Nothing silly at all. They also didn’t ask me easy technical questions. They got right into the problems and the code. I had to describe an algorithm for something and write code for it. It was serious, they were all nice–I met people with serious reputations online. I felt like they were respecting me as a fellow programmer–almost. I wasn’t one of them, but they really wanted to see if I could become one of them. I did receive prompts to get through certain problems, but not overly so. I answered every question they asked. Some I answered better than others, but the ones I didn’t get right away, I had alternate solutions, and I understood where they were going as soon as they started talking about it. Why I didn’t get the job Well, companies these days won’t tell you why. I think they fear it opens them up to lawsuits. I think that’s silly. It prevents those of who really do want to learn and improve from knowing what we’re deficient in. Oh well. They told me that they thought I would do well at Google, but that it wasn’t a good fit at the time, and I should apply again in the future. (Of course, I didn’t apply in the first place.) My suspicions, however, are that I lean too much towards Microsoft technologies. I do a lot of work in .Net. That’s where more and more of my experience is. I do consider myself very good in C++, but I’m doing more and more C# work. I’ve always been a Microsoft Windows developer. I also am not really interested in web-centric technologies, and I told them so. I’m more interested in client apps on the desktop, and server apps. Of course, it’s very possible I just didn’t answer the questions to their satisfaction–that I needed more prompting than I should have. Oh well. It could also be that my GPA wasn’t what they wanted. I goofed off my freshman year of undergraduate work. I really hurt my grades. I came back, though, and got straight A’s for my last few years where I took the hard CS classes. I also got straight A’s in my Master’s program while I was working full time. I don’t think this was the issue, but it’s possible. Lessons Having your own web-site is a no-brainer. Do it. Update and maintain it. Do personal projects. You must be passionate, you must love programming. You must be good at it. Not average. You must aspire to excellence and be working towards that. Know what you’re talking about it. Don’t show off–just display your knowledge as it applies to what they asked you. Use an interview with them as a learning opportunity and ensure you have a good experience regardless of the outcome. Don’t take the interview too seriously. Make sure that not everything rides on the outcome. You must be comfortable, confident. You must try for success in every possible way, but yet be completely prepared to fail–and have that be ok. This is a hard balance to achieve, but I think it can really make you have a healthy outlook and have a good time while still showing your best self. If you don’t get an offer, realize that even being selected for an on-site interview by Google puts you above the ranks of the average-good programmers. Google gets 1,500 resumes a day. You’re already in the <> Practice writing code by hand in a notebook. This helped more than I can express. Do stuff that’s hard that you don’t know how to do immediately. Time yourself. Make the problem more challenging. If you can’t stretch yourself, they will and you’ll probably break. They did not ask me to do any of the specific questions I had practiced–but the experience writing out and the THINKING is what helped. Be able to explain your background (90% technical / 10% personal) in a few words. At some point you’ll be asked. Have a lot of questions for people. You’re interviewing them too. Make sure they’re good questions. Asking about salary is not a good question before you’ve been made an offer. I let the interview build my own self-confidence. I have no doubt that I could walk into an interview anywhere else and it would be laughably easy. Don’t ignore obvious, simple solutions. Sometimes a table lookup is better than an O(n) algorithm. Bring a good, FUN book for the plane ride back. On the way, I focused on the interview, but on the way home I wanted to do anything but, so I had my current novel (Dickens’ Bleak House–very good book, by the way). If you do all of those steps, it actually doesn’t really matter if you apply to Google or any other great/famous company–you’ll probably get the job you want for the pay you want anyway. Somebody, sooner or later, will come across you and give you the opportunity. Great programmers will rarely, if ever, need to look for jobs. I hope this long, rambling essay is helpful to some. I make no claim that my experience is typical or that I’m being completely objective. In other words, YMMV. Original story
Tags: , | Posted by Admin on 6/16/2005 1:05 AM | Comments (46)
Although I have not succeeded with the getting-hired-at-Google thing I have had my crack at it a few times and have survived to write about it. I occasionally hear from others about to try it, and they want to know if I have any advice. Here’s my modest wisdom on the subject of interviewing well at Google. Question: I have an interview for an ops position at Google tomorrow, and I found your web page about interviewing at Google, can you give me any advice? Answer: Really, just be at your best. Maybe brush up on some fundamentals the night before. They like to see that you know how things work at a low level, so like when they ask “tell me what happens when you type www.google.com into a web browser” and you get on to explaining that DNS operates via UDP, port 53, and so forth … Take it like you would an exam. Get some sleep the night before, and otherwise do whatever helps clear your head for good questions. The initial screens aren’t all that hard, really, if you’re good. I swear I screwed up my last phone interview because I had a cold, and wasn’t feeling so great, and that made me nervous … Also, don’t bother cheating. Google employees spend a lot of time interviewing people, and they know that when they hear “uhh …. *clickety clackety clickety clack* … the answer is … uhhh …” and you read something off a web page, that you are a no-hire. If you don’t know something, admit it. They may try to explain it to you, and if you can pick up an understanding pretty quickly, and use that to solve the next problem, then that shows you are honest, and a quick learner. At any rate, I wish you the best of luck. By all accounts, working at Google is pretty sweet. :) Original story