Sollte ein Programmierer Schreibstunden nehmen, um die Ausdruckskraft des Codes zu verbessern?

15

Da Programmierer Autoren sind und Code schreiben, um abstrakte Gedanken und Konzepte auszudrücken, und guter Code von anderen Programmierern ohne Schwierigkeiten und Missverständnisse gelesen werden sollte, sollte ein Programmierer Schreibstunden nehmen, um besseren Code zu schreiben?

Das Abstrahieren von Konzepten und realen Problemen / Entitäten ist ein wichtiger Bestandteil beim Schreiben von gutem Code, und eine gute Beherrschung der für das Codieren verwendeten Sprache sollte es dem Programmierer ermöglichen, seine Gedanken leichter oder besser auszudrücken. Außerdem kann beim Versuch, Code zu schreiben oder neu zu schreiben, um ihn zu verbessern, viel Zeit für die Festlegung der Namen für Funktionen, Variablen oder Datenstrukturen aufgewendet werden.

Ich denke, dies könnte auch dazu beitragen, das Schreiben von Code mit mehr als einer Bedeutung zu vermeiden, was häufig zu Missverständnissen zwischen verschiedenen Programmierern führt. Code sollte seine Funktion immer eindeutig ausdrücken.

Jose Faeti
quelle
2
Es wäre schön, wenn die Leute lernen könnten, klar zu schreiben, wenn sie älter als 18 Jahre sind, insbesondere wenn sie eine Fremdsprache sprechen (wie es in der IT der Fall ist). Die Frage ist, ob es eine Lehrmethode gibt, die in relativ kurzer Zeit gute Ergebnisse erzielen kann. Ich erinnere mich, als ich an die Universität kam, bekam ich einen Kurs in wissenschaftlichem Englisch, ich denke, das hat mir ein bisschen geholfen (ja, ich habe früher schlechter geschrieben als das :)).
NoChance
1
Was ist "Code Expressivität"? Ich nehme an, es ist etwas anderes als die Ausdruckskraft einer Programmiersprache , denn keine Menge an Schreibstunden wird das ändern ...
Andres F.
1
blog.codinghorror.com/Empfohlenes-Lesen-für-Entwickler -> Siehe Code Complete 2. Das beste Buch, das ich je gelesen habe, um Code richtig zu schreiben.
Machado
1
@ JoseFaeti dann haben Sie einen guten Geschmack in Büchern, Sir. :-) Endlose Seiten, auf denen diskutiert wird, wie man eine "if" -Anweisung richtig schreibt? Zählen Sie mich in .:-)
Machado

Antworten:

25

1. Schreibunterricht? Nicht wirklich.

Das Schreiben von Quellcode unterscheidet sich genug vom Schreiben eines Buches.

Während beide dasselbe Ziel verfolgen: so eindeutig wie möglich zu sein und leicht zu verstehen, tun sie es auf eine ganz andere Art und Weise, und Dinge, die ein Autor lernen sollte, sind nicht die gleichen wie Dinge, die ein Softwareentwickler lernen sollte.

Beispiel 1: Redewendungen

Redewendungen sind beim Schreiben von Romanen, Gedichten usw. wertvoll, da sie die Ausdruckskraft des Schreibens erhöhen.

Was war das letzte Mal, dass Sie ein Oxymoron oder Litotes im Quellcode gesehen haben ? Wäre es hilfreich, sie zu haben, oder wäre es für jeden Entwickler, der später einen solchen Quellcode pflegen muss, äußerst schädlich?

Beispiel 2: Wortschatz

Reiches Vokabular wird in der Literatur sehr geschätzt. Das Vokabular von William Shakespeare zum Beispiel umfasst zwanzigtausend bis fünfundzwanzigtausend Wörter. Ein reichhaltigerer Wortschatz macht es interessanter, einen Roman oder ein Gedicht zu lesen.

Wenn Sie Quellcode schreiben, erwarten Sie, dass er von Leuten gelesen wird, die nicht sehr gut Englisch sprechen . Zu zeigen, wie gut Sie Englisch beherrschen, wäre äußerst schädlich für Ihren Code. Wenn Sie ein ausgefallenes Wort kennen, das genau das bedeutet, was Sie brauchen, aber Sie wissen, dass viele Menschen die Bedeutung dieses Wortes nicht kennen, sollten Sie eher ein weniger aussagekräftiges Synonym oder eine Reihe von Wörtern finden, die die Bedeutung erklären. Ein Wortschatz von einigen Tausend Wörtern reicht für ein bestimmtes Projekt oftmals aus.

Beachten Sie einen wichtigen Aspekt: ​​Während Google Translate für Nicht-Muttersprachler eine große Hilfe sein kann, gibt es bei jedem Übersetzer zwei Probleme:

  • Ein Sprachpaar muss nicht unbedingt eine 1: 1-Übereinstimmung zwischen den Wörtern aufweisen. Einige Wörter sind entweder gar nicht in eine andere Sprache übersetzt, oder mehrere Wörter können in einer Fremdsprache in ein einzelnes Wort übersetzt werden. Zum Beispiel gibt es auf Russisch eine große Menge von Wörtern, die auf bestimmte Schnee- und Kältezustände abzielen, und eine Übersetzung auf Französisch oder Spanisch ist normalerweise unmöglich, ohne ihre Spezifität zu verlieren.

  • Ein Wort hat manchmal mehrere Bedeutungen und die Bedeutung wird aus dem Kontext abgeleitet. Trotz seiner hohen Qualität kann Google Translate in der Regel nur für die einfachsten Situationen die Bedeutung angeben.

Beispiel 3: Ausdrücke

Ausdrücke machen auch die Prosa reicher. Ein Autor erwartet von einem Leser ein bestimmtes Maß an allgemeiner Kultur und nutzt diese Gelegenheit, um den Text ausdrucksvoller zu gestalten.

Ähnlich wie im vorherigen Beispiel können solche Ausdrücke sehr problematisch sein, wenn sie von Personen gelesen werden, die keine Muttersprachler sind. Wenn jedoch das allgemeine Vokabular normalerweise übersetzt werden kann, sind Ausdrücke viel problematischer.

Beispielsweise ist Englisch nicht meine Muttersprache, und ich stoße täglich auf Ausdrücke, einschließlich hier bei StackExchange, die ich nicht kenne. Ich versuche, ihre Bedeutung zu erraten, und manchmal habe ich recht. Aber manchmal irre ich mich, und diese Ausdrücke zu googeln hilft nicht.

Ein Benutzer in seinem Kommentar erinnerte mich an ein Beispiel, unter dem ich lange gelitten hatte, als ich gerade mit dem Programmieren anfing: PHPs Nadel und Heuhaufen . Die entsprechende Redewendung war mir nicht bekannt, und jedes Mal, wenn ich die Dokumentation las, fragte ich mich, worum es eigentlich geht. Unnötig zu erwähnen, dass C # sequence.Contains(element)oder die exzellenten Pythons element in sequenceeine viel bessere Alternative sind. Zumindest mussten Entwickler, die kein Hebräisch sprechen, auch unter PHP leiden , aber das ist eine andere Geschichte.

Beispiel 4: kulturelle Referenzen

Kulturelle Referenzen. In der Literatur ist es verlockend, Elemente aus einer bestimmten Kultur aufzunehmen, und dies macht das Buch auch reicher und manchmal interessanter zu lesen.

Code richtet sich jedoch an Entwickler aus der ganzen Welt. Was für einen italienischen Entwickler ein offensichtlicher Hinweis ist, ist für einen russischen Entwickler möglicherweise nicht so offensichtlich, und was jeder indische Junge oder jedes indische Mädchen weiß, ist möglicherweise nicht unbedingt einem amerikanischen Programmierer bekannt.

Derselbe Benutzer, der über die Nadel und den Heuhaufen sprach, gab auch ein hervorragendes Beispiel für einen solchen kulturellen Bezug: den Gral. Wer weiß nicht, was Gral ist? Nun, ich meine, es ist "Graal" auf Französisch, "Grial" auf Spanisch und ... "Kutsal Kâse" auf Türkisch, aber immer noch. Wie viel wissen amerikanische oder europäische Entwickler über die mittelalterliche Geschichte Chinas oder Indiens? Warum sollte jemand annehmen, dass jeder chinesische und indische Programmierer die Heilige-Gral-Referenz kennen muss?

2. Lektionen zum Schreiben von aussagekräftigem Quellcode? Sicher.

  • Jeder Entwickler sollte lernen, wie man aussagekräftigen Quellcode schreibt.

  • Jeder Entwickler sollte erklären, warum der Kommentar in:

    int j = i + 1; // Creating i and adding 1 to it.
    

    ist schlecht, auch wenn es total falsch ist.

  • Jeder Entwickler sollte in der Lage sein, das grundlegende Refactoring zu verstehen und zu verstehen, wie es dazu beiträgt, den Quellcode aussagekräftiger zu machen.

  • Jeder Entwickler sollte sich daran erinnern, dass 20% der Zeit für die Entwicklung und 80% für die Pflege von Code aufgewendet werden. Bei einigen Projekten sind es eher 5% bis 95%.

  • etc.


Die Programmierung entspricht im Wesentlichen der technischen Dokumentation. Muss eine Person, die ein Datenblatt für einen Bolzen schreibt, Schreibunterricht nehmen? Nicht wirklich. Gleiches gilt für Entwickler. Jeder sollte schreiben, ohne Rechtschreibfehler in jedem Wort zu machen, und jeder sollte in der Lage sein, seine Ideen klar genug zu kommunizieren. Abgesehen davon bin ich mir nicht sicher, wie der Schreibunterricht sinnvoller wäre als ein Kurs in Informatik oder in IT-Sicherheit oder was auch immer.

Die Aussagekraft des Quellcodes kann auf andere Weise erlernt werden. superM erwähnte einen von ihnen in seiner Antwort : Lesen von gutem Code. Ich kann einige andere erwähnen:

  • Bücher wie Beautiful Code oder Code Complete lesen,

  • Bitten Sie einen erfahreneren Entwickler, Ihren Code zu überprüfen.

  • Verstehen von Mustern und wie und wann sie verwendet werden sollen.

Arseni Mourzenko
quelle
+1 gute Antwort. Ausdrucksstark und prägnant zu sein ist sehr wichtig, aber der Schreibunterricht ist möglicherweise nicht die beste Nutzung der Schulungszeit. Das bewusste Bestreben, offensichtlichen, sich selbst beschreibenden Code zu schreiben, sollte jeder tun, und ich denke, der Rest findet einfach statt, ohne dass es eines tatsächlichen Unterrichts bedarf.
Daniel B
Es gibt Dokumentation, E-Mails, ... sowie Code - der schriftliche Teil der Kommunikation mit Ihren Mitarbeitern, Vorgesetzten, Benutzern, Ihrem zukünftigen Ich usw. Aber bitte keine Gedichte.
Steve314
Ich verstehe. Eigentlich habe ich mehr über die Verwendung domänenspezifischer Sprachen nachgedacht. Ich habe einen Punkt erreicht, an dem ich mich wohler fühle, wenn ich in einer domänenspezifischen Sprache programmiere, anstatt die Basissyntax einer Allzweck-Programmiersprache zu verwenden. Dies macht Ihren Code auch für Nicht-Programmierer leichter verständlich und unkomplizierter. Ich fragte mich, ob das an meinem schlechten Englischvokabular lag, daher der Gedanke an Schreibstunden.
Jose Faeti
Generell gute Antwort, aber ich habe Redewendungen im Code gesehen. Eine der wenigen guten Eigenschaften von PHP ist beispielsweise, dass alle Suchfunktionen nach Nadeln im Heuhaufen suchen.
user949300
@ user949300: und das ist einer der Gründe, warum ich PHP so sehr hasste. Als nicht-englischer Muttersprachler kannte ich den entsprechenden Ausdruck nicht und für mich waren diese Begriffe alles andere als hilfreich. Vergleichen Sie es mit C # sequence.Contains(element)oder dem exzellenten Python element in sequence. Also nein, Redewendungen haben keinen Platz in APIs.
Arseni Mourzenko
11

Sollte ein Programmierer Schreibstunden nehmen, um besseren Code zu schreiben?

Nein. Ein Programmierer sollte Schreibstunden nehmen, um zu lernen, wie man bessere Prosa schreibt. Ein Programmierer sollte Programmierstunden nehmen, um zu lernen, besseren Code zu schreiben. Trotz einiger Ähnlichkeiten sind das Schreiben von Prosa und Code sehr unterschiedlich.

Das heißt nicht, dass Programmierer keinen Schreibunterricht nehmen sollten. Sie sollten! Einige Gründe:

  • Schreiben ist eine wesentliche Fähigkeit für jede gebildete Person. Du wirst schlauer erscheinen, wenn du gut schreiben kannst.

  • Trotz aller Bemühungen müssen Programmierer häufig mit anderen Menschen kommunizieren, wobei sie häufig das geschriebene Wort verwenden.

  • Sie lernen Fähigkeiten, die über das Schreiben in Schreibkursen hinausgehen, und diese sind oft für Programmierer nützlich. Sie lernen zum Beispiel, über die Arbeit anderer zu diskutieren, ohne ihre Gefühle zu verletzen, und Sie lernen, Kritik von anderen anzunehmen, ohne sie persönlich zu nehmen.

Caleb
quelle
Das ist der Punkt. Selbst wenn Ihr Code nicht unbedingt besser sein sollte, werden Sie eine bessere Person, insbesondere bei der Kommunikation mit anderen Programmierern oder Mitarbeitern. Ich denke, meine Frage hätte anders formuliert werden müssen :)
Jose Faeti
2
Sehr viel das. Prosa gut schreiben zu können, ist eine Schlüsselkompetenz für jeden Profi
Zachary K
6

Mein Code hängt zunehmend davon ab, ein gemeinsames Vokabular zwischen dem Unternehmen und den technischen Teams zu erstellen. Ich würde sagen, dass eine Verbesserung Ihrer Schreibfähigkeiten Ihnen dabei helfen kann, Unklarheiten und Missverständnisse bei diesen Bemühungen zu verringern, aber dass dies wahrscheinlich nicht zur Aussagekraft Ihres Codes beiträgt.

Der literarische Ausdrucksbegriff ist nicht derselbe wie der programmatische Ausdrucksbegriff. In vielen Fällen kann Mehrdeutigkeit in der Sprache als literarisches Mittel verwendet werden, auch in der Sachliteratur, und zwar in einer Form, die die Ausdruckskraft erhöht, da sie beim Leser verschiedene kulturelle, sprachliche und symbolische Assoziationen auslöst, sowohl beabsichtigt als auch unbeabsichtigt. Diese Art der Ausdruckskraft ist bei der Programmierung nicht erwünscht. Abstraktion ist mehr wert als Mehrdeutigkeit. Beim Programmieren erhöht die Abstraktion die Flexibilität mit möglicherweise einigem kognitiven Aufwand. Abstraktion in literarischer Form kann das Gegenteil von der Wirkung haben, die sie in der Programmierung hat: Je abstrakter Ihr Schreiben ist, desto wahrscheinlicher wird der Leser die Wahrnehmung haben, dass Sie nichts sagen. Alle diese Symbole und Assoziationen, die sich aus der konkreten Rede ergeben, haben Wert,

Ein Programmierer ist jedoch keine Maschine. Der Mensch profitiert in oft unerwarteter Weise vom geistigen und emotionalen Wachstum. Das Verbessern Ihres Schreibens kann zu einer größeren Empathie der Kunden führen, da Sie sich gezwungen sehen, mit den Herausforderungen der Kommunikation zu kämpfen. Vielleicht werden Sie das Gefühl haben, dass der Kunde sagt, was er will, und Sie liefern es, und er stellt fest, dass es nicht das ist, was er braucht. Vielleicht lernst du nur, dich auf das zu konzentrieren, was ungesagt bleibt.

Vielleicht hilft Ihnen das Lernen, Ton auf eine Töpferscheibe zu werfen, Parallelen zwischen Handwerkskunst und Softwareentwicklung zu erkennen. Wenn Sie die Art und Weise studieren, wie Gebäudearchitekten kommunizieren, werden Sie möglicherweise ein besseres Verständnis dafür haben, ein Vokabular von Designmustern in der Programmierung aufzubauen. Das Studium der Biologie könnte Sie zu faszinierenden Einsichten darüber führen, wie Ameisen und Bienen Nahrungsquellen finden und über diese kommunizieren und wie diese einfachen Mechanismen in Algorithmen zur Wegfindung übersetzt werden können.

Das Lernen von Dingen außerhalb Ihrer Kerndomäne lohnt sich, da neugierige Leute bessere Entwickler sind als Leute, die es nicht sind.

Für das, was es wert ist, war ich fast ein Literaturmajor; Schließlich wechselte ich in die Ostasienwissenschaften, weil ich mich mehr für die Kurse interessierte, die ich in dieser Abteilung belegte. Es besteht die Möglichkeit, dass ich nicht in der Branche bin, wenn ich nicht Ostasienwissenschaften studiert habe, weil der Nebeneffekt des Japanisch-Studiums mich zu der Zeit wertvoller gemacht hat, als mich ein Software-Unternehmen zum Teil aufgrund von Sprachkenntnissen eingestellt hat. Ich musste immer noch ein tieferes Portfolio an technischen Fähigkeiten aufbauen, aber die unbeabsichtigten Nebenwirkungen des Lernens können Sie zu einem besseren, relevanteren Softwareprofi machen.

JasonTrue
quelle
+1: "Mein Code hängt zunehmend davon ab, ein gemeinsames Vokabular zwischen dem Unternehmen und den technischen Teams zu erstellen.": Sehr wichtiger Punkt! Viele Fehler rühren von Missverständnissen her, da die Analysten und Entwickler einen bestimmten Begriff für zwei verschiedene Dinge verwenden.
Giorgio,
4

Wenn die Programmierung von Projekten fehlschlägt, liegt dies in der Regel an fehlgeschlagener Kommunikation, in der Regel an den Anforderungen. Obwohl ein mittelmäßiges Verständnis der englischen Sprache ausreicht, um tatsächlich Code zu schreiben, ist es für das Schreiben des richtigen Codes wichtig, ein guter Kommunikator zu sein. In dieser Zeit der ferngesteuerten, textbasierten Kommunikation ist das englische Schreiben eine sehr wichtige Kommunikationsfähigkeit.

Trotzdem ist Ihre Frage sehr klar und prägnant geschrieben - besser als die meisten Programmierer, mit denen ich gearbeitet habe. Nachdem Sie Ihren Code nicht gesehen haben, sollten Sie sich darauf konzentrieren, sich in der Programmiersprache Ihrer Wahl auszudrücken. Für Java empfehle ich Joshua Blochs Buch "Effective Java".

GlenPeterson
quelle
Danke, ich versuche mein Bestes! Eigentlich habe ich den Punkt erreicht, an dem die Syntax einer Allzweck-Programmiersprache nicht ausreicht, um mich beim Codieren auszudrücken. Ich programmiere jetzt Präprozessor-Tools, um die Sprachsyntax zu verbessern und domänenspezifische Sprachen für dieselbe Angelegenheit zu implementieren, was vielleicht besser ist, als die Ausdruckskraft in einer Allzweck-Programmiersprache zu erzwingen.
Jose Faeti
3

So wie Autoren durch das Lesen von Weltklassikern unterrichtet werden, so werden die Programmierer durch das Lesen von gutem Code erzogen . Aber es gibt ein kleines Problem. Während es in der Literatur anerkannte Giganten gibt, gibt es nur wenige in der Programmierung. Und wenn ja, könnten sie eine andere Sprache "sprechen". (Ich bin mir nicht mal sicher, ob es vernünftig ist, den Minix-Quellcode von Tanenbaum zu lesen)

Es gibt viele beliebte Möglichkeiten, Code lesbarer zu machen (=> wartbar zu machen), z. B. Kommentare zu schreiben, aussagekräftige Namen zu vergeben usw. Außerdem legen viele Unternehmen ihre Regeln für das Schreiben von Code fest, was alles viel einfacher macht.

Wie viele exzellente Autoren auch, sind Programmierer niemals mit ihrem eigenen Code zufrieden. Das Wissen, wann aufzuhören ist, ist genauso wichtig wie das Schreiben eines Qualitätscodes.

superM
quelle
2

Ich finde es immer einfach zu stoppen, nachdem Sie jedes Stück Code geschrieben und wieder gelesen haben. Wenn ich mir vorstelle, dass Sie ihn noch nie zuvor gesehen haben, bin ich damit weit gekommen.

Noch besser ist es, einen Freund, der mit Programmieren vertraut ist, zu bitten, Ihren Code zu lesen, ohne ihm mitzuteilen, was er tut.

Eliot Ball
quelle
0

Ich denke nicht, dass das helfen wird; Beim kreativen Schreiben geht es um Handlung, Charakterentwicklung und Dialog, nicht darum, technische Konzepte klar auszudrücken. Technisches Schreiben mag helfen, aber ich bezweifle es - es sind nur sehr unterschiedliche Arten des Schreibens!

und beachten Sie, dass "lesbarer" Code subjektiv ist und in erster Linie eine Frage des syntaktischen Stils und der gemeinsamen Redewendungen ist (die zwischen den Sprachen und sogar zwischen den Teams variieren).

Es ist jedoch wichtig, gute Namen für Variablen, Klassen und Methoden zu wählen. Jeder Entwickler wird zu einem gewissen Grad zum Fachexperten für bestimmte Aspekte der in der Entwicklung befindlichen Domain. Daher ist die korrekte Verwendung der Domain-Terminologie von entscheidender Bedeutung.

Peer Reviews können Ihnen helfen, Wortschatz und Selbstvertrauen aufzubauen

Steven A. Lowe
quelle
0

Es gibt sicherlich einen großen Unterschied zwischen dem Schreiben von Code und dem Schreiben von Prosa.

In der Prosa sind die Sätze durch die Zeit verbunden (oder getrennt) (wie sie aufeinander folgen, um zu einem Ende oder einer Bedeutung zu gelangen), aber im (effizienten) Code können Sie Teile der 'Geschichte' aus Tabellen mit wiederholbaren Inhalten (neu) laden Aktionen / Antworten. Die Interaktion mit dem Leser (in Prosa) oder Benutzer (in Code) ist also völlig anders.

In einer anderen Hinsicht sind das Schreiben von 'netter' Prosa und das Schreiben von 'netter' Code ähnlich: Das Lernen des Schreibens (Code oder Prosa) ist ein Prozess, bei dem viele Fehler gemacht (oder über Verbesserungen nachgedacht / getestet oder neu formuliert) werden, um sie zu erhalten. elegant'.

Ich denke, das chemische Periodensystem der Elemente ist elegant, weil es einige grundlegende Eigenschaften der von uns verwendeten Grundmaterialien auf sehr kompakte Weise beschreibt, ein bisschen wie effizienter Code, aber es ist sicherlich keine Prosa. Ein Witz hat viele prosaische Eigenschaften (Sie in eine bestimmte Stimmung versetzen, diese Stimmung beibehalten und dann, wenn es unerwartet ist, ändern), aber das ist eine schreckliche Codierungspraxis.

Beide Schreibweisen verlangen jedoch nach handwerklichem Können.

MoonLightning
quelle
-1

Grundkenntnisse in Englisch und Grammatik sind für einen Programmierer aus meiner Sicht ausreichend. Aber dann wird sich alles, was eine monotone Programmierroutine durchbricht, immer verjüngen und der Schreibunterricht wird für die Programmierer entspannend sein.

Rajesh Singh
quelle
4
Eine monotone Programmierroutine wäre vielleicht besser durch eine berufliche Veränderung als durch das Schreiben von Unterrichtsstunden zu bewältigen.
Eliot Ball