Back-end, front-end, and fullstack. The programming industry, specifically the web development industry, loves to throw these terms around. Recruiters and job-postings list them as if they were very specific types of roles, memes make fun of people for being one or the other, and there seems to be a little bit of animosity and confusion surrounding the whole concept. So what do these terms actually mean? How does one become a front-end developer, or a back-end developer? Are they even real things?
Software Developers All Have the Same Mission
A software developer is just a person who solves problems using computer programming. At the end of the day this is what we are all paid to do. The world has many problems that can be solved with code. Problems like needing to sell shoes to people over the internet, or organize business documents for quick retrieval and processing, or powering a robot in a factory doing manufacturing work. All programmers fundamentally are tasked with understanding a problem and then writing code to solve it.
An Issue of Specialization
Web Development Specializations
When talking about front-end, back-end, and full-stack developers we're usually talking about web developers who write programs for the internet. Things like Amazon.com, Gmail, Salesforce, or Spotify. Web applications consist of a server and a client. The server is a computer owned and operated by the website owner, and the client is a device owned by the person visiting the website like a phone or their personal computer. A web application is split up into programs that run on both sides and communicate with each other somehow to create the overall experience and solve the problem at hand. You couldn't buy something on amazon for example without a client side application to view and search through the products. Nor could you without a server to process your payment, record your purchase and coordinate the preparation and delivery of your order. The two sides work together to make a whole experience.
Back-end developers focus on code that runs on the Server. Because of this they need to know about how databases work and how to make them perform optimally. They often need to wire up different servers to communicate to each other, and they need to know how to make the results of their programs available to the client through APIs. Because of this they spend their time learning database optimization, and good API design principles. Their goals are mostly to build reliable data processing pipelines. Some topics they need to understand are how to handle security so that only authorized users can perform certain actions, they also need to be good at making their programs fast, scalable and reliable. Doing these things takes a lot of work and knowledge. A back-end developer is someone who has experience and knowledge solving these types of problems with the tools most commonly available to them in the server environment.
Some tools, technologies, and topics that are primarily the focus of back-end devs:
- Databases and data persistence
- Static File Storage
- HTTP API Design
- Message Sending and Async Architecture
- Security, Performance, and Reliability
- System Observability
- Web Servers can be written in many different languages but some popular languages used by back-end developers are: Java, Go, Rust, Python, and Ruby.
Some tools, technologies, and topics that are primarily the focus of front-end devs:
- Web Browser APIs
- User Experience
- UI Libraries like React, Angular, and Vue
A fullstack developer is just a person who has experience working with a broad collection of tools and technologies required by back-end and front-end development. The benefit to this is if you know how both sides of the web application work it can empower you to solve problems in a creative and efficient way since you can design your back-end code to perfectly work with your front-end code and vice-versa to solve any given problem. The downside is that it takes a lot of time to become an expert in both sides. Sometimes a specialist might be able to create a solution to a problem much faster and more skillfully than someone who only has moderate experience with a broad array of topics.
So at the end of the day being a back-end or a front-end developer comes down to what bag of knowledge you've spent the most time cultivating. Most front-end developers have a passing knowledge of back-end technologies, and most back-end developers know something about front-end technologies. In recent times it's become more popular to de-emphasize the concept of front-end and back-end because the line really is very vague and sometimes a programmer needs to cross back and forth to create the optimal solution to a problem. This means the real emphasis is on being a good problem solver, and being a good researcher and learner. If you can research and learn well you can easily transition to using the tools of either a back-end or front-end developer.