I have a motto that I live & die by re: How do I get hired as a Software Engineer?
And that motto is to build everything. Build the frontend, build the backend, and deploy your servers. If you know how to do everything, then you are probably 9x more valuable to your employer than if you were just a frontend, or just a backend, or just a dev ops engineer. 3x for just knowing 3 different skills, 3x more for the cost of recruiting, onboarding, and hiring a new employee to do one of the 3 jobs.
So to get hired as a Full Stack Engineer in 2018, here are the things you need:
- Frontend - You need to be able to take designs & mockups and turn them into a nice frontend. Learn view frameworks such as React.js, Vue.js, & Angular.js. Learn React.js first. It’s the most complete solution of the group and has the best ecosystem.
Build mobile apps as well. Learn Android or Swift or even React Native.
You also need to be able to contribute some in the design process and especially with UX and user flows. You should aim to fully understand the user’s perspective and build a flow that makes sense for the user using your app.
In short: You need to be able to build a great experience for your users.
- Backend - A pretty website with a intuitive user flow? That’s only 1/3rd of the battle. The next part is being able to define data flows, API endpoints, and processing on the server side. You should know web frameworks such as Node / Express, Python’s Django, Ruby on Rails, Golang, Java Spring, and more. I’m partial to Django because it’s so complete and you can get something off the ground really quickly, but if you need something *really* fast (most people don’t), people love Java, Express for certain situations, and even Golang.
You need to be able to take a request for data from the frontend, grab the data from a database, format the data for return, and then return the data to the frontend.
Ideally you can write optimized API endpoints such that the requests don’t have high load on your server and also return to the frontend quickly.
This part of the app usually isn’t seen by any users, but when it’s bad, your users will feel it. The unsung hero of all applications.
- Deployment - Have a nice frontend and a robust backend? Now you have to get it out into the world. You should be familiar with ideas such as load on a CPU, network requests, load balancers, auto-scaling the number of servers. Use a cloud service like AWS, Digital Ocean, Microsoft Azure, or Google Cloud Compute.
Docker here is your friend! It helps you create virtual environments exactly as you want them and you can run them on any machine. There are other cool tools like Ansible and Terraform that help you define the state of your deployment environments.
Learn about things like Redis which can help take load off your DB. Learn the difference between cloud instance sizes and don’t overprovision. And also don’t underprovision. Deployment is a huge beast in and of itself, but get to the point where you can build a frontend, build a backend, and then put those things up into the world.