Tech (“Take”) 2: Top skills software engineers should know
By: Marcus Seungho Lee
Tags: Job Hunting, Coding, Software Engineering, Software Development

Cuz graphics like these though helpful may be a bit intimidating at first glance (source: https://miro.medium.com/max/2434/1*qan3U0peL-CSdtKaCwKohA.png)

So I've been conducting a multi-month experiment on what are the most commonly sought after skills for software engineering job listings on LinkedIn.

Here's what I found:

Modern front end framework (I.e. angular react or vue) — In particular creating dynamic UIs + Consuming back in services (Most commonly through requests that follow HTTP protocol)

Why I think this is being asked for:

Gone are the days when creating a static website was good enough. The bar has been raised and users expect interfaces that change according to their behaviors. This is totally possible with plain JavaScript but these modern frameworks make it so much easier.

Some of these websites have a lot going on as in there's just a lot of stuff. Breaking down each page into smaller components (That have the added benefit of being reusable) Makes it a lot easier to Work with. These frameworks allow you to do that with components.

Often times the user interface will show data that is being provided by the backend. So if you don't know how to interact with the backend as a front end engineer you're in trouble.

2. Experience creating backend APIs aka. servers that send back some data in response to requests (example tools you can use to create these things: node for js, spring web for java, django for python, .NET for c#)

Why I think this is being asked for:

Most applications are designed in this way where the front end communicates with the backend to do some stuff (after all you want your front end as much as possible to just be about the interface and nothing else) And communicates using requests that follow HTTP protocol. So It makes sense then that it is expected that you should be able to create these backends that can receive these requests And do What's expected of them by the front end (Normally this involves Interacting with a database or communicating with other APIs)

3. Knowledge on how to work with at least one database (If it's relational it's mostly postgreSQL and if it's non-relational Then it's mongoDB)

Why I think this is being asked for:

Data is the driving force behind most all companies. They gather data about people and use that to inform what they should work on next. If you don't know how to work with data In this day and age you might as well be a dinosaur.

As for why it's these two particular databases I have no clue I'm sure they provide a particular set of advantages compared to their Alternatives that make them more appealing to businesses

4. Knowledge on how to work with cloud technologies (AWS, GCP)

Why I think this is being asked for:

Companies used to have their own infrastructure which really just means they were in charge of keeping up all their servers Which were the things that client browsers made requests to in order to get back websites. The thing is keeping all those servers up cost money and a lot of it. Enter cloud technologies. You don't have to manage your servers anymore just pay another company to manage them for you (And by the way that company is probably way better at managing those servers) At a fraction of the cost. Who would say no to that?

Not to mention cloud providers provide way more than what I just mentioned above (i.e. If Your servers are getting hit like mad and It looks like they are reaching capacity it will auto scale By setting up more servers so I can divide up the work load)

5. Knowledge of containers and container management systems (Like Docker and Kubernetes respectively)

Why I think this is being asked for:

As a developer working with a team of developers you want to avoid the classic problem of “The code that I wrote is running perfectly fine on my machine I don't get why it's not working on yours!”. Docker eliminates the problem by guaranteeing that your code will work on any machine (How it does so Is by having The code run inside an environment where it’s guaranteed to work: Namely 1. a virtual Linux OS and 2. a container with dependencies properly Installed and the correct start command to start the application)

If it's clear that we want to use Docker then it becomes clear why we want to use container management systems like Kubernetes. If you want to put a service in a Docker Environment because you want To guarantee that it will run properly, then why not put all your services in a Docker environment to guarantee that they all run properly. If you have all these services in a docker environment, You might want an easier way to manage them. Enter container management systems. An analogy really drives the value of container management systems home. Imagine an orchestra of different instruments. These instruments are the different services running in a Docker environment. Trying to manage the whole thing by communicating with each individual Instrument is a lot more work than just having a conductor and communicating with That one person to make the correct adjustments that you want.

6. Micro services which, In its most elementary sense, is the practice of breaking down your application into many smaller parts

Why I think this is being asked for:

Companies used to Not follow this practice and just have one huge application as a single entity. The consequence of this is that Scaling the application is inefficient. For example let's say your application has this one part that is Used Way more than any other part of the application so you want to give it more capacity to deal with all this usage. How can you do that? Because the application is pretty much a single entity/unit you don't have the option of Isolating this heavily used part and scaling it by itself, you have to scale the whole damn Application all together! Even though there's no need to scale any part aside from this one heavily used part. That's inefficient. If you had broken down your application into smaller parts then you could have chosen to scale just that part while leaving the rest as they were. So it would cost a whole lot less.

Side note: Choosing to work with micro services Does come with the burden of understanding a more complicated flow of data — Since you're breaking a single thing into many different things, All these different things will have to pass around data to one another which was not something you had to do when everything was just packaged into a single thing/entity.

7. All the stuff that has to do with Designing, building, And maintaining performant and scalable software (Which includes but is not limited to: direct experience, Systems design, Data structure and algorithms, Design patterns, OOP + SOLID)

Why I think this is being asked for:

At the end of the day every company wants to reach as many people as possible even the smallest of start ups have that goal. So it makes Sense That these companies want to have people who know how to create and maintain applications that would be able to withstand as many people as possible Because hopefully one day that goal will become a reality. Sure you may be great at creating a Fully functioning prototype that has a slick interface and a working backend, but if it can only handle four people using it at once that's not good enough and that's not what the company wants.

direct experience — it’s probably the best thing for you to have because there’s nothing That can replace the learnings of actually having to create stuff that is used by millions of people everyday

Systems design question practice — It pales in comparison to the above option because it’s all theoretical but if you don’t get the opportunity at work to create Scalable things used by millions of people this is probably your best alternative

Data structure and algorithms — If your goal is to just make something work, Data structures and algorithms don’t really come into the picture. This is because the Purpose of knowing these things is when you want to go beyond making something work into making something efficient. For example if you want to do One operation a lot, it would help to know which data structure is the fastest at doing that operation and using it. And to even have a way to measure which code is faster than another code when given massive inputs, Well that's what knowing time complexity In the form of big O notation is all about. (Side note: It's because FAANG Has to deal with so much scale that I think they're interviewing process revolves around data structures and algorithms and systems design)

8. Skills that say you have experience working in teams (i.e. git)

Why I think this is being asked for:

This one is pretty obvious. You're going to work in a team when coding. If all you have is experience working on code by yourself they'll need to teach you how to do that and that’s something that Another candidate might already know

I’m sure there’s many more but those are the Skills that kept popping up the most to me in those Daily linked in job postings.

If I were to gage myself according to these skills I’d say…

I have some in-depth knowledge on 1,2,3 as in i’ve worked on multiple projects involving them

I have some working knowledge on 5, 6, 8 as in I’ve touched on those subjects at least once (i.e. worked w/them in a tutorial)

I’m unfamiliar on 4, 7

Also for 3 I’ve worked for the most part exclusively w/mongoDB and not postgreSQL

So now I know what to start shoring up!

Maybe you can also go through a similar activity to see what skills companies are asking for most often that you could improve upon!

Hope this helped!