Was ist der "saubere Code" im Jahr 2020?


"Sauberer Code" und eine saubere Katze

Füttern Sie kein Brot für Entwickler, lassen Sie uns über die Sauberkeit des Codes streiten: Zum Beispiel hat Dan Abramovs Beitrag "Auf Wiedersehen, sauberer Code" kürzlich viel Aufhebens gemacht .

Gleichzeitig ist das Konzept des „sauberen Codes“ nicht klar definiert. Das Hauptbuch zu diesem Thema ist "Clean Code" , in dem Robert "Onkel Bob" Martin sofort erklärt: "Wie viele Programmierer, so viele Definitionen". Daraus schließt er jedoch nicht, dass „es nutzlos ist, darüber zu sprechen“, sondern dass „es sich lohnt, verschiedene Definitionen zu vergleichen“. Daher zitierte er in dem Buch die Ansichten mehrerer prominenter Programmierer darüber, was sauberer Code ist.

Es wurde für uns interessant: Im Jahr 2020 blieben die Vorstellungen der Menschheit über sauberen Code dieselben, oder haben sie sich seit der Veröffentlichung des Buches irgendwie geändert? Unterscheiden sich die Meinungen verschiedener IT-Spezialisten: Vielleicht sehen Backender alles aus einem Blickwinkel und Tester aus einem anderen?

Im April wird Onkel Bob nach St. Petersburg fliegen, um auf unseren drei Konferenzen zu sprechen. Sie gehen in nur drei verschiedene Richtungen ( über die .NET-Entwicklung , über das Testen und über JavaScript ). Aus diesem Grund haben wir mehrere Redner dieser Konferenzen gefragt, was sauberer Code für sie ist, um die Meinungen von Branchenexperten im Jahr 2020 zu vergleichen.

Und da das Thema hohl ist, wird sicherlich keiner von Ihnen einer der Meinungen zustimmen. In diesem Fall, argumentieren Sie in den Kommentaren, das macht auch Spaß!

UPD: , . , . - . . 13 , .


DotNext



John ist eine Stack Overflow-Legende, Autor von C # in Depth und einer der berühmtesten Spender der Welt. Er gab uns diese Definition:

„Für mich ist sauberer Code aus Sicht der Implementierung ein langweiliger Code. Die einzige Überraschung in ihm ist, wie sehr er keine Überraschungen hat. Ich muss das Gefühl haben, "Ja, ich könnte das schreiben", auch wenn ich es wirklich nicht könnte - wie gut es gestaltet ist.

Wenn die Abstraktion richtig gewählt ist, wird die Implementierung natürlich abgeleitet. Im Idealfall sollte sich diese Abstraktion auch einfach und offensichtlich anfühlen - obwohl es in der Tat Stunden, Wochen, Monate dauern kann, bis sie in einen solchen Zustand gebracht wird.

Der erwähnte Mangel an Überraschungen überträgt sich später auf die Verwendung: Wenn ich Code mit einer gut gestalteten API schreibe, wird mein Code auch offensichtlich und langweilig. "



Andrey Akinshin


DotNext-Besucher müssen Andrei nicht vorstellen, aber im Übrigen werden wir Ihnen sagen, dass er für seine Arbeit am IDE Rider , der BenchmarkDotNet- Bibliothek , lebendigen Berichten und dem Buch „Pro .NET Benchmarking“ bekannt ist.

Als wir fragten, was er von sauberem Code halte, bezog sich Andrei auf zwei seiner alten Habraposts: „Perfekter Code und echte Projekte“ und „Kommentar oder kein Kommentar“ . Und wir haben für Sie ein paar Absätze von dort ausgewählt, mit denen sich wahrscheinlich jemand streiten möchte:

„Ich liebe den perfekten Code. Dies ist schließlich nicht nur der richtige Ansatz zum Schreiben von Programmen, sondern auch eine echte Kunst. Das Lesen einer guten Liste macht mir genauso viel Spaß wie das Lesen eines guten Buches. Das Entwerfen der Architektur eines großen Projekts ist nicht einfacher als das Entwerfen der Architektur eines großen Gebäudes. Wenn es gut funktioniert, ist das Ergebnis nicht weniger schön. Manchmal fasziniert es mich, wie anmutig Designmuster bei der Erstellung eines perfekten Softwaresystems miteinander verwoben sind. Ich bewundere die Liebe zum Detail, wenn absolut jede Methode so einfach und unkompliziert ist, dass sie behauptet, das klassische Beispiel für perfekten Code zu sein.

Aber leider ist all diese Pracht auf harte Realität und reale Projekte aufgeteilt. Wenn es sich um ein Produktionsprojekt handelt, ist es den Benutzern egal, wie schön Ihr Code ist und wie gut die Architektur ist. Sie kümmern sich darum, dass das Projekt gut funktioniert. Aber ich denke immer noch, dass man sich auf jeden Fall bemühen sollte, richtig zu schreiben, nur dass es keinen Fanatismus geben sollte. “



Dylan Beatty


Habrachitateli kann sich an Dylan in seinem nachdenklichen und lebendigen Bericht über die Arbeit mit Legacy-Code erinnern: Für Habr haben wir die Dekodierung durchgeführt . Und als wir uns wegen sauberem Code an Dylan wandten, schrieb er einen so detaillierten und durchdachten Text, dass er zumindest in einem separaten Beitrag veröffentlicht wurde:

"Es ist interessant für mich, dass sich das Konzept des" sauberen Codes "weit über den Kreis der Menschen hinaus verbreitet hat, die Robert Martins Buch gelesen haben. Ich habe mit vielen, vielen Entwicklern gesprochen, die die Worte "sauberer Code" hörten, aber das Buch nicht lasen. Ich habe sie sogar in einem Codrev getroffen: "Hier ist alles ziemlich gut, aber kannst du es ein wenig reinigen?" - und eine solche Anfrage kann ärgerlich ungenau sein, wenn nicht klar ist, was „rein“ in diesem speziellen Kontext bedeutet.

Im Englischen gibt es Wörter, die oft zusammen gefunden werden - "sauber", "ordentlich", "organisiert", "ordentlich" - und für mich als Muttersprachler des Englischen bedeuten sie alle etwas andere Dinge. Ich denke, es ist nützlich, einige Konnotationen dieser Wörter in Bezug auf die Softwareentwicklung zu berücksichtigen.

Stellen Sie sich zum Beispiel die Küche eines Restaurants vor. Das Wort sauber wird in diesem Zusammenhang sehr spezifische Konnotationen haben. Alles wird gewaschen, sterilisiert, es besteht keine Infektionsgefahr durch Rohkost und dergleichen.

Dies bedeutet jedoch nicht automatisch, dass hier alles gut organisiert ist. Wenn Sie jemals versucht haben, mit einem Freund oder in einer bei Airbnb gemieteten Wohnung zu kochen, wissen Sie, wie ärgerlich es ist, wenn die Dinge nicht am richtigen Ort sind. Das Geschirrspülmittel befindet sich im Buffet, in dem Sie Töpfe erwarten, und die Knoblauchpresse ist im Allgemeinen unklar, wo. Ja, alles ist sauber - es besteht keine Gefahr, dass jemand in dieser Küche gekochtes Essen mag - aber unter solchen Bedingungen zu arbeiten ist ärgerlich.

Stellen Sie sich jetzt eine Holzbearbeitungswerkstatt vor. An dieser Stelle kann Schmutz auch Probleme verursachen, aber hier haben Sie nicht die gleiche Definition von „Sauberkeit“ wie in der Küche. Sie können den Meißel reinigen, bis er zu funkeln beginnt, aber es ist unwahrscheinlich, dass Sie damit Würste schneiden. Das Wort „sauber“ kann also sehr subjektiv sein.

Aber für mich funktionieren Wörter wie „ordentlich“ und „organisiert“ in Kontexten, in denen „sauber“ nicht sehr gut funktioniert. "Organisiert" bedeutet, dass jemand sorgfältig darüber nachgedacht hat, wie die Elemente eines bestimmten Arbeitsplatzes angeordnet werden sollen, und "aufgeräumt" bedeutet, dass sich diese Elemente wirklich an den ihnen zugewiesenen Orten befinden. Wie das alte Sprichwort sagt: "Alles hat seinen Platz und alles ist an seinem Platz."

Vielleicht sollten wir uns im Fall des Codes die Wörter „sauber“ , „ordentlich“ und „organisiert“ als drei verschiedene Konzepte vorstellen. "Sauber"bedeutet, dass Sie sich die Komponenten der Codebasis ansehen - Methoden, Funktionen, Schnittstellen - und keinen Grund zur Besorgnis sehen. Halten Sie sich bei der Benennung an Konventionen; Namen von Variablen und Methoden werden fehlerfrei geschrieben; Details wie Einrückungen und Klammern entsprechen einem einzigen Stil. Wo immer Sie hinschauen, sehen Sie Beweise dafür, dass dies auf der Basisebene von Menschen betrieben wird, die es ernst meinen mit dem Geschäft. Dies ist das Gegenteil eines "schmutzigen Codes" - einer, bei dem viele Tippfehler, geschweifte Klammern und Einrückungen in den Namen und unangemessenen Dateinamen wünschenswert sind. Dies sind die Dinge, die auf magische Weise behoben werden, wenn Sie das Code-Bereinigungstool in etwas wie ReSharper aufrufen.

"Organisiert"- Es geht um Architektur. Hier geht es darum, wie Sie in eine unbekannte Codebasis eintauchen und Dinge finden können, von denen Sie erwarten, dass sie sie sehen. Schnittstellen und Domänengrenzen helfen, nicht stören; Die genannten Methoden und Variablen sind nicht nur aus Sicht der Sprache korrekt benannt, sondern spiegeln auch die einzelne Sprache des Unternehmens wider, mit dem Sie arbeiten.

Und bei „ordentlich“ geht es darum, lokale Konventionen zu respektieren ... eine Codebasis, in der Sie die richtigen Dinge an ihren Stellen finden können, auch wenn Ihnen das spezifische Organisationsmodell derzeit nicht sehr klar ist.

Ich denke, wenn sie über den Kampf um "sauberen Code" sprechen, bedeutet dies normalerweise alle drei Dinge. Das Ziel, einen vollständig „sauberen Code“ zu setzen, insbesondere bei der Arbeit mit einem komplexen Legacy-Projekt, kann jedoch eine ziemlich entmutigende Aussicht sein. Vielleicht wäre es für uns alle nützlich, etwas tiefer zu überlegen und herauszufinden, welche der Komponenten des "sauberen Codes" dem Projekt, an dem wir gerade arbeiten, wirklich zugute kommen. "


Heisenbug


Dies ist eine "Testkonferenz nicht nur für Tester": Sie befindet sich an der Schnittstelle von Test und Entwicklung. Daher verstehen viele seiner Redner gleichzeitig die Besonderheiten dieser beiden Welten.

Ivan Krutov und Anna Chernysheva


Ivan und Anna arbeiten in verschiedenen Unternehmen, aber etwas verbindet sie: Beide wissen viel über Selen. Wir haben gleichzeitig mit ihnen gesprochen, also haben wir eine gemeinsame Definition erhalten:

Ivan: „Für mich ist die einfachste Definition von sauberem Code Code, der kommentarlos verständlich ist,„ selbstdokumentierend “. Code, der mit Kommentaren übersät ist, die zu erklären versuchen, was er tut, ist kein reiner Code. “

Anna: Es scheint mir: Dies ist ein Code, den Sie schnell herausfinden, einen Fehler beheben, ihn einfach erweitern und ergänzen können.

Ivan: Man kann auch sagen, dass dies ein Code ist, für den man sich nicht schämt. Im Allgemeinen sagen sie, dass Sie sich nicht entwickeln, wenn Sie sich den Code ansehen, den Sie vor sechs Monaten geschrieben haben und der keine Angst hat. Es stellt sich heraus, dass Ihr Code jedes Jahr sauberer werden sollte. “



Sebastian Dashner


Sebastian ist IBMs führender Anwalt für Java-Entwickler und kann häufig auf Java-Konferenzen gesehen werden. Da er jetzt nach Heisenbug fliegt, haben wir ihn im Testkontext nach sauberem Code gefragt und er antwortete:

„Nach meiner Erfahrung ist die Codequalität nicht nur beim Produktionscode wichtig, sondern auch für unsere Tests. In Tests werden sauberer Code, korrekte Abstraktionen und Delegierung häufig vernachlässigt, was zu einem Testcode führt, den Sie nicht unterstützen können. Wenn wir den Produktionscode umgestalten und sein Verhalten ändern, wird klar, ob wir bei der Modellierung und Implementierung unserer Tests gute Arbeit geleistet haben. “



Andrey Lushnikov


Andrey arbeitet an einem Browser-Automatisierungstool Playwright, über das wir kürzlich geschrieben haben . Seine Definition erwies sich als die prägnanteste:

„Sauberer Code ist dummer, sehr verständlicher Code. Und je dümmer desto besser. “








Alexandra Svatikova


Alexandra ist eine Informationssicherheitsexpertin bei Odnoklassniki, die "als Java-Entwickler in der IT angefangen hat, aber den falschen Weg eingeschlagen hat". Die Definition

lautete wie folgt : „Reiner Code hat drei Eigenschaften: Ein anderer Entwickler kann ihn leicht lesen und verstehen, kleinere Verbesserungen erfordern einen angemessenen Aufwand und die Auswirkungen einer bestimmten Änderung können vorhergesagt werden.

Tatsächlich bedeutet dies, dass der Code strukturiert und präzise ist, allgemein anerkannten Praktiken für die Sprache folgt, in der er geschrieben ist, keine impliziten Abhängigkeiten oder Nebenwirkungen enthält und durch Tests abgedeckt wird. “


Holyjs


Andrey Melikhov


Andrei ist vielen für das Devshakhta-Projekt bekannt . Es ist nicht verwunderlich, dass eine Person, die im Devshacht Podcast ständig ihre Gedanken formuliert, ihre Position klar zum Ausdruck brachte:

„Robert“ Onkel “Martin mit seinen drei Hauptbüchern („ Clean Code “,„ The Clean Coder “und„ Clean Architecture “). Es scheint mir, dass er versucht, Fragen für sich selbst zu beantworten: Wer, was und wie soll schreiben. Man kann über die Richtigkeit einiger seiner Schlussfolgerungen streiten, aber hier ist das Unbestrittene - diese Bücher basieren auf einer reichen persönlichen Erfahrung und gesundem Menschenverstand. Und im Rahmen dieser Idee kann ich sagen, dass ein sauberer Code für mich ein Code ist, der von einer Person geschrieben wird, die über eine beträchtliche Anzahl von Fallstricken in ihrem Leben gestolpert ist und in diesem schmerzhaften Prozess gelernt hat, mit einem vorsichtigen Gang zu gehen, der es ihnen ermöglicht, vermieden zu werden.

Sie mögen mit dem Stil dieser Person nicht vertraut sein, aber wenn Sie ihm folgen, werden Sie sicherlich intakt bleiben. Sie können diesen Stil nehmen und recyceln, um es sich bequem zu machen. Oder Sie können verzweifelt in den Fluss eintauchen, um Ihre eigenen Zapfen zu füllen, Ihren eigenen Stil zu entwickeln, während der Rest Sie ungläubig ansieht und sich unter der Aufsicht älterer Kameraden bewegt.

Reiner Code ist Code, der leicht zu lesen, leicht zu warten und leicht zu erweitern ist. Es sind diese drei Aspekte, die eine solide Grundlage für Anwendungen bilden, die angesichts volatiler externer Anforderungen jahrelang leben müssen. Solche Anwendungen schreiben wir nämlich in großen Unternehmen "



Alexandra Kalinina


Alexandra ist Mitglied des HolyJS-Programmkomitees, verfügt über umfangreiche Programmiererfahrung - und obwohl sie nicht mit Heisenbug zusammen ist, kennt sie die Tests auch aus erster Hand (Einheit, Integration, E2E, B2B). Hier ist ihr Text:

„Sauberer Code ist jetzt ein einfaches Konzept, aber es ist ziemlich schwer zu verstehen. Es scheint mir, dass sauberer Code erhalten werden kann, indem die folgenden Regeln beachtet werden:

- Jeder einzelne Code sollte in der Lage sein, unabhängig von anderen Teilen zu skalieren oder zu wachsen / sich zu verbessern, aber gleichzeitig die ursprüngliche Idee / Integration mit anderen Teilen beizubehalten (SOLID hilft sehr, und auch die Regel „Alle Entscheidungen, die später getroffen werden können, müssen später getroffen werden“).
- Der Code sollte als faszinierendes Buch mit verständlichen typischen Namen und Bezeichnungen gelesen werden. Wenn Sie sich beispielsweise dazu entschließen, eine Geschichte zu schreiben, hat sie höchstwahrscheinlich eine typische Struktur wie eine Einführung, eine Handlung, einen Höhepunkt und eine Auflösung. Selbst wenn Sie der einzige sind, der an einem Projekt arbeitet, sollte der Code von Ihnen jederzeit leicht gelesen werden können, unabhängig von der gewählten Architektur, Sprache oder den Frameworks.
- Der Code sollte eine klare Struktur haben. Jene. Der Grund, warum dieser oder jener Code im Projekt enthalten ist, sollte verstanden werden.
"Jede Codezeile sollte aus geschäftlicher Sicht gerechtfertigt sein."



Nicolò Ribaudo


Nicolo wurde noch als Student einer der wichtigsten Entwickler des Babel- Compilers (wir haben ihn bereits separat danach gefragt ). Seine Version stellte sich wie

folgt heraus: „Ein sauberer Code ist ein Code, der leicht in kleine atomare Komponenten unterteilt werden kann.

"Atom of Code" ist der kleinstmögliche Befehlssatz, der eine unabhängige Bedeutung hat und nicht unnötig vom umgebenden Kontext abhängt: Die Namen von Variablen und Operationen sind so beschreibend, dass der Leser keinen zusätzlichen Speicher in seinem Kopf zuweisen muss, um ihre Werte und möglichen Änderungen zu speichern, und auch nicht Es war notwendig, irgendwo anders im Code nachzuschauen, um zu verstehen, was das Ergebnis dieses „Atoms“ bedeutet. Je kleiner die Atome sind, desto leichter ist es zu verstehen, was der Code tut.

Der Code kann unabhängig von der Programmiersprache oder dem Paradigma sauber sein: Atome können als kleine Objekte, Funktionen oder sogar als kleine Codeteile implementiert werden, die nicht syntaktisch isoliert sind. "



Fazit



Als die Meinungen gesammelt wurden, zeigten wir sie schließlich Onkel Bob selbst und fragten, ob er etwas sagen wolle. Die Antwort lautete:

„Ich unterstütze die obigen Kommentatoren voll und ganz. Ich möchte nur eines hinzufügen, das Michael Feathers einmal gesagt hat: „Ein sauberer Code sieht immer so aus, als ob er von einer Person geschrieben wurde, die sich darum kümmert.“

Sein Fazit klingt sehr freundlich. Aber sauberer Code ist ein so umstrittenes Thema, dass, während einer von Ihnen nickt, wahrscheinlich jemand anderes in Flammen steht und so etwas fühlt:

  • « : „ , ”. , , : . , !»
  • « „ ”? „” , — , , „” — !»
  • „Die Worte„ Sie können Ihre Beulen füllen, während die anderen verwirrt aussehen “klingen abfällig, als ob nur Dummköpfe dies tun. Aber alles Gute und Innovative erscheint, wenn Sie Ihre Zapfen füllen und ihre Gründe verstehen und nicht nur alten Büchern folgen! “



UPD 12. März: Obwohl Onkel Bob nicht zu uns fliegen kann, ist es unwahrscheinlich, dass unsere Konferenzen in St. Petersburg ( für .NET-Entwickler , Tester und JavaScript-Entwickler ) mit sauberem Code streiten. Auf Konferenzseiten - immer aktuelle Versionen von Programmen. Bleiben Sie auf dem Laufenden und abonnieren Sie unseren Newsletter - einmal pro Woche werden wir über die Änderungen sprechen.

All Articles