Die zur Darstellung verwendete Schriftart hat direkte Auswirkungen auf die Lesbarkeit von Code. Wir stellen 10 optimale Fonts für Programmierer vor.
Schriftarten und deren Lesbarkeit bestimmen, wie gut ein Rezipient die Inhalte eines Texts oder Schriftzugs aufnimmt. Neben der Größe der Zeichen spielt dabei deren Gestaltung eine besondere Rolle. Fonts transportieren bereits über ihr Aussehen eine Nachricht. Sie stellen beispielsweise den Bezug zu einer Zeitepoche, einem Ereignis, einer Branche oder einer Stimmung her [1].
Entwickler haben spezifische Anforderungen an Schriftarten für den Programmcode. Hier geht es nicht um das Erfassen von Inhalten im Fließtext oder das Üben von Schönschrift, sondern um eine klare Unterscheidbarkeit und Erfassbarkeit einzelner Zeichen in kurzer Zeit. Das betrifft besonders aussehende Lettern und Ziffern [2].
Kommt dieser Aspekt zu kurz, besteht die Gefahr, dass Sie wegen einer unpassenden Schriftart Tipp- oder Programmfehler im Code gar nicht, eher zufällig oder nur mit viel Aufwand entdecken. Die Tabelle Ähnliche Zeichen listet die Zeichen auf, bei denen Verwechslungsgefahr besteht.
|
Zeichengruppe |
Ähnliche Zeichen |
|---|---|
|
Null und O |
|
|
Eins, I, und L |
|
|
Fünf und S |
|
|
Zwei und Z |
|
|
G und Q |
|
|
6, G und b |
|
|
Klammern |
|
|
Hochkommas |
|
Auf dem Bildschirm eignen sich zum Programmieren serifenlose [4], nichtproportionale Schriftarten am besten [3]. Serifenlos deswegen, da sich solche Fonts auf dem Bildschirm einfacher erfassen lassen. Nichtproportional heißt, dass alle Zeichen die gleiche Breite aufweisen, egal, ob es sich um ein breites Zeichen wie das W oder ein schmales Zeichen wie das l handelt – vereinfacht ausgedrückt: eine deutlich hübschere Variante der ehrwürdigen Schreibmaschinenschrift.
Was bringen diese Eigenschaften in der Praxis? Damit erreichen Sie mehr Übersichtlichkeit, insbesondere bei Funktionen und Datenstrukturen wie Listen und Arrays, wo Sie mit Einrückungen arbeiten. Abbildung 1 stellt das exemplarisch anhand der Definition einer Liste in Python dar. Verwendet wurden hier Fira Code Regular als nichtproportionale, serifenlose Schriftart (oben) und Bitstream Charter Regular als proportionale, serifenbehaftete Schriftart (unten). Die Darstellung zeigt eindeutig, dass sich proportionale Fonts für die Darstellung von Programmcode nur bedingt eignen.
Einrückungen nehmen bei nichtproportionalen Schriftarten stets gleich viel Platz ein. Das sehen Sie insbesondere bei If-Then-Else-Blöcken oder gleichmäßig untereinander angeordneten Funktionen. Abbildung 2 zeigt das in der Programmiersprache Python mit der Schriftart B612 Mono.
Weitverbreitete Fonts wie Courier und DejaVu Mono lassen sich gut für Programmcode einsetzen, patzen aber bei den zueinander ähnlichen Zeichen aus der Tabelle Ähnliche Zeichen. Das trifft ärgerlicherweise auch für die ansonsten sehr schön gestaltete Schriftart B612 Mono [5] zu. Sie wurde für die Darstellung im Cockpit von Flugzeugen entwickelt. Wie die Matrix in Abbildung 3 demonstriert, unterscheiden sich in diesem Font die drei Zeichen O (großes O), o (kleines o) und 0 (null) nicht eindeutig genug voneinander. Dasselbe gilt für runde und eckige Klammern (() und []), die beispielsweise bei Ausdrücken der Form print(liste[index]) einen aufmerksamen Blick fürs Detail erfordern.
Daher rücken wir stattdessen Schriftarten in den Mittelpunkt, deren Zeichen so gestaltet sind, dass es einfach von vornherein nicht zu Verwechslungen kommen kann. Eine weitere Anforderung: Die nichtproportionalen Schriftarten müssen über spezielle Ligaturen für Programmierer verfügen. Als Ligatur bezeichnet man in der Typografie die Verschmelzung zweier oder mehrerer Einzelbuchstaben zu einer Glyphe, sprich: zu einem Schriftzeichen. Das soll optische Lücken zwischen Buchstaben verhindern. Solche Ligaturen kommen beispielsweise für die Kombinationen fi, fl und ff infrage.
Passende Schriftarten
Als langjährigen Debian-Anwendern gilt der erster Blick der Autoren den Font-Paketen aus den Repositories dieser Distribution. Ein hübscher Nebeneffekt: Die Schriftarten stehen allesamt unter einer freien Lizenz. Die Tabelle Nichtproportionale Fonts listet die entsprechenden Fonts alphabetisch aufsteigend samt zugehörigem Debian-Paket auf. Alle zehn Schriften entsprechen den festgelegten Kriterien.
|
Name |
Name des Debian-Pakets |
URL |
|---|---|---|
|
Agave |
fonts-agave |
|
|
Cascadia Code |
fonts-cascadia-code |
– |
|
D2Coding |
fonts-naver-d2coding |
– |
|
Fantasque Sans Mono |
fonts-fantasque-sans |
– |
|
Fira Code |
fonts-firacode |
|
|
Hack |
fonts-hack-ttf |
|
|
Jetbrains Mono |
fonts-jetbrains-mono |
|
|
Monoid |
fonts-monoid |
– |
|
Nanum Gothic Coding |
fonts-nanum |
in älteren Releases fonts-nanum-coding |
|
Plex Mono |
fonts-ibm-plex |
Abbildung 4 zeigt die Glyphen zur Schriftart Hack in unterschiedlichen Schriftgrößen. Gut lesbar und verwechslungsfrei gestaltet, eignet sich dieser Font zum Entwickeln bestens. Schriftarten, deren Paketierung für Debian GNU/Linux noch aussteht, sind Iosevka [6], Inconsolata [7] und DejaVu Sans Code [8]. Bei Letzterem handelt es sich um einen augenscheinlich recht beliebten Fork des Debian-Fonts DejaVu Sans Mono. Mit rund zwei Dutzend Ligaturen als Unterschied zum Original weist DejaVu Sans Code deutlich weniger Ligaturen auf als etwa Fira Code oder Jetbrains Mono [9].
Die Tabelle “Programmierer-Fonts im Vergleich” stellt alle Schriftarten aus der Tabelle “Nichtproportionale Fonts” gegenüber. Alle Screenshots wurden im Terminalemulator Kitty [10] angefertigt und enthalten zuerst den Namen der Schriftart, danach Zeichen und Zeichenkombinationen, die beim Programmieren häufig vorkommen, darunter eine kontextabhängige Darstellung und in der letzten Zeile Unicode-Zeichen.
|
Agave |
Cascadia Code |
||
|
D2Coding |
Fantasque Sans Mono |
||
|
Fira Code |
Hack |
||
|
Jetbrains Mono |
Monoid |
||
|
Nanum Gothic Mono |
Plex Mono |
Online austesten
Weitere nichtproportionale Schriftarten mit Programmierer-Ligaturen finden Sie auf Programmingfonts.org [11]. Indem Sie auf der Webseite auf die Schalter oben links klicken, filtern Sie die Schriftarten nach deren Eigenschaften (Abbildung 5).
S filtert nach serifenbehafteten und serifenlosen Schriftarten, 0 nach der Darstellung der Null (mit oder ohne Schrägstrich oder Punkt; manche Schriftarten bieten auch beide Varianten). V und das pixelige B filtern nach Vektor- respektive Bitmap-Schriftarten. Der Pfeil und dessen ASCII-Äquivalent -> filtert nach den Schriftarten, die Programmierer-Ligaturen anbieten oder eben auch nicht.
Das Textfenster rechts enthält bereits Programmcode, sodass Sie sofort sehen, wie die Schriftart in einem Editor wirkt. Diesen Text können Sie ändern und auch durch Programmcode in Ihrer Lieblingsprogrammiersprache ersetzen. Damit bekommen Sie sofort ein Gefühl dafür, wie sich die Schriftauswahl auswirkt und ob Ihnen ein Font das Arbeiten erleichtert.
Das Projekt Font Compare [12] packt alles Nötige auf eine Webseite, um unterschiedliche Schriftarten leichter miteinander vergleichen zu können. So sehen Sie auf einen Blick, wie sich die Schriftarten im Aussehen voneinander unterscheiden (Abbildung 6).

Abbildung 6: Font Compare packt alles Nötige auf eine Webseite, um Schriftarten miteinander zu vergleichen.
Weitere Schriftarten für Programmierer, beispielsweise auch eine Droid Sans Mono für Android, beschreibt der Blogger William Craig [13]. Die von ihm genannten Fonts sind gut, erfüllen aber nicht alle unsere Kriterien. Das betrifft häufig die visuelle Unterscheidbarkeit ähnlicher Zeichen, insbesondere O, o und 0, wie bereits beim Font B612 Mono angemerkt.
Installation
Da die vorgestellten Schriftarten als Pakete für Debian GNU/Linux in den Paketquellen bereitstehen, installieren Sie sie bequem über die Paketverwaltung. Zwei Beispiele für Jetbrains Mono zeigt Listing 1: In der ersten Zeile kommt Apt-get zum Einsatz. Alternativ laden Sie das Paket als DEB herunter und installieren es über Dpkg (zweite Zeile).
Listing 1
Font-Installation (Debian)
# apt-get install fonts-jetbrains-mono # dpkg -i fonts-jetbrains-mono
Beides gelingt üblicherweise problemlos, da in der Regel keine Abhängigkeiten zu anderen Paketen bestehen. Für andere, nicht auf Debian basierende Distributionen laden Sie am besten das entsprechende Archiv von der Webseite des Fonts, packen es aus und installieren es auf Ihrem System.
Werkzeuge
Bei den Schriftarten aus der Tabelle “Nichtproportionale Fonts” handelt es sich um Truetype-Fonts (Dateiendung .ttf). Generell funktionieren sie genauso gut wie jede andere Truetype-Schriftart. Manche Features funktionieren bisher allerdings nur in erstaunlich wenigen Tools. Dazu zählen etwa beliebige Ligaturen sowie die automatische Höhenanpassung von Zeichen wie beispielsweise + und : bei Fira Code.
Der Entwickler von Fira Code führt daher eine Kompatibilitätsliste [14], die sich wohl primär auf die oben genannten Funktionen bezieht. Diese Liste lässt sich auch auf anderen Schriftarten mit solchen Features anwenden. Die Tabelle “Programme mit TrueType-Fonts” listet Anwendungen auf, von denen wir wissen, dass in ihnen beliebige Ligaturen sowie eine automatische Höhenanpassung der Zeichen funktionieren.
|
Kategorie |
Werkzeug |
|---|---|
|
Terminalemulator |
Kitty Terminal Emulator |
|
Webbrowser |
Firefox, Chromium, Chromium-basierte Browser wie Chrome und Opera |
|
Texteditor |
Gedit/Pluma, Kate/KWrite, GNU Emacs, LibreOffice, Geany (nur auf OS X), Bluefish, Neovim-GTK |
|
Sonstiges |
Meld, Mousepad, Kdevelop ab Version 5 |
Für GNU Emacs gilt, dass sich die Schriftarten nur in neueren Versionen nutzen lassen, was zudem reichlich Konfigurationsarbeit erfordert [15]. Das gelingt am einfachsten mit dem Emacs-Modul ligature.el [16], das aber bislang für Debian GNU/Linux noch nicht paketiert wurde.
Bei unseren Tests stießen wir zudem auf eine Reihe von Werkzeugen, die zwar die vorgestellten TrueType-Fonts enthalten, in denen aber deren besondere Features bisher nicht funktionieren. Dazu gehören Uxterm/Xterm (mit der Option -fa zum Nutzen vektor- statt pixelbasierter Schriften), Gvim/Vim-GTK sowie alle LibVTE-basierten Terminals. Letzteres umfasst auch Gnome Terminal, LXTerminal, XFCE4-Terminal, Terminator und andere mehr. Ein Bug-Report dazu [17] steht seit mehr als 10 Jahren offen.
Gvim/Vim-GTK zeigen beispielsweise bei der Schriftart Fira Code kein Gleichheitszeichen an. Damit fällt die Kombination aus Font und Editor durch das Raster und zwingt dazu, auf andere Schriftarten auszuweichen.
Was wir benutzen
Schriftauswahl ist freilich auch eine Ansichtssache. Am gefälligsten empfindet Frank die beiden Schriftarten Hack und Jetbrains Mono. B612 Mono und Fira Code liegen für ihn auf Platz zwei und drei, insbesondere wenn es um Fließtext mit Programmcode geht, wie etwa im vorliegenden Artikel hier. Hintergrund sind die genannten Abstriche in der Darstellung im Gvim. Die anderen Schriftarten haben zu schmale Buchstaben und wirken im Schriftbild zu gedrängt – typografisch formuliert: lassen zu wenig Weißraum zwischen den Glyphen.
Axel dagegen nutzt in seinem Emacs Fira Code als Standardschriftart, allerdings momentan wegen eines Bugs in Emacs 27.1 ohne Ligaturen – obwohl er höchstpersönlich ligature.el für Debian paketiert hat. Knapp dahinter platziert er Jetbrains Mono; der kontextsensitive Doppelpunkt gab hier den Ausschlag. Den Terminal-Emulator Kitty, in dem die meisten Screenshots zu diesem Artikel entstand, verwendet er momentan aber primär mit Agave ohne Ligaturen. Er überlegt noch, auch hier auf Fira Code umzustellen.
Qual der Wahl
Über Geschmack lässt sich bekanntlich nicht streiten, und so liegt es an Ihnen, zu entscheiden, welcher der zehn vorgestellten Schriftarten Sie aus ästhetischen oder funktionellen Gründen den Vorzug einräumen. Uns interessiert auf jeden Fall, welche(n) der Fonts Sie als Ihre(n) Favoriten identifizieren, und wir freuen uns auf Ihr Feedback dazu. Eventuell kennen Sie ja sogar eine passende Schriftart, die unserer Aufmerksamkeit bisher entgangen ist. (jlu)
Danksagung
Die Autoren bedanken sich bei Gerold Rupprecht und Sven Guckes für deren Hilfe und Kommentare bei der Vorbereitung des Artikels.
Die Autoren
Frank Hofmann arbeitet zumeist von unterwegs aus als Entwickler, Trainer und Autor. Bevorzugte Arbeitsorte sind Berlin, Genf und Kapstadt. Axel Beckert arbeitet als Linux-Systemadministrator und Spezialist für Netzwerksicherheit bei den Informatikdiensten der ETH Zürich. Nebenher ist er ehrenamtlich bei Debian, der LUG Switzerland, beim Podcast Hackerfunk sowie diversen Open-Source-Projekten aktiv.
Glossar
-
Serifenlos
-
Als Serife bezeichnet man in der Typografie eine kurze dünne Querlinie auf den Strichenden von Buchstaben und Zeichen.
Infos
-
“Wegweiser Schrift”: https://typografie.de/produkt/wegweiser-schrift/
-
“What Font Do You Program With”: https://spin.atomicobject.com/2016/07/11/programming-fonts/
-
“5 open source fonts ideal for programming”: https://opensource.com/article/17/11/how-select-open-source-programming-font
-
Serifen: https://de.wikipedia.org/wiki/Serife
-
B612: https://b612-font.com
-
Bugreport zu Iosevka: https://bugs.debian.org/973995
-
Inconsolata: https://levien.com/type/myfonts/inconsolata.html
-
DejaVu Sans Code: https://github.com/SSNikolaevich/DejaVuSansCode
-
Ligaturen in Jetbrains Mono: https://www.jetbrains.com/lp/mono/#ligatures
-
Terminalemulator Kitty: https://sw.kovidgoyal.net/kitty/
-
Programmingfonts: https://www.programmingfonts.org/
-
Font Compare: https://s9w.github.io/font_compare/
-
“Free Programming Fonts”: https://www.webfx.com/blog/web-design/free-programming-fonts/
-
Kompatibilitätsliste: https://github.com/tonsky/FiraCode#terminal-compatibility-list
-
Ligaturen in Emacs mit Fira Code: https://github.com/tonsky/FiraCode/wiki/Emacs-instructions
-
Emacs-Modul
ligature.el: https://github.com/mickeynp/ligature.el -
Bug-Report gegen LibVTE: https://bugzilla.gnome.org/show_bug.cgi?id=584160




















