Enlightenmentware - Software, das mich wachrüttelt
(mmapped.blog)- UNIX, Git, Emacs, Boost.Graph, Bazel
- Als Programmierer interagiere ich täglich mit Software-Werkzeugen, aber die meisten dienen nur dazu, die Arbeit gerade so zu erledigen
- Manchmal entdeckt man Software, die über bloße Nützlichkeit hinausgeht, die Vorstellungskraft anregt, neue Möglichkeiten eröffnet und beeinflusst, wie man Systeme entwirft
- Solche Software nenne ich „Enlightenmentware“
- Für Programmierer ist die häufigste Quelle solcher Aha-Momente die verwendete Programmiersprache, einschließlich Sprachen, die man als Hobby lernt
- Beim Arbeiten mit Programmiersprachen wie MASM, C, Prolog und Idris habe ich viele solcher Erkenntnisse erlebt
- Dass das Erlernen von Sprachen das Denkvermögen erweitert, ist schon lange bekannt, deshalb konzentriert sich dieser Text nicht auf Sprachen, sondern nur auf Software, die zu solchen Erkenntnissen führt
UNIX
unix ist benutzerfreundlich — es ist nur wählerisch bei seinen Freunden.
Anonym, "Art of unix Programming" von Eric S. Raymond
- 2008 begann ich während des Studiums nach meinem ersten Job als Programmierer zu suchen.
- In den meisten Stellenanzeigen wurden Kenntnisse von UNIX und socket verlangt.
- Da es im Studienplan keine Veranstaltung zu unix oder Betriebssystemen gab, beschloss ich, es mir selbst beizubringen.
- Durch das Buch "The unix Operating System" von Andrey Robachevsky u. a. fand ich den Einstieg in die Welt von unix.
- Mit der Installation von Mandriva Linux begann ich, die unix-Umgebung zu erkunden.
- Seitdem hat mich unix in jeder Lebensphase begleitet.
- Der Großteil der Software läuft in unix-Umgebungen, und ich schlage noch immer im Buch "Advanced Programming in the unix Environment" nach.
Git
Es ist leicht, sich mit git selbst ins Bein zu schießen, aber genauso leicht ist es, zum vorherigen Bein zurückzukehren und es mit dem aktuellen zu vernähen (merge).
Jack William Bell
- Anfang 2009 kam ich mit Rational ClearCase zum ersten Mal mit einem Versionsverwaltungssystem in Berührung.
- ClearCase war äußerst verwirrend und erledigte nur die Mindestanforderungen.
- Danach begann ich Subversion zu verwenden und lernte es mit dem Buch "Version Control with Subversion".
- Subversion war leicht zu verstehen und einfach zu benutzen, aber für persönliche Projekte unpraktisch.
- Danach entdeckte ich Git.
- Git hatte eine steile Lernkurve und war verwirrend, aber auf eine andere Art als ClearCase.
- Git beseitigte die Reibung bei der Nutzung von Versionsverwaltung, sodass ich alles, was wertvoll war, versionieren konnte.
- Das Design von Git war faszinierend: eine elegante Mischung aus verteilten Systemen, azyklischen Graphen und inhaltsadressiertem Speicher.
- Es machte Spaß, das Innenleben von Git zu lernen, und so begann ich mich auch für andere Versionsverwaltungssysteme zu interessieren.
- Der größte Nachteil von Git ist, dass sein snapshot-orientierter Ansatz das Verständnis von Merges erschwert.
Emacs
Jeder Texteditor kann Dateien speichern, aber nur Emacs kann die Seele retten.
Per Abrahamsen
- Meine ersten Programme bearbeitete ich im vertrauten blauen Fenster von Turbo Pascal 7.0.
- An der Universität lernte ich Programmieren mit Pascal und verwendete später C++ und Java.
- In meinem ersten Programmierjob nutzte ich NEdit, begann mich aber für Vim und Emacs zu interessieren.
- Vim war herausfordernd, aber unterhaltsam, wie das Spielen eines Musikinstruments.
- Emacs ist eine Lisp-Maschine, die Funktionen für Textbearbeitung und Fensterverwaltung bereitstellt.
- Die interne Struktur von Emacs ist sauber, gut organisiert und gut dokumentiert.
- Die Erweiterung mit Emacs Lisp ist viel einfacher als bei anderen Editoren.
Boost.Graph
Ich habe eine starke Abneigung gegen den Hype um wiederverwendbaren Code. Ich denke, „wieder editierbarer Code“ ist weit besser als eine Blackbox oder ein Toolkit.
Donald Knuth, im Interview mit Andrew Binstock
- An Silvester 2013 las ich die Boost Graph Library.
- Die meisten Algorithmusbibliotheken hängen von einer bestimmten Datenrepräsentation ab, was ihre Integration in bestehende Projekte erschwert.
- Die Bibliothek Boost.Graph löst dieses Problem mit generischer Programmierung.
- Ich habe die Bibliothek zwar nie tatsächlich benutzt, aber ihr Design hat mein Verständnis von STL-Design und generischer Programmierung vertieft.
Bazel
Wenn
makenicht wie erwartet funktioniert, ist wahrscheinlich dasMakefilefalsch.Adam de Boor, "PMake—A Tutorial"
- 2009 schrieb ich für ein Forschungsprojekt mein erstes
Makefile. - Wegen der Komplexität von
makesehnte ich mich nach einem besseren Werkzeug. - Ich probierte verschiedene Build-Systeme aus, aber keines stellte mich zufrieden.
- 2016 trat ich bei Google ein und begann
blazezu verwenden. - Bazel war das letzte fehlende Puzzlestück bei Build-Systemen.
- Bazel ist schnell, präzise, leicht zu verwenden und sprachunabhängig.
Fazit
- Gemeinsame Merkmale guter Enlightenmentware:
- Sie löst tiefgehende Probleme und befasst sich mit Problemen, denen man im Alltag begegnet.
- Sie bietet viel Tiefe bei kleiner Oberfläche.
- Sie lädt dazu ein und ermutigt dazu, ihr Innenleben zu erkunden.
Meinung von GN⁺
- Die Bedeutung von UNIX: UNIX ist in vielen Programmierumgebungen das grundlegende Betriebssystem und essenziell, um die Grundlagen der Systemprogrammierung zu verstehen.
- Die Lernkurve von Git: Git ist anfangs schwierig, aber als mächtiges Werkzeug der Versionsverwaltung unverzichtbar. Besonders nützlich ist es in verteilten Systemen und kollaborativen Umgebungen.
- Die Flexibilität von Emacs: Emacs bietet mehr als ein Texteditor und ist besonders für Menschen empfehlenswert, die sich für Lisp-Programmierung interessieren.
- Generische Programmierung in Boost.Graph: Boost.Graph ist ein starkes Beispiel für generische Programmierung, an dem man lernen kann, wie sich komplexe Algorithmen effizient implementieren lassen.
- Die Effizienz von Bazel: Bazel ist ein Werkzeug, mit dem sich die Effizienz von Build-Systemen in großen Projekten maximieren lässt, besonders in Großunternehmen wie Google.
5 Kommentare
Unter Windows vielleicht doch nicht
everything, hahaWie gut ist Magit eigentlich, dass es es in die Reihe solcher Meisterwerke der Software schafft? Da ich Emacs nicht benutze, kann ich das nicht beurteilen.
Bei Nvim heißt es, Neogit sei von Magit beeinflusst worden — vielleicht sollte ich das wenigstens mal ausprobieren ...
lazygitkann ich auch empfehlen, hahaDanke.
Am Wochenende werde ich wohl
superfileundlazygitinstallieren und sie mir ein wenig ansehen.Hacker-News-Meinung
Zusammenfassung der Hacker-News-Kommentare
Compiler Explorer:
Meinungen zur Nutzung von Windows:
Docker:
Spring Framework:
Nix:
Emacs:
Das Konzept von 'Round':
Magit:
Vergleich von SVN und Git:
Erfahrungen mit Linux, Emacs, Bazel und Magit: