Two months ago, Arpit Jasapara and I recorded a podcast for UCLA's UPE organization, a computer science honor society that I was involved in when at UCLA.
As we discussed various aspects of my path since graduating from UCLA, it was clear that in our uncertain times, what to do after graduation is as big a question as ever.
There are multiple levels to that question, too:
Students finishing up a four-year undergraduate computer science education, especially those at UCLA, are in a lucky position: software is eating the world, and you are equipped to work in any software engineering environment -- you are even equipped to create new ones, if you so please!
So...what to pick?
If you have a desire to continue going to school, and have the financial ability to do so, why not! If not, though, and you need to get to work, that's what I'll focus on below.
The decision of where to work, and specifically what subdomain of software engineering to pick, tends to be a difficult decision -- I remember fearing overly restricting my options too early. The fear stems from two main concerns: (1) choosing a job, and therefore specialization, which you don't enjoy long term, and (2) by making this choice, falling behind in the actual area of interest to you.
In hindsight, though, that first choice of specialization has not proven that critical. I've been immensely fortunate to find a specialization, mobile, that I am truly passionate about and don't plan to leave anytime soon, but I am also cognizant that I can jump ship to another specialization, such as becoming a data scientist, at any point if I wish, where I'd have a lot of ground to catch up on since my data science skills are entry level at best, but I have a wealth of mobile knowledge that I would be able to leverage to further improve the data science discipline. While just an anecdotal example, this should show how the two core fears aren't anything to worry about: there is always a path to switch specializations, and deep knowledge in your current specialization will be welcomed breadth of knowledge in your new area of expertise and interest.
Specialization in software engineering is often thought of through the T-shaped developer metaphor. This concept simply illustrates a specialized generalist, a software engineer with deep specialization in a specific domain (the vertical bar of the T) combined with broad knowledge of software engineering (the horizontal bar of the T). This metaphor only complicates your first role choice, though. The T shape emphasizes the initial specialization, when in reality the T-shape is not, and never has been, how all successful engineers model their skillsets.
If a T-shape is not the end goal, then what is? A V-shape, of sorts! Deep expertise, surrounded by adjacent expertise of ever decreasing depth. The shape of a V itself is still just a metaphor, the idea it illustrates is that excellence in software engineering comes from the delicate balance of specialization and generalization. The shape itself is irrelevant, it's the surface area of the shape that matters: as long as it continues to grow throughout your career, you are making progress.
Back to the choice of a college senior, then: what specialization to pick? Just pick one that you are interested in now. Do not worry about whether you will be interested in it in a few years, you likely won’t even be working on that anymore at that point. The trick is to pick something to get started on your journey into specialization, while always knowing that the journey is never linear. Follow your passions, and listen to your instincts. Continuously evaluate your work and your happiness, and adjust your work as needed -- switch companies, start your own, find what works best for you. Continued growth as a software engineer will require continued learning, and you'll have to put in the work!
To close, college seniors in computer science programs should not fret too much over what discipline of software engineering they fall into in the next few months. Definitely follow your interests, and align as many of your personal passions with the company or organization you join, but there are no wrong choices. Can't decide between offers from Instacart as a data scientist, or a generalist applications engineer at Google? Both those opportunities are amazing! Either choice will lead to immense learning, and in turn career growth. Make the best choice you can, and just remember this gem from Steve Jobs (from his 2005 Stanford commencement speech):
You can’t connect the dots looking forward; you can only connect them looking backwards. So you have to trust that the dots will somehow connect in your future. You have to trust in something - your gut, destiny, life, karma, whatever. This approach has never let me down, and it has made all the difference in my life.
If you are unsure between disciplines and/or positions to look for, let me know in the comments! I'll respond with any insights I think could help in your decision 🙂
Benjamin is a passionate software engineer with a strong technical background, with ambitions to deliver a delightful experience to as many users as possible. He previously interned at Google, Apple and LinkedIn. He built his first PC at 15, and has recently upgraded to iOS/crypto-currency experiments. Benjamin holds a bachelor's degree in computer science from UCLA and is completing a master’s degree in Software Engineering at Harvard University.