Software Engineer Overview

By
Xinyi Chen

Fellow presentation and intro to your career path

Hi there! My name is Xinyi Chen, and I’m originally from Beijing China. I came to the U.S. in 2012 for high school (I went to high school in Maine). I then pursued a bachelor's degree in computer science and engineering at MIT (Massachusetts Institute of Technology). After graduating from college, I worked at Facebook for 4 years as a software engineer and then I started startup with 2 other friends and I’m now working my startup.

My story in computer science is a quite common but less told one. I didn’t choose my major because I learnt about it and became super passionate about it since I was young, or someone inspired me to choose it. In fact, I did not write a single line of code and knew nothing about computer science before entering college. My choice in computer science is the result of the combination of environmental factors, personal preference, and career development.

Although I’ve always been passionate about and good at STEM subjects, I didn’t know exactly which one I wanted to major in when I entered college. I had several candidates in mind – Math, Economics, Biology, Chemical Engineering, Mechanical Engineering, and of course, Computer Science. During my freshman year, I tried to get a taste of all of them. I went to all kinds of seminars, joined a MechE lab during the fall semester, took some Math, Econ, and ChemE classes, joined a Bio lab during winter break, and did some work at a Computer Science lab during the spring semester. After all these explorations, I got a grasp on what career development is like for these majors and how it feels to work in these fields. I found that a lot of the majors were very different from what I thought they were, and I thought I would like them, but I turned out not enjoying them at all. For example, I thought it was cool to design mechanical systems and build something that people could touch and use. However, after I went to the lab and got trained on those heavy and loud machines such as welding machines, I realized that mechanical engineering was not for me. In the end, I ruled out Mechanical Engineering and Chemical Engineering because I didn’t like them. I ruled out Bio because I knew that I’d mostly have to get a PhD degree or I’d most likely end up doing something not directly related to Bio, and I knew I don’t want to get a PhD degree. Then among Math, Econ, and CompSci, I thought all of them were interesting, but CompSci is the one with most job opportunity – from my observation, no matter whether it’s during career fair or during lab hunt, people with coding skills always had more choices than those without. Therefore, I decided to major in Computer Science.

After I graduated from college and entered Facebook, I thought that since I’m at one of the biggest Internet Companies, I should at least learn about its most successful and profitable product – Ads. Thus, I joined an Ads team and worked on Ads products for ~1.5 years. It was pretty rewarding to see those important metrics grow in the beginning. However, I personally didn’t feel that increasing those metrics made people’s lives better and I firmly believe that the ultimate goal of all technology is to build something that can enhance people’s lives. Thus, I switched teams – I joined a VR team because it was a very early-stage industry and product, and the company was and still is investing a lot of money and people in it. I really enjoyed my 2.5 years working on this VR team. Every time after we release a new product, I would look at people’s comments and also sometimes YouTubers’ videos about our products. No matter whether it’s positive or negative comments, I feel that my product is truly making an impact on people’s lives. Facebook owns Oculus which occupies the majority of VR headset market. Thus, I was also able to get some insights about the VR industry, including what people are discussing, where it is going in the long term, etc. Now I have strong faith in VR/XR industry and believe that VR/XR is a rising industry with tons of opportunities. Therefore, I left Facebook and started a startup with 2 other friends working on some VR products.

Computer Science career options

Here are some common career paths for students majoring in Computer Science. These are all IC roles that new grads can apply for. As you gain more experience in the industry, there are 3 common choices

  1. Become a manager
  1. Become a high level IC
  1. Become an entrepreneur / start your own thing
  • Product Software Engineer
    Design and build products and product systems. Some companies also further classify into backend software engineer, frontend software engineer, and full-stack software engineer.
  • ML Software Engineer
    Build and optimize ML models and ranking/recommendation systems to improve user experience or increase company revenue. Most big tech firms also have ML Infra teams which build the system that the ML models run on.
  • Infra Software Engineer
    Build low level systems and infrastructures that all services depend on. Infra software engineer is usually more technical focused and further away from products. They are crucial for products’ scalability, availability, and stability.
  • Product Manager
    Design product features, drive project execution across all functionals, put up product strategy. It’s harder to get a PM job than a software engineer job as a new grad. Common career paths are – join a PM program for new grad (such as Google APM, Facebook RPM) and then become a PM; or transfer from another job, such as product software engineer or consulting.

Main hard skills you use on daily basis in your current job

  • Web Development (JS/CSS/PHP/Python)
    Software products can exist in different forms – that can be a native app (e.g. Android/iOS app) or a web app. Web app usually has a shorter iteration cycle and is easier to develop, and thus it is very useful for a software engineer to know how to do web development. Web development includes both frontend and backend. The most common backend languages are JS (e.g. NodeJS), Python, PHP, and the most common frontend languages are JS and CSS. I’ve constantly encountered situations that need web development throughout my career as a software engineer.
  • Java/Kotlin
    Java and Kotlin are used to develop native Android apps. Native Android apps usually give users a better experience (versus web app) and native android gives developers more permission and freedoms and thus native apps can usually have more and higher quality features than web apps. But the downside is that native apps have a longer iteration cycle, because all the apps have to follow Google Store’s release schedule. I did Android development mostly after I entered VR industry, but it is very useful in general, because almost all apps have both Android and iOS native app version.
  • ObjC/Swift
    ObjC and Swift are used for developing native iOS apps. Similar to native Android apps, native iOS apps also give people a better user experience compared to web apps, but it has a longer release cycle due to Apple Store’s release schedule. I did iOS development mostly after I entered VR industry, but it is very useful in general, because almost all apps have both Android and iOS native app version.
  • Computer Systems
    This includes a wide range of knowledge, from understanding what CPU/GPU/memory/binary size are and how to measure and optimize them to achieve better product experience, to network systems such as HTTP/Web Socket and DNS, to databases. Computer systems include so many sub fields that it’s impossible to know everything, so what people need to know depends on their specific roles. Although I’ve learnt most of them at school, I forgot about them after tests because I was not using them and also most of my knowledge was still theories without practical experiences. So, I learnt most of the computer system skills when I encountered them at work. As a new grad, as long as you hold basic knowledge so that you can ramp up on specific system quickly when needed, you are all good.

Soft skills you use on daily basis in your current job

  • Problem Solving
    From software bugs to system design flaws, software engineers are constantly seeking solutions to problems. This include indentifying the problem, root causing the problem, fixing the problem, and design system that can prevent similar problems in the future.
  • Product Thinking
    As I mentioned earlier, I believe that the ultimate goal of all technology is to build products that can enhance people’s lives. Therefore, understanding what painpoints users are having and how to effectively and systematically solve them is crucial for software engineers. I usually start with a hypothesis that I derive from my own experience or observation and then do some user research (or at big companies, there will be dedicated user researchers who would carry out these research and I’d go listen on the side) to understand what users really need.
  • Communication
    As a software engineer, I work with all different cross functionals everyday, including designer, content design, product manager, data scientists, product operartions, etc. Being able to communicate with them effectively can make my project progress more smoothly. More over, I also need to work and collaborate with other teams. In this situation, we’d first need to understand each other’s goal and ask and see whether there is a way we could achive goals on both side. Of course, this sometimes involves some negotiation skills because sometimes I need to convince other people to support my team. Thus, having a strong communication skill is invaluable no matter what role you are.

Your personal path

I didn’t struggle much when I was trying to find a fulltime job because I interned at Facebook during Junior year summer and got a return offer. However, I did hand out many resumes before that and got many rejections. Back then I was very nervous when submitting applications and also receiving emails. I had to mentally prepare myself before opening those emails. However, I think there are 3 things I did correctly that helped me secure a job.

  1. Start with something small
    Building up resume is like rolling a snowball. It’s hard to get your dream job at your dream company without any prior experience. So, start with something small but related. For example, working in a lab at school, working on a side project, working at some small companies. This way you can gradually build up your resume and finally reach your dream job’s bar. I had nothing on my resume during my freshman year when I went to the career fair. I was very nervous and felt I knew nothing while others seemed to know a lot of stuff. This feeling of incompetence peaked when a recruiter asked me for a resume, and I handed over a resume with no work experience section and with education background and activities only. So that freshman summer I ended up joining a school lab to gather some projects and experience to put on my resume. My sophomore year career fair was slightly better but not much, but I managed to get an intern offer from a startup company and I continued doing computer science lab work for a lab at school. So, in junior year, I can my work experience section had 3 experiences that I could talk about with recruiters and easily got interviews from many big companies. My job-hunting journey became much smoother after that.
  2. Start preparing for interviews early
    I started practicing Leetcode problems in May during Sophomore year so that I can make sure that I’m well prepared by July and August. This helped me a lot in getting a good internship in junior year.
  3. Start applying for jobs early
    Submit resume and application when headcount is abundant. It’s way easier to get a job during this time than when headcount is getting tight. I started submitting resume for Junior year summer internship during August of my Sophomore year summer and got many interviews and offers early during the school year. It doesn’t mean that you will not be able to get a job if you start late, it’s just easier if you start early. Even if you don’t get a job in the beginning, you’d gain interview experiences which will help your future interviews. So don’t start your interview season with your dream job, start with some other company to try out first. I started applying for summer internships in March during my Sophomore year. I did get an internship but I think I could have got a better internship if I had started earlier. So, I started applying for internships during August of Sophomore year summer for Junior summer internships. And got interviews and offers from many big tech firms.

What would you tell your younger you regarding building your current career?

Believe in yourself and give yourself enough time to learn and grow. When I just started my career as a software engineer, there was a long period of time when I constantly doubted whether I could become a good software engineer, because I felt I didn’t know much, and it took me longer to ramp up on a project than other people. I spent a long time struggling and trying to convince myself that I could grow into a good software engineer. Now, after 4 years of struggling and learning, I can finally confidently say that I think I’m a pretty solid software engineer. During these 4 years, there were times when I repeatedly asked myself “should I switch to a different career path? Is computer science really the right thing for me?” However, I often found that these doubts did not help with anything. I grew most quickly when I forgot about these questions and just concentrated on the new skills or projects. Every time after I tackled a hard problem that I stuck for a long time or could finally speed up on coding after ramping up on new tech stacks, both my technical skill and my confidence would increase tremendously. Therefore, I wish I could tell the younger me to spend less time doubting myself and spend that time on learning and coding instead.

Final tips and insights

Take advantage of all resources you can reach while at school and during early career to learn about all potential career paths. This can help you decide what career path you want to pursue early and thus have less opportunity costs later to switch career paths. After you make up your mind, believe in yourself and just focus on learning and growing. But never aim for something big in the beginning – start with something small and reachable and build up your skills from there. These steps will help you avoid detours in your career development.

Back to Career Book
Arrow right
WORK WITH US!
Arrow icon
OPEN AVENUES
Arrow icon
WORK WITH US!
Arrow icon
OPEN AVENUES
Arrow icon
WORK WITH US!
Arrow icon
OPEN AVENUES
Arrow icon
WORK WITH US!
Arrow icon
OPEN AVENUES
Arrow icon
WORK WITH US!
Arrow icon
OPEN AVENUES
Arrow icon
WORK WITH US!
Arrow icon
WORK WITH US!
Arrow icon
OPEN AVENUES
Arrow icon
WORK WITH US!
Arrow icon
OPEN AVENUES
Arrow icon
WORK WITH US!
Arrow icon
OPEN AVENUES
Arrow icon
WORK WITH US!
Arrow icon
OPEN AVENUES
Arrow icon
WORK WITH US!
Arrow icon
OPEN AVENUES
Arrow icon
WORK WITH US!
Arrow icon