Ich versuche jemandem zu erklären, dass die Art und Weise, wie er den Code geschrieben hat, schwer zu verstehen ist. Wenn Sie ihn überarbeiten, ist es einfacher, ihn zu lesen. Diese Art von Code, mit dem ich fahre, wird im Allgemeinen als "idiomatischer" Code "bezeichnet.
Aber die Redewendung „ idiomatischer Code“ bringt eine Menge moralischer Korrektheit mit sich , was kein großer Anreiz ist, die Leute dazu zu bringen, ihren Codierungsstil zu ändern. Eine positivere Art, dies zu sagen, ist Code, der dem üblichen Stil folgt - aber für einen kritischen Denker, der als Herdenmentalitäts-Argumentation wirkt.
Ich habe diese Idee so erklärt, dass die Leute motiviert sind, ihren Code zu ändern:
- Schreiben Sie den Code so, dass der kognitive Aufwand des Lesers verringert wird (z. B. kann ich mich nicht erinnern, ob dies die erste Art von Vektor ist - oder die fünfte Art von Vektor).
- Code, der es einfacher macht, die Absicht zu verstehen (z. B. wofür ist dieser Vektor?)
(Abgesehen davon ist mir bekannt, dass das Buch "The Joy of Clojure" vor seiner ersten Veröffentlichung den Entwurfstitel "Idiomatic Clojure" hatte. Es scheint also ein Grund zu sein, Code "idiomatisch" zu machen, um dem Leser "Freude zu bereiten" ).
Meine Frage ist: Ist der Zweck des Codes "idiomatisch", um den kognitiven Aufwand zu reduzieren?
Antworten:
Erstens bin ich mir nicht sicher, ob der Begriff "idiomatisch" irgendeine Art von "moralischer Korrektheit" enthält. Die einfache Wörterbuchdefinition ist einfach
Ja, idiomatischer Code reduziert im Allgemeinen den kognitiven Aufwand, insbesondere bei Schnittstellendefinitionen, bei denen die Standardbibliotheken und alle Bibliotheken von Drittanbietern, die das Projekt benötigt, (praktisch) alle idiomatisch sind.
Als Verkaufsargument möchte ich mich jedoch darauf konzentrieren, was das Reduzieren des kognitiven Overheads für Sie bedeutet. Es erleichtert Programmierern das Erkennen von Fehlern, da sie nicht versuchen, in einem einzigartigen Stil geschriebenen Code zu entwirren, um herauszufinden, wo es durch einen Fehler oder eine falsche Behandlung eines Randfalls auf subtile Weise zu einer Abweichung kommt. Dies erleichtert das Überprüfen des Codes anderer Personen, wodurch die Wahrscheinlichkeit steigt, dass das Team echte Überprüfungen durchführt, die echte Probleme identifizieren, anstatt sich über die Syntax zu streiten.
Neben der Reduzierung des kognitiven Overheads ist idiomatischer Code im Allgemeinen effizienter. Die meisten Redewendungen in einer bestimmten Sprache entwickeln sich, weil die Sprache so konzipiert ist, dass Probleme auf eine bestimmte Art und Weise angegangen werden. Die Compiler oder Interpreter, die Sie verwenden, werden ihre Optimierungen auf idiomatischen Code konzentrieren. Wenn Sie eine Sprache verwenden, in der Rekursion die idiomatische Methode zum Strukturieren eines Codeteils ist, können Sie fast sicher sein, dass Ihr Compiler die Endrekursion implementiert. Wenn Sie eine Sprache verwenden, in der die Rekursion nicht idiomatisch ist, ist dies viel weniger wahrscheinlich. Es ist unwahrscheinlich, dass die Schwanzrekursion nicht überall implementiert werden kann, aber die meisten Compiler-Autoren werden sich nicht auf Dinge konzentrieren, die nicht häufig vorkommen.
quelle
Ich bin mir nicht sicher, woher Sie die Idee haben, dass Redewendungen moralische Konnotationen haben. Redewendungen sind nur eine Möglichkeit, Dinge auszudrücken. Sie sind Muster in einem größeren Maßstab als einzelne Wörter oder Phrasen.
Wenn ich dir sagen müsste, dass man mit den Wölfen heulen muss, würdest du nicht wissen, was ich meinte, obwohl das eine bekannte deutsche Redewendung ist. Wenn, OTOH, ich Ihnen sagte, wenn Sie in Rom tun, was die Römer tun, dann wissen Sie sofort, wovon ich spreche, weil ich die richtige englische Sprache verwendet habe.
Computersprachen sind nicht anders.
Ein alternativer Name für "Idiom" in der Programmierwelt ist "Implementierungsmuster". Dies bezieht die Idee auf die Idee von Mustern, die vom Architekten Christopher Alexander stammt. Die meisten Programmierer kennen sich mit Entwurfsmustern aus, einige mit Architekturmustern, bei denen es sich um Muster handelt, die einen größeren Maßstab als Entwurfsmuster haben. Redewendungen sind Muster auf einer Skala, die kleiner ist als Designmuster.
quelle
Die meisten Sprachen eignen sich absichtlich für einen bestimmten Stil. In diesem Stil geschriebener Code ist das, was idiomatisch ist. Wenn Sie über den Umstand hinausblicken, dass die Auswahl der Laufzeitumgebung die verfügbare Sprachauswahl einschränkt, sollten Sie Sprachen auswählen, da sich das vorliegende Problem leicht in den einzelnen Redewendungen einer Sprache ausdrücken lässt.
Die meisten Leute verstehen das allerdings nicht. Viele Java-Programmierer bemühen sich beispielsweise, den gleichen Stil beizubehalten, wenn sie JavaScript schreiben müssen (sie hätten Java schreiben und crosskompilieren können, wohlgemerkt) und bis zu einem gewissen Grad erfolgreich sind - Schreiben von Java-idiomatischem Code in JavaScript - Aber sie werden immer das Gefühl haben, gegen JavaScript zu kämpfen. Bestimmte Features fehlen oder es fällt schwer, sie zu emulieren.
Der Redewendungscode ist gut. Es ist schwer für den Außenstehenden, aber sie können lernen. Letztendlich muss Code jahrelang gepflegt werden. Wenn Sie also eine Sprache finden, in deren Redewendungen das zugrunde liegende Programm einfach ausgedrückt werden kann, sollten Sie dies tun.
Lassen Sie mich nur klarstellen, dass es definitiv so etwas wie einen übermäßigen Gebrauch von Redewendungen (oder den zugrunde liegenden Sprachmerkmalen) gibt. Wenn Sie C ++ - Vorlagen verwenden, um wichtige Teile der Anwendungslogik zur Kompilierungszeit auszuführen, oder wenn Ihr komplettes Lisp-Programm ein Aufruf eines Makros ist, das sich auf praktisch unvorhersehbare Weise zur eigentlichen Sache entfaltet, wenn sich Ihre Java-Lösung eines einfachen Problems aufbläht die Proportionen von FizzBuzzEnterpriseEdition ... du machst es falsch.
Die Leute sagen, Code muss einfach zu lesen sein. Das ist nur die halbe Wahrheit. Es muss leicht zu verstehen sein, was erfordert, dass es auch leicht zu überlegen ist. Das erfordert eine angemessene Verwendung von Abstraktionen. Wie bei den meisten Dingen geht es darum, die richtige Balance zu finden.
quelle