Wikipedia hat einen
ganz guten Artikel dazu.
Das Frontend ist quasi die
Benutzerschnittstelle deiner Software, während das Backend die
Programmlogik enthält. Ich persönlich stelle mir das ganze dann immer gerne im Daten-basierten Softwaremodell vor: Eine Software ist darin eine Ansammlung von Daten und Operationen auf diesen Daten. Das kann z.B. eine Menge von Datenbanken sein, und dazugehörigen Datenbankoperationen. Die Aufgabe des Frontends ist es hier, Daten vom Benutzer zu erfragen, und/oder dem Benutzer Daten zu präsentieren. Der ganze Rest wird fernab vom Benutzer im Backend ausgeführt.
Ein Frontend kann dabei lächerlich einfach sein (z.B. eine Terminalanwendung), oder aber hochkomplex, Beispiel Amazon. Die Amazon Website ist im Wesentlichen ja nur ein Frontend, für eine gigantische Amazon-Datenbank. Aber eben so komplex, dass selbst das Frontend einiges an Programmlogik enthält. Man sieht, die Grenze ist fließend.
Es bringt aber Vorteile die beiden zu trennen. Im Fall von Amazon gibt es z.B. mehrere Länder - sagen wir Deutschland (.de) und die USA (.com). Die Unterschiede sind sehr groß: Unterschiedlichste Artikel, andere Versandmethoden, gesetzl. Rahmen, usw. Deshalb bietet es sich an, hier ein eigenes Backend für jedes Land zu benutzen. Aber wäre es nicht schön, wenn beide Websites "gleich" funktionieren würden? Kein Problem, einfach das gleiche Frontend anbinden...
(Natürlich alles sehr vereinfacht ausgedrückt)
Anderes Beispiel: Warum soll ich als Programmierer eines Videoschnittprogramms mich auch um das komplette Rendering kümmern, wenn es z.B. schon so großartige Sachen wie
ffmpeg gibt? Es bietet sich an hier im Wesentlichen einfach eine GUI um das Kommandozeilenprogramm "herumzubauen".
Die Unterteilung in Front- und Backend hat die gleichen Gründe, weshalb Informatiker auch Daten in Objekte Kapseln oder Bibliotheken/Module schreiben. Ein gewisser Grad an Modularität hat sich über die Zeit einfach als erstrebenswert erwiesen.
Gruß Technipion