1.
3 Full Stack Development
Now that you have an idea of the most important terms in web development, I want to
show you what the term “full stack” is all about, where it comes from, and the tasks ex-
pected of a full stack developer.
1.3.1 What Are Software Stacks?
A software stack (also a solution stack or just stack) is a concrete selection of certain com-
ponents that together form a platform with which an application is developed and oper-
ated. Individual components of a stack can include the following:
The operating system on which the software or application runs (both the client-side
and server-side operating systems). The classic operating systems are Linux, macOS,
and Windows, but mobile operating systems, such as Android or iOS, are now
commonplace.
The web server that hosts the application, for example, nginx or Apache HTTP Server.
The programming language that implements the application logic, for example,
JavaScript, Java, C++, or PHP (see also Chapter 13).
The programming tools (tools) used during development, such as compilers to trans-
late human-readable source code into computer-readable machine code.
The libraries that are used, such as frontend libraries like Lodash
([Link] or jQuery ([Link]
The frameworks used, such as web frameworks like Express ([Link]
The runtime environment under which the application is executed, for example, the
JavaScript runtime [Link], which allows JavaScript code to be executed on the
server side as well (see Chapter 14).
The databases used, such as relational databases like MySQL and PostgreSQL or non-
relational databases (also NoSQL databases), such as MongoDB (see Chapter 14).
The term stack reflects how the individual components are arranged hierarchically in the
platform and appear “stacked on top of each other,” as shown in Figure 1.11.
Figure 1.11 Software Stacks as a Selection of Specific Components for the
Development of Applications
In web applications, a distinction is also often made between a server-side stack (server
stack) and a client-side stack (client stack), which can be fundamentally different. For ex-
ample, a common practice is to use a programming language like Java to implement the
backend and then use HTML, JavaScript, and CSS to implement the frontend.
Conversely, you can conceivably program a backend in JavaScript and a frontend in Java
(for example, when developing an app for Android-based smartphones).
1.3.2 What Types of Stacks Exist?
One of the best known (and oldest) examples of a backend stack is the LAMP stack—a
combination of Linux (operating system), Apache (web server), MySQL (database), and
PHP (programming language). Variants of the LAMP stack might use another operating
system instead of Linux, for instance, WAMP (variant for Windows) and MAMP (variant
for macOS). Newer variants of this stack also use Ruby or Python as the programming
language instead of PHP.
Not quite as old, but perhaps more well known, is the MEAN stack, which does not distin-
guish quite properly between backend and frontend. A MEAN stack consists of MongoDB
(a non-relational document database), Express (a web framework and a web server),
Angular (a frontend framework), and [Link] (a server-side JavaScript runtime environ-
ment). This combination offers a charming advantage for developers in that the same
programming language is used for both the client side and the server side.
A slight modification of the MEAN stack, the MERN stack is also pretty popular. This
stack uses the React framework instead of Angular for the frontend. The other compo-
nents of the stack (i.e., MongoDB, Express, and [Link]) are the same.
Note
Software stacks don’t necessarily need to contain all of the components we’ve just men-
tioned. For example, the MEAN and MERN stacks are not limited to a single operating
system but can run on all three major operating systems (Linux, macOS, or Windows)
thanks to the platform independence of [Link].
HTML, CSS, and JavaScript
The frontend stack—consisting of the basic web technologies HTML, CSS, and JavaScript
—is so important for frontend development that it is no longer even explicitly referred to
as a stack.
1.3.3 What Is a Full Stack Developer?
Now that we’ve clarified the term software stack, let’s turn to what exactly full stack
means, what full stack developers are, and what they do.
Full Stack
The term full stack covers the complete stack (i.e., both the backend stack and the front-
end stack). So, a full stack developer is someone who develops both the backend and the
frontend or someone who is equally comfortable with backend technologies and front-
end technologies.
Full Stack Developers
Full stack developers are therefore true all-rounders: They can implement both a web in-
terface with HTML, CSS, and JavaScript and a web service that runs on the server side
and processes requests from the client. They can also select the right database to meet
specific requirements and also know how to prepare the entire application for use in pro-
duction systems, as shown in Figure 1.12.
Figure 1.12 The Many Requirements of Full Stack Developers
Requirements for Full Stack Developers
Let’s quickly look at the types of roles that can occur in a web project (exclusively re-
garding development):
Frontend developers
Can build complex web interfaces using HTML, CSS, and JavaScript and, at best, has
design experience. Should also be familiar with frontend libraries and frameworks
such as Angular, React, and Vue; be able to use the relevant tools such as WebPack or
Babel; and know how to use CSS preprocessor languages.
Backend developers
Can develop complex application logic for the server side and make this logic avail-
able via web services, for example. Should know web service Application
Programming Interface (API) design and which databases are suitable for which
purposes.
DevOps specialists
DevOps is made up of the terms development and operations and combines these two
areas of activity into one role, the DevOps specialist (or DevOps for short). The tasks
of DevOps specialists thus include, for example, deploying applications for produc-
tion systems, configuring build systems, and administering web servers. In addition,
DevOps specialists are also often familiar with topics like web application security
and performance.
In a best case scenario, a full stack developer fulfills all of these requirements and com-
bines the three roles in one person to a certain extent. Acquiring this breadth of knowl-
edge is not an easy task and often requires years of experience.
Note
Our discussion of the requirements for frontend developers, backend developers, and
DevOps is by no means exhaustive, and even within these three groups, further special-
ization is possible, such as database specialists, frontend designers, user experience (UX)
designers, testers, and more.
Full Stack Developers versus Specialists
Due to the wide range of possible requirements, however, many full stack developers
quickly run the risk of being “only a little bit good at everything, but not quite good at
anything.” This is then contrasted by the specialists who have specialized precisely in a
particular area. A database specialist usually knows databases better than a full stack de-
veloper; a frontend designer probably knows the various CSS tricks necessary to imple-
ment a layout exactly according to a template. A DevOps specialist, in turn, is usually
more effective at working with the command line and at managing servers than a full
stack developer.
Large Companies versus Start-Ups
In large companies or large software projects, entire teams frequently exist for different
areas of the stack. One team might take care of the database, another might be responsi-
ble for the frontend design, a third team might manage the implementation of the de-
sign into a concrete web interface, and so on. Full stack developers are therefore often
needed especially in smaller companies or start-ups, which can (or must) often react in a
more agile and flexible manner to changing requirements.
The Focus of This Book
You can’t become a full stack developer overnight, and even working through a thick
book like this one won’t make you a full stack developer. Rather, the goal of this book is
to provide an overview of a broad range of topics important to full stack developers. This
book is designed to guide you to becoming a developer who is familiar with many tech-
nologies, both backend and frontend, and to some extent DevOps. Whether you then
want to call yourself a “full stack developer” is up to you.
1.3.4 Structure of This Book
The total of 23 chapters can be roughly divided into three sections: Chapters 1 through 11
deal mainly with general basics and topics from the frontend area, and Chapters 12
through 17 deal with topics that are mainly related to the backend area. Chapters 18
through 23 deal with topics that are relevant to both the frontend and the backend, such
as testing, security, deployment, and the management of web projects.
Frontend
This part of the book is organized in the following way:
In Chapter 1, you’ll get to know (or have already learned) the most important basics.
In Chapters 2 through 4, I’ll describe the three major languages of the web in detail.
In Chapter 5, you’ll learn which protocols are important in the context of web appli-
cations and when each is used.
In Chapter 6, you’ll learn about various formats that are important for implementing
web applications.
Chapter 7 introduces you to a selection of web APIs for JavaScript, which are pro-
gram-based interfaces that can be controlled through JavaScript.
In Chapter 8, I’ll show you what you should consider when it comes to web page
accessibility.
Chapter 9 describes tools to help you make your CSS code more concise.
In Chapter 10, a guest author for this book, Sebastian Springer, shows you what sin-
gle-page applications are and how you can implement them using the React
JavaScript library.
In Chapter 11, you’ll learn about different types of mobile web applications.
Backend
This part of the book is structured in the following way:
Chapter 12 introduces you to several web architectures that form the basis for most
web applications.
In Chapter 13, we’ll turn to the various programming languages used on the server
side. I’ll show you what types of programming languages exist and which are relevant
for implementing web applications.
Based on Chapter 13, Chapter 14 describes how to run JavaScript on the server side
using the [Link] runtime.
For Chapter 15, another guest author for this book, Florian Simeth, introduces you
to the PHP language.
In Chapter 16, you’ll learn what web services are and how to implement them.
Chapter 17 provides everything you need to know about databases as a full stack
developer.
Cross-Disciplinary Topics and DevOps
This part of the book focuses on the following topics:
In Chapter 18, you’ll learn how to automate web application testing.
In Chapter 19, I’ll show you how to prepare web applications for production use,
that is, how to “deploy” them.
Chapter 20 describes considerations related to web application security and how to
prevent vulnerabilities and security gaps.
In Chapter 21, we’ll look at how you can optimize the speed and performance of
your web applications.
In Chapter 22, you’ll learn how best to manage web projects and organize their
versions.
Chapter 23 describes different types of project management and goes into a little
more detail about the Scrum process model.
Appendices
The book is rounded out by several appendices for overviews of HTTP (Appendix A) and
HTML (Appendix B) as well as information and command references for the tools used
in this book (Appendix C).
Overview
To highlight how each chapter fits in thematically with the whole book, you’ll find a kind
of roadmap at the beginning of each chapter, with the topic discussed in each chapter
highlighted. Some topics are on the client side (for example, HTML or web APIs), and
others on the server side (for example, web services and databases). One topic is in be-
tween (web protocols), and others—the cross-disciplinary topics—are on both sides.
Figure 1.13 Classifying the Different Topics in this Book
Previous chapter Next chapter
1.2 Structure of Web 1.4 Tools for Full Stack
Applications Developers
Table of contents collapsed