4 Punkte von GN⁺ 2025-10-25 | 1 Kommentare | Auf WhatsApp teilen
  • 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

 
GN⁺ 2025-10-25
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.

    • Als ich am RIT studierte, gab es ein Wahlfach namens „History of Computing“. Es behandelte alles vom Abakus bis zu Mainframes und Netzwerken, und die Vorlesungsnotizen sind immer noch online.
    • Die Geschichte von Kunst oder Philosophie erstreckt sich über Jahrtausende, aber die Geschichte des Computings umfasst gerade einmal eine Generation oder zwei bis drei Generationen.
      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.
    • Ich habe auf GitHub einmal auf die Frage „Worin unterscheidet sich das von Ansible?“ die Antwort „Ich habe noch nie von Ansible gehört“ gesehen.
      Es ist interessant, wie sich mit jeder Generation diese ständige Wiederentdeckung wiederholt.
    • Wenn man mit Gründern arbeitet, erlebt man oft, dass bereits existierende Konzepte so dargestellt werden, als seien sie neu erfunden worden.
      Etwas über frühere Probleme und Lösungen zu lernen, ist niemals Zeitverschwendung.
    • Im Studium hatte ich einmal die Aufgabe, einen „Aufsatz zur Geschichte von Betriebssystemen“ zu schreiben, und ich wählte OS X (Snow Leopard).
      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.

    • CSCI 4812: The Career Lab behandelt dann die Realität, die zurückbleibende Arbeit zu erledigen, nachdem Kollegen unethische Anforderungen akzeptiert haben und gegangen sind.
    • Tatsächlich enthalten viele Studiengänge bereits Lehrveranstaltungen zum Thema Ethik.
    • Aber Universitäten priorisieren letztlich doch vor allem die Beschäftigungsfähigkeit ihrer Absolventen.
  • 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.

    • Ähnlich wie in einem Chemielabor könnte man den Studierenden eine Legacy-Codebasis voller Bugs geben, und der Kurs wäre bestanden, wenn alle Tests durchlaufen.
    • Man sollte dabei auch lernen, den Code anderer zu lesen und bestehende Strukturen (Chesterton’s fence) nicht leichtfertig einzureißen.
    • Selbst viele Senior Engineers debuggen noch immer mit 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.

    • Reine Funktionen arbeiten auch innerhalb eines context window sehr natürlich.
  • 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.

    • Ich erinnere mich an ein Buch aus meiner Kindheit, das Bubble Sort in FORTRAN mit Quicksort in BASIC verglich,
      und ich war überrascht, dass BASIC unerwartet schnell abschnitt.
    • Ich habe einmal Übungen gemacht, bei denen Python-Schleifen in numpy-Vektoroperationen und tensorflow-Operationen umgewandelt und die Geschwindigkeitsunterschiede gemessen wurden.
      Dadurch wurde für mich greifbar, warum Python für KI nützlich ist.
    • Es wäre wirklich gut, wenn Engineers, die täglich Python verwenden, verstehen würden, warum ihr Code langsam ist.
    • Oft macht die Nutzung der Hardware einen größeren Unterschied als die algorithmische Komplexität.
      Vektorisierter Code auf linearem Speicher ist viel schneller als Daten, die über den Heap verstreut sind.
    • Referenzbuch: Visual Basic Algorithms Ready-to-Run
  • 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.

    • Tatsächlich ist digitale Detektivarbeit in großen Codebasen sehr wichtig.
      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.

    • Einige große staatliche Universitäten behalten allerdings noch immer einen Kernlehrplan bei, der im Wesentlichen dem von vor 25 Jahren entspricht.
      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.