In software
engineering, the terms "front end" and "back end" are
distinctions which refer to the separation of concerns between a presentation
layer and a data access layer respectively. The front end is an interface
between the user and the back end. The front and back ends may be distributed
amongst one or more systems.
In software architecture, there may be many layers between
the hardware and end user. Each can be spoken of as having a front end and a
back end. The front is an abstraction, simplifying the underlying component by
providing a user-friendly interface.
In software design,
for example, the model-view-controller architecture provides front and back
ends for the database, the user and the data processing components. The
separation of software systems into front and back ends simplifies development
and separates maintenance. A rule of thumb is that the front (or
"client") side is any component manipulated by the user. The
server-side (or "back end") code resides on the server. The confusion
arises when one must make front-end edits to server-side files. Most HTML
designers, for instance, don't need to be on the server when they are
developing the HTML; conversely, the server-side engineers are, by definition,
never on anything but a server. It takes both to ultimately make a functioning,
interactive website.
In network computing, front end can refer to any hardware
that optimizes or protects network traffic. It is called application front-end
hardware because it is placed on the network's outward-facing front end or
boundary. Network traffic passes through the front-end hardware before entering
the network.
In content management
systems, the terms front end and back end may refer to the end-user facing
views of the CMS and the administrative views, respectively.
In compilers, the
front end translates a computer programming source code into an intermediate
representation, and the back end works with the intermediate representation to
produce code in a computer output language. The back end usually optimizes to
produce code that runs faster. The front-end/back-end distinction can separate
the parser section that deals with source code and the back end that generates
code and optimizes. Some designs, such as GCC, offer choices between multiple
front ends (parsing different source languages) or back ends (generating code
for different target processors).
In speech synthesis,
the front end refers to the part of the synthesis system that converts the
input text into a symbolic phonetic representation, and the back end converts
the symbolic phonetic representation into actual sounds.