I left Twitter several weeks ago. It looks like I need to not only decide where I want to work next, I might also need to decide what I want to specialize in as a programmer. Apparently, there's less and less demand for full-stack web developers or generalists. Most open positions are for specialists.
I've always been a polyglot. I really like learning new languages. Even though I'm mostly a Python expert, I love to learn as many new languages as possible. For instance, I accomplished the following just while I was at Twitter:
- I built a custom supply chain management system in Python.
- I technical edited two Scala books.
- I learned Go fairly well.
- I learned Android at a beginner to intermediate level.
- I learned Objective-C and iOS at a beginner to intermediate level.
Another thing that sets me apart from most programmers is that I'm a friendly extrovert, and I like giving talks. Given the above, developer relations is a natural fit for me. I did that for two years at Google.
However, it seems like that's not enough these days. It seems like most companies and most recruiters are really only looking for specialists. It seems like these are the specialties I could conceivably go after:
- Ruby backend programmer
- Go backend programmer
- Scala backend programmer
- Developer relations (mentioned above)
- Distributed systems engineer (cloud computing, AWS specialist, etc.)
- DevOps engineer
- Data scientist (machine learning, big data, etc.)
- Hadoop specialist
- Android engineer
- iOS engineer
- Software engineer in biotech
- Contractor or consultant
Developer relations is fun, but I'm not sure it's a good idea to bank my entire future on it.
Distributed systems, cloud computing, AWS, SRE work, DevOps, etc. are all interesting to me. However, I'm not sure I can convince anyone to give me a job doing these things. Furthermore, I'm also not sure these things are the right thing to bet my career on. On the other hand, I'm a lot more interested in cloud computing than, say, frontend work.
I have an interview at a biotech company. That could be promising. That could be really good for my career, or a dead end for my career. I'm not sure.
I'm reluctant to become a contractor or consultant. It seems to me that once you become a consultant as an older programmer, it becomes very hard to get hired as a normal engineer at many companies. One of my buddies is a brilliant older programmer (UNIX®, MIT AI lab, various wireless hardware and software systems, etc.) but companies like Google won't hire him anymore. I think being a contractor or consultant has a lot of pros and a lot of cons. I can't even wrap my head around whether or not it's a good idea to start doing.
Furthermore, I've noticed that the fewer people have a skill, the easier it is to get the job. For instance, it used to be really easy to get jobs because I knew Python and whatever Python web framework happened to be popular at the time. These days, everyone knows Python, so it's really no help at all.
What's certainly true is that interviews are getting much tougher! Every time I have to interview, I'm fighting against the best and brightest students from all over the world. They're mentally quicker than me, willing to work more overtime, and they cost a lot less. Furthermore, now that Python has become so ubiquitous at Universities, this battle is more fierce than ever. Furthermore, the amount of code companies expect you to be able to write in an interview is getting harder and harder.
On top of all of that, I think the cards are institutionally stacked against more senior engineers. I saw three principal engineers interview at my previous company. Two of them were buddies of mine, so I knew they were really good. That company turned down all three of them.
Some companies have also resorted to using timed programming tests like HackerRank. I like the fact that HackerRank is an objective measurement of a candidate's skills. However, it favors the young since it requires lightning quick thinking and ignores all of the other skills a more seasoned engineer has learned such as testing, design, scalability, requirements gathering, teamwork, agile, code review etiquette, etc.
Furthermore, anytime someone gives me a timed programming test, I completely fall apart. Usually, to be successful, you have to be creative enough to come up with an elegant (i.e. efficient) solution. However, having a gun put to your head is the enemy of creativity. I've been getting better by practicing at LeetCode, but I'll probably never be as good as a bright Russian kid who's been training for programming competitions for years.
The next problem is that the more companies you've worked for, the more hiring managers question whether you're a problematic employee. 2 years at Google right after college? You must be awesome! 2 years at Google, 2 years at Twitter, and 13 other startups? There must be something wrong with you! Forget about the fact that most of those companies don't even exist anymore ;)
The last challenge I'm facing is that the location of my house in Concord means I can really only work at companies in San Francisco or the East Bay. Unfortunately, the only thing harder than commuting to Mountain View (or other parts of Silicon Valley) is trying to buy a house there! Since we're in the middle of adding onto my house, I don't think we'll be moving anytime soon.
In summary, I'm pretty sure I can find my next job. What about after that? Will it keep getting harder and harder as I keep getting older, and there are more companies on my resume and more specialties? What should I do for the rest of my career? I just hit 40, and I'm wondering, am I going to keep on being able to put food on the table when I'm 50 or 60?
Finally, let me express my thanks to all of my friends who have been so supportive lately as I struggle with these questions. My buddies Ryan Larrabure, Alex Martelli, and Jarek Wilkiewicz and all my IronPort co-workers have been surprisingly encouraging. Love you guys!