- Dieser Text schlägt realistische und satirische Informatikvorlesungen vor, die Softwareentwickler lernen sollten, obwohl sie in Wirklichkeit nicht existieren
- Jeder Kurs legt Probleme moderner Entwicklungskultur oder verzerrte Denkweisen kritisch offen
- Behandelt werden zum Beispiel der blinde Glaube an das objektorientierte Paradigma, die Missachtung der UX von Kommandozeilen-Tools oder Fehlannahmen über die Performance langsamer Sprachen
- Enthalten sind außerdem Fächer zu den psychologischen Fixierungen und unproduktiven Gewohnheiten von Entwicklern
- Insgesamt präsentiert der Text die Grenzen der Informatikausbildung und die Notwendigkeit von Selbstreflexion in der Entwicklungskultur auf humorvolle Weise
CSCI 2100: Objektorientierte Programmierung vergessen
- Dieser Kurs behandelt das Konzept von Variablen und Funktionen, die nicht zu einer Objekthierarchie gehören
- Er löst sich von objektorientiertem Denken und erkundet die Flexibilität und Einfachheit der funktionalen Programmierung
- „Funktion“ wird als allgemeineres und besser wiederverwendbares Konzept als „Methode“ eingeführt
- Als Voraussetzung gilt jeder Kurs, in dem der Begriff „abstract base class“ verwendet wurde
- Ziel ist es, die übermäßige Abhängigkeit vom objektorientierten Paradigma aufzubrechen und das grundlegende Denken über Programmierung neu zu ordnen
CSCI 3300: Studien klassischer Software
- Eine Lehrveranstaltung zum Analysieren und Diskutieren historisch bedeutender Softwareprodukte
- Beispiele sind VisiCalc, AppleWorks, Robot Odyssey, Zork, MacPaint
- Der Schwerpunkt liegt auf der Benutzeroberfläche (UI) und dem Einfluss von Hardwarebeschränkungen auf Kreativität
- Anhand von Innovationen, die unter früheren Einschränkungen entstanden, werden grundlegende Prinzipien modernen Softwaredesigns neu beleuchtet
CSCI 4020: Schnellen Code in langsamen Sprachen schreiben
- Behandelt wird, wie sich auch in Interpretersprachen (wie Python) performanter Code schreiben lässt
- Untersucht werden Strategien, um auf hohem Abstraktionsniveau Performance-Analysen durchzuführen und Effizienz auf C++-Niveau zu erreichen
- Ziel ist es, die Fragilität von Code zu verringern und zugleich die Freude an der Entwicklung zu bewahren
- Der Kurs widerlegt die gängige Annahme, dass „langsame Sprachen langsam sind“, und zeigt Optimierungspotenziale in Sprachdesign und Laufzeitumgebung
CSCI 2170: User Experience (UX) von Kommandozeilen-Tools
- Ein Einführungskurs zu den Prinzipien der UX-Gestaltung für Kommandozeilenprogramme
- Kernthemen sind Relevanz, Lesbarkeit und Reduktion der Ausgabe
- Am Beispiel des UNIX-Befehls
ls werden Probleme übermäßiger Optionen und komplexer Interfaces analysiert
- Betont wird, dass auch Kommandozeilen-Tools wie grafische UIs nutzerzentriertes Design brauchen
PSYC 4410: Die Psychologie der Fixierungen von Programmierern
- Untersucht werden unproduktive Fixierungen und zwanghafte Denkmuster, in die Softwareentwickler oft verfallen
- Zum Beispiel Code-Formatierung, Taxonomien, Typsysteme oder übermäßige Aufteilung in Dateien
- Die spontane kritische Reaktion (knee-jerk criticism) beim Kontakt mit unbekannten Systemen wird psychologisch analysiert
- Der Kurs soll helfen, kognitive Verzerrungen und perfektionistische Tendenzen von Entwicklern zu verstehen und ein Gleichgewicht zwischen Zusammenarbeit und Kreativität zu finden
Gesamtkontext
- Diese Liste ist kein echter Lehrplan, sondern eine satirische Kritik an Informatikausbildung und Entwicklungskultur
- Jeder Kurs macht blinde Flecken technikzentrierten Denkens sichtbar und fordert Entwickler zu mehr geistiger Flexibilität und Selbstreflexion auf
- Obwohl der Beitrag aus dem Jahr 2015 stammt, behandelt er Fragestellungen, die bis heute aktuell sind
1 Kommentare
Hacker-News-Kommentare
CSCI 3300: Classical Software Studies
Alan Kay betont seit Jahrzehnten, dass wir Konzepte, die bereits Ende der 70er Jahre etabliert waren, immer wieder neu erfinden.
Ich kann seine Enttäuschung gut nachvollziehen, dass Programmierer wie Künstler, die Kunstgeschichte lernen, auch die Geschichte der Informatik lernen sollten.
Computing, das von der Leistungsfähigkeit physischer Hardware abhängt, mit Kunst zu vergleichen, halte ich für überzogen.
Zu glauben, dass Problemlösungen von 1970 im Jahr 2025 unverändert gelten, verkennt die Realität.
Es ist interessant, wie sich mit jeder Generation diese ständige Wiederentdeckung wiederholt.
Etwas über frühere Probleme und Lösungen zu lernen, ist niemals Zeitverschwendung.
Dadurch habe ich die Entwicklung von Unix und kommerzieller Software deutlich tiefer verstanden und Alan Kays Aussage voll zugestimmt.
CSCI 3240: Ignoring Hype
Ein Kurs darüber, wie man lernt, den Hype um die neuesten Plattformen oder Bibliotheken zu ignorieren.
Anschließend behandelt CSCI 3120: Novelty Driven Development das Gegenteil: wie man mit Trends Schritt hält und dabei das Interesse bewahrt.
Beide Kurse können nicht gleichzeitig belegt werden.
Weitere mögliche Kurse wären Besprechungstechnik (PSYC 4870) oder das Akzeptieren organisatorischer Reibung (PSYC 5630),
also Themen rund um realistische Kommunikation und Motivation im Arbeitsalltag.
CSCI 4810: The Refusal Lab
Ein Laborpraktikum, in dem unethische Produktanforderungen und Termindruck simuliert werden und man nur besteht, wenn man sie nach professionellen Standards ablehnt.
Vorschlag für einen Debugging-Kurs
Es wäre schön, wenn es einen Kurs gäbe, in dem man lernt, die Grundursache von Bugs zu finden und verschiedene Werkzeuge zu nutzen.
print.Es braucht Zeit, um über den Heilsbringer des interaktiven Debuggings zu sprechen.
CSCI 0001: Functional programming and type theory
Die obskure Terminologie und Formelsprache der Wissenschaft haben der Verbreitung der funktionalen Programmierung lange im Weg gestanden.
Jetzt ist es wohl an der Zeit, direkt zu lernen, warum Monaden Monoide in der Kategorie der Endofunktoren sind.
CSCI 4020: Writing Fast Code in Slow Languages
Ein Kurs, der algorithmische Komplexität mit langsamen Sprachen (VB, Ruby usw.) lehrt und zeigt, dass O(N) in Ruby O(N²) in C++ schlagen kann.
und ich war überrascht, dass BASIC unerwartet schnell abschnitt.
Dadurch wurde für mich greifbar, warum Python für KI nützlich ist.
Vektorisierter Code auf linearem Speicher ist viel schneller als Daten, die über den Heap verstreut sind.
Sammlung früherer Folgen
Die Reihe „Computer science courses that don't exist, but should“ wurde fortgesetzt mit der
Ausgabe von 2015 (247 Kommentare),
Ausgabe von 2017 und der
Ausgabe von 2018.
Ich musste an einen Kurs namens Software Archaeology denken, den ich im Studium hatte.
Es war eine Lehrveranstaltung, in der man Compiler-Übungsaufgaben aus den 1970er Jahren erneut implementierte.
Damals erschien mir das nutzlos, aber später hat es mir sehr geholfen, Systemdesign besser zu verstehen.
Die Fähigkeit, alte Bugs, Wikis, Versionshistorien und Teamhistorien nachzuverfolgen, ist unverzichtbar.
Viele Informatikprogramme sind heute faktisch zu Programmier-Berufsschulen geworden.
Studierende können Frameworks benutzen, verstehen aber weder die Philosophie hinter Sprachdesign noch die Entwicklung von Systemen.
Man sollte nicht vergessen, dass Computing nicht nur Implementierung, sondern auch eine Disziplin von Gedanken und Ideen ist.
Wegen der Akkreditierungsanforderungen lässt sich der Lehrplan nur schwer stark verändern.
CSCI 3210: Modern text encoding and processing
Ein Kurs über Unicode und UTF-8, in dem man die Vorstellung aufgibt, dass „1 Zeichen = 1 Byte“ bedeutet.
Behandelt werden nicht nur Encodings, sondern auch Suche, Sortierung, Font-Rendering und Emoji-Verarbeitung.
Das ist grundlegend, aber nur wenige verstehen es wirklich richtig.