Verbessert Einfachheit immer die Lesbarkeit?
Ich würde sagen, vielleicht mit ein bisschen Kontroverse, absolut nicht .
Sie könnten mir eine Klasse mit 200 Member-Funktionen in ihrer öffentlichen Schnittstelle übergeben, und es könnte die am besten lesbare öffentliche Schnittstelle sein, die es gibt. Es könnte eine Freude sein, diesen Code und seine Dokumentation nur beiläufig durchzulesen. Ich würde es jedoch nicht als "einfach" bezeichnen, da ich mich trotz der Lesbarkeit mit der Interaktion all dieser Funktionen befassen und möglicherweise auf knifflige Randfälle achten müsste, die aus einem Missbrauch resultieren.
Ich würde eine Klasse mit 20 Mitgliedsfunktionen bevorzugen, die nicht so einfach zu lesen waren wie 200, weil "Lesbarkeit" für mich nicht die oberste Priorität ist, um menschliches Versagen zu verhindern und die Wartbarkeit von Code zu verbessern (die Leichtigkeit, mit der wir können es ändern, dh).
Dies hängt jedoch alles von unserer persönlichen Definition von "Einfachheit" ab. „Readability“ variiert typischerweise nicht , dass wild unter uns, es sei denn , jemand so viel Know - how und Geläufigkeit erworben hat , dass sie regex betrachten als sehr „lesbar“, zum Beispiel, zu vergessen , den Rest von uns Sterblichen.
Einfachheit
Vor langer Zeit dachte ich, "Einfachheit" bedeute "so leicht zu lesen wie möglich". Deshalb habe ich C-Code mit vielen praktischen Funktionen geschrieben, um die Syntax zu verbessern und das Lesen und Schreiben so einfach wie möglich zu gestalten.
Als Ergebnis habe ich sehr große, umfangreiche Bibliotheken auf hoher Ebene entworfen und versucht, eine Funktion für jeden natürlichen menschlichen Gedanken zu modellieren: Helfer auf Helfer auf Helfer, um den Client-Code in eine lesbarere Syntax umzuwandeln. Der Code, den ich damals geschrieben habe, war vielleicht der "lesbarste", aber auch der "nicht wartbarste" und "komplexeste".
Lispeln
Trotzdem hatte ich Mitte der 90er Jahre eine kurze Leidenschaft für LISP (Latecomer). Es hat meine ganze Vorstellung von "Einfachheit" verändert.
LISP ist nicht die am besten lesbare Sprache. Hoffentlich denkt niemand, dass das Extrahieren von CDRs und CARs beim Aufrufen einer rekursiven Funktion mit einer Schiffsladung geschachtelter Klammern sehr "lesbar" ist.
Trotzdem hat es meine Vorstellung von Einfachheit nachhaltig verändert, nachdem ich Mühe hatte, mein Gehirn mit der seltsamen Syntax und den völlig rekursiven Methoden der Sprache zu beschäftigen.
Mit dem Code, den ich in LISP geschrieben habe, habe ich festgestellt, dass ich keine subtilen Fehler mehr gemacht habe, obwohl ich durch diese trickreiche Denkweise offensichtlichere Fehler gemacht habe (aber diese sind leicht zu erkennen und zu korrigieren). Ich habe nicht missverstanden, was eine Funktion tut, und eine subtile, unerwartete Nebenwirkung übersehen. Ich hatte es einfach leichter, Änderungen vorzunehmen und korrekte Programme zu schreiben.
Nach LISP ging es für mich in der Einfachheit um Minimalismus, Symmetrie, Flexibilität, weniger Nebenwirkungen und weniger, aber flexiblere Funktionen, die auf unendlich viele Arten kombiniert werden können.
Ich lernte die Einstellung zu schätzen, dass der zuverlässigste Code überhaupt Code ist, den es nicht gibt. Obwohl es sich nur um eine grobe Metrik handelt, sehe ich das Potenzial für die Unzuverlässigkeit von Code in Abhängigkeit von seiner Menge. Das Bemühen um größtmögliche syntaktische Bequemlichkeit und Lesbarkeit führt dazu, dass sich diese Menge um einen großen Faktor erhöht.
Minimalismus
Mit der in mir eingebetteten LISP-Denkweise bevorzuge ich minimalistische APIs. Ich würde eine Bibliothek mit weniger, aber zuverlässigeren, flexibleren Funktionen bevorzugen, die weniger bequem und weniger lesbar sind als eine Bibliothek, die eine Fülle "bequemer" Helfer bietet und die den Code leicht "lesbar" macht, aber möglicherweise darüber stolpert Weitere Probleme mit Unzuverlässigkeit und Überraschungen, die sich aus Missverständnissen ergeben, was eine dieser Tausenden von Funktionen bewirkt.
Sicherheit
Eine andere Sache bei LISP war die Sicherheit. Es förderte minimale Nebenwirkungen und reine Funktionen und das war der Punkt, an dem ich keine subtilen Fehler mehr sah, obwohl die Schwierigkeit, in der Sprache zu lesen und zu schreiben, zu offensichtlichen Fehlern führte, die ich 10 Sekunden später bemerkte.
Reine Funktionen und unveränderliche Zustände wurden mir immer dann vorzuziehen, wenn ich es mir leisten konnte, auch wenn die Syntax von:
sword = sharpen(sword)
... ist etwas unkomplizierter und vom menschlichen Denken losgelöst als:
sharpen(sword)
Lesbarkeit VS. Einfachheit
Wiederum ist LISP nicht die am besten lesbare Sprache. Es kann eine Menge Logik in einen kleinen Codeabschnitt packen (möglicherweise mehr als ein menschlicher Gedanke pro Zeile). Ich bevorzuge im Idealfall einen menschlichen Gedanken pro Zeile für "Lesbarkeit", aber es ist nicht unbedingt für "Einfachheit".
Mit dieser Art der Definition von "einfach" könnte "einfach" manchmal tatsächlich etwas mit "lesbar" konkurrieren. Hierbei geht es eher um die Gestaltung der Benutzeroberfläche.
Eine einfache Benutzeroberfläche bedeutet, dass Sie viel weniger lernen müssen, um sie zu verwenden. Aufgrund ihres Minimalismus sind sie potenziell zuverlässiger und haben weniger Fallstricke. Eine umfassende Dokumentation zu diesem Thema könnte eher in eine Broschüre passen als in ein riesiges Buchvolumen. Trotzdem kann es sein, dass es mehr Arbeit erfordert und weniger lesbaren Code liefert.
"Einfach" verbessert für mich die Fähigkeit, die Funktionalität in unserem System auf einer breiten Ebene zu verstehen. "Lesbar" verbessert für mich die Fähigkeit, jede kleine Codezeile mit der natürlichen Sprache und dem natürlichen Denken zu verknüpfen, und beschleunigt möglicherweise unser Verständnis der Funktionen einer Codezeile, insbesondere wenn wir die Sprache nicht fließend beherrschen.
Regex ist ein Beispiel für das, was ich für "extrem einfach" halte. Es ist "zu einfach und zu unleserlich" für meinen persönlichen Geschmack. Es gibt für mich einen Spagat zwischen diesen Extremen, aber regex hat diese LISP-ähnliche Qualität der Einfachheit, wie ich sie definiere: Minimalismus, Symmetrie, unglaubliche Flexibilität, Zuverlässigkeit usw. Das Problem für mich bei regex ist, dass es so einfach ist, dass es so einfach ist Es ist so unlesbar geworden, dass ich nicht mehr denke, dass ich es jemals fließend beherrschen werde (mein Gehirn funktioniert einfach nicht so und ich beneide Leute, die fließend Regex-Code schreiben können).
Das ist meine Definition von "Einfachheit", und es ist völlig unabhängig von "Lesbarkeit" und kann manchmal sogar stören, was zu einem Balanceakt zwischen einer "syntaktisch bequemen" und lesbaren, aber größeren Bibliothek oder einer "syntaktisch" führt unbequeme ", weniger lesbare und dennoch kleinere Bibliothek. Ich habe immer die wahren Prioritäten "Bequemlichkeit des Verstehens" und "Wartbarkeit" gefunden, um mich an letzteren auszurichten, mit der starken Vorliebe für Minimalismus, selbst wenn die Lesbarkeit und die natürlichere menschliche Syntax darunter leiden (aber nicht bis zur Regex). . YMMV.