The reason behind
I always talk about my experience, my first technical test when it comes to development, basically the interviewer told me: "Hey, I'm looking for a frontend developer*, you're a great frontend developer that fits the position with all the requirements, unfortunately, you don't know anything about backend but the basics, sorry".*
I was impacted by that interview because I applied to get a frontend-developer position, but I was supposed to know about the backend and how to configure a server.
Most of the companies, in reality, require a full stack developer, however, they just mention one stack (frontend or backend) because that's the focused workload the developer would have if they get the position.
A lot of beginner courses for web development just focus on frontend development to land your first job, because it's "easier", but you need to be aware of the full stack and how it works, and how to build your full-stack web application.
I didn't know that, I was confident that by just knowing React, I'd get the job. Don't get me wrong, maybe some companies wouldn't care about you know the backend stack, but your resume can stand out if you know it.
During this year (my last post was on Sept 21), I focused on backend development, and thanks to that, I got my first job as a Business Analyst for a big company, which in essence is not a backend-developer position, but it helped me build strong concepts about the backend and how it works and hopefully I can get that job I missed in that interview for 2023.
So, what's the guide?
Of course, there are other concepts to know about, but those are the most important tools you need to learn if you want to be a front-end developer (plus a good framework such as Vue, Angular, or React).
However, when it comes to backend development, I found it confusing, because there are so many ways to become one, several programming languages, etc.
I have a proposal on where to start and how you can prepare for your next role as a back-end developer.
Frontend advanced concepts
Before preparing with the backend topics, prepare yourself on more advanced front-end concepts related to the back-end.
Fetch API - JSON: If you have worked in the front end, you should be familiar with this concept, as all the data you display in your web application, comes with this format.
HTTP Methods: Either by using a form or getting information from an external server, you need to communicate your app by using HTTP methods, the most common ones, GET, POST, PATCH, PUT, and DELETE.
Backend as a service: Maybe you don't know how to create a server, but some services do that for you, Firebase and Supabase are good tools to give you an idea of how the backend works.
I'll give some topics and talk about general information that can be useful to learn. My proposal is in order, so I recommend you investigate the topics one by one as a roadmap. Databases are the first thing you should learn.
Database normalization: A database is a system where you can store data, to do that, you use Database Management Systems (DBMS) like MySQL or SQL Server. However, you don't only store data as you want, there are some best practices and patterns you need to follow to have your database as optimized as possible, that's called normalization.
Types of databases: There are two types of databases, relational and non-relational. Investigate their advantages and disadvantages.
Relational databases (SQL) have a fixed structure, imagine you have some Excel tables and you can join them by using a key, which is a field that's common between two tables such as an id. To learn this type of database, definitely you need to learn SQL, that's how you query and post data.
Tools: MySQL, PostgreSQL, SQL Server.
Non-relational databases (NoSQL) are not fixed and don't follow a pattern, they are created to scale fast and be flexible. Most of them follow the concept of a document, which is similar to a record on a SQL database, the difference is that a record can have different fields. However, you always need to follow a schema as a best practice.
Tools: MongoDB, Cassandra DB, Firestore
ORM: This is nothing but your programming language communicating with your database, it's not required for you to learn how to make SQL or NoSQL queries, you only adapt a framework from the language to the database and that's it. It works by mapping the database elements into objects by using object-oriented programming.
Tools: Hibernate, Sequelize, Nest, Mongoose, TypeORM.
Application Programming Interface, is basically how an application communicates with another one, you create certain endpoints that your application will use to display data (this is the core job of a backend developer).
You should be familiar with this when it comes to consuming APIs on your backend application, but a backend developer builds these endpoints for the frontend developer to consume them.
Backend framework: To build web APIs, each programming language has a framework, Java has Spring, C# has .NET, PHP has Laravel, Python has Django, Ruby has Ruby on Rails, and NodeJS has ExpressJS.
REST APIs: This is not a tool but a standard you need to follow, you can have the technical skills with the programming language you choose, however, this pattern is agnostic, you need to build your APIs by following some rules, such as naming, cacheability, request and response independence, scalability by using a versioning system.
HTTP: I already mentioned it, but in this case, you need to have a deeper knowledge about it, HTTP contains a request and a response, and that information is handled via headers which are metadata that tell us how the communication is done, and the body, which is the data itself. There can be some variants to the response and request and it can be done by using parameters in the URI of the API. An HTTP response contains some codes that will communicate what happened with the requests, those codes are 1XX which means information, 2XX which means success, 3XX which means redirection, 4XX which means a bad request or client error, and 5XX which means a server error.
Authentication: As a best practice, an API shouldn't be exposed anonymously to the public, you need to identify the users (clients) that call your APIs, you can do that by using different methods. API keys, OAuth, Single Sign-on by SAML protocol, JWT, etc.
All the above is executed in a computer, but not any computer, it has to be a supercomputer capable to host a lot of users of your application at the same time, and that's called a server.
Unstructured data storage: You won't only handle data, you will handle files, such as documents, images, video, audio, etc. that are classified as unstructured data that can be queried as a blob file. The place where you have these files can be different from where your web application is hosted.
Cloud computing and load balancing: You need a supercomputer, but having it in your house is something that you might now want to do, it's expensive and space-consuming. There are companies that will rent you a supercomputer for less money like AWS, Google Cloud, Azure, Heroku, Digital Ocean, etc. You create a virtual machine and install your application dependencies, then you create a public IP address, so people can access your application through the web. If your application is too big, you can use several supercomputers, and install a load balancer to distribute the traffic, so your application would never break (most of the time).
Web servers per se: Okay, you have a supercomputer, but you need software to handle your users' requests and understand what to do with them. The most popular software web servers are Nginx and Apache. Once you turn on a server, your computer is ready to listen to any requests and redirect the user to the right resource.
Containers: Sometimes creating a virtual machine in the cloud might not be a good option, because setting up a supercomputer sounds complicated, and indeed it is, however, if you just declare what are the components and dependencies that your application will use in a file, container services can do the hard work for you. The most common service is Docker.
Microservices and orchestration: Depending on the architecture of your application (monolithic or microservices) you might use multiple containers. Modern software development recommends dividing your application into small chunks called microservices, which are intended to perform only one thing at a time. You integrate those microservices (using containers) and organize them to work as a whole. That's called orchestration. The most popular orchestration service is Kubernetes.
CI/CD: Software is never final, if your application wants to live for a long time, you need to update it and adapt it to any changes in technology. Continuous integration and Continuous development are related to it, as to how to deploy any changes and updates in your application.
Web security: HTTP requests and responses can handle sensitive data, so you might want to look for ways your application is secure, such as implementing password encryption, making vulnerability tests on your server, HTTP headers that apply content security policies, SSL and TLS protocols, etc.
As you can see the road to being a backend developer is long, every topic is extensive but with patience and handling the basics of every topic you can be considered a full-stack developer.
In the beginning, I just wanted to be a frontend developer, but when I started to learn about the backend, I changed my mind and I wanted to learn more about it because it's more extensive and it covers more learning areas. In the end, it's your decision but definitely knowing the backend, as I mentioned, can stand out your profile.
Ps. I haven't posted for a while, this year has been amazing, I've got a Business Analyst job, I passed the Associate Cloud Engineer certification, I graduated with a Bachelor of Business Administration, I passed a Lean Six Sigma Yellow Belt certification, wow, a lot of things, but I'm now back on track.
As per the above, I strongly recommend you Brad Traversy's course that's definitely amazing if you want to learn the backend using NodeJS and Express.