Tuesday, July 29, 2008

Only in San Francisco

If I wasn't working in the city...

... I wouldn't have run into enthusiastic Lyndon LaRouche supporters while trying to board Caltrain. Did you know that George Soros and the British are in cahoots to destroy America?

Thursday, July 17, 2008

Sam & Max Rock My World

My first love in gaming was adventure gaming.

I played a handful of other games prior to that. My first memory of a computer game was some space combat thing that I played against another person, losing horribly yet feeling utterly fascinated by it. Whenever our family would visit someone who had a computer, I would try and conduct what I thought were subtle investigations to determine whether (1) they had any games installed, and (2) I could play any of them, please? In this way I encountered a few other genres. These included an action game where you run a moon buggy along an alien surface, leaping over pits and rocks; the classic Where In The World Is Carmen Sandiego?; and a game based on Indiana Jones and the Temple of Doom, a game based on a movie that I still have never seen. And my elementary school was blessed with a computer lab full of Apple II computers that served up educational offerings that would serve in a pinch as games: Oregon Trail, Number Munchers, Lemonade Tycoon, and a few others.

But all of those games were transient, undependable things. I was at the complete mercy of others to supply me with opportunities to play. What I craved was something I could mooch off of more regularly. And, eventually, it came, in the form of my dad's work computer. Because I was at church so often - at least every Sunday and Wednesday, and occasionally on other days as well - I was able to grab some time in front of the computer while waiting to go home or if the adults around me were otherwise occupied.

I can still vividly remember the games on that computer. One was hangman, a fairly straightforward implementation with a the classic stick figure man. Far more fascinating to me, though, was a game called CASTLE. This game used graphics, but the graphics were composed entirely out of ASCII characters. The player is trapped inside a giant castle and needs to explore its various rooms, collecting items, uncovering secrets, battling monsters in a quest to escape.

It's hard to overstate how profound an impact this game had on my consciousness. It had the most primitive graphics you can imagine, and yet my eager mind filled them in with great detail. A § marked a snake, and I would feel my heart pound when I saw it slithering towards me. Your character was marked with a white smiley character, and onto him I projected my sense of heroism and bravery. This should not be confused with the black frowny character, also known as the daunting Ogre, one of the most fearsome foes you could face.

The game required a mixture of memory (recalling where the items were), reflexes (you attacked enemies by running into them, but had to be careful of how much damage you took), and problem-solving (determining how to use the various items you had collected). I kept playing this game in the little snatches of time allowed to me, getting further and further in, and yet it took years for me to beat the game. During this time it burrowed deeper and deeper into my consciousness. There would be nights that I would lie awake in bed, thinking through parts of the game and trying to figure them out... how should I escape the dungeon? Was I sure there wasn't anything more hidden in the garden? I have fallen in love with many games since then, but this is one of only a handful that I have actually had dreams about, and it proved immensely influential on me as both a gamer and a programmer.

I still remember the epiphany I had when, years after I started playing the game, I realized that there was an entire dimension to the game that I had not yet encountered: elements that were not visible on the screen. Out of pure boredom one day I began typing into the game, and found that if I typed "look", it would describe the room's contents to me. I could get even more specific and try to look at particular items within the room. In this manner, I finally found a key that was "hidden" in a desk, inside a room that I had visited scores of times previously. With this found, I broke outside of the rut I had been stuck in for so long and tore through the game, finally wrapping up the unsolvable puzzles and realizing the significance of previously baffling items. At long last I gained access to the magical elements necessary to open the castle's great gate, and triumphantly walk out, crowing my victory aloud.

Having beaten this game, I felt what would become a regular emotion for me when it comes to gaming, the mixture of elation and regret. I felt an undeniable surge of accomplishment - this feeling, I am convinced, will never make sense to my parents; why should one feel proud about a virtual achievement in an imaginary world? - that is matched with a sadness that the fun is over, the story finished. In the same way that I always wanted to continue the plot past the end of my favorite books, I wanted to learn what happened next in CASTLE. What do you see outside the castle walls? Are there more monsters out there? Does the castle guard a village, and if so, what kind of people live there? Do you know any of them?

I think that this sense of lingering need is a big part of what set me down the path of becoming a programmer, in the same way that my love of reading sparked a need to write. The game is over, but I can use my imagination to think of what comes next, and use my skills as a coder to, however crudely, make it come true.

As I've previously noted, another influential moment in my gaming/programming history was Great Adventures II, a floppy diskette with some purely text-based adventure games. These had even less in the way of graphics than CASTLE, but they had two advantages. First, I relied even more on my imagination to fill in the game, and so could create evocative worlds in conjunction with the white text on a black screen. Second, they were far easier to imitate, and so they spurred me on my investigations into QBASIC even as CASTLE remained an influential target that I didn't even hope to imitate.

Update: Wheee! I love the Internet! Turns out that Castle Adventure is available online. I haven't downloaded or played it yet, but will probably do so soon.

So those were some good times. I should note here that I was hardly living on the cutting edge of gaming; text adventures have been around since the 1970's, and there were far more powerful computers out there which supported games far more advanced than what I was playing on that wonderful old Epson. That said, while I enjoyed the world I was playing in, I knew that there were more out there.

I'm still a little fuzzy on how exactly I was first introduced to Sierra's graphical adventure games, but am certain that one of my earliest contacts came through a young boy I knew at church with the last name Weeks. I want to say his first name was Troy or Tony, but that has sadly been lost to time. Anyways, while Sierra had supported a variety of franchises that seems staggering in retrospect, I mainly knew them for a few: Hero's Quest (later Quest for Glory), Space Quest, and King's Quest. Of the three, the original Hero's Quest was the biggest for me.

This was a MASSIVE game. Unlike Great Adventures, where nearly a dozen different games fit on the same floppy, Hero's Quest came in a box with ten or twelve disks. If you didn't install it to your hard drive (and you might not; in those days, 3MB was a lot of space to clear up for a game), you would be swapping disks every minute or so.

Beyond the size of the game, it was gorgeous as well. Well, at least to my eyes. To a modern person's perception, it looks blocky and crude, but I saw a swirl of colors, exploding what was possible in an adventure game. Sneak past a darkened alley during night and be drawn in by a mysterious flashing light... wander through the lush green forest... spend a few minutes relaxing in Erana's Peace, not doing anything, merely enjoying the beauty and listening to the superb music by Mark Seibert. Much like CASTLE, this game blended some elements of RPG and adventure games. I didn't really know those terms at that time, though... all of gaming felt new to me, with limitless possibilities, and I just knew that I enjoyed it.

Fast forwarding slightly... Sierra remained the gold standard for me throughout elementary school. The games were expensive and the newest ones were out of reach; new games cost $50 (and remember, this was nearly 20 years ago), and my current computer was never capable of running the latest and greatest. Still, whenever I could beg or borrow one from a friend, it would become an obsession for the weeks it took to beat, and if I could, I'd continue to revisit and replay it. Sierra games were fiendishly difficult and punishing, often providing a ridiculous number of possible deaths. On the flip side, though, their inclusion of a scoring system added to replayability; perhaps you did beat the game, but if you only got 450 out of 500 points, you would be incented to try again and find the other parts you missed. And these things were chock full of hidden easter eggs and little jokes. During the golden years, the graphical images on the screen were matched with a textual interface for input, and the programmers could get very creative about what you could type in that box. In the same way that CASTLE taught me to look at everything and use my words, Sierra games were always rewarding the player who took the time to deeply explore the world and type to it.

Most people of my gaming generation agree that Sierra's gradual decline began when they switched from this text/graphic hybrid to an all-graphic interface. This switch began with King's Quest V, and was matched with Quest for Glory III, Space Quest IV, and so on down the franchise line. Severing the traditional bond with classic text adventure games, Sierra now asked players to interact with the world using only their mouse. Early versions had you choose between a selection of iconic verbs (Open, Talk, Take, etc.; Space Quest added whimsical and useless verbs like Lick and Smell); later games would be even more "dumbed down" and use only a single click to perform any action.

For old-school adventure gamers like me, the implications of this switch were dire. The games had become less challenging. They presented us with a discrete set of obvious actions to choose between rather than requiring us to conceive of possible actions. The opportunity for easter eggs dropped way down. (Although I never tried this, persistent rumors insisted that if you typed swear words into the text box, the game would swear back at you. No such system was possible without the keyboard.) Increasingly, these games became more like interactive Hollywood experiences than "real" games... players could advance through a more or less linear plot, appreciating what the creators had laid out for them, but not really participating in the sense that I had grown familiar with. Your role became that of a consumer, plucking morsels off a proffered plate, not that of an adventurer blazing your own path forward.

Meanwhile, in a seemingly parallel universe, were the Lucasfilm games. I was only tangentially aware of these games, primarily through Maniac Mansion, which I only knew via its NES version and so didn't really consider it as a counterpart to the PC adventure games I'd played. I would gradually come to learn more about this company and the different swing they had on gaming.

Lucasfilm was a little late to the party. It's hard to conceive of someone being much earlier than Sierra, which, as I would learn by reading Part 3 of Hackers, more or less coincided with the rise of the IBM Personal Computer. Lucasfilm's interactive games division sprang up later and quickly blazed their own path, unhampered by the legacy of text adventure games and fully embracing the graphical medium. Their signature series, following the gems of the late 1980's, was the Monkey Island series.

From the beginning, these games embraced the non-typing ethos that Sierra moved to. Even if you didn't play with a mouse, you still played the game by moving a cursor around the screen and selecting what to do. This typically required selecting one of a selection of typed verbs, covering the adventure game classics like "Look At", "Take", "Turn On", etc. You would then click on the item on the screen you wanted to interact with, and possibly repeat the process until your intent had been fully expressed ("Use the chainsaw on Chuck the Plant.")

There were tonal differences with Sierra as well. All of the Lucasfilm games (later LucasArts) were funny. Sierra games always had an element of humor, but the overall tone varied wildly based on the franchise. Space Quest games were outright silly and often laugh-out-loud funny; Police Quest could get quite dark and morbid; King's Quest would have occasional lighthearted moments and sometimes jokes. Virtually every Lucasfilm game, in contrast, was a comedy... oh, they had different genres and styles, but each was clearly designed to entertain you.

And therein lies the crux: what is the goal of playing a game, after all? As I grew older and my circle of experience widened, I increasingly met friends who loved Lucasfilm games and couldn't stand Sierra games. Weirdly enough, their reasons were the same as mine. It was impossibly to die or get stuck in most Lucasfilm games. Lucasfilm games were silly. Sierra games didn't have as many hints about what you needed to do.

So what was going on here? The most obvious explanation, and one that I cannot immediately discount, is that my love of Sierra games was a certain expression of masochism. On some level I enjoyed the frustration of NOT solving puzzles, of getting stuck, of losing and dying. All of these trials were quickly forgiven and even turned into virtues once I had beaten a game, because then they added to my (arguably misplaced) sense of pride. "Sure, you may have beaten Monkey Island, but I beat a game that was way harder! I died over a dozen times!"

Is this a valid attitude to take? I'm honestly not sure. I will say that I now am less confident that "harder" necessarily means "more challenging". When I go back and play those old Sierra games, I am sometimes struck by how nonsensical some of the challenges are. If you need to solve a riddle in Conquests of Camelot, then I feel like I had to stretch my mind and think, and in that sense the trial is its own reward. On the other hand, too many early text adventures rely on the puzzle of "think of the exact word that I, the programmer, am thinking of or I will not accept your command; and no, synonyms are not allowed"; too many later graphical games force you into a maddening game of "find the hidden pixel", where unless you click on the EXACT CORRECT SPOT - a spot that might not look any more significant than anything else on the screen - you cannot solve the puzzle. In my opinion, "puzzles" such as these exist only to artificially increase the game's difficulty and increase the average playthrough time without actually making it more challenging or interesting.

I do have to say that, by this new yardstick, Lucasfilm games age extremely well. Some of the best gaming I've had of the last few years has been from old gems like Zak McKracken and the Alien Mindbenders and the transcendent Grim Fandango. I've had to admit that my earlier biases were, well, not that great. While Sierra was incredibly influential on me as I played them, I find that today I far prefer Lucasarts games.

Which brings us to the topic of this post: Sam & Max.

I never played the original Sam & Max Hit the Road, but as with the best computer games, it has become part of our collective unconscious, and I feel like I know these characters and what makes them tick. The premise seemed simple and lovely: a psychotic rabbit and cheerful dog are private detectives who have zany adventures. What's not to love? Add a monkey and it would be perfect.

I was recently kicking around on Steam looking for something to play. Tangent: Steam is consistently about 90% of what I want it to be, but just far enough off the mark to keep me from actually using it. Most recently, I was prepared to buy one of two games, but could not justify purchasing either since each cost $10 more on Steam than they would on Amazon. (In case you're curious: The Orange Box and Bioshock.) Buying from Amazon would give me real CDs and a manual and not require me to check in with the mothership every time I feel like playing a game. I would sacrifice all these for the convenience of having a game right now, but I won't also pay another ten bucks for the privilege. It's especially annoying since I know that the distribution via Steam costs much less than through conventional channels; there are no factories needed to punch out physical materials, warehouses to hold boxes, clerks to stock shelves, or salesmen to run the register. Sending bytes is cheap, and they don't seem to be passing that on to the consumer.

But not to worry, because there are still gems to be had in Steam, the biggest of which is Sam & Max 104: Abe Lincoln Must Die! Available for free, it has provided me with some of the funniest gameplay I've ever come across in my life, and has good puzzles as well.

Backing up a bit: Sam & Max was resurrected outside the Lucasarts stable by Telltale Games to serve a relatively new and growing business model: episodic content. The idea here is to move users from one-time purchasers into a reliable and recurring revenue stream. In the past it has been used for things like expansion packs that allow a game's fans to extend their experience with the game. In Sam & Max, though, each "episode" is a complete stand-alone game. They're smaller in length than you would expect from a full-priced retail game, but each has a high level of professional polish. This model seems like it may be the best hope for adventure gaming. People don't really want to drop a lot of cash on a big game that they may end up hating; it seems more likely that they'll be willing to do an impulse buy for some entertainment that will last a few days or a week.

As far as I can tell the free episode of Sam & Max is comparable to the paid versions; at least, online reviews place it within the same general ballpark of quality. And after spending several hours going through it, I'm tempted to grab one of the other episodes the next time I feel a similar hankering for good, funny adventuring.

Let's kick off the pseudo-review proper with some


I feel like this game was custom-designed to appeal to me. It includes:
  • Satirical political humor.
  • Paranoid ravings.
  • A psychotically violent wisecracking sidekick.
The first item may only apply to this particular episode, but the others are so well done that I can feel reasonably confident that I would enjoy other Sam & Max content nearly as well.

Let's start with the controls. The game is fully in the mainstream of current adventure gaming, with a simple mouse-based interface. The cursor easily identifies which items in the world are valid for interaction, and will take a single action when you click on them. Inventory management is very simple: you can select one item from your trenchcoat and then try placing it within the world. When you enter conversations, you can select which statement or question to utter. The interface is complete, well-designed and attractive.

One touch I really like: you start the game with a "big gun" in your inventory. You can whip it out at any time and start shooting things in the world. As I suspected early on, it is totally useless for solving puzzles, but it feels incredibly therapeutic. When you get stuck and frustrated, there's a lot of satisfaction in spraying lead at everything in sight.

Violence is actually a really interesting thing to consider when thinking about this game. Looking back over it, it feels incredibly violent. Pretty much every sentence out of Max's mouth involves some flavor of carnage; Sam cheerfully aids and abets this tendency; and the game ends in a glorious spray of property damage and annihilation. And yet, the game is only rated "T", and there is absolutely no blood to be seen anywhere. When you sit down and review your actions, you realize that (other than playing with the Big Gun), hardly anything you do in the game is violent. So it's really a case of the tone and sensibility being driven by violence without it being an integral part of the plot. Anyways, I just thought that was interesting.

It's practically a hallmark of Lucasarts games that a lot of intriguing items in the game will be purely useless red herrings. That tradition continues here. One of the first sights you see is a rat lounging in an inner tube, being observed by a periscope. Wow! What crazy, weird stuff! I bet that's really important! Nope. From start to finish, no necessary action in the game involves these things. And yet, they do serve a valuable purpose: they're funny, they give you more things to interact with, and broaden the world by populating it with more interesting characters, making your path less immediately obvious.

On the flip side, the inventory in this game is far less extensive than earlier games. Throughout the entire game there are fewer than ten items you can pick up, and I think each one of them (except for the big gun) is useful. This is a place where the game benefits from becoming pared down: item combinations lead to the most complex permutations in gameplay, since any item in your inventory could conceivably have an impact on any item in the environment. The limiting of focus helps diminish a player's tendency to desperately try randomly using inventory items when they don't know what else to do.


This game was just chock full of amazingly fun moments:
  • Decapitating the President of the United States.
  • Witnessing the gigantic animated Lincoln rampaging through downtown Washington, D. C.
  • Every single statement that Max makes during the presidential debates. My favorite is probably the joke he tells about the Pope.
  • Having a usable toilet in a game. Hey, I won't claim this is Ulysses, but still.
  • I will never forget the all-singing, all-dancing Secret Service calvacade of whimsy and nuclear annihilation.
Things I could have done without:
  • The governor characters. It seems like these may be recurring characters, and maybe I'd appreciate them more if I had the background, but as it was, they just came off as annoying.
  • .... it seems like there must be more, but I'm drawing a blank.
Insufficiently explored possibilities:
  • I love having the Big Gun, but next time, having it actually blow things up would be awesome.
  • Bosco's shop is filled with awesome stuff that you can't use. I hope that other games make more use of the stuff in there.
  • On a similar note, Sam & Max's office is a lot of fun. Still, part of the charm is the fact that there isn't a point to it. It would be a bit of a shame to learn WHY there is a bound and gagged man hidden inside their closet.
  • The war room is totally worth it once you finally get in, but still... there are so many other things I would love to have destroyed!
So: Awesome game! I highly recommend it to all. If you loved adventure games in the past but have fallen out in recent years, give it a whirl. If you've never tried one before, this is one of the best: a funny, interesting game that makes you think without frustrating you. I can't claim that everyone will appreciate its warped and deranged sense of humor, but I think readers of this blog are more likely than the average population to enjoy it. Bon apetit!

So I went ahead and downloaded Castle. What a great trip down memory lane! At the same time, it's pretty amazing how much your memory can drift over fifteen years. A few corrections to what I wrote above are in order:
  • Your character is represented by the "clubs" (i.e., the card suit) character, not the smiley face.
  • The smiley face is used by - wait for it - the ANGRY DEMON monster. Wow, I feel bad for having played this game in a church.
I doubt this game will mean nearly as much to someone who didn't play it in their childhood. If you want to give it a whirl, though, the key is to play it using DOSBox, a really good free program that lets you play classic DOS games on modern machines and operating systems. You can also google for Castle Adventure to find several options to play the game online or download a modernized update, although I haven't tried any of these. Setting up DOSBox takes a little bit of effort, but is well worth it if you think you might want to dive into retro gaming. When you start the game, press CTRL+F11 to decrease the game speed (labeled as "Cpu Cycles" in the current version in the title bar). Going down to about 800 cycles seems to be the optimal point for this game. You can actually make it easier by slowing it down even more since the monsters won't be as quick.

Friday, July 11, 2008

Let's Resume

Please be prepared for one or two work-related posts. Don't worry, we'll swiftly return to the more pointless direction of this blog.

Several years ago I started interviewing candidates for various engineering positions. This has been a fascinating experience for me. After you sit on the other side of the table, you gain a much deeper appreciation of how hard it is to find good workers, and also learn a lot about the wide variety of skills and personalities that are out there.

I have to admit that at first I was a horrible interviewer. To start off with, I was nervous, even more nervous than when interviewing for a job. (Don't ask me why. It's a very irrational reaction - when I'm conducting an interview, I have all the power and nothing to lose, but when I'm an interviewee, there's a lot more on the line. It probably has to do with my general discomfort with occupying a position of authority.) The more interesting problem, though, was that I was unprepared for the need to exert control over the interview.

I had previously been in many different interviews throughout my life, from my first application to Frank's Family Foods up through the whirlwind Week Of Too Many Flights And Interviews just before arriving at my current position. These were with many different types of companies, but all had one thing in common: I was the person being interviewed. Because of my personality and my sense of etiquette, I approached all these interviews like a friendly oral exam. I would wait patiently for my interviewer to ask a question, formulate a response, communicate it, make sure they were satisfied with my answer, and then wait for the next question. At the end, if prompted, I would ask questions of my own.

This process seemed completely natural and right to me, so before I started interviewing others, it didn't occur to me that some candidates might have a different idea of their role in an interview. As a result, when I started my first interview, I completely lost control. I had diligently prepared my list of questions, carefully calibrated to evaluate the candidate along a set of criteria, and started with an icebreaker about his ride to the office.

That was pretty much it.

He just kept talking, and talking, and talking. I'd nod and say, "Yes," or "Mmm-hmm." If he asked me a question, I would respond. I kept waiting for him to finish so I could start with the next question, but seconds stretched into minute, and soon I realized that I had lost him. At the same time, though, I have this really powerful inhibition against interrupting people, so it was very difficult for me to cut him off. I finally did so, way too late, and asked a real engineering question, only to have the experience repeat itself. I think I only got through a handful of questions.

After personally debriefing my performance, I came to understand what had happened. What this person was doing wasn't wrong or bad, just different. While it didn't fit well into my style of interview, it did allow this person to demonstrate aptitude, to direct the conversation towards the areas that most highlighted their skills and abilities, and demonstrated their ability at communication. From an unemotional perspective, it's interesting to think of the trade-offs that this style takes. The downside is that you don't learn what the interviewer is looking for, so you risk wasting valuable time on items that won't help your case and may work against you. On the positive side, it may allow you to mask certain deficiencies and focus the interviewer's attention on your most positive aspects.

So that was interesting to think about, for the next time I interviewed. In the meantime, I had a job to do. As an interviewer, my responsibility is to evaluate a candidate's technical and personal skills, and present my employer with a recommendation (whether to hire, where they would fit, and at what level). Those early interviews kept me from being able to make strong recommendations one way or another, since I wasn't drawing out enough information on the most important areas.

Fortunately, as with most things in life, the longer I did it the better I became. I've become more comfortable responding to a variety of situations, such as really quiet candidates, ones who can't write code, or ones who have been programming for longer than I've been alive. I also have become more comfortable in my role, which has led me to be more assertive, which ultimately is better both for me and the candidate. Now, I typically greet the interviewee, introduce myself, and give a brief overview of the process. It might be something like, "Hi, it's nice to meet you! My name is Chris King, and I'm a software engineer here. We have about 45 minutes for this interview. I'll start off asking you some questions about your previous experience, then some programming questions, and we'll write some code on the whiteboard. I'll leave a few minutes at the end to answer any questions you have for me. Are you ready to get started?" I like this because it lets the candidate know what to expect, it puts me in control of the process, and provides an excuse if I need to cut things off at any time.

I wanted to share a few thoughts about the interviewing process. Note that this is not at all meant to be a generally applicable sharing of wisdom, just codifying the very narrow slice of existence I occupy (mobile software engineer living in the San Francisco Bay Area).

First, Tips For Writing A Resume.
  • Most importantly, keep it short and focused. I should be able to read it in a few minutes and get a rough idea of what you've done, what you're capable of, and what you'd like to do.
  • That doesn't mean you should cut out experience that you think is relevant. But if you worked on five projects at one company, you can list them all on a single line, not patiently explain for each one that you helped with the design, coding, and debugging.
  • List your skills in a separate section. If you are stronger in some skills than others, either explicitly break them up (I like doing "Expert In", "Proficient At", and "Comfortable With"), or list them in order from greatest comfort to least.
  • Remember, the resume's purpose is to get you an interview. It should make me want to talk with you, not be a closed book.
  • Along these lines, you don't need to exhaustively explain everything you ever did at a company. Instead, pick the most interesting ones that you want to talk about and apply most to your current search. Make me want to learn more.
  • Feel free to put anything on your resume. I'm used to at least seeing work experience and education, but if you have other things you would like to communicate (articles you've written, things you're passionate about, future career goals, etc.), go ahead and include them. This also includes sample code projects that you'd like to share.
  • Edit your resume. I have been shocked at how often I see resumes with misspelling, poor grammar, or other basic technical problems. Remember, your resume is the first impression you'll make on me, and you want to make it a good one. Now, you can be a brilliant programmer and a poor writer; but, a new job is an important step, so take the extra time to show your resume to a friend or professional and clean it up. Granted, as an English Literature major I'm biased, but I automatically associate sloppy writing with sloppy thinking and a general lack of carefulness.
  • Formatting is less important. I won't think less of you for using an ugly font in the same way I'll think less of you for confusing its with it's. However, it can make a slight difference, so if you feel like punching it up, here would be my advice:
  1. Follow the standard resume format: Name at the top in big letters; then a Summary or Objectives section; then skills; then work experience; then education; then everything else.
  2. Use plenty of whitespace to clearly separate sections. Label sections with a large-font title.
  3. Use bullets where appropriate. Don't bullet a list of single words; this makes it look like you're padding. However, bullets can be perfect for listing project summaries or titles.
  4. List the years that you were at each job. This isn't a big deal, but I'll be more likely to ask about something you were doing in 2006 than something you were doing in 1996.
  5. Pick a readable font. Personally I like to use serifs for my text and sans-serifs for headers. In any case, you should generally avoid unusual fonts, italics, very small text, and wingdings.
  6. Notwithstanding the cardinal rule to keep it short and simple, don't fret about length. I used to be maniacal about making sure my resume fit on a single page, but haven't received a single-page resume from anyone in all the years I've been interviewing. If your resume is longer than a page or two, ask yourself, does it need to be? If you can trim it down, great! (Once again: the purpose of the resume is not to document everything you've ever done; it's to start and guide our conversation.) If it really needs to be that long, then don't cut out good stuff just to decrease the size; but keep in mind that I may end just reading the first page or two, so be sure the most impotant information is up front. (I usually try to read through a whole resume, no matter how long, but if I learn at 12:50 than I have an interview at 1:00, that just isn't happening.)
Finally, a big one to keep in mind: be prepared to talk about anything you put on the resume. Listing cool languages and technologies may have landed you the interview, but to get the job you will need to show you actually can use them. If you can't write Java, that's totally fine, you'll still get a job. If you list Java as one of your skills, and can't write a simple class or describe what an interface does, then you won't get the job. We can train technical skills, but we can't train honesty and candor.

Along the same lines, be sure that you've actually read your resume and understand it. If I ask you about a project on your resume, it looks really bad if you need to think for a minute about what, exactly, you did for it.

All that being said, I look to the resume to guide me about what questions to ask. I'm not trying to play "gotcha" or catch you off-guard. If I see that a candidate wrote C++ until 2005 and then Java since then, I will be giving coding questions in Java. I'll still expect you to demonstrate that you have worked with C++ in the past (e.g., you should know what a template is and what a destructor does), but it isn't fair for me to judge you in a language that may be rusty for you. If you declare yourself a C++ expert in your resume, then you're saying that it's fair for me to ask you expert-level questions.

One side note: When I interview a candidate, I usually get a Word document copy of their resume. At many large companies, though, they actually accept resumes as plain text files, or convert Word to plain text, to make it easier to search. If you are planning on submitting your resume to multiple companies, consider writing it up in Word first. Then, manually create your own .txt file using Notepad or a similar program. Bring over all the content, but structure it so it looks better in plain text. This will probably mean using more whitespace and CAPITAL LETTERS. By having this in your arsenal, you'll be able to handle submission in any form, whether it's to an individual person, into a web form, or through a jobs database system. Finally, you might want to consider saving a .PDF version as well. This doesn't seem to be as widely used as Word, but it is more portable, non-editable, and stable.

Anyways, that's that! I don't know how much more interviewing I'll be doing in the future, but people who follow the above steps should find themselves in a much better position. Assuming that they are looking for a mobile software engineering position in the San Francisco Bay Area. Good luck! (And, seriously, don't take this as gospel; I'm sure every interviewer has their own preferences and quirks, and what annoys me might be wonderful to someone else.)