FullStack Developers are the most in-demand developers across the world. The massive demand for them is because they can build software applications end-to-end, from the initial prototyping to the deployment, making it live for the end-users.
If you’re someone looking to build a career in FullStack development, you have made a good choice 🔥.
Before moving ahead, let me tell you that the term FullStack is very broad. There is no end to the technologies you should know as a FullStack developer but don’t freak out, there is always a bar on what is the minimum set of skills required.
So we will focus on them, and then we will also see what other skills we can add to our skill set to stand out in the crowd.
Let me first explain how a simple FullStack application works and what are the different components involved. Once we identify the components involved, we will see different technologies that can be used to build that component.
So let’s begin.
How does a FullStack application work?
We will take an example of a simple web application and try to understand how that works. So let’s take the example of Instagram.
When you head over to instagram.com, you see a login form where Instagram asks you to enter your phone/username/email and password to log in. So whatever you see there and interact with, as a user, is called User Interface or Frontend of the application. Remember, this is one (our first) component.
Once you enter your username and password and click on the Log In
button there, your request goes through networks and reaches the Instagram server running somewhere else, in any part of the world. The request that reaches the server carries the username and password that you had entered.
Now, the question is who took that data and made it reach the Instagram server? The answer is – HTTP.
HTTP ( Hyper Text Transfer Protocol ) is the guy responsible for communicating between the application’s Frontend and the server. So, HTTP is another component.
Next, when an HTTP request reaches the server, the server extracts the data, username, and password in this case. Then the server connects to the database and checks if the username exists in the database or not. If the username is found, it tries to match the password stored corresponding to the username in the database.
There can be one of the 3 conditions in this case –
- The username itself is not in the database.
- Username exists but the password doesn’t match.
- Username exists and password matched too. ( This is a successful log in case).
Depending upon the condition, the server prepares a response with the appropriate message and data and sends it back to our Frontend, again over HTTP.
So in this discussion, we just came across two different components –
- Server –> It is a software program that takes the HTTP request, processes that, talk to the database if required, prepares an HTTP response, and sends that back to the frontend.
- Database –> Database servers are permanent storage to store and manage records, that can be user details or any other details required to run our application successfully.
Server and Database combined termed as the Backend of the application.
What we have discussed till now completes the request-response cycle that how a request originates from the Frontend goes to the server, and servers process that and send back a response.
In the simplest view, you can consider a full-stack application as a bunch of collections of such processes.
Once you have developed the FullStack application, you want to make it live for the users. Making software live for users is termed “Deployment”. So, deployment is another component in the development of applications.
As per our discussions, the simplest FullStack application needs to have the following components –
- Frontend ( User Interface )
- Server
- Databases
- HTTP
- Deployment
Next, let’s discuss every component in detail and what different technologies are used to make them work.
Required Skills for FullStack Development
As I told you earlier that FullStack is a very broad term. There is no end to tools and technologies you should know as a FullStack developer. Therefore, I’m dividing this article into two sections – The minimum required skills to be a FullStack developer and what to learn afterwards.
So, let’s first look at Minimum Required Skills.
Before learning anything, learn how the internet works.
1. Frontend Development
Building Frontend requires knowledge of a few different technologies. Also, there are a lot of jobs across the world for Frontend Developers only. So, let’s take a look at what you need to know to build the Frontend of the web application.
- HTML – It is the most basic part of the user interface. HTML gives the structure to the web page. Whatever element you see on the web page is basically HTML; for example, buttons, input boxes, texts, etc., are all HTML.
If you want to get started with learning HTML, you should follow this tutorial.
Practicing and writing code is the best way to learn rather than going through different tutorials only. So invest your time more into practice.
- CSS – CSS is the one that gives a pleasant look to the HTML. It adds colours and simple animations to handle typography, gives proper margin between two HTML elements, and makes the overall layout of the page more consistent and responsive to different screen sizes.
You can start learning CSS from here.
If you like to learn from video tutorials, you can learn the basics of HTML and CSS here.
- JavaScript – JavaScript is a very popular programming language, not only for building the Frontend of a web, rather it is used for a lot of things these days. It can be used to build web apps, mobile apps, desktop apps, build servers, do machine learning and AI, etc.
In the context of Frontend, JavaScript adds interactivity to the user interface giving a better user experience. JavaScript is used to dynamically change the HTML and CSS of the web page.
It can be used to show pop-ups, perform some actions upon click ( or any other user interaction), change the colour/content of the page on the fly, and a whole lot of other stuff.
I highly recommend getting a good hold of JavaScript because it is used a lot in building applications.
To learn JavaScript, you can follow this tutorial or this video tutorial.
- Learn the Web APIs
There are a few very useful APIs used in web development that you should learn.
- DOM
- Fetch API
- File API
- Web Storage API
- Drag and Drop
- Web workers
You can see a list of APIs available here.
- Choose a JavaScript Framework
When an application grows, it becomes quite lengthy and complex to write and manage vanilla ( Pure ) JavaScript. In that scenario, we must choose a JavaScript framework or library to build our Frontend.
There is quite a good number of frameworks/libraries out there. The most popular ones are listed below –
- React
- Vue
- Angular
- Svelte
- Backbone.js etc.
You might have got the question, which one to choose? The answer is – do your own research.
Look which one among these is more popular in the area or companies you’re targeting to get a job or do freelance. If you can’t decide on your own, I recommend learning React.
You can start learning React here. It’s a beginner-friendly tutorial.
- Learn Git and Github
Git is used for source control. It lets you store different versions of your code in a central place. If you made some mistake or maybe deleted your code mistakenly, you can recover the code from the central place.
Github is a place where you can put your code so that others can have a look. It is very important to show your skills.
Learn from here.
At this point I recommend you to build projects and put your code on Github. You should also host them online so that people can take a look.
- Additional Skills to stand out in the crowd
There are some technologies that are not required and many times not expected to know from an entry-level developer but knowing them will give you bonus points.
- Learn a State Management library like Redux ( if you choose React) or VueX for Vue.js.
- Next.js – It’s a React framework ( Choose Nuxt if you’re a Vue.js developer ) to build fast and robust Web apps relatively faster.
- TypeScript – It has got quite a popularity in the last couple of years. It is called the superset of JavaScript. It adds type safety features on top of JavaScript.
I recommend learning these after you get good at the things discussed prior or maybe after getting a job.
2. Server Development
You know what a server does, as we have discussed earlier in this article. Building, maintaining, and monitoring server is a crucial task.
There are a lot of programming languages out there to do server-side development. You can choose any of them that is most in-demand at the companies you’re targeting to get a job at.
- Node.js – If you already know JavaScript, learning Node will be relatively easier compared to other choices available. If you want to know what Node is, read this mind-blowing explanation.
- Python
- Java
- Ruby
- PHP
- C# , etc.
Also, the choice of a programming language depends upon the project we are building or the problem we are trying to solve.
If you ask me, I would recommend learning either Node or Python because I can see a lot of job openings in those techs in my country.
- Choose a server-side framework
When you start developing servers, you encounter very soon that there are frameworks being used widely. The choice of a framework depends upon the language you chose from the previous list.
For every language, there is a good number of frameworks available. Again do your own research before choosing one. I’m listing down some of the popular frameworks for each of the languages listed above.
- Node.js
- Python
- Java
- Spring framework
- Spring Boot
- Ruby
- PHP
- C#
3. Databases
Databases are used to store data permanently. I have already given you an example above about how it works in the combination with servers.
Databases can be broadly divided into two categories –
- Relation databases
- Non-relational databases
You can see a comparison and difference between relational and non-relational databases here.
These two have their own use cases. Also, there are a number of options available in each of the categories.
In the Relation database, we have options like –
- Postgres DB
- MySQL
- SQL Server
- SQLite
- Oracle database
- MariaDB
In non-relational databases, we have options like –
- MongoDB
- Amazon DynamoDB
There are some databases that support the hybrid model of these two. HarperDB is one such example.
Lots of options there, but which one to choose?
The choice of a database is somewhat related to your choice to do server-side development. For example, if you’re doing Node + Express
, you are more likely to use MongoDB
, if you’re using Python
, this is more likely to be coupled with PostgresDB
.
Similarly, PHP + MySQL
make a good combo. C# and .NET are more likely to be coupled with SQL Server or MySQL.
These combinations are not rules but just preferences I have observed from my experience in the industry so far. You should always do research and check the job openings around you. You can find there what skills companies are looking for.
4. HTTP
The Frontend and the Backend of an application communicate through HTTP request-response. So knowing HTTP is very important.
You might have heard about HTTP methods, status codes and headers. These things have special meanings on which both the client and the server rely to understand each other messages ( request or response).
You can check this pdf book to learn HTTP.
One important thing you should learn while learning HTTP is Web Security. People don’t pay attention to this topic initially, but it is highly recommended to have a basic understanding of it.
There are a couple of architectural styles developed on top of HTTP to facilitate communication over the web.
- REST API – It is widely used and I recommend you learn it first.
- GraphQL – This is gaining popularity really quickly because of its suitability in many cases over REST.
- SOAP – Very less used nowadays.
5. Deployment
Your project is just useless if it is not available on the internet to be used by people. There are many ways to deploy a FullStack app.
People these days use providers like Amazon, Azure, or Heroku. They provide a platform as a service to host your application on their platform. You might need to pay for it after a certain limit of usage.
You can host your app’s frontend on platforms like Vercel or Netlify. There are other various platforms as well.
This hosted frontend talks to the backend hosted on Heroku, AWS, or any other platform and complete the working of your FullStack app.
Note: At this point, you should practice a lot and try to build projects. After building a couple of projects and hosting them online, you should start looking for jobs.
What we have discussed so far is the required skills one should have to be a FullStack developer. But, the learning never ends. So, let’s look at what are the other technologies/tools you should learn next to advance your career.
What to learn next?
When you will look at a running app, you realize a lot of other tools and technologies are being used there. Let me list some of the most important technologies you can look into to advance your career further.
- Cloud Computing
I’m not asking you to become a cloud engineer but to learn the basics at least. Some services like lambdas, ASW S3 or Azure Blob, etc. provided by cloud providers are used in almost all FullStack applications these days.
There are three most popular options available for choosing a cloud provider.
- Amazon AWS
- Azure by Microsoft
- Google Cloud Provider ( GCP )
As far as I have seen, AWS is more used than any other cloud provider.
- Caching
Learn some in-memory databases, like Redis, used for caching for more performant and faster responses from the backend.
- Docker
Docker is used for containerization. This makes it easy to configure and manage the environment for development, testing, and deployment.
You should also learn CI/CD. This lets you build and ship features/bug fixings faster by automating various tasks involved in the software development life cycle.
- Testing
Testing is quite an important task to do before making an app live for the end-users. As a developer, you should know how to do unit and integration tests at least.
You might have heard the term TDD, which stands for Test-Driven Development.
Test-driven development is a software development process relying on software requirements being converted to test cases before the software is fully developed, and tracking all software development by repeatedly testing the software against all test cases.( Source – Wikipedia).
Serverless and BaaS: The Modern Approach
This article is incomplete if we don’t talk about Serverless and BaaS ( Backend as a Service ) providers. These days a lot of companies, especially those having small teams, preferably use Serverless architecture.
Serverless doesn’t mean that you don’t need a server to run the application rather, it means that some Serverless providers will manage the server for you. So you will only need to focus on writing the code and not worry about managing the security, scaling, and hardwares required for the servers.
You can learn more about Serverless here.
The next thing to consider is BaaS providers. These backend providers take away the pain of writing a lot of backend code.
They give you built-in functions to be used to do repetitive tasks like authentication, authorization, File Storage, Serverless functions, databases with APIs to access & manipulate that, even payments system integration, etc.
This makes your life so so easier as a developer and lets you build your project faster. You only need to focus on building Frontend of the app and just integrate with your backend provider.
Nhost is a very powerful backend provider. They support almost all the features you need to build a robust backend. You should check them out.
You might be thinking, If there are backend providers, should I learn Server development and databases?
The answer is, Yes, You should. Because even though BaaS providers give you everything cooked for you already, you still need to design your database schema, need to know how auth flows work, design how your application will work overall, etc.
Conclusion
In conclusion, I would like to give you some tips to help you in your overall journey.
- Learn the core concepts of the language, be it JavaScript, Python, or any other language.
- Practice coding problems based on the topics you learn. You can choose a platform like Hackerrank, geeksforgeeks, etc. to find and solve coding problems.
- Don’t rush to learn everything really quickly. It will take time. So, be patient and keep going.
- Accept the fact that nobody knows everything.
- Build proof of work. Build projects, host them online, put code on Github and show it to people so that they can trust your skills.
This is all I have for this article. If you have got some questions or need some guidance, you can always DM me on Twitter.
Thank you for reading ❤. If you are already searching for a Fullstack job or want to browse the market, check these Fullstack job openings.
0 Comments