Name:Ryu the Red Dragon

Tuesday, July 12, 2005

Someone else's ice cream

So you've just had a great meal. Good food, good wine, good conversation, and you're sitting there feeling so satisfied. Those tummy endorphins are flowing and you're feeling like life is so good. Then one of your dinner mates says, "hey, let's go get some ice cream," and even though you hadn't had the thought cross your mind, you suddenly realize that some ice cream would be a great cap to your great meal.

So you leave the restaurant of utter satisfaction and head to the ice cream place of your choice, and it's closed. What had been a one-off suggestion is now an obsession. You really want some ice cream, and now you can't have any, and even though you are really no different than you were half an hour ago, suddenly you've been denied someone else's suggestion, and it sucks. Your state of satisfaction has become a state of disappointment.

I bring this up as a metaphor for what's just happened to me.

A couple of weeks ago I was feeling so satisfied and really, wanting nothing. I had left my job with enough money that I wasn't going to have to work for the man anymore. Not that I wasn't going to have to work anymore, but that I had the flexibility to do what I want to do, which is to become a Code Samurai, a master of Macintosh programming.

But it was more than that. I had a plan. I knew where I was going, and I liked where I was going. I was going to finish school, then move back to Hawaii. In the meantime, I was going to have Wil mentor me in the ways of Code Bushido. Then Apple called, changed my plans, then left me where I am today: disappointed over ice cream I never even wanted.

When I was at WWDC, they had a student job fair. I wasn't really interested in finding a job, but there was free food and drink, and I figured it would be a good idea to go ahead and participate, if only to justify the pizza on my plate. I passed out a few résumés to companies I admired — Macromedia, Aspyr, Omni — but even I that I just took as an opportunity to tell them I thought they did good work.

Of course, Apple also had a table there. It was so pimp, because instead of a sign saying "Apple Computer," analogous to the other company's signs, Apple just had the Apple logo. Everyone knew who they were, of course. I got in line, and gave them a résumé, and to my surprise, they gave me a little mini-interview on the spot.

One thing about me: I always feel like I know where I blew it. In this case, it was when they asked me about PHP and I talked at great length about Apache. I did this because I had had another interview, years before, where they asked if I knew LAMP, and I told them I had never heard of it. I didn't realize they meant Linux-Apache-MySQL-PHP, which I know like the back of my hand, and I felt really stupid when I didn't get the job.

So, in effect, I was answering the question I had failed to answer, which was a bad idea, and which, I figured, cost me whatever chance I had of working at Apple in the next couple of months. It was OK though, because I still had the Hawaii plan, and a couple of days later I met Wil, which made the idea of packing up and moving to California all the more unattractive.

To my utter shock and amazement, Apple called me a couple of weeks later and gave me a phone interview for a job as an integration engineer. This is basically someone who tests new versions of OS X against third-party applications, debugs regressions, and lets those responsible know what needs to be fixed to ensure the next update doesn't break everyone's apps.

It's a weird job that requires a lot of different skills, many of which I have, and the ability to communicate effectively, which I like to think I do. It was a job that would tap the fact I have a very broad-based knowledge of computers, and a lot of experience outside the comfortable environment of programming Cocoa. Of course, after the one hour phone conversation, I knew where I blew it.

I talked about this in the last entry, but one of the problems with using a Mac is that you get out of the habit of filling your head with obscure knowledge and into the habit of simply looking things up. Thus, when he asked what was in a crash log, I told him I didn't know, because when I have cause to open one up, I get the information I need and move on. When he asked where preferences are stored, I actually drew a pressure-activated blank and told him I would just use spotlight, which would certainly work, but is hardly 1337.

I didn't really mind though, because I wasn't expecting them to call me, and I wasn't expecting them to phone screen me, and I wasn't expecting to get past the phone screen anyway. Like I stupidly told my interviewer, I'm like a guy who runs around the block every day — I'd like to run a marathon, but I don't really think of myself as being good enough. So that was that and I was still satisfied and perfectly happy doing my thing.

Then they called back. They actually liked talking to me and wanted to set up a conference call, sort of a round two. My phone screen was on Thursday, and this was Friday, and the recruiter told me that, while she didn't have a date picked out yet, she just wanted to let me know I made it so I wouldn't spend my weekend worrying about it. I was not only happy I had made it, but really into the way they did things. The last person who interviewed me — you know, Lampy? — never got back to me one way or the other, and I thought that was pretty uncool.

Then it got kind of weird. I went out with Wil on Monday, so I woke up late on Tuesday, and there was a message on my voicemail that I was supposed to have been interview that morning. I pretty much shit. It was OK though, because I had left my phone in the bathroom, and was actually sitting on the toilet when I heard the message. Then he said, "but some of the people are not here yet so we are going to have to reschedule" and I felt that bullet just whiz right by.

I always over think things, so you can imagine the hell of trying to figure out what to do next. Do I call back? Do I write to the guy and tell him the recruiter screwed up? Or do I write to the recruiter and say what the hell? In the end, I wrote to the recruiter and said I must have missed the e-mail and would she please let me know when the reschedule was. Over the next few days she said she was having a hard time getting everyone together because it seemed some of them were on vacation and other weird challenges.

When I was finally scheduled for a week ago, I had a realization. If the people I was supposed to be talking to were on vacation, that meant that this pentumvirate was not a standing committee, but rather, an ad hoc one. That suggested they were not interviewing a large group, but rather, just me. That suggested this five-way was less of an interview and more of a confirmation hearing. In other words, I was in, and all I had to do was not screw it up.

By the time it was 1 p.m. on Wednesday, two things had happened. One, I had more or less decided I was going to be moving to California and working for Apple. I started looking for apartments, looking at realtors, revising my time tables, that sort of thing. Two, my car, which I would drive to a place of good cell phone reception, heated up in the summer sun to about a million degrees.

The interview went sort of OK. I managed to get about halfway through most of their questions, which were largely technical in nature. I was especially proud of myself when I worked through, completely in real time, what it would take to implement a stack in C. It was a little tricky, because I had to think procedurally, and didn't have things like mutable arrays at my disposal. Of course, there was the one place where I really felt like I screwed up, but this one felt different.

The question was something like, "how does calling a function with arguments work?" They asked this question, and I told them I basically didn't know. Then they asked a bunch of other questions which, I didn't realize at the time, worked around it, then asked it again. I said a bunch of stupid things, including confusing the stack and the heap, and admitting I don't really know what registers are. It was an oven in my car and I was sweating so much my clothes were literally soaked through and my phone actually short-circuited.

The key concept I was missing is something from Computer Science 101, which I know really well, and which escaped me until the moment I hung up the phone and rolled down a window. That concept is this:

When you call a function, it gets pushed onto the stack in a new frame — with the notable exception of LISP's beloved tail-end recursion, which happens in the same frame. Any variables in the calling function are still in scope, and anything you pass as an argument, the new function has access to. If that function in turn calls functions, they are pushed. When a function returns, it is popped, with any return value entering scope in the new top function, and play continuing as such until the stack is empty and the main function exits, closing the program.

Well, I guess that was the final screw up, because I haven't heard from them, and I see that they've reposted the job to their openings page. So, here I sit, disappointed over someone else's ice cream.

0 Comments:

Post a Comment

<< Home