(Like this article? Read more Wednesday Wisdom!)
Here is a question I regularly get: “You have clearly had a great career already. What should I do to qualify for a job at one of these great companies that you work(ed) for?” If nothing else, questions like these make me reflect on how incredibly fortunate I have been. I have indeed worked at some of the best and most impressive companies of our time (Google, Facebook, Amazon, and currently: OpenAI) and I fully understand that people wonder how someone with my mediocre talents pulled this off and can I please share my secrets?
I have some experience with answering this question: Once, long ago, while I was still at Google in Zürich, they put me in front of a group of Swiss high school kids to have me explain to them what they should do to get a job at Google. I apologized profusely and told them that it was super boring but that their parents and teachers were mostly right: Take the right classes, get good grades, go to a good college, choose the right major, take on relevant extra-curricular work, and excel at all that. Their parents and teachers were really only wrong about one thing: Drugs are great. Apart from that all their boring speeches were true.
It was the early 2000s and you could still get away with that then. On the other hand, according to wastewater analysis, Zürich is Europe’s weekend cocaine capital, so I think the Swiss kids already knew this.
For school kids this is probably a good, or at least good enough, answer. But is that really all there is to it?
To be honest, I don’t know. Of course I know how I got there, and I must admit I made a little bit of a study of my colleagues’ journeys, but I do not claim to have the ultimate answer to this question. That said, I will happily share what I do know and what worked for me.
So here it goes for part #1:
If there is one common denominator to all the amazing colleagues I worked with in all of these amazing companies it is that they all really knew a lot about how computers work and how to solve problems with computers. And I mean: Really a lot! This is not the “He, look at me, I am the best Linux and C guy in my entire village” level; these were all people that had done a lot of interesting work which came impressive track records. This is the level of expertise that comes from years, if not decades, of studying and applying yourself. I know we live in a “become an expert in 21 days” world, but my colleagues at these companies were (and are) real experts on a wide variety of topics. My colleagues sat on the C++ standardization committee, co-wrote IETF RFCs, co-invented PHP, won programming competitions, wrote vim, wrote nano, wrote books, and were generally just very impressive.
I myself got to somewhere near that level because I have basically misspent most of my childhood and a fair part of my adulthood toying with computers. And not just playing games (though there was a some of that too): In my teens I taught myself assembler and tried to modify the BASIC ROM of my BBC microcomputer to make it do different things (greatly assisted by the BBC Micro Compendium book by Jeremy Ruston which helpfully contained a commented disassembly of the BASIC interpreter). When I moved to the PC I switched to 8086 assembler (in one word: terrible) and coded Terminate and Stay Resident programs for MS-DOS. Not happy with MS-DOS, I then switched my attention to CP/M-86. That turned out to suck, so instead I got my hands on some floppies with the source code of Minix and studied that.
I am generally interested in just about everything. My entire career I have been picking up new technologies and lifted up the hood to see what is going on in there. This also means that I spent an enormous amount of time on things that never became popular. For instance I spent oodles of time toying with OS/2 Warp. And for quite a while I thought that BeOS was going to be hip. Earlier, when I thought that BASIC was really no good, I picked up BCPL and Forth, the latter of which was super fun but never got me anything except for a good insight into how stacks work and a mind-blowing moment when I understood how the Forth bytecode compiler and interpreter were mostly written in itself. I also picked up Lisp, which also mostly went nowhere, until I joined Google Flights in 2016 because, wait for it, the QPX Flight Search Engine (originally by ITA) is mostly written in Lisp!
You might think that I wasted a lot of time but you really never know how a cow catches a hare (Dutch saying). Most things I studied never became commercially interesting, but some did. And even the things that I never got to apply in the workplace deepened my understanding of how things work. For instance, I spent tons of time learning about operating system internals from sources such as Minix, Xinu, FreeBSD, and of course, Linux. All of that effort paid off extremely handsomely when the cloud started happening and suddenly it was Linux and containers everywhere. That said, the time spent on Prolog was mostly wasted and the jury is still out on my recent forages into WASM.
You can really only spend this much time on random things that do not necessarily pay off immediately if you are passionate about your field. When people ask me why I studied computer science the answer is really easy: The first time I saw a computer I had a religious experience: Here was the greatest puzzle known to mankind and the puzzle masters could make the machine do whatever they wanted. I wanted to be one of them. I had never heard of stocks, IPOs, options, or PPUs, and was (at least initially) not motivated by money. Instead, from the word “go” I was in it for the challenge, which really makes it so much easier to spend the time needed to become any good at all this.
All this effort is by no means something from the distant past: When Android came I dove into it and wrote an Android app. Then when smartwatches came I bought a Moto 360 watch and wrote a watch face. Currently I am learning how to write GPU applications using CUDA and trying to figure out how to train my own GPT. And of course I also spent time running my own mainframe (using the Hercules emulator).
So here is the conclusion of part #1: To have a great career at great companies, become a deep expert in many technologies in the field. You don’t have to know everything about everything, but you really want to know a lot about a lot. From my experience there are many people who can learn the tricks of the trade, but there are not a lot of people who really understand how computers work and who understand the internals of most of the core technologies.
Moving on to part #2…
Once you are getting to the right level of expertise, people need to be able to find you. I got my break in 2006 when a Google recruiter found and contacted me, which was somewhat easy for them because I had already been busy for years, sharing knowledge in all sorts of ways. Consequently, my name was plastered all over the (still relatively young) Internet. During the 90s and early 2000s I presented at conferences, helped organize conferences, taught in a college program, wrote columns in magazines, was involved in professional organizations (like the Dutch Unix user group) and dabbled in open source. All of this helps because it makes you easier to find for recruiters and other people looking for good candidates.
Putting yourself and your expertise out there is incredibly expensive in terms of time and most of these efforts will not have a direct payoff. Consequently, it’s really only possible to do this well if you are “intrinsically motivated”. In other words: You must really like doing this, regardless of the (immediate) payout. If you are only doing this to get noticed, you will be frustrated all the time because often the time spent is just gone. If you don’t enjoy it when it happens, it’s just an annoying waste of time.
It might seem that subliminal self-promotion of this kind has become much harder these days because it is so much easier to throw some content together. And it definitely is much easier to do an irrelevant job of it: LinkedIn is packed to the rafters with content of low value. But, lots of low value content was never what it was about. It is still possible (and not even very hard) to stand out by creating high value content and/or great open source contributions. But that does take time. Lots of time.
So here’s the conclusion of part #2: Make sure that you become well known as an expert in a few fields and a valuable contributor.
Which brings us to part #3:
We now need to talk about the final ingredient for success and that is unfortunately the one that is least under your control: You need luck. Preferably lots of it.
A friend of mine always says: I’d rather be lucky than good!
Without luck, nobody fares well (Dutch saying) and you need a fair amount of luck to be noticed by the right people for the right gig at the right time (meaning: a time when you are able to do the right thing). I was lucky when Google called me back in 2006 and I was lucky that I was in the circumstances to pack up and move to another country to join them.
Q: Without that lucky break, would I have been doomed to continue writing terrible Java programs for a bank and helping them configure their Logical Volume Manager?
A: Maybe not…
There is a famous saying, popularly ascribed to golfing legend Gary Player, that goes like this: “The harder I train, the luckier I get”. I won’t go as far as to say that you can create your own luck, because that is clearly just new age BS, but I will say that you have at least some control over your circumstances and you can create a situation in which it is getting more and more likely that you will eventually get your lucky break. I truly believe that with all the setup I had done by 2006, that call would have come eventually.
Another good strategy is to help Lady Luck a bit. All the efforts I outlined above will eventually get you in touch with people at the companies that you want to work for and you can ask them to refer you. Most companies I know like to work through referrals and so if you make yourself hireable you also make yourself a good referral.
For instance when I got hired by OpenAI, I had a meeting with a recruiter where we went through my LinkedIn to see who I could refer for a position in the company.
Part of stacking the deck a bit in your favor is making sure you are in the right place. Not just knowledge and experience wise, but also geographically. I know y’all have been reading a lot about remote work, but to really put yourself on the map you need to be in the right place on that map.
It has probably not escaped any of you that a lot of companies, and especially the more interesting ones, have been executing a move back to the office. Even the ones that do support remote work are often not set up to deal with the labor and taxation laws of every possible state or country, and therefore limit the places where their staff can live and work. Example: One of the best network engineers I ever worked with lives in northern Arkansas and doesn’t want to move. Now I got nothing per se against northern Arkansas, but it is not a hotbed of big tech, so when he was ready to switch jobs, there were not quite as many opportunities available to him as his qualifications would have justified. It’s boring but it’s true: You probably want to be in Silicon Valley, with maybe New York and Seattle as runners up. If you’re not there, at least be willing and able to move there.
Speaking for myself, I did my career a huge favor when I moved to the US. To be sure, I was doing just fine in Zürich and was having a great time of it, but really Google was the only show in town. When I moved to Boston, I suddenly had lots of opportunities that I did not have before. And really, if my career was all I cared about, I should have moved to Mountain View in back in 2008.
I do realize that it is not always easy to move to the places where you need to be in order to have access to great opportunities. Some countries make it outright impossible to move there or seem hell-bent on making your life as difficult as possible. For many people emigration means a lot of hassle, lots of risk, and tons of more or less permanent uncertainty and insecurity. That is sad but that’s life; it’s not fair, but your only option is to play the hand you are dealt. Look at me: I had to marry an American woman to make my move happen 🙂.
I can recommend this approach, although it does mean that I now have to do Fahrenheit, miles and gallons because apparently the metric system is part of the slippery slope to socialism.
It will come as no surprise to you that all of this takes time, so you better not be in a hurry. I bumbled around for most of my career and therefore it took me over 20 years before I got my big break. Since you have all sorts of advantages that I did not have, you might do it in 10 years, or maybe five, but it is definitely not a “next week”, “next month”, or even “next year” thing. I won’t insult your intelligence by saying that patience is a virtue, but you will do well to remember that in the end, everything that is worth it, is difficult. And please don’t forget to be happy about your journey even as you are on it.
"The time spent on Prolog was mostly wasted".
I might have said that for myself (I even wrote a Masters thesis about extending Prolog and efficiently implementing it), but Prolog forced me to learn a new paradigm of programming and that has been useful (Lisp, Smalltalk, APL, Erlang also taught me new paradigms). And I learned SQL by asking a colleague at IBM's Almaden Research how to translate my 5-line Prolog queries into SQL and he'd respond with a page of SQL.
Now that I'm retired, Prolog is an amusing hobby (https://github.com/SWI-Prolog).
BTW, like you, I also got lucky (a Google recruiter found me in 2004 - and I failed the interview - but I got a second chance a few years later).
Like your writing, Jos!