1 Punkte von GN⁺ 2024-09-28 | 1 Kommentare | Auf WhatsApp teilen

Code für Computer zu schreiben ist schwierig, aber Code für Menschen zu schreiben ist noch schwieriger

  • Code für Computer zu schreiben ist bereits schwierig. Man muss große Geschäftsziele in kleine logische Anweisungen zerlegen.
  • Aber Code für Menschen zu schreiben ist noch schwieriger. Das ist eine Aufgabe an der Schnittstelle von Informatik und Psychologie.
  • Wie Richard Feynman sagte: Stell dir vor, wie schwierig Physik wäre, wenn Elektronen Gefühle hätten. Das beschreibt Programmierung für Menschen ziemlich gut.

Der Einstieg ist bereits das Produkt

  • Auf Nutzerfeedback zu hören ist wichtig, aber das meiste Feedback kommt von Power-Usern, die das Produkt häufig verwenden.
  • Es gibt einen Survivorship Bias. Von Nutzern, die gar nicht erst anfangen, hört man fast nie Feedback.
  • Consumer-Produkte haben ihren Onboarding-Prozess über lange Zeit optimiert. Für Entwickler-Tools sollte dasselbe gelten.
  • Der Onboarding-Prozess sollte als Teil des Produkts betrachtet werden, und das Setup sollte minimal sein, damit Nutzer das Produkt innerhalb weniger Minuten verwenden können.

Menschen lernen nicht aus „Kernkonzepten“, sondern aus Beispielen

  • Menschen sind hervorragend im Pattern Matching. Computer dagegen folgen strenger Logik.
  • Viele Dokumentationen für Entwickler-Tools sind wie Computerprogramme geschrieben. Das ist für Menschen ungeeignet.
  • Lernen anhand von Beispielen ist effektiver. Beispiele helfen Nutzern, das Tool zu verstehen.

In die Erfolgsfalle tappen

  • Der Grundmodus der Programmierung ist Fehlerbehebung. Nutzer verbringen die meiste Zeit damit, Fehler zu beheben.
  • Deshalb ist es wichtig, Fehler in Erfolg zu überführen.
  • Fehler sollten als Gelegenheit genutzt werden, Nutzer auf den richtigen Pfad zu lenken. Exception-Handling sollte Code-Snippets enthalten, und Warnmeldungen sollten Hilfe bieten.

Konzeptuelle Überlastung vermeiden

  • Neue Konzepte verstehen zu müssen, erzeugt Reibung.
  • 2–3 Konzepte sind in Ordnung, aber 8 neue Konzepte zu lernen ist belastend.
  • Ideal ist ein Framework, das mit wenigen Konzepten mächtige Funktionen bietet. React bietet zum Beispiel mit einigen einfachen Konzepten starke Funktionalität.

Das konzeptuelle Enten-Prinzip

  • Wenn neue Konzepte eingeführt werden, ist es wichtig, Begriffe zu verwenden, die den Nutzern vertraut sind.
  • Zum Beispiel ist es sinnvoll, das Auswerten eines neuen Werts eine „Funktion“ zu nennen. So können Nutzer bestehende mentale Modelle nutzen.

Programmierbarkeit

  • Nutzer werden kreative Dinge in einer Codebase tun.
  • Fast alles an einem Framework sollte „programmierbar“ sein.
  • Dinge sollten direkt aus dem Code aufrufbar sein statt nur über eine CLI, und Konfiguration sollte in ein SDK oder eine API überführt werden.

Vorsicht mit Magie, Defaults und Syntax Sugar

  • Defaults und magische Funktionen sollten mit Bedacht eingeführt werden.
  • Wenn Defaults nicht in mehr als 97 % der Fälle und Magie nicht in mehr als 99 % der Fälle greifen, sollte man sie nicht einführen.
  • Coding ist kein Golf. Das Ziel sollte nicht sein, möglichst wenig Code zu schreiben, sondern Lesbarkeit in den Vordergrund zu stellen.

Code für Menschen zu schreiben ist schwierig

  • Die meisten Dinge sollten unveränderlich sein.
  • „Scaffolding“ (Code-Generierung) sollte vermieden werden.
  • Feedback-Loops müssen extrem schnell sein.
  • Es sollte einen Entsorgungsprozess geben, damit Nutzer leicht damit umgehen können.
  • In Dokumentation und Beispielen sollten automatische Tests für Code-Snippets verwendet werden.

Zusammenfassung von GN⁺

  • Dieser Artikel behandelt die Schwierigkeit, Code für Menschen zu schreiben, und mögliche Lösungsansätze.
  • Es ist wichtig, nutzerfreundliche Entwickler-Tools zu bauen, und das beginnt beim Onboarding.
  • Lernen über Beispiele ist effektiv, und der Schlüssel liegt darin, Fehler in Erfolg zu überführen.
  • Bei der Einführung neuer Konzepte sollte man Begriffe verwenden, die den Nutzern vertraut sind, und Programmierbarkeit mitdenken.
  • Defaults und magische Funktionen sollten mit Vorsicht eingeführt werden, und Lesbarkeit sollte Priorität haben.

1 Kommentare

 
GN⁺ 2024-09-28
Hacker-News-Kommentare
  • Menschen lernen auf unterschiedliche Weise

    • Einige bevorzugen es, zuerst die Kernkonzepte zu verstehen und sich dann Beispiele anzusehen
    • Viele Tutorials führen einen an der Hand wie beim Zusammenbau von Lego
    • Man möchte wissen, wie und warum Entscheidungen getroffen werden
    • Wenn ich mich einer neuen Bibliothek oder einem neuen Framework nähere, lese ich zuerst den Einführungstext und überspringe die Codebeispiele unter "Getting started"
    • In fortgeschrittenen Abschnitten gibt es mehr Diskussionen über Konzepte, daher erkunde ich diese zuerst
  • Schreiben und Empathie sind wichtig

    • Code zu schreiben und Anwendungen zu schreiben sind nicht dasselbe
    • Eher nach außen orientierte Entwickler achten stärker auf Architektur und Dokumentation
    • Einfachheit ist wichtig
    • Anwendungen zu schreiben ist ähnlich wie das Schreiben eines Essays
    • Frameworks behindern die organisatorischen Fähigkeiten von Entwicklern
  • Nicht alle lernen anhand von Beispielen

    • Manche lernen vom Allgemeinen zum Konkreten
    • Solche Menschen werden im K12-Bildungssystem übersehen
  • Code wird für Menschen geschrieben

    • Es ist wichtig, ein Problem umfassend zu verstehen, mit Stakeholdern zusammenzuarbeiten und effiziente Algorithmen zu entwerfen
    • Code zu schreiben ist nicht schwer
  • Zitat aus Code Complete

    • "Ein kleiner Teil des Programmierens besteht darin, Programme so zu schreiben, dass Computer sie lesen können, und der größere Teil darin, sie so zu schreiben, dass andere Menschen sie lesen können"
  • Code zu schreiben ist für Menschen da

    • Für Computer reichen Maschinenbefehle aus
    • Code ist eine Methode, menschliche Gedanken zu formalisieren
  • Meinung zur Weiterentwicklung von IDEs

    • Grundlegendes Intellisense hat sich verbessert, aber das Konzept des Codierens hat sich nicht wesentlich verändert
    • Der Zugang zu neuen Tools und Bibliotheken ist einfacher geworden
    • Ich möchte Codierarbeit dem Computer überlassen und mich auf das Schaffen konzentrieren
    • Es braucht Werkzeuge, die kleine Details der Sprache automatisch handhaben
    • Ich möchte mehrere Methoden gleichzeitig auf dem Bildschirm anzeigen
    • Ich möchte Datenumwandlungen automatisch erledigen lassen
  • Werbung für einen Blogpost

    • Ich habe einen Blogpost mit dem Titel "Move Fast & Document Things" geschrieben
    • Darin teile ich eine Kultur des Codeschreibens
  • Meinung dazu, wie man Programmieren lernt

    • Man lernt, indem man kleine Programme schreibt
    • Mir fehlte grundlegendes Wissen, sodass ich mich nicht auf bessere Jobs in der Softwareentwicklung bewerben konnte
    • Es ist wichtig, die Grundlagen immer zu lernen
  • Die Bedeutung von Beispielen und Kernkonzepten

    • Sowohl Beispiele als auch Kernkonzepte sind wichtig
    • Es braucht gut definierte und dokumentierte Kernkonzepte
    • Ein "Getting Started"-Leitfaden sollte Beispiele enthalten