I asked a former Facebook software engineer their view on the 2020 software engineering landscape and various questions – See their opinions
Why would anyone want to become a software engineer in 2020 ? and what made you transition into it
I personally chose the field out of pure interest. My professional career naturally evolved from a hobby without much consideration, however being where I am now in 2020, I feel so grateful to be a software engineer:
I love software engineering for the power it puts at one’s fingertips and the amount of impact one can have. Whether one is interested in machine learning, building infrastructure, user interfaces, anything: There is a team out there that can use your help. “The world has never relied more on software which connects us in the world more so than in 2020”. For e.g from staying in touch with loved ones to ordering things online, or even tracking the spread of the virus using apps like in South Korea. I do not see software engineering getting less exciting or less demanding any time soon!
So back to the question, I would say people will want to become a software engineer, because we are in high demand , and even now with the corona virus and in the face of a global crisis that has not changed a bit !. The nature of our job makes it possible to be flexible and you can work from home, the financials are good, and work is often fast paced so your day goes quickly.
What personality traits do you need to be a software engineer
- Curiosity about inner workings of stuff: A really deep understanding of something which may not matter for the majority of your daily job; but when the moment comes and you know the solutions, it may save you hours or days (e.g. debugging something)
- Desire to learn new things: the digital world is constantly and rapidly changing; stay up-to-date in your area of expertise.
- Patience and dedication: Getting stuck sometimes is part of software engineering, but it is often where you can learn the most. Try unblocking yourself for 15-30min using resources at your disposal (at the very least, you’ll be able to ask a precise question at that point), then reach out for help. Being unblocked means you’re applying what you already know, but being blocked usually ends up with you knowing more than before.
- Open communication: Most software engineering projects are team efforts these days; companies value communication skills more and more as you climb the ranks. But there will also be plenty of opportunity for junior engineers to learn this from their peers.
- Logic: Software engineering always requires logical reasoning and thinking of some shape or form, from the planning process (e.g. what to prioritize and why) to the implementation.
What technical skills does it require to work on distributed systems
From experience, a deep understanding of all components involved: big distributed systems tend to fail sooner or later if there is the slightest chance that they might (Murphy’s law absolutely applies). You only know how to “expect the unexpected” if you know what to… expect, and this requires knowledge and experience.
- Rigorous reasoning: Again, to rule out failure one should ideally know how to formally reason about the system to some degree. If one is able to prove absence of certain types of potential issues, that’s great.
- Knowing and using verification or analysis tools: Why do mention formal reasoning yourself when there are tools? Still, one should understand them and know how to use them.
- Understanding monitoring and telemetry: Really, the system will have issues at some point. At this point it is crucial to find and fix the issue ASAP. That’s a nightmare without having data to look at that allows narrowing down/pinpointing the issue. So make sure you collect and understand such data while things are still working.
What would you say the most current technologies to learn are for 2020?
This highly depends on the software engineering area, but I’d recommend web technologies (TypeScript/React/HTML) to everyone. More and more stuff is on the web, and even app frameworks tend to smell more and more (or simply use) web technologies. These days: If you can master creating amazing websites, you’re almost automatically also a great mobile or desktop app developer! Tools and resources around web technologies are amazing, one can prototype and iterate super rapidly, and everyone already has world-class debugging tools on their machine: the browser. There will be more important technologies for, say, machine learning fans, but I guarantee that at some point in your career you’ll benefit from knowing the web stack as well.
Which behaviours would you say separates an average software engineer to a senior Software Engineer
I would define it as “the ability to quickly figure things out and behave accordingly”. So what are those senior behaviours? In my experience:
- Defining your own work: Junior engineers will obviously be told what to do, in well defined work items. Seniority means understanding what needs to be done, in accordance with team or company mission.
- Justifying your own work: Remember that you are getting paid, so at some point one’s work should provide value. This is not a concern for junior engineers: Your manager should make sure that you work on things that justify your salary. More senior engineers not only define new things to work on, they also make sure there is evidence/data showing that these things are valuable. Do experiments and estimate impact!
- Have the overview: Junior engineers don’t need to know what happens “down the hallway”; but just as new hires learn to understand their team’s mission and how their work relates to that, senior engineers understand what other teams do. Having this overview means knowing “the right person” in case of questions or discussions, making better decisions knowing what others already tried or are doing (and can even prevent accidental duplicate effort). On a daily basis it means cross-team communication and coordination. At its extreme, having the overview could enable identifying projects that the company is missing out on so far, and being able to coordinate what it would mean to make those happen.
- Take your superior’s perspective: A lot of what I mentioned falls into the scope of what engineering managers do as well, but that makes perfect sense. Managers rely on experienced engineers to provide them with the data they need to make the right decisions. Understanding what your superiors worry about paves the way to becoming a valued engineer in your team.
- Passion and recruiting: Being more senior often involves convincing other engineers of your ideas, or even attracting talented SEs from the outside. I think being passionate about your work is crucial in making that happen and motivates others to trust you.
Being highly talented can come in many forms, but it tends to result in “breezing through” or really mastering some of these aspects compared to average SE careers. Closely observe and learn from your more senior peers quickly!