flwyd: (xkcd don quixote)
It's not simple to look for a job with narrow domain constraints (my main interests are a pretty small subset of the total programming work) but wide geographic flexibility (I'd enjoy most places on either coast plus much of the interior west). Keyword searches on major job sites can find some good matches, but some of my interests are broad enough that words or phrases might not be shared. For instance, I'm interested in geography, but that word might not appear in a job posting for a company making location-based mobile apps. And even if a word with "geo" as a root is present, can I trust Monster's search algorithm to match "geography" to "geographic?" It certainly won't infer GIS from geography or vice versa. Search result pages on these sites usually don't give much context, so there's a lot of forward-and-back browser action. Further, most sites don't hide jobs you've already looked at and rejected, so search variations may give you the same lame company you've already decided against.

The most usable approach I found was to subscribe to the RSS feed for the appropriate job category in every city I thought was interesting. This included a lot of postings for positions I wasn't interested in, but with Google Reader I could quickly skip those (j/k for down/up, vi uber alles!) and not see them again. After a few passes with this approach, I got pretty good at identifying postings that don't apply by the title or a quick scan of the first paragraph. The process was still time consuming -- the SF Bay software jobs feed can generate a few hundred postings in a week -- but I gathered a sense of the general software talent market in addition to finding companies of interest in what felt like less time than weeding through a narrowed set of results on traditional sites. Note that this approach can work for any industry and can be a low time commitment if you aren't following feeds for a dozen cities. If you're looking for work, go to http://yourcity.craigslist.org/ and click on the job category you want. Copy that URL into your feed reader and let job postings come to you. You can also subscribe to a more specific keyword search.

Of course, this process didn't lead me to the job I actually landed, but I did find some companies I was interested if I couldn't reach my top target and some products I think are interesting, even if I don't want to work on them. Some of these are mature, others show promise. I haven't tried most of them, but they look cool.
  • Simply Hired job site aggregator which can apply multiple filters (location, position, skill, etc.) simultaneously. Still feels like it needs some work; I didn't find it as helpful as my Craigslist approach above. Indeed provides a more Google search-like job site aggregation.
  • RoundPegg presented at this month's Boulder New Tech Meetup. They're working on an eHarmony approach to job search. Gather data on companies and teams, then have potential hires take a personality test to see how well they would fit interpersonally. The second phase will be letting job searchers put their info in and find employment matches. OkCupid's approach to dating is how I'd really like to approach job searching, so I think (and hope) this could be really successful.
  • TouchGraph Navigator Automated data visualization.
  • Alelo combines 3D gaming with language learning. With the Department of Defense as a major client, their program focuses on cultural norms and nonverbal communication in addition to phonetics, vocabulary and grammar.
  • Outside.in provides hyperlocal content feeds. Pick a location (e.g., your house) and you can get news, blog posts, business listings, etc. They work on both natural language and geography problems and use some exciting technologies, so I was pretty interested in working with them. If I hadn't gotten a job at Google, these guys would be high on my list of interests. They use Mallet as their NLP toolkit; I'd like to check that out some time.
  • SkyGrid provides real-time personalized(?) feeds of business and financial news across many reputable sources. This would be pretty cool if the service worked on any subject the user was interested in.
  • Rosetta Stone has several personal and enterprise language learning packages. Their Boulder office has some folks from CU (including one of my teachers) and is working on cool stuff including online games where you can interact with native speakers.
  • Geodelic is a mobile app that shows places based on proximity and interest. It can figure out if you don't like Starbucks and recommend coffee shops that are further away, but not part of the famed bean empire. They seem kind of focused on providing value to advertisers, so I'm not sure I'd rely on them for unbiased information.
  • SimpleGeo is a Boulder startup that will provide an API and data cloud to make it easy for folks to write apps like the above without the expense of gathering and storing all the data first.
  • Plectix treats microbiology as a programming language. If I was into bioinformatics instead of NLP, I'd be way excited about these guys.
  • Allen Institute for Brain Science is developing atlases of the brain. Founded by Paul Allen, Bill Gates's lesser known other half.
  • Acuitus makes some pretty grand claims about their digital tutor's results. Done right, it could be a huge boon to education.
  • Language Weaver provides automatic machine translation for enterprise. I don't know what the state of the art in commercial translation is, but it's likely better than free translators like Google's. How much better, I don't know.
  • imo.im provides web-based multi-protocol instant messaging. This is a good site for chat if you're often on public computers or just borrowing a friend's. Long-term, the company wants to do a lot of cool things with communication.
  • The Experience Project a social networking site based not on who you know but who you are, with groups like "I survived cancer," "I am bisexual," and "I love bacon."
  • Topsy a search engine based on links from twitter.
  • The Game Crafter custom production of game components for homemade games.
  • Urban Mapping provides geographic data like neighborhood boundaries.
  • Open Layers is an open source platform like Google Maps. Thematic Mapping provides a JavaScript API to generate KML for Google Earth et al. FusionMaps is an open source project for creating interactive maps in Flash.
flwyd: (Vigelandsparken heels over head)
I've felt down or blue a lot in the past few days. At first, it was probably from eating milk chocolate fun size candy bars, but there was also a fair bit of self--doubt and existential moroseness. Thinking it through, I figured I'd internalized my perceived outside chance at getting hired by Google. Consciously, I knew my good answers were more frequent than even hits by guys in the World Series, but I had lots of time to think through all the little mistakes I made and things I said that, when written down without the full context of the moment, sound pretty dumb. I even had a dream in which I got a call with my recruiter and I asked for a list of reasons my points got docked.

So fully expecting I wouldn't get hired, but knowing that it wasn't a certain fate, I answered the phone this morning. I was pleasantly surprised elated to hear that the hiring committee was impressed and thinks I should be Google's next employee. As Neo said... Whoa.

There's still some paperwork and reference checking (but no pointer arithmetic) to do, so it'll be a week and change before I get an official offer, but I have now officially reached the easy part.

I could ask to be part of the Mountain View office, but I think it will be easier to start in Boulder with a closer group and a more familiar environment. If I decide later that California is the place to be, I can ask for a transfer. I'm sure I'll have a few chances to visit the fabled Googleplex in person regardless.

In summary: Yayberries!

Edit: I think the self-doubt I had is tied to doing consistently A minus work. My GPA was 3.8. My SAT and PSAT scores were high, but not high enough to qualify for merit scholarships or (probably) to get into top technical schools. A lot of code I've written has been good, but far from perfect. I spend time doing well-rounded things rather than being driven to near-perfection on a narrow band. While I'm generally happy, there's often a nagging sense that I could be top caliber, but I'm not quite. But since I'm clearly well above average, I'm not satisfied doing solid B work or being the big fish in a small pond. So the call I got this morning is a vote of confidence that I can be a growing fish in a big pond of excellence.
flwyd: (java logo)
I spent over five hours interviewing at Google's Boulder office yesterday. My visit came about a month after I submitted my résumé, via a connection who referred me, to Google's famously challenging hiring process. Before I arrived at Google's office, I'd had my résumé selected from a large pool (which is probably full of bad programmers), had a non-technical interview with a recruiter about background and goals, and aced a technical phone interview. A large majority of candidates are eliminated at each step (possibly excluding the non-technical interview), so before my on-site interview, I already knew I was in the top few percent of people who apply to Google.

Preparation

In the week or two leading up to the interview, I alternated between a Zen-like state of confidence ("I've gotten this far, so I'm good; my whiteboard flow is tight") to fears of gross incompetence ("It's been over a third of my life since I've taken a calculus class and have forgotten how to add infinite sums! I can't remember any non-search graph theory algorithms!"). All my college notes and textbooks are in an inaccessible corner of a storage unit in Lakewood, but fortunately Wikipedia has plenty of reference material, usually at least as clear as CLRS. Looking through TopCoder problems, remembering ACM problems, poking around related websites, and finding blog posts, I felt like I could work through a solution to most. I worked through some dynamic programming problems to make sure I could recognize when the technique was appropriate and how to step through it. I dug into the implementation of some sorting algorithms, several types of trees and heaps, discovering the Cartesian tree, my new favorite hammer. I read a bunch of stuff about graph theory, realizing I need to read a good non-academic book on the subject, preferably one that aims to build spatial intuitions along with algorithmic reasoning. I made sure formulæ for combinations and permutations were in working memory and that design patterns, scheduling, and java.{lang,util,util.concurrent} were in at least L3 cache. I didn't follow Stevey's advice to do practice interviews, but I gave enough interviews at my previous job to be comfortable writing code without compiler or IDE.

Execution

So, how did my Google interview go? It started with a really easy Java question. Some people tend to get insulted at this step, but I know that an amazing number of people get to in-person technical interviews and somehow can't actually write code in their favorite language. I then implemented a method to see if all the numbers in one sorted list were in the other. Pretty simple stuff, but it's easy to go astray. My interviewer initially thought there was a problem in my code (probably a spot many people goof up), but I'd thought of the case and dealt with it. I noted that if I handled that section of the code a little different, I could get rid of some duplicate code I'd originally noted was ugly but functional.

Other coding problems included determining if a word could be spelled from a set of letters, making a deep copy of a graph with loops, implementing an LRU cache, finding an individual who satisfies an inverse relationship with every other individual, and writing a unit test for a simple function of a double. I had a "thinko" on the graph copying problem and didn't notice it when I traced through the code, but as soon as my interviewer pointed it out, I quickly reworked the function to handle the issue. I floundered around on the LRU cache because I've spent so much time thinking about collections and data as separate concepts that I forgot that any type of object can be a linked list node.

My weakest interview of the day was probably the last, with a focus on OO design and type hierarchies. The interviewer asked me to talk about some good OO design I did, so I started working through the object model for one of the big projects I worked on. I didn't realize he was mainly looking for object hierarchies rather than object relations, and after a little while I realized this wasn't a good example. I shifted to another project which I put a lot of design work into, but like most of our code at my last job, the inheritance hierarchy was pretty flat, with lots of abstract factories. The interviewer proposed a problem domain and I worked through a possible object model. Like I usually do at initial design stages, I was thinking in terms of types and data responsibilities rather than (Java) classes and interfaces, and it seemed like he didn't like that I was characterizing some things as fields. Hopefully I showed an ability to explore variations on modeling after a day of talking and thinking after a night of nervous bouts of sleep and wakefulness.

Google Boulder

I finished almost every interview section with time to ask questions of the interviewer, which made me feel like I wasn't failing too badly. I got some helpful opinions about the development environment (every line of code given a formal review before it enters the massive Google source repository), the company structure (the HR management tree is not identical to the technical decision tree and both have bottom-up flow), surprises about Google (a couple guys were impressed with how well Google worked as a large organization and how well they could collaborate with other offices). At lunch, the site manager for the Boulder office showed me around, talked about what goes on at the office (mostly apps and SketchUp, but with plenty of folks working on other stuff), and gave me an opportunity to ask a lot of questions. The Boulder office is tiny compared to the Googleplex (though it's a little bigger than the last office I worked in). They don't have high tech toilets, but there were magazines in the stall and reminders about build system usage posted above the urinals. The reception area has two big screens, one with a live sample of Google queries (quite a few were in Spanish and Portuguese) and one with a movie loop of Google Earth visiting some neat-looking locations. The most obvious thing you see if you peer in the building's doors is a rock climbing wall. The room also has (IIRC) ping pong, foosball, and pool tables, a Rock Band station, a multi-arcade machine, and some comfy chairs that probably did automatic massage. From the cafeteria (free snacks and catered lunch every day) you can look down into this play area while eating solo or sit with a bunch of friends at tables with Google-colored chairs. Most people work in "pods," open 4- or 8-person cubicle-like structures designed for easy collaboration. I like this kind of setup (at my last office, most of the software engineers removed at least one cube wall), especially with good noise-cancelling headphones, but it's not for everybody. The interview invite said "Leave your suit at home, Google is business casual." Since it was the Friday before Halloween, I was tempted to come dressed as a pirate ("Let's call this variable 'r'!"), but figured a brightly-colored winter hat would be a good compromise. I was glad to see at least half the office was in the spirit, including a couple (who had their baby with them) dressed as Skywalker/Leia and a guy whose costume involved not wearing a shirt (I disturbed some coworkers one halloween with my shirtless satyr costume in a standup meeting). One of my interviewers was dressed as a caveman, but he excused himself by saying he was filling in for someone who was sick that day.

Conclusions

An interview is an opportunity for the company to evaluate you and for you to evaluate the company. In the latter case, Google definitely succeeds. I like their approach to software development, I like their famously outside-the-box company structure, I like the office environment. (I let the recruiter know I'm interested in both Boulder and Mountain View; I haven't visited the fabled Googleplex.) In the former case, I think I have an outside chance. The site manager didn't know precise numbers when I asked what percentage of people get hired after an on-site interview. He said it was less than 50% and more than 1%, and said 15% sounded like it was in the ballpark. I know I didn't have a perfect performance, but I did a lot of things right and recovered fairly gracefully from errors. I definitely did better than 85% of people I've interviewed, but I suspect Google's earlier filters are a lot tighter. The guys who interviewed me yesterday will send their notes (including exact copies of the code I wrote) and a rating to a hiring committee. That group will talk things over and make a decision; the longer I don't hear back the better my chances (on the principle that it's easier to identify someone who really sucks from someone who's really good).

It's important to remember that not everyone who's qualified to work at Google get a job offer at Google, which means that if I don't get hired, I can't conclude that I'm "not good enough." The mistakes I made (which would not be present if I'd been asked other random questions) might lead to enough lower marks that don't pass the bar. They might also decide that given the desire to hire X people and Y people worth hiring, I'm not one of the best X in Y. Blog comments are full of people who think the following is sound logic: "(1) I am an AWESOME programmar! (2) There's no way I could get through Google's interview process! (3) Therefore, Google's interview process sucks! (4) Google's been successful up 'til now, but they're going to fail! (5, optional) They've got too many smart single young guys who work hard, that's the problem!" or "You didn't get hired by Google? That's because you're too good for Google! [And, one assumes, better than all these folks.]" Contrary to the haters, most of the people I interviewed with looked to be over 35 and (I'm pretty sure) some have kids. Interviewers might naturally tend to be older and more experienced, but I didn't sense a monocultureculture stereotypical hot shot 20-something computer nerds. (There was a pretty high male-to-female ratio, but that's a problem much larger than Google.) Also contrary to the haters, if I don't get hired it's probably because I messed up, not because Google messed up. And hey, if I don't make it, I can always try again in a year or two with more experience and insight under my belt.
flwyd: (dogcow moof!)
I've spent much of today skimming really boring job postings. There's a certain uniformity in job board language that makes reading about exciting work really droll. This means (unless you're picky about domain like I am), it's hard for any job posting to stick out. So I was amused to find this job posting written in Ruby on the Joel on Software jobs board. I could tell the company was at least kinda hip when I saw their name was Shop It To Me. It's exactly the sort of character I would dig in a company; unfortunately they're working in a domain I'm not interested in.
flwyd: (Trevor glowing grad macky auditorium)
My summer plans came true, but I've entirely failed to blog about them. The next post is a short summary, but this one's about my new activity: finding employment.

My next adventure is finding a job. I've just updated my résumé. I still like my unorthodox "this is the real me" style, but I've kept my normally-formatted résumé for employers that want consistency of form and bulleted lists that are easy to scan. I was part of the hiring process at Tyler, so I know the importance of a piece of paper that can be compared side-by-side. On the flip side, the quirky version might stand out more in the filtering process. Feel free to pass it around or use it as inspiration for revising your own resume. Let me know if you'd like the LaTeX files I used for the PDF versions.

What kind of work am I looking for? My résumé's mission statement says
My mission is to write software which kicks ass. I want to work with smart and creative people on projects which are worth doing right and which help people in creative ways. I am especially interested in GIS, artificial intelligence, human language, cognitive science, and programming languages.
There are two key things I'm looking for in a job. The first is what I'm working on -- there are certain domains that get me very excited intellectually: language, thinking, maps and science. And while I can enjoy writing and debugging programs in any domain, I'd much rather work on something that piques my excitement. The second important factor is who I'm working with. I've got two degrees and some professional experience under my belt, but I know there's a lot about computer science I can still learn and I want to work with awesome people I can learn from. When I left Tyler, most of my opportunities for learning were self-directed, and while I'm good at figuring stuff out on my own, it's a lot more effective to learn from someone in the same room than from a book or website.

What about location? Location is very important to me, but I'm open to locations that will in the future be very dear to my heart. Staying in Colorado is certainly an option -- staying at my parent's house when I'm not on the road reminds me how much more I enjoy Boulder than random Denver suburbs. I love the mountains, the weather, the people. But software companies seem drawn to cool cities, too. I'm sure I would enjoy living in the Bay Area, which is good because a plurality of software jobs are there. I've never been to Seattle, but the Pacific Northwest's got enough mountains and neat people to keep me occupied, even if the rain can be a downer. I can dig the heat and landscapes of the Southwest. And I'm sure there are several places on the East Coast I could live, even though I'm a laid-back westerner at heart. In short, at this stage of my life, what I do is more important than where I do it.

I haven't really done a job search before. I got a job with Tyler because they found my résumé on CU's website and gave me a call. I hadn't been planning to get a job right after graduation (in a sense, this summer has been a replacement for post-graduation wandering), so I accepted the offer without looking around. Any advice on what job websites are hot? I'm updating my LinkedIn profile. I've got an old Monster account to update, but I'm sure some more have come along lately. Got any friends I should be networking with?


It's a tough economy (though I hear the software sector is doing a lot better than most), but I'm confident I'll find something awesome. I've been planning ahead and I've got money in the bank, so I'll be fine if the search takes a while. I don't have a huge social network or great social skills (hey, I'm looking for a programming job), but I'm an interesting enough guy that I can stand out, even in a crowd of other geeks. And I've managed to avoid any anchors: I don't own any real estate, I'm not involved in a romantic relationship, I don't have any filial duties that I can't fulfill at a distance, and I don't have any space-time commitments until Violet's wedding in April. In short, when I find the right situation, I'm ready to pounce. In the meantime, I've still got time to play, so let me know if you've got any fun plans.
June 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 2017

Most Popular Tags

Expand Cut Tags

No cut tags

Subscribe

RSS Atom
Page generated Thursday, June 29th, 2017 08:50 am
Powered by Dreamwidth Studios