Archive for the ‘Workplace’ Category.

Language Marathon: First Impressions of Ruby, Python, and C#.

For the past two months, I've been learning three different programming languages simultaneously. I've been wanting to learn Python for a while, and I finally made some time to read Learning Python cover to cover on camping trips. I've also been thrown into the world of Ruby (as well as Rails) for work, since we are developing our next web application using that technology. Lastly, I've had to learn C# and .NET for school - the last class for my Master's degree.

I've wanted to learn all three of these technologies for a while, but I've never had the time. This has been a very exciting experience for me, and I wanted to share my first impressions of these languages.

C#: First Impressions

I've been working with C# less than the other languages, so I still have a great deal to learn. Overall, the experience has been pretty positive. The language is almost exactly like Java. Java stole it's syntax from C for the most part (for developer familiarity), but C# is sort of a syntactic hybrid between Java and C++ (more towards the Java side). Overall, I like it.

I used to use C++ in high school and C in college. I never really liked C++ - I felt like the language hacked object orientation onto a fully procedural language, and it really showed. The language never seemed well designed to me, and it kind of had a "worst of both worlds" feel to it. C# seems like a natural progression in the C family - something even higher level than C++, without the procedural vestiges of C.

When I was a Windows user, I did most of my Windows application development in Visual Basic. Generally if I needed a Windows program, this was the easiest route to take - the form designer let me focus on the look and feel of the application, which was generally important (otherwise I'd be writing it as a console application in a different language entirely). I dabbled in the MFC a bit, but I generally found that writing Windows applications in C++ reminded me of all the things I hated about C++, and made me hate them even more. Visual Basic, for all of it's faults, gave me access to the same Win32 API, without the need to jump through so many of MFC's many hoops.

C# and .NET are a substantial improvement over this type of development. The easy-to-work-with GUI designer from Visual Basic is preserved, but the code now makes more sense, and uses a far less offensive language than either Basic or C++. I really liked the fact that when I changed properties of my GUI elements, rather than those being saved magically as they were in Visual Basic (last time I used it, anyway), the IDE simply changed the appropriate lines in the constructor for my form class. Partial classes are a very neat feature as well - allowing me to define a single class in separate files allows me to separate the event processing GUI code in a class from the look and feel GUI code in the same class.

C# makes me almost regret abandoning Windows a while back - if I were still using Windows, C# would become my development language of choice for native GUI applications. My fiancee and I both have windows on our phone, so I may start to look into developing mobile applications.

All in all, C# is a lot like Java - if I wanted to write a native Windows GUI application using Java syntax, C# would be the way to go.

Ruby: First Impressions

Ruby fanbois like to mention that Ruby has been around for over 10 years, but doing so denies reality. The truth is Ruby had a tiny section of fans (but nothing approaching widespread adoption), but didn't really hit the scene until 2004, when it became the driving force behind Ruby on Rails. As such, I can't mention much about Ruby without mentioning Rails.

Ruby, to be honest, does not impress me. Generally, I'm not a fan of languages that let you do the same thing in multiple ways. It allows personal style to influence code far too much. As a simple example, I like writing my loops out explicitly, so I use a for statement with a collection. A co-worker prefers to use the .each method on a collection, passing in a code closure. There isn't anything 'wrong' with either one of these approaches, but each of us dislike the way the other writes loops. This means that our shared codebase has inconsistent looping mechanisms all over it, making it less readable and less elegant. This is obviously not a fault of Ruby, but a fault of my co-worker and myself, since we could just flip a coin or something and commit to a certain way, but my point is that this situation is common in languages that allow multiple ways to do the same thing.

Ruby simply seems like a crappy language to me. Scripting languages don't get run through compilers, which means that everything which would be a compiler error in a language like Java or C++ becomes a runtime error when the application is actually running. The way a lot of scripting languages handle this is by being more tolerant - more situations that would lead to a compile error are tolerated by the interpreter, and handled as elegantly as possible, sometimes without even moving into an error state. Ruby doesn't seem very tolerant to me, but since it's not compiled, I see a lot of errors (which, in my experience, tend to be pretty poor) at runtime.

Rails, however, is excellent. Whenever I work with RoR, I can't help but be a bit disappointed that somethings as good as Rails is built on top of something like Ruby. Normally I'm not a big fan of convention over configuration, since the list of "conventions" can tend to grow so quickly that it's difficult for someone to learn all of the rules. However, having done Java web development for a long time, I definitely find convention over configuration tempting - Java web development suffers from configuration poisoning. I put my preconceptions aside when I started working with Rails, and though some of the magic it does makes my skin crawl sometimes, I definitely like it.

It didn't take my company very long to get past the RoR learning curve and start being productive - and I definitely have experienced how much easier and faster it is to make changes and improvements to the web application in RoR. We've been consistently overestimating our stories, since we're trying to estimate based on how long changes would take in Java. For the past three iterations, we've finished early and had to pull stories in from the next iteration since we were able to enhance the product so quickly. I have no doubt that RoR is the reason for this productivity gain. This is particularly impressive, since the Ruby and Rails documentation efforts are both godawful.

Most of what Rails does isn't new or original, though. I feel like the biggest advantage of Rails is simply how forceful it is about the MVC pattern - making filenames and actions line up is all that is needed to separate the view from the controller, which simply takes a lot of boilerplate code off my back. The templating and tag definitions are simply very good implementations of very old ideas. The ORM library actually kind of sucks. All in all, Rails is just a convenient packaging of ideas that can (and do) exist on other platforms. I think that 90% of what I actually care about in Rails could be written into a framework for nearly any other language, even Java.

Overall, RoR has ruined me a bit on Java web development. I finally understand why people who work with RoR dislike going back to Java for web development. I used to like Java web development, but there's a small part of me that would dread returning to it as well. Ruby on Rails really is a fantastic web application development platform.

Python: First Impressions

When I started using Linux early this year, the hardest adjustment for me was that I had lost the ability to write native GUI applications for my operating system. Like I said earlier, I used to throw together GUI apps using Visual Basic in Windows, but no such thing existed in Linux.

The deeper I got into the world of Linux, the more I noticed how often applications were written in Python. Python is extremely popular in the world of Linux. I would say that about half of the GUI apps I run regularly in Ubuntu are written in Python, or at least have Python components.

A friend in college was a big fan of Python, so I decided I would learn Python and it would become my application language of choice in Linux.

Python blew my fucking mind

Python is, quite simply, amazing. I've worked with a lot of programming languages, and I don't think I've ever come across one that is designed as elegantly and perfectly as Python.

There are hardly any exceptions to the language rules in Python - everything is incredibly consistent. As I was reading my Python book, I would often have questions along the lines of "How would Python handle this...", and I got to the point where, instead of reading to find the answer, I would close the book and simply think about it. Based on the other rules I knew about Python, I would try to predict what Python would do if it were designed consistently, and sure enough that's exactly what the book would tell me on the next page - every single time.

I still have some gripes about Python, of course. I dislike having to pass self references into class methods. It irks me that there's no way to make a private variable, and the fact that any method can overwrite anything on any class makes my hair stand on end. However, for each of these complaints, I UNDERSTAND why it works the way it does, and it makes complete sense to me. Unlike my complaints with Java, my complaints with Python come not from language inconsistencies, but simply from my own personal preference. Even if I had the power to change Python to allow private members, I wouldn't, because it would be inconsistent with the design of Python.

I've been writing all of my console apps and shell scripts in Python lately, and I'm excited to write some GUI apps using Glade and Python together soon.

In terms of language design and comfort, Python is officially my new favorite language. After just one book (which was one of the best programming books I've ever read), I feel like I've completely mastered the language. It's so straightforward, consistent, and easy to learn - I'm kind of annoyed I didn't learn it sooner.

Conclusion

That about covers my first impressions of my whirlwind language tour these past two months. C# is exactly the language I would have loved when I was still a Windows user, Ruby sucks, Rails is awesome, and Python is the best language ever made.

I'm worried that I may get rusty with Java - there's so much exciting stuff to work with, I can't really see myself starting a new Java project any time soon. I haven't written a single line of Java in a couple of months (I'm doing Ruby exclusively at work, C# at school, and Python at home), but I seriously doubt I'll ever really abandon Java - I still like it a great deal, and I'm excited to see how it continues to evolve.

My Interview With Google (Continued)

I didn't expect the story of My Interview With Google to be a two-parter, but it turns out the story didn't end where I expected.

Not too long after I made the post, it was submitted to Reddit.com where it enjoyed front-page status for two days. During that time, I got a lot of visitors and a lot of comments, some even from Google engineers.

I also got a private e-mail. It was from someone at Google. He explained that my post had been circulating around the Google office and when it got to him, it piqued his interest.

Essentially, he wanted me to come work for him in Mountain View. He was looking for Java folks for his team, and he thought I'd be a good fit. I jumped out of my chair when I read this, amazed some additional life had been breathed into my foray into the world of Google. The more I considered the e-mail, however, the more a part of me wanted to say no. Why?

His offer was essentially doing some semi-internal development for Google. I wanted to work on their web application back-ends, so that was a tad disappointing. Could that be the reason I wanted to turn him down? That didn't seem right, I had been joking for a while that I'd be happy to clean toilets at Google. Writing code is writing code.

The position was also contract-to-hire, which didn't roll my socks up and down. But I had been saying that once I got my foot in the door, I'd be alright. I knew I'd do fine at Google if I worked there, so I wasn't too concerned I wouldn't be hired permanently at the end of the contract work. No, it wasn't the contract aspect that bothered me.

He also told me that I'd have to spend three months in California doing the job. I'd then have to spend three months in California in a permanent position in order to "culturally integrate" before I could go back to Colorado and work in the Boulder office. This definitely bothered me. Since I would want to continue living in Colorado, I'd basically have to live in a hotel in California while Julia (my fiancee) stayed here in Colorado for 6 months. I just got engaged a month ago, and the idea of abandoning the family I'm just starting for Google seemed completely unfair. If I had gotten the job I originally interviewed for, I'd only have to be in CA for one week for training, so 6 months was a pretty big deal. When I told Julia, she told me that she could handle 6 months, and if I wanted to take this position I should. She was completely supportive of whatever I wanted to do. So it wasn't even the 6 months away from my home that was driving me to turn the position down.

I thought about this for days. I couldn't figure out what about the offer I didn't like, so shouldn't I take it?

Eventually I figured out what I didn't like about the situation and I turned it down. I don't think I could explain my rationale better than I did in my e-mail to the guy from Google, so here is what I told him:

I've been thinking about your e-mail for a few days and I've finally made a decision. This was not a decision I made lightly by any stretch.

Let me start out by saying thank you for e-mailing me and giving me another potential shot at Google. I hope you don't mind, but I'd like to update my blog story with this additional bit, though I won't be using your name or any details.

As I said in e-mail and via the blog post, there is no place I'd rather work than Google. Google, to me, is Mecca for software developers. Google does amazing work that improves the entire world. There is no better way to put my software development skills to use than at Google, where I'd be doing good work to make life better for countless individuals.

My personality, my desire to learn, my goal of improving the world - all of these tell me that Google would be the best place I could work. I know Google is right for me.

But am I right for Google? The interview process concluded with a resounding "no". Google decided that I am not a good fit for the company, and sent me back to Colorado. The fact that I made a funny blog post describing my journey doesn't change the fact that, from a technical standpoint, Google considers me below their standards.

Despite the conclusion of the interview, I believe I *AM* right for Google. I believe that, if I interview again after improving my algorithm skills and becoming more confident in my own abilities, Google will see that I am a good fit and hire me.

In short, I want to work at Google more than I can describe, but I want to work there because I earned it. I want to start my first day at Google knowing that I belong there, and knowing that Google knows I belong there.

As tempting as your offer is, I feel like it's sneaking into Google via a backdoor. I want to enter Google through the front door.

I intend on improving my abilities and learning new skills, as I do all the time as a developer. When I am ready, I will re-apply to Google, and hopefully I will meet you in the cafeteria during my week of training in California. :)

Thank you again for your e-mail.

I never imagined I would pass up a chance to work at Google, but there it is. I think I very well may look back and regret this, but for the time-being I'm comfortable with my decision.

This, I imagine, actually concludes this story. At least for a while.

Bigger and Better Things…

Right after I graduated, I decided I needed a change of scenery and decided to move from New York to Colorado. I assumed that a Computer Science degree would get me a job pretty quickly after I graduated, so I thought nothing of driving across the country with no job lined up. I figured I could move into an apartment and find a job in a few weeks. What I discovered was that my lack of experience was a major problem for most companies. My previous job had been working for a small company being run by a professor. He recruited me into his company when he saw one of my projects for his class. They were tiny. We had our company meetings in coffee shops around campus. I did all of my work in my own dorm room.

It became apparent that I lacked a great deal of real-world industry programming experience. I definitely needed to be molded, and all of the companies who saw my resume seemed to realize that.

I applied for a ton of jobs, and only heard back from one. I bought a suit the day before my interview, the only suit I had owned since I bought one for a funeral when I was a teenager.

My First Interview

My first interview

The company was in Denver. I drove into the city (for the first time since I moved to Colorado) and looked for the office. The buildings seemed to skip over the address I had written. Eventually I discovered that I had to walk between two buildings, into the side entrance to the basement of one of them. No logo was on the door, so I knocked, terrified at what might open the door. A woman opened, told me I was at the right place, and invited me in. Once I stepped inside, I was asked to take my shoes off, so I didn't track dirt onto the rug. While I sat in the "waiting area" a guy came out from an adjacent room and fiddled with a cable modem plugged in behind me. The "company" consisted of 3 people, including the receptionist. Once my "interview" began, I was asked to write some code in JSP. I had explained in my cover letter that I didn't know anything about JSP, but I've used Java and I'd be happy to learn JSP. He told me to write the code anyway. "Figure it out."

I sat in front of the computer, using the internet to look up information about JSP. Having never used it before at all, I was impressed that I managed to figure out what I did. Unfortunately, the task was connecting to a database. I needed the database connection string from my interviewer, but he refused to give it to me. He told me that was part of "figuring it out". To connect to a database, I needed to know the server address, login, and password. How he expected me to figure that out, I have no idea. Needless to say, I was unable to complete the task, and I didn't get the job.

As I drove home, I was terrified. I thought I'd be able to get a job, but the only one that even called me back was a place for which I was completely unqualified. Do I not know enough about the "industry" to get a real job? How will I pay my bills while I read all the books I need? How will I afford those books? As shady as that company was, I needed the job. It sucked I didn't get it.

I stopped applying to jobs for a while. I bought three books on J2EE and tried to read through them as quickly as possible, but I found the content difficult since I lacked any kind of context. I put my job hunt on hold for a while, figuring I was unfit for the working world. About a week later, I decided to look at jobs again. I saw a job post by a company called InsightAmerica. Without a second thought, I pasted my cover letter and modified a word or two, then sent it off. I expected nothing to come of it, but the job description only mentioned Java, so maybe my lack of EE experience wouldn't be a problem.

Within an hour, the hiring manager called me. I got a quickie phone interview and I was told someone would call me later for a technical interview. Later in the day, a guy named Duke called me and asked me some questions. I tanked his SQL questions, and I remember distinctly doing terribly with his "how many barbers are there in the U.S." question. Somehow, though, I got an interview the next day.

My Second Interview

Conrad

I showed up in my suit again and interviewed with Duke, a woman named Lisa, a skinny guy named Neal, and a big guy named Conrad, who was the first person who called me.

Conrad didn't ask me anything at all. It seemed clear he had already decided that he wasn't particularly interested in me. He wouldn't even answer my questions about the company, presumably because I'd never be working there if he had his way. He spent the entire interview making jokes, clearly detached from the process and uninterested in evaluating me.

Lisa stared me down the entire interview. Every time I tried to make a joke, she knocked the wind out of my sails. She saw that I wrote "Scheme" on my resume and asked what it was. I explained it was like Lisp, and she asked how often I used it. I said I wrote some programs with it in school, and she laughed in my face, telling me if she had known you could put that on a resume she'd have put Cobol on hers. Every time I answered a question, I was met with a skeptical snarl on her face.

Neal was quiet for most of the interview. It was clear, however, that he didn't like how young I was. One of my interview questions was "If you didn't have any work to do, how would you spend your day?" I thought about it and realized that I'd probably read articles on the internet or advance a chapter in a computer book, since I like learning new languages and technologies. I responded "I guess I'd read," and Neal chimed in with "comic books?"

Duke asked me more technical questions, but I didn't do very well with them. Most of his questions were geared toward the kinds of things a professional programmer would know, centering around writing maintainable code. Since my previous job didn't need the code to be maintainable, and I was never graded in school on code elegance, this was experience I lacked, and it showed. He asked me about the software development life cycle, and I didn't even know what he meant. I was feeling my age and inexperience dragging me down.

I drove away from the company feeling like I had once again wasted my time. I didn't hear from the company after that, and I applied for a job at Best Buy. I started thinking about working at a fast food joint, or working for my old company remotely. I felt like my life was falling apart. "I'm a smart guy," I thought to myself, "I'd be great as a developer, I just need someone to look past my inexperience and take a chance on me."

My First Real Job

Cubicle

InsightAmerica took that chance. I actually got an offer from them a week after that horrendous interview. I remember thinking at the time I'd never be able to spend the money they offered me. When I showed up for work the first day, I was so excited. A real office! Real cubicles! Holy hell, I get my own cubicle!

I jumped into my project and learned as much as I could. It turned out that I was hired as Lisa's errand boy. She inherited an enormous Java application, and needed to devote herself to modifying the code, so she needed me to take over operational tasks on the system (like rebooting servers, manually fixing records in a database, etc). It was boring work, but I had access to the code. I read through it whenever I could. I learned a great deal about good OO development during that process, and I eventually got to a point where I understood the code better than Lisa. At one point, we both got an e-mail requesting a change. An hour later, an e-mail arrived from Lisa where she responded to the requestor by saying that the change would take weeks. I saw it appear in my inbox just after I hit send on my own e-mail explaining I had made the change and pushed it out to the server.

As time went on, Lisa was taken off the project and I was made lead developer on it. I learned more and more about what it means to develop code professionally, and eventually became well-regarded by the rest of the team. I actually learned enough to be regarded as something of an "expert" on OO development. Along with Duke, I became the "Java Guy" at the company, answering questions other developers had. I even led a few presentations on various computer science concepts. Within a year or so, I was conducting technical interviews and I had the word "senior" attached to my title. A 23-year-old with "senior" in his title.

During my time at the company, Conrad and Lisa were both fired. Neal became the manager. Duke became one of my best friends. Neal told me one day that Conrad and Lisa were both adamant I not be hired because I was so young, but he and Duke both wanted to take a chance on me, figuring I would turn out to be one of their best employees. Neal explained that he was right, and it was one of the nicest complements I'd ever received.

Moving On

InsightAmerica was my first real job in an office. It's hard to believe I've only been working here two years, since I feel like I've learned so much. I'm Sun-Certified in Java, highly knowledgeable about OO and Design Patterns, and almost finished with a Masters program. I also have a Sun Certification in JSPs and Servlets, so fuck you, basement-company. I'm a much better developer than I was two years ago, and nothing illustrated that to me better than my recent job search.

It was difficult to decide to leave my company, since I was so grateful for the experience. However, I had to be realistic, and it was definitely time to move on. Even Neal left the company.

My new company is smaller, and they do really interesting work. They deal with open source software, one of my passions. Everything about the job is perfect (including a salary bump). It's a team of really bright geek types doing work that can make them proud.

I'm extremely excited about my new job, and I can't wait to start. It is tough, however, to leave the first company that took a chance on me. The first company to teach me what it meant to write truly maintainable code. The first company to mold my understanding of Computer Science into something applicable to the software industry. The first company to encourage me to learn new languages and technologies, allowing me to finally feel worthy of employment at a real company. InsightAmerica taught me what I needed to know to get a job better than the one at InsightAmerica.

People have told me during my two years that I've taught them a lot about Java, OO, and Computer Science.

The truth is, it was I who learned the most from the experience.

My Interview With Google

Update: Apparently this site (talking about the ways in which people blew their Google interviews) links to me, and also used my picture. It kind of sucks that an article titled "How I Blew My Google Interview" has my face on it, but that's what happens when you put a picture on the internet, I guess. More disconcerting to me is that the portion of the article below that was highlighted was my discussion of my interview with the guy with the thick accent. The implication of the linked article is that I blew the interview by not understanding him. I'd like to clarify, that part of the experience was just a relevant part of the story, which is why I shared it. I blew the Google Interview not for that reason, but because my algorithm skills simply were not up to snuff at the time. Blaming the rejection on having a hard time with accents would be petty and silly. I was rejected because I wasn't good enough, plain and simple.

Recently, I had the pleasure of interviewing with Google. It was very exciting, as I've wanted to work for Google for quite some time, and they opened up a branch near my home through an acquisition recently. I wanted to share the process of interviewing with Google, not because it was particularly noteworthy, but because I wondered about interviewing with Google before I did so, and I figured others might. I've had to sign an NDA, so I'm going to be pretty careful about what I share in this post.

Me, excited

The position I interviewed for was a Software Engineer position in the Boulder, Colorado office (near where I live), but they still conduct their interviews from the California office. Because I'm not in California, I had to go through two phone interviews first. The questions Google asks are pretty interesting for a number of reasons. I think the best word I could use to describe the questions is "fair". I didn't get any tricky puzzle questions. Nobody asked me what I would do if I were shrunk to the size of a nickel and thrown in a blender. Not a single question was an "a-ha!" type brain-teaser. Pretty much every question was a good question for figuring out if someone can write code. Even though I was interviewing for a Java position, I only had one Java-specific question. I could really feel from the questions that Google wasn't concerned with me being good with a specific language; they really wanted to know if I was just a good coder.

When I was first told by the recruiter that the questions would be algorithm-based, I was worried I'd have to reproduce quicksort or something. In fact, the questions were far, far more reasonable (though reviewing sorting algorithms WAS a good idea). Most of them involved manipulating data in an array for some purpose. I'd give an answer that worked, and they'd ask me if there were any corner cases. I was asked to solve the problem in a way that avoided those problems. Then I was asked to improve the space efficiency or running efficiency of the solution. A solution that "worked" was never enough, the interviewers always pushed me further, trying to squeeze out performance. I had to say the runtime complexity for nearly every solution I suggested. I would NOT recommend interviewing with Google without a Computer Science degree. You need to be able to look at a function and know the Big-O for it immediately. Specifically, you need to look at YOUR OWN functions and know the Big-O immediately.

Me, humming the Full House theme in my head

After doing well with both of these interviews, Google actually flew me out to California for a weekend for an all-day interview on the Google campus. They paid for my plane ticket, hotel room, rental car, and some food. I bought a second ticket for my fiancee and we did touristy crap around San Francisco. Overall, it was a lot of fun, but I couldn't help but keep the back of my head occupied with the thought of an all-day interview.

On Monday, I went to the Google campus. In the main lobby, they have a projector with a scrolling list of Google searches. I sat in the lobby waiting for my interview to begin, happily watching the searches scroll by. Lots of female celebrities were being searched, and someone searched for "vista crack" which made me laugh out loud, ensuring the receptionist thought I was an idiot. I sent my fiancee a text message telling her to search for "Rod is awesome" but it didn't show up. They also had a neat visualization showing where people were doing searches on a spinning globe.

Pictures of Googlers with celebrities adorned the wall next to the new Google whiteboard. For those that don't know, Google has a giant whiteboard which was finally erased not too long ago. Before being erased, someone took pictures and posted them to the internet. The new board was already mostly full by the time I saw it, and a large section of it was devoted to complaining about the board being erased.

Some random Google building

I also had lunch in one of the cafes on campus. The Google cafes are all buffet-style, and completely free. You simply walk in, grab whatever the hell you want, and leave. My "lunch-date" was one of my phone interviewers, and he took me to the health food cafe. Salads, tofu, bean sprouts, and similar food items filled the buffet. I searched desperately for some meat and filled my plate when I finally found it. I'm definitely NOT a California person. People looked at me like I personally killed a cow in front of them.

The on-site interviews were much like the phone interviews. I had one-on-one meetings with a handful of people, one after another. Each person asked me algorithm-type questions. I did some whiteboarding, but was mostly able to write the answers in my notebook, which was better for me as I could keep up with my brain much more easily on paper than on a whiteboard. It was sometimes difficult to focus on the questions while "OH MY GOD I'M INTERVIEWING WITH FUCKING GOOGLE" whizzed by in my brain over and over. Luckily, pretty much everyone was extremely friendly, which helped calm my considerable nerves.

The biggest difference in the questions between phone and on-site interviews was how my answers had to be presented. On the phone, it was sufficient that I explain, at a high-level, how the solution to a problem would work. On-site, I had to actually write it out. Of my four interviewers, two actually wanted it to be valid Java.

I finished early with one of my interviewers, and he asked me a joke question: if a Stormtrooper shoots a red-shirt, does he hit? It was comical how universal this seemed. Of course I'd know what he was talking about, I write software. Luckily, I was familiar with the term redshirt from being a film nerd, and I was able to come up with a joke answer that didn't let him on to the fact I've never seen a single episode of Star Trek in my life.

Part of the Google Campus

The worst part of the process was my fourth and final interview of the day. The guy was from Moscow, and he had a very thick accent. All of my life, I've had immense trouble with accents, even slight ones. My project manager at work has a thick accent from Italy, and she basically sounds like Chewbacca to me. I'm not complaining that Moscow Guy had an accent (all tech companies have folks with accents), but it sure made the rest of the interview process challenging for me. My interview with the Moscow Guy resembled one of those satellite interviews on the news. He'd say something to me, and there'd be this long pause before I responded. To make matters worse, he told me his first question was going to be "an easy one", so when I barely understood what he said at all, I imagine I looked like a complete imbecile. "What was that? You want me to WHAT two numbers together? Mo de ploy? Mah dah bu? Oh, multiply! Right, two times two is four. I'm obviously partially retarded."

To make matters worse, the Moscow guy was the only person I talked to the entire day who wasn't friendly. He wasn't a complete jerk or anything, but he definitely wasn't as warm as my other interviewers. Right before the interview ended, he asked me what I'd work on for my "20% time" project. Each Google employee gets to devote 20% of their time to a side project, which is why so many of the Google Labs projects exist (like Gmail and Movie Search). I actually had an answer to this question, since I thought about it on the plane ride out to California. There's been a side project I've been wanting to work on at home, but I haven't had time. I figured, if I got the job, I'd just make that a Google Labs project and do it there. I explained my idea to him, and he told me it sounded interesting, then proceeded to write it down right in front of me. All I could think was "I hope I get this job so I don't regret that."

I imagine the four interview feedback e-mails looked like this:

  1. "Candidate knew his stuff, but seemed awfully nervous."
  2. "Candidate knew his stuff and seemed relatively comfortable."
  3. "Candidate kept joking around like I was his friend. Clearly was not nervous enough, given that he was interviewing at FUCKING GOOGLE."
  4. "Candidate seemed to have the brain of a chimp. Was surprised he could speak without forgetting to breathe. Interviewer confident candidate eats glue."

Google Lobby

I flew back to Colorado feeling pretty good about the whole thing. As it turns out, though, I was told over the phone (while trying to push a car out of the snow during the Denver blizzard) that I didn't get the position. I need to work on my algorithm skills, so I guess I got docked for not thinking of the best solution right away. The Google Recruiter told me it wasn't the last guy that did me in, but I imagine if I had tried to come up with the best solution earlier (rather than the naive one so I could improve it) and if I had gotten a different interviewer for my last interview, I'd be writing this blog post from my desk at Google.

Considering how much I wanted the job, I admit I'm pretty bummed about this. I'm allowed to re-apply in a year, but I can't imagine improving my "algorithm skills" without more information on where my problem areas were. What's really unfortunate is that I know if Google had hired me, I'd have done a good job. If I see my idea appear on Google Labs any time soon, I'm going to go nuts.

All in all, it was a pretty pleasant experience. I'm disappointed, but I'm proud of myself for at least being considered seriously by Google. It was honestly kind of fun answering their interview questions. The questions reminded me of my undergraduate work, and it was nice to think about that kind of material again. I'm bummed that my progress into the world of Google came to such a screeching halt, but the journey has definitely been fun and interesting. And hey, I got a free trip to San Francisco out of it.

UPDATE: To my great surprise, this story actually wound up having something of an epilogue.

What A Difference 2 Years Makes

I've recently begun a low-priority job search. This isn't a "I desperately need a new job" kind of thing, but more of a "I'm pretty unhappy where I am and would love to change, given the right opportunity." My boss, who I greatly admire and respect, had been thinking the same way for a while, and recently took a position elsewhere. He was one of my closest allies at my current company, and without him I worry I won't have as much political power or information. This is important, because the company is (unfortunately) extremely political, so you have to stay on top of things pretty well to make sure you don't get steamrolled.

In any case, I thought about how long it took me to find a good job (a few months) when I moved out to Colorado two years ago. I figured since my job search was going to be an even lower-priority thing than my search was then, I may as well go ahead and put my resume out there and apply a few places. Two years ago, I didn't hear back from virtually any of the places I applied. I think they saw that I graduated from college the year prior, and figured I had no industry experience. In fact, I worked at a regular software development company nearly full-time when I was in college, so I had three years of experience already at the time, but I can understand the misinterpretation.

Well, what a difference two years makes. Two years, two certifications, and a handful of new learned skills later, my phone has been ringing off the hook. I posted my resume Saturday night, and I had gotten one call by Sunday. As of today (Monday), I've gotten about 20 phone calls on my cell phone, and a number of e-mails. Mostly recruiters, but I'm still amazed at the response. Just while writing this post, I got 3 more e-mails.

What's so strange is, I'm basically the same guy I was two years ago. I have some additional skills on the resume, but if I had joined another company I would have simply learned different ones, as I'm a very quick learner. The differences between my old resume and my new one seem so small to me, yet it's resulted in a completely different reaction.

Now I'm not sure what to do. I expected a slow reaction to the posting, one that would operate at a rate that would keep interesting job offers coming in only every so often, until I was truly ready to leave my current company (assuming they don't fix their faults), but now I have positions pouring in. I feel bad for recruiters though, because you can tell they are slightly disappointed. They find a resume that matches what they've got, and then I'm not interested enough and I ask them to keep looking.

The other strange thing is, I get the impression very few job seekers care about the company itself. A lot of times I'll respond to the recruiter e-mails by asking for more details on the company and the job. What I'm looking for is "company X makes these kinds of products for this kind of market" and "you'd be working on their blah product", but what I get is a laundry list of skills they want for the job. Do other job seekers not care what the company does? A big part of why I want to leave my current employer is that I don't particularly like what they actually do, and I'd like to feel better about what I'm contributing to. It's surprisingly hard to extract this information sometimes.

In any case, it's very nice to feel like I actually have some power when job hunting. My first job I got because my professor in college wanted me to join a company he was starting. My second was a basic job hunt online, knowing I was unemployed (I moved to Colorado without a job in the queue) and running out of money. So really, the only "job hunt" experience I have is me desperately needing dough, willing to take almost anything. It's nice to feel like I can be relatively choosy now. I could even choose to stay at my current employer.

That being said, if anyone out there works in the Denverish area and would like to hire a pleasant, curious nerd to do software development, drop me a comment. ;)

Removing Comments

I had an interesting task at work today. I maintain a project that has gone through at least 5 other developers before myself. When I was hired, it was to lighten the workload of the current-at-the-time developer. This developer had a bit of a personality problem, and she didn't get along with the rest of the team as a result. She was eventually fired, and I was left as the lead maintainer of the application, making changes as needed and improving it.

I've done a great deal of work on it, but it could only be improved so much, as the system has over 50 dependencies on unstable legacy systems out of our control. It's a real hassle to maintain. Well, the day has finally come where I can stop working with this nightmarish project. At the end of the month, the project is being officially sunset permanently. I'll be bringing a bottle of wine to work.

Unfortunately, one condition of the sunset is that the company we built it originally for gets to buy the source code. This isn't a problem, except that this previous developer generously spread helpful comments all around the system. She spent most of her time on the project simply keeping it running rather than actually improving the code, so most of her comments were along the lines of "this piece of code should be improved!" She never actually improved the code herself, but I'm sure she felt better making it known that she cast derision upon the other 3 developers before her.

My task today was to "clean up" the code so that this other company can buy it from us.

Continue reading ‘Removing Comments’ »

How To Ruin Your Interview

If anyone is looking for a way to completely ruin their chances of having a good interview in the software development field, here's how.

Continue reading ‘How To Ruin Your Interview’ »