The Google Resume (17 page)

Read The Google Resume Online

Authors: Gayle Laakmann McDowell

Tags: #Business & Economics, #Careers, #Job Hunting, #General

BOOK: The Google Resume
13.1Mb size Format: txt, pdf, ePub

You may notice how testing fits into design—this is to be expected. After all, testers need to analyze whether the object fits the design requirements.

Testing a Piece of Software

Now that we’ve gotten what many consider to be the hardest questions out of the way, testing a piece of software isn’t terribly hard. In fact, you approach it much the same way as a “real-world object” question.

Example:
Explain how you would test an e-mail client.

1. Ask questions to resolve ambiguity.
Not all e-mail clients are the same. Is it a corporate e-mail client? A personal e-mail client? Is it a web-based e-mail client, or desktop?

2. Who is the user?
A corporate user will have very different needs than a personal user, in terms of security, storage, maintenance, and so on.

3. What is the feature set?
Some features you can probably assume (check e-mail, send e-mail, etc.), but other features may take more of a conversation. Does the e-mail sit on a server? Is it encrypted?

4. Are there unexpected uses or stress cases?
In the case of an e-mail client, this might mean a flood of e-mail, huge attachments, and the like.

5. When there are failures, what can you do to fail gracefully?
If a file is too large to be handled by the e-mail client, you will want to make sure that it fails gracefully. That is, the client should at most reject the attachment, but should not permanently freeze.

6. What can be automated, and what must be manually tested?
Of course, there is an almost endless set of things that you can test—after all, they have full teams to do this. What’s important is that you focus on the biggest (or most interesting) items and discuss how you might test it. What can be automated, and what must be manually tested?

Test a Method

After writing code, you might be asked to test the code or perhaps just to generate the test cases. In your test cases, remember to consider the following:

Example:
Test a method that sorts an array.

1. As always, ask questions to resolve ambiguity.
Should the array be sorted in ascending or descending order? What are the expectations as far as time, memory usage, and the like? What data type is the array supposed to have?

2. What do you need to test for?
Make a list of everything that needs to be checked. In many cases, this might be just the result (e.g., is the array sorted?), but in other cases you might want to check for additional side effects (e.g., memory usage, other data being changed, etc.).

3. Write the expected cases.
This is the easy one: one of your test cases should simply be an unsorted array.

4. Write the extreme cases.
Check for null, empty arrays; huge arrays; already sorted arrays; and so on.

Example Problems

1. Design an algorithm to figure out if someone has won in a game of tic-tac-toe.

2. Given an image represented by an NxN matrix, where each pixel in the image is 4 bytes, write a method to rotate the image by 90 degrees. Can you do this in place?

3. You have two numbers represented by a linked list, where each node contains a single digit. The digits are stored in reverse order, such that the 1’s digit is at the head of the list. Write a function that adds the two numbers and returns the sum as a linked list.

Input: (3 -> 1 -> 5) 1 (5 -> 9 -> 2)

Output: 8 -> 0 -> 8

4. You are given an array of integers (both positive and negative). Find the continuous sequence with the largest sum. Return only the sum.

Input: {2, -8, 3, -2, 4, -10}

Output: 5. (i.e., {3, 2, 4}).

5. Implement a MyQueue class, which implements a queue using two stacks.

6. Write an algorithm to find the “next” node (i.e., in-order successor) of a given node in a binary search tree where each node has a link to its parent.

7. Design the OOD for a deck of cards. Explain how you would implement a Shuffle() method.

8. Describe an algorithm to find the largest one million numbers in one billion numbers. Assume that the computer memory can hold all one billion numbers.

9. Given two words of equal length that are in a dictionary, write a method to transform one word into another word by changing only one letter at a time. The new word you get in each step must be in the dictionary.

Input: DAMP, LIKE

Output: DAMP -> LAMP -> LIME -> LIKE

10. Given an NxN matrix of positive and negative integers, write code to find the submatrix with the largest possible sum.

Your Questions Answered

Too Much Prep, Too Little Time

Dear Gayle,

I’ve been working for a few years as a software programmer at a consulting company, but my work is boring and mostly code maintenance. The little code I write is in C—there is no object-oriented programming. I don’t feel like I’m learning much, and I’m definitely not moving up.

My dream is to work for a big company like Microsoft. I feel that I would need months to prepare for these interviews. Should I quit now so that I can focus on preparing?

~R. H.

Dear R. H.,

I’ll be honest—I’m not crazy about the idea of quitting just to do interview prep. First, Microsoft and companies like it hire fewer than 5 percent of applicants. Even with a lot of prep, your chances are slim. Second, you’ll need to give interviewers an explanation for why you quit, and “to prepare for you” is not a good reason. (It’s kind of like telling a woman on the first date that you spent all week preparing for the night. Kind of overkill, don’t you think?) Third, the value of intensive, long-term preparation really depends on what your weaknesses are. All you’ve mentioned is a lack of knowledge about objected-oriented programming, and you probably don’t need three months to learn that.

I’d recommend quitting only if you can answer “Yes” to the following questions: (1) you know you can find a job just as good as your current one without any prep; (2) you can’t prepare simultaneously with working; (3) it’ll take you a long time to prepare.

If you’ve decided to quit, I’d recommend doing something a bit more tangible with your time. Rather than focusing just on acing the interview, spend your time creating what could be a company. Build a piece of software or a web site, and use this as your primary tool to learn what you need to know (object-oriented programming, etc.).

The benefit of this is that when employers ask you what you’ve been doing since you quit, you can tell them that you wanted to try to start a company, but you realized it wasn’t for you (you discovered that you prefer working with larger teams, etc.). And you’ll have something tangible to list on your résumé that’ll show experience and mask any gaps.

~Gayle

Know It All

Dear Gayle,

In preparation for my Google interview, I’ve gone through the coursework for all my prior computer science courses. I’ve spent the most time on algorithms, and specifically dynamic programming and tree balancing. I’m still not sure I’ll be able to complete a problem like this during an interview. Complex algorithm + lots of code = too much time.

How do successful candidates tackle these questions?

~K. T.

Dear K. T.,

Let’s take a step and put ourselves in the mind of our interviewers. They want to know if we’re smart and if we can code. Having specific knowledge is not important, unless it’s either (1) necessary for performing well on the job, or (2) so integral to a basic CS education that no respectable programmer could not know this information and still call themselves an engineer. Inserting an element in a tree falls into category 2. Trees are not actually used that often in industry, but they’re so fundamental, how could you
not
know them?

Tree balancing, however, does not. You should know that tree balancing exists, and you should know basically how it works (rotations when the sides get too uneven), but the little details are not that essential to know. Skip it.

Dynamic programming is usually just too complex for an interview. It does get asked, but it’s rare, and probably not a good use of your time for preparation. Besides, there isn’t that much to the concept. You just need to know that sometimes you can optimize an algorithm by caching the results.

Remember, also, that code in an interview is relatively short. You usually don’t write more than 20 lines. Between designing an algorithm, testing the code, and fixing mistakes, there just isn’t enough time to write much more than that.

So relax. Focus on preparing for normal range questions—the kinds that you can tackle in 45 minutes.

~Gayle

Misleading Information

Dear Gayle,

I interviewed with Microsoft and I was asked a tough question. I started to think of a brute force solution, and the interviewer said that brute force is fine. I began to write the code, and before I was even finished, the interviewer began to bombard me with questions. His questions then led me to a better solution. I also noticed later that I had some bugs and other mistakes in my code, but these seemed fairly minor.

I feel that he misled me in telling me that my initial solution was fine, and I ended up getting a reject as a result. Do I have any chance to put up an argument?

~D. W.

Dear D. W.,

There’s a lot going on in this question, so let me break this down.

1. Did your interviewer mislead you in telling you that brute force is fine (when it really wasn’t)?

It is possible you got a bad interviewer who didn’t direct you properly. Bad interviewers do exist, even at the best companies. I suspect that your interviewer was probably looking for whether or not you would notice and look for a more optimal solution, or if you would be satisfied with a “good enough” solution. Depending on how far along you were in your interview, the interviewer may also have been thinking, “OK, we don’t have much time, and I want to make sure I see this candidate’s code. Let me encourage him to just get on with it.”

2. Did this cause you to be rejected?

Again, very hard to say that this really caused the reject. First, typically about 75 percent of candidates are rejected at each stage, so it’s almost like you have to do things really, really right to not get rejected. Second, it’s unlikely to be any one issue that caused a reject. As you noted, you had some bugs and other mistakes. I’d guess that your interviewer’s thought was more like, “Hmm, I liked this guy, but his solution wasn’t very good, and he had some bugs in his code and a few other mistakes.”

3. Can you put up an argument?

No. In high school, did you ever try to argue a case to your principal that a teacher did something wrong? Did they ever side with you? Unless your teacher’s actions were egregious, your principal almost certainly sided with your teacher. This is much the same way. Whatever you say to your recruiter, he/she will almost certainly side with your interviewer. You’re more likely to spoil your decent reputation at the company, and it’s just not worth it.

That said, there are times when you should not stay silent about an interviewer’s behavior. If they say anything or do anything offensive, speak up! Or if your recruiter asks for your feedback, then you are welcome to share it.

I’m sorry things didn’t work out for you, but you’re not alone. Interviews are hard and, unfortunately, very random. Most of my coworkers at Google admitted that they didn’t think they’d pass the interviews the second time around. Luckily, most companies understand this and let you apply again in six months to a year.

~Gayle

Additional Resources

Please visit
www.careercup.com
for thousands of potential interview questions and answers.

Chapter 10
Getting into Gaming

I got off the elevator onto PopCap Games’ floor and was instantly hit by memories from my college years. Two engineers, clad in the shorts and jeans apparel that is typical of their role, played a giant version of the classic game Bejeweled. The screen stretched over half the length of their bodies and chimed loudly as they swiped jewels with their full hands. I steered clear. This game single-handedly accounted for my downfall on more than one homework assignment from college, and I refused to get sucked in again.

The super-sized screen, the multicolored walls, entire rooms dedicated to ping-pong—all typical of gaming companies. Even among technology firms, gaming companies stand out for their high-energy environment. They are the new “dot-coms,” and venture capitalists everywhere are crossing their fingers and hoping they don’t meet the same fate.

The Culture: Is It All Fun and Games?

Alessandra, from gaming recruiting firm VonChurch, suggests that the festive atmosphere is integral to the nature of the field. “Gaming means blending the creative with the techy. Technology firms are already young, fun-filled environments. When you mix in a highly creative workforce, this is what you get.”

Her colleague Katy Haddix concurs, but cautions that it’s a work hard/play hard atmosphere. “You are expected to be full-seat-in, working 10 to 12 hours per day, plus the weekends when necessary.”

Long hours are a necessity in the casual gaming world. Casual games fly from conception to release in a mere two months. Finishing a project before a deadline is always a race, and in this industry, there is always a deadline looming. The work can’t stop.

Moreover, your product is live 24 hours per day and often resides on another live and changing platform like Facebook. Things could break at any time; someone needs to be watching it.

In the console gaming world, release cycles are longer, which reduces the stress level, but the hours can still be intense. The entire gaming industry is fiercely competitive.

It is an industry for those truly passionate about games. If you aren’t prepared for long hours—complemented, of course, by happy hours and foosball tournaments—then this is not the field for you.

Job Positions: What Can You Do?

Game creation is performed by four core roles: developers, producers, artists, and designers. A handful of other positions, from marketing to quality assurance, assist the game creation, release, and postproduction responsibilities. In this section we will cover what background, skills, and traits you need to have for each of these roles.

Software Engineering

Software engineering hiring at gaming companies is similar to that of other technology companies. “Candidates should expect to be grilled just like they would at Microsoft or any other tech company. We’re just like them—we need people who are smart and can code,” notes PopCap producer Ben Ahroni.

Because gaming firms move so quickly, they often cannot afford to wait for candidates to get up to speed with their technologies. A candidate who is already well versed in the company’s pet language will fare much better in the recruiting process.

Audra Aulabaugh, a recruiter for Big Fish Games, adds that college students interested in gaming enroll in some related courses. “We do hire straight out of college, even without a gaming background, but a proven interest and background in gaming will help set you apart.”

Production

Producers fill much of the same role as program managers do in a tech company. They manage the full production of the game, including the prerelease schedule and the postrelease performance. In addition, Ben Ahroni tells me, “the producer must be a leader. When things get tough, you need to be there to raise team morale.”

BJ Bigley from Big Kind Games puts it a bit more bluntly. “Producers are socialites. You need to be able to keep everyone happy while getting results. You are the ultimate diplomat.”

Being able to write code is nice, but not strictly necessary. What’s more important is that you are analytical and quantitative, and that can come from anything from engineering to economics. After the release of the game, the producer must crunch the numbers to understand what’s working and what’s not. What is the download conversation rate? How many credits do people purchase for each increase in level, and how does this affect their lifetime usage rate?

Producers are most commonly recruited from these two positions:

  • Quality assurance (QA)/testing.
    Many producers start off in QA, and specifically in so-called “smoke testing.” These roles enable them to see the full gaming life cycle, which translates nicely to the production role. Producers may also come from automation testing, or even from core software development, but this tends to be rarer for the simple reason that coders tend to like to stay coders.
  • Consulting.
    Former consultants, particularly from top firms like McKinsey, Bain, and BCG, can make excellent producers. They may lack the gaming industry background, but they have acquired in their prior jobs another useful set of skills. Their jobs developed their analytical approach to problem solving, while also requiring them to interface with a diversity of people and react quickly to issues.

If your résumé lacks both of these positions but you dream of being a producer, don’t fret. “Other metric-and data-driven roles, such as online advertising, can also be a natural fit,” says Alessandra from VonChurch.

Art

Artists tend to come from traditional art backgrounds, sometimes directly hired from art institutes. Candidates should expect to supply a portfolio and are strongly encouraged to have this posted on their web site.

Hiring can be extremely subjective. It’s not always about who draws the best, but rather who draws the best for the team. Understanding what style of art your dream company uses may prove yourself. “If the team doesn’t like the way that you draw a dragon tail, even if it’s an amazing drawing, then you won’t get hired,” Jeff from VonChurch explained.

Artists who can write a bit of code are always in hot demand as well. The automation skills can come in handy for mock-ups and other tasks.

Designers

As the name suggests, designers create the concept, storyline, and rules of a game. The role can be broken down into a variety of subdisciplines, including world design, game writing, and level design. Once the core game components have been decided, some designers may double as engineers.

Designers are not necessarily expected to have an artistic background, but they are expected to be highly creative. Recruiters typically want people with some sort of development background, even if they won’t be a full-time coder. Many schools offer courses or programs in game design, from which companies recruit designers.

Other Roles

Though development, production, art, and design may handle game creation, a number of other key support roles exist. The following are some of the most popular:

  • Quality assurance.
    QA can be broken down into three types: functional testing, certification testing, and automation testing. While automation testers usually need a computer science degree from a four-year university, the other two testing positions may require only a two-year degree. Testers need to have a high attention to detail, and testers-to-be should find a way to highlight this on their résumé. (
    Note:
    This would be an extremely bad time to make a spelling or grammar mistake.) Testers should understand the different permutations of a sequence of steps and should understand which ones to focus on in developing test cases. An understanding of software can be handy here. QA tends to be faced with high turnover, as it’s a relatively easy way into a gaming firm but is a nice avenue to other roles.
  • Customer support.
    Requirements for a customer support agent tend to be less focused on academic or professional qualifications and more focused on one’s “inherent” skills. A college degree may not be necessary at many companies, but candidates should have excellent verbal and written communication skills and a high attention to detail. Fluency in multiple languages is also highly desirable. Audra Aulabaugh from Big Fish Games advises candidates to see customer service roles as a way into a company. “We don’t look for people to stay in this position forever. Come in, learn everything there is to know about our customer and our product, and then investigate other roles within the organization that are of long-term interest.” A customer support agent can move on to roles like QA, partner relationships, and associate producer.
  • Marketing.
    Marketing hires are divided across several disciplines requiring very different backgrounds.
    In-game marketers
    need to understand virality: how do games spread? What makes them popular? Successful candidates often have a quantitative background.
    Business development marketers
    build the partnerships that make games successful, and candidates often need an MBA to be considered for these positions. A background in mobile or online marketing is also useful.

Fresh Meat: Advice for College Candidates

A coworker of mine at Google had what one person described as the “Geek’s Throwback Jersey”: a Microsoft intern 1986 shirt. He wasn’t especially old—just experienced. Much, much more experienced than I.

Social gaming, thus, has a delightful benefit for a recent college candidate: no one will have a 1986 internship shirt. Or even 2000. The field was essentially unheard of before 2005. The comparative newness of the field means rapid growth and plenty of room for promotions.

With that said, here is some additional advice for college students who are eager to break into this fast-growing field.

Don’t Be Afraid of Entering Low

Customer support may not be the most glamorous use of your economics degree, but it’s a great way to break into a fast-growing company. Or an English major might consider entering as a copywriter, with hopes of transitioning later to a marketing role. Financially and professionally, the company can matter more than the position.

In fact, recent college graduates can do very well at a social gaming company. “New grads can be great in positions close to the user, since they’re much closer in age to the target market than more experienced employees,” Alessandra (VonChurch) explained.

Joining a gaming company at any level will offer insight into the industry and help you establish contacts in the field. Then, when you want to “move up” to a new role, you’ll have the credibility and relationships to do so.

Find Your Niche

While grads excited about gaming should join a company at any level they can get, they should try to develop a specialty as soon as possible. Jeff (VonChurch) reminds candidates that “they shouldn’t get stuck in a less than ideal position for too long. Use the low entry point to explore positions, find a position you want to transition to, and do it.”

Those who develop specialties will fare better in the long run as well. “It’s about self-branding,” Jeff says. “You build a name for yourself, and companies want to hire you for your specialty. It doesn’t mean that you can’t switch later, but people do tend to stay in their niche.”

Create a Portfolio Web Site

While almost everyone could benefit from a portfolio/web site, this is especially important for artists and developers. Your portfolio or web site should list your résumé and projects you’ve done (including screenshots). A good portfolio will get your foot in the door, even without company experience.

Your résumé should also provide a link to your portfolio web site, and you should expect companies to check it.

Get Out There

Finally, because many smaller shops lack full college recruiting operations, it’s especially important for such candidates to start building their name as soon as possible. Start networking. Join relevant Facebook and
Meetup.com
groups, and attend their sessions. Get an internship or take a part-time job. If you can’t find a job for whatever reason, spend some time on your own, hacking together games.

Reaching Out and Getting In

“The best way in is if you have a contact,” Jeff (VonChurch) says simply. While this is true of any technology company, it is especially true of smaller gaming companies. Software companies like Microsoft, Google, and Facebook can afford to scatter large masses of recruiters across the country to attend career fairs and meet candidates locally; the comparatively small casual gaming companies usually cannot. The three avenues below tend to be the most effective for establishing the personal connections that are critical to landing your job.

College and Professional Recruiting

Some larger companies may do some college recruiting, especially at the top universities. Even if you don’t attend one of these universities, you may be able to pop over to one for a career fair. Just because a company doesn’t recruit at your school doesn’t mean it’s unwilling to consider you; it may just mean that the company lacks the resources to recruit everywhere.

Alternatively, candidates with a bit of professional experience can consider working with a professional recruiting firm. As many gaming companies are small, this can be a great way to discover opportunities that may have otherwise escaped your notice.

Online Networks

LinkedIn’s discussion groups are always a great avenue for recruiting, but Facebook should not be overlooked either. After all, many, if not all, of the companies you’re recruiting for are
social
game companies. They quite literally live and die on Facebook. Becoming active in Facebook discussion groups about games or on a company’s own page is a good way to get noticed. Rather than just asking for a job, consider first proving your worth. Offering insight and feedback will put you a step in front of all the other candidates banging at the door.

Similarly, become active in game developers’ web sites and forums. If you are known as a person who helps others, you’ll be seen as smart, skilled,
and
the kind of teammate everyone wants. Recruiters scour these forums for great candidates.

Other books

Secret Santa by Kathleen Brooks
Alligator Bayou by Donna Jo Napoli
En alas de la seducción by Gloria V. Casañas
The Last Undercover by Bob Hamer
Pride Mates by Jennifer Ashley
Soulblade by Lindsay Buroker
The Geomancer's Compass by Melissa Hardy