Knowing HTML and CSS, working on user experience, developing web applications, studying computer engineering… There is no roadmap or magic guidelines that will turn you into an expert Fullstack programmer. But these are some tips to try to guide you along the way… and not end up frustrated.
There have been many times that I have heard conversations between developers (friends, co-workers…) about whether they consider themselves Frontends (FE), Backends(BE) or Full stack developers.
Historically there has been a habit of pigeonholing and classifying developers in the Backend or Frontend world as if they were something radically different. Nothing could be further from the truth.
It is not uncommon to find developers who claim to be experts in Node.js, React.js or any other framework/library in vogue. And I get it, I understand that we all have a strength and a technology that we are better at than another. But if you are really interested in continuing to grow and want to be what many call Fullstack programmer, sooner or later you will understand that it is not about any particular technology, neither Frontend nor Backend.
Being a Fullstack is about going deep and understanding the basics (and not so basics) of software.
Only when you start to stop differentiating between Frontend and Backend will you start to see things in a more generic way and find the common points they have, which are many.
The frantic pace of frameworks
As you will see I have insisted a lot on not focusing things in frameworks or specific libraries. But so you don’t think it’s “because I say so“, now I’m going to give you some data so you can understand how frustrating it can be.
You will find an endless list of technologies that is growing day by day, do you understand now why you can’t be obsessed with learning each one of them?
It is illogical, better to learn the common concepts that have the good use of them and then according to the characteristics of each project we will choose the one that best suits the needs and we will study its documentation.
Different skills of a Fullstack programmer
Well okay; but tell us now what are those good practices and concepts that can make us a better Fullstack programmer!
I would like to divide them into several parts: on the one hand we must work on our soft skills. We must also understand basic software concepts, the different technologies to communicate the backend and frontend of an application, the forms of persistence and if you hurry, and you want to have it all under control, a little bit of infrastructure and systems will not hurt.
Before we get into the technical stuff I would like to remind you that being a Fullstack programmer or any other developer requires certain non-technical skills. For your job you will want to work on:
- Your skills to communicate with the team
- Ability to solve complex problems
- Ability to be self-taught
Basically it all comes down to understanding that you will spend a good part of your career studying and learning new things. You will encounter complex problems that you must be able to break down into smaller problems and you will have to learn to think a little differently than usual.
For all this, you will also have to pay special attention to the way you communicate, so that the rest of the mortals can understand you easily.
Common software concepts
It doesn’t matter if you are programming in BE or FE. Wherever you are, you should start thinking in code without further ado. You should always keep the following concepts in mind:
- Try to organize your folders, files and the relationships between them following some kind of software architecture, the one that best suits you and the needs of the project.
- Try not to repeat your code, take advantage and reuse your classes or functions making them as generic as possible.
- Each function or class should perform a single task.
- Use clear namings, it doesn’t matter if they are a bit long, it is preferable that they are understood than short.
- Make your code thinking about future extensions you might need. This does not mean that you start coding things that you are not going to need yet, it means that when you have to add them you can add them without disassembling everything.
- Write a few lines classes and functions. If you have some very long ones it means that you are not fulfilling point two. Separate them into several functions or classes and make each one responsible for a clear task.
If you follow these tips you will be making it easier for you and your colleagues in the future. Your code will be much easier to maintain, extend, scale and test. Above all, don’t forget the tests, both in FE and BE.
BE/FE communication via APIS
As you know, normally an application communicates between the client and the server using APIS.
There are many types of APIS such as SOAP, RPC, WebSocket, REST or GraphQL.
The term API is an abbreviation for Application Programming Interfaces.
Don’t worry, I recommend that you don’t try to understand all of them but at least you should go deeper and understand which one you need in each project between REST or GraphQL.
At the moment I can tell you that GraphQL is ideal for more complex projects where you will want to make many queries to the server, more complex and not very well defined. However, if your project is simple and you have clear that it will be little more than a CRUD I encourage you to use REST for its easy implementation and configuration.
Fullstack programmer persistence
In this section you should mainly consider the two main types of databases; SQL (also called relational) or NoSQL (also called non-relational).
Despite being less flexible, slower and less scalable, SQLs also have certain advantages such as being easier to query and extract statistics from your data (because they are stored in a structured way) as well as guaranteeing data integrity.
In summary, it is advisable to use SQL for projects where the data structure is clear and we do not have large amounts of data to store (Big data). As well as for projects where a large number of users will concurrently access integrity-sensitive data.
On the other hand, NoSQL has great advantages in projects with large volumes of data that we want to store in its original format, with an unclear data structure.
Mainly they are faster, flexible and friendly with architecture changes, but on the other hand they are much more complicated to query.
Infrastructure and systems
It is not really the task of a Fullstack programmer to master the infrastructure and systems part but as part of a curious being that you must be, it would not be bad to have clear some basic concepts.
I encourage you to do some research on continuous integration and distribution. These two concepts encompass the series of tests (automated tests) and automations that are performed to take our code from the development phase to deploy in production.
For this there are multiple tools for both integration and distribution but we will leave that for the next article.
This article is not intended to be more than a guide to the concepts that you should study and internalize to be a full stack programmer. You are not going to learn these concepts here nor are they necessarily the only ones. It also assumes a basic knowledge of web and software development.