Ist es in Ordnung, Metaprogramme zu verwenden, obwohl das nicht alle Kollegen verstehen?

102

Ich benutze viel Meta-Programmierung, um sich wiederholende Aufgaben zu vermeiden und sicherere Abstraktionen zu erstellen.

Ich bin kürzlich zu einem neuen Job gewechselt, bei dem ich in einem größeren Team arbeite, und das macht einigen meiner Kollegen Sorgen, weil sie es nicht verstehen.

Ich versuche immer, das volle Potenzial der Sprache auszuschöpfen, aber einige (nicht alle) meiner Kollegen sehen dies als Risiko an (einige begrüßen den Ansatz).

Ich bin damit einverstanden, dass es ein Problem ist, Code zu schreiben, den niemand im Team verstehen kann. Andererseits sind wir alle professionelle C ++ - Entwickler und ich denke, wir sollten einen höheren Standard anstreben als das Schreiben von C mit Klassen.

Meine Frage ist, wer hat Recht, was soll ich tun?

Klarstellung: Der Versuch, das volle Potenzial der Sprache auszuschöpfen, bedeutet nicht, dass ich bei jedem Problem mit TMP werfe. C ++ ist eine Toolbox und für mich bedeutet C ++, alle Tools aus der Box nutzen zu können und das richtige für einen bestimmten Job auszuwählen.

Kamikaze
quelle
38
Dies ist letztendlich meinungsbasiert. Ich persönlich mache es zur Regel, Features nicht so komplex zu verwenden, dass sie versehentlich vollständig sind - wie die Metaprogrammierung von C ++ - Vorlagen.
Kilian Foth
24
@KilianFoth Vorlagen sind nicht "versehentlich" Turing-vollständig. Sie sollten immer mächtige Werkzeuge der Abstraktion sein
Caleth
73
Code, den niemand verstehen kann, ist kein höherer Standard.
Gburton
37
@Caleth Herb Sutter nennt sie versehentlich Turing-complete . Sicher, sie sollten mächtige Abstraktionsmerkmale sein, aber ich glaube nicht, dass sie so arkane, unentscheidbare Konstruktionen zulassen sollten, wie es die Turing-Vollständigkeit zulässt. Und sicherlich war ihre Syntax nicht dafür ausgelegt, eine solche Metaprogrammierung weniger intransparent als nötig zu machen.
links um den
26
Falsche Dichotomie. Sie können auf einem "höheren Standard" programmieren und C mit Klassen zurücklassen, modernes C ++ annehmen, Vorlagen (z. B. die STL) sowie const, no () casting, keine Zeigerarithmetik, Wertsemantik, viel Güte, ohne Überschrift verwenden ibnto TMP. Wenn Sie zwischen C-with-classes und TMP kein Tageslicht sehen, machen Sie es falsch.
Kate Gregory

Antworten:

185

Die Metaprogrammierung ist in Ordnung. Was Sie versuchen zu tun, ist nicht in Ordnung.

Ich benutze die Metaprogrammierung die ganze Zeit in meinem Job. Es ist ein leistungsfähiges Tool, mit dem sich viele Dinge besser lesen und warten lassen. Es ist auch eine der schwieriger zu verstehenden Programmierstile, daher muss es sich wirklich seinen Unterhalt verdienen. Ich mag es, wenn ich 1000 Codezeilen auf 50 reduzieren kann, aber ich versuche, es als solches zu begrenzen.

Das Problem ist nicht die Metaprogrammierung, sondern Folgendes:

Andererseits sind wir alle professionelle C ++ - Entwickler und ich denke, wir sollten einen höheren Standard anstreben als das Schreiben von C mit Klassen.

Hier geraten Sie in Schwierigkeiten. Sie haben eine Meinung. Es ist in Ordnung, eine Meinung zu haben, dass Metaprogrammierung gut ist. Es ist in Ordnung, eine Meinung zu haben, dass wir alle danach streben sollten, bessere C ++ - Entwickler zu sein.

Es ist nicht in Ordnung, sowohl Ihre Kollegen als auch zukünftige Mitarbeiter dazu zu zwingen , den von Ihnen geschriebenen Code beizubehalten, um Ihrer Meinung zuzustimmen. Das ist die Aufgabe Ihres Chefs. Ihr Chef ist derjenige, der sich darum kümmern sollte, dass Ihr Code auf lange Sicht gewartet werden kann. Sie haben (hoffentlich) viel mehr Erfahrung im Geschäftsleben, denn glauben Sie mir, wenn ich sage, dass es sich um eine Geschäftsentscheidung handelt, nicht um eine ideologische Entscheidung.

Es ist in Ordnung, ein Metaprogramm zu wollen. Es ist in Ordnung, anderen das Metaprogramm beibringen zu wollen. Aber verstehe, dass es auch für andere in Ordnung ist, das Metaprogramm nicht zu lernen, und das wird wahr sein, bis du in einer Machtposition bist. (Und als Industriegeheimnis: Wenn Sie schließlich ein leitender Entwickler sind, haben Sie in einer Machtposition überhaupt keine Machtposition. Es gibt jemanden, der die Verfolgung kontrolliert, der an der Macht ist.)

Wenn Sie sie dazu ermutigen möchten, mit der Metaprogrammierung einverstanden zu sein, fangen Sie klein an . Beginnen Sie mit einer einzigen enable_if, die das Lesen der API erleichtert. Dann kommentiere das Tageslicht aus. Dann finden Sie vielleicht einen Fall, in dem eine Template-Metafunktion 10 große repetitive Klassen mit 10 kleinen Helfern in eine Klasse verwandelt. Kommentar zum Teufel raus. Rückmeldung bekommen. Finde heraus, was die Leute darüber denken. Sei in Ordnung, wenn sie dir sagen, dass du es nicht tun sollst. Finden Sie eine Nische, in der die Metaprogrammierung so gut funktioniert, dass alle Kollegen (widerwillig) zustimmen, dass sie das richtige Werkzeug für den Job ist.

Als Kurzgeschichte habe ich einmal eine wunderschöne Bibliothek mit umfangreichen Metaprogrammierungen geschrieben. Es hat genau das getan , was wir damals brauchten, als kein anderer Ansatz aus der Ferne in die Nähe kommen konnte. Es änderte tatsächlich die Richtung der Anwendung, in der ich schrieb. Aber es war eine Metaprogrammierung. Nur ein oder zwei andere Leute in meiner gesamten Firma konnten es lesen.

Später ging mein Kollege noch einmal auf das Problem ein. Anstatt Metaprogrammierung zu nutzen, um genau das zu tun, was benötigt wurde, arbeitete er mit der Führung zusammen, um die Einschränkungen zu lockern, die dem Problem auferlegt worden waren, sodass Metaprogrammierung nicht erforderlich war. Genauer gesagt war eine Metaprogrammierung weniger erforderlich. Er konnte es auf das beschränken, was Metaprogrammierung am besten kann.

Die resultierende Bibliothek kann nun in einem bemerkenswert breiten Markt eingesetzt werden, und das ist sicherlich nicht zuletzt deshalb so, weil der neue Code von einer viel größeren Bandbreite von Entwicklern gepflegt werden kann. Ich bin stolz darauf, mit der Metaprogrammierung den Weg zu ebnen, aber es ist der Code meines Kollegen, der das breite Publikum erreichen wird, und dafür gibt es gute Gründe.

Cort Ammon
quelle
72
Ersetzen Sie "Metaprogrammierung" durch einen anderen Stil, eine andere Technik, Technologie, Bibliothek und die Antwort ist immer noch großartig!
Andrejs
4
Ihr Chef ist derjenige, der sich darum kümmern sollte, dass Ihr Code auf lange Sicht gewartet werden kann. Die meisten Bosse wissen nicht einmal, was Code-Wartbarkeit ist. Sie haben praktisch keine technischen Kenntnisse, deshalb würde ich ihren Entscheidungen, die eher politischen Charakter haben, nicht vertrauen.
t3chb0t
4
@ t3chb0t: Ein erfahrener Chef weiß, wie viel Geld für den Kundenservice ausgegeben werden muss (z. B. Fehlerbehebung und neue Funktionen) und wie diese Kosten minimiert werden können. Die Wartbarkeit ist das mächtigste Werkzeug für diesen Zweck. Dieser Chef kennt möglicherweise keine technischen Details, sollte jedoch in der Lage sein, ein Team aufzubauen, dem in diesem Punkt vertraut werden kann.
Mouviciel
25
@DDrmmr Ich habe den Ton für jemanden festgelegt, der der Meinung ist, dass Programmierer Metaprogramme verwenden sollten, um den Standard zu erhöhen. Ich denke nicht, dass es darauf beschränkt sein sollte, wo das am wenigsten qualifizierte Teammitglied es unterhalten kann. Es sollte auf den Punkt gebracht werden, an dem das Team es pflegen kann, und vielleicht noch stärker, es sollte auf den Punkt gebracht werden, an dem das Team es ohne Sie pflegen kann . Ansonsten schreibt man sich einen Job.
Cort Ammon
15
@Joshua Ich habe festgestellt, dass es so etwas wie "Code, der keine Wartung benötigt" nicht gibt.
Cort Ammon
39

In erster Linie ist dies das Problem des Teams, und Sie müssen es mit dem Team lösen. Wenn Sie eine Sicherungskopie des Teams zur Programmierung mit bestimmten Elementen und Konstrukten haben, führen Sie diese aus. Wenn nicht, besprechen Sie es mit ihnen, und wenn Sie sie nicht überzeugen können und überzeugen, warum "Ihr Ansatz" eindeutig besser ist, sollten Sie ihn nicht anwenden.

Beachten Sie, dass die Verwendung der Template-Metaprogrammierung in C ++ immer ein Kompromiss ist: Sicher, es kann manchmal hilfreich sein, bestimmte Teile einer Anwendung trockener zu gestalten, und es ist definitiv hilfreich, um hocheffiziente und wiederverwendbare Bibliotheken zu erstellen.

Auf der anderen Seite sind diese Vorteile mit einem gewissen Preis verbunden: Der Code wird abstrakter, oft viel schwieriger zu lesen, viel schwieriger zu debuggen und viel schwieriger zu warten. Dies macht den Nutzen der Metaprogrammierung bei der Anwendungsprogrammierung oft fraglich. Unter der Annahme, dass Sie nicht die nächste STL erstellen werden, sollten Sie sich jedes Mal, wenn Sie versucht sind, Metaprogramme zu verwenden, fragen, ob sich diese Nachteile wirklich lohnen. Wenn Sie sich nicht sicher sind, besprechen Sie dies mit Ihrem Peer Reviewer während der Codeüberprüfung.

Doc Brown
quelle
Ich bin damit einverstanden, aber bespreche es mit der Qualitätssicherung, bevor du es in den Code eingibst. Es macht keinen Sinn, etwas zu erschaffen, das abgelehnt wird.
Shawnhcorey
8
Wie wäre es mit: "Ich stimme zu. Aber ..." Das Ändern von "zu" ändert die Bedeutung komplett. Man sollte immer etwas Ungewöhnliches mit der Qualitätssicherung besprechen, bevor Zeit dafür aufgewendet wird. Sie haben angegeben, dass diese Diskussion bei der Codeüberprüfung stattfinden soll, nachdem die Zeit verstrichen ist.
Shawnhcorey
@shawnhcorey: Sicher, wenn "QA" in Ihrer Organisation für die Kodierung von Standards verantwortlich ist. Dies ist jedoch IMHO nicht die typische "QA" -Rolle - in den meisten Organisationen, die ich kenne, bezieht sich der Begriff "QA" auf eine Gruppe von Personen, die die Qualitätssicherung auf eine Black-Box-Weise durchführen und nicht dafür verantwortlich sind, welche Elemente einer Programmiersprache verwendet werden sollen benutzt werden und welche nicht. Diese Leute sind selten in der Lage, solche Details zu besprechen.
Doc Brown
2
@shawnhcorey: Das ist genau mein Punkt, die QS-Rolle variiert stark in verschiedenen Organisationen. In vielen Organisationen haben QA-Mitarbeiter keine Ahnung von Programmierung, daher sind sie wahrscheinlich nicht die richtigen, um ein solches Thema zu diskutieren.
Doc Brown
2
@shawnhcorey: Nun, einerseits hast du geschrieben "QA ist ein Oberbegriff" - andererseits hast du eine ganz bestimmte QA-Rolle und Verantwortung im Sinn - klingt für mich ein bisschen widersprüchlich.
Doc Brown
18

Meine allgemeine Meinung: Wenn Sie wie so oft die Wahl haben zwischen den folgenden drei Optionen:

  • Geben Sie viele nichttriviale Codestrukturen wiederholt von Hand ein.
  • Verwenden Sie die Metaprogrammierung von C ++ - Vorlagen, um die Codegenerierung zu automatisieren.
  • Verwenden Sie einen anderen Codegenerierungsmechanismus, z. B. Makros oder eine andere Programmiersprache, um C ++ - Quelldateien zu generieren

dann ist die Metaprogrammierung von Vorlagen, wenn sie ordnungsgemäß durchgeführt wird, wahrscheinlich die lesbarste und am besten wartbare der drei Optionen. Dies ist das Argument, das ich dem Team vorbringen würde, wenn ich in Ihrer Position wäre. Beispiele mit tatsächlichem Code würden helfen, sie zu überzeugen.

Wenn Sie Template Meta-Programming ( TMP ) verwenden, um Wiederholungen zu vermeiden, sollten Sie damit gut dokumentierte, sorgfältig getestete Abstraktionen erstellen, die die Komplexität im TMP-Code lokalisieren und das Schreiben des richtigen Client-Codes vereinfachen. Dies ist das Design der C ++ - Standardbibliothek.

Ich glaube nicht, dass wir beurteilen können, wer richtig oder falsch ist, ohne ein Beispiel für die Art von Code zu sehen, die Sie zu schreiben versuchen.

Brian
quelle
2
Sie können auch Kopieren + Einfügen verwenden, anstatt es von Hand zu tippen ;-)
Pa Elo Ebermann
4
@ PaŭloEbermann: Mist nein!
Joshua
2
@ PaŭloEbermann Ein Laden, bei dem ich diesen Ansatz genannt habe, "Anfang-Markierungs-Fehler, Ende-Markierungs-Fehler, Kopierfehler, Kopierfehler, Kopierfehler".
Kelly S. French
12

Softwareentwickler sollten danach streben, Code zu schreiben, der funktioniert, der offensichtlich funktioniert, der getestet werden kann, der überprüft werden kann, der debuggt werden kann und der angepasst werden kann, wenn Änderungen erforderlich sind. Wenn das Schreiben von "C mit Klassen" dies erreicht, ist es in Ordnung.

Und das sind die Standards, an denen Sie Ihren Code messen sollten. Insbesondere: Funktioniert es offensichtlich, kann es getestet, überprüft, debuggt und bei Bedarf angepasst werden?

gnasher729
quelle
9

Ein Argument aus Mitgefühl:

Gibt Ihnen Ihr Job Zeit zum Lernen oder können Sie Ihre Vorgesetzten alternativ dazu überreden, einige Stunden für das Erlernen dieser Sprachfunktionen aufzuwenden?

Wenn nicht, bedeutet dies im Wesentlichen, dass sie zusätzliche unbezahlte Arbeit erhalten. Sie mögen denken, dass ein C ++ Programmierer sollten die ganze Sprache kennen, oder so etwas, aber ein akademischer Punkt entlastet nicht die Last , die Sie auf sie auferlegen werden. Ihre Kollegen haben Kinder, kranke Eltern, kranke Ehepartner - oder die Hölle, nur ein vernünftiges soziales Leben, in dem es nicht darum geht, C ++ zu lernen. Der lautstärkere Gegner Ihres Vorschlags ist möglicherweise faul - oder er macht eine harte Zeit durch und braucht im Moment keinen zusätzlichen Scheiß in seinem Leben.

André Paramés
quelle
8

Code sollte zuerst für den Menschen zum Lesen geschrieben werden und nur im Übrigen für den Compiler zum Parsen.

Das Wichtigste an nicht trivialem TMP ist, dass Sie die Anzahl der Personen einschränken, die diesen Code lesen können. Dies kann ein gültiger Kompromiss sein kleines spezialistenteam dann ist es in einer größeren anwendung.

Wenn Sie alle Tricks aus dem Buch herausholen, erlegen Sie allen anderen Kosten auf, indem sie jetzt die Sprache einschließlich aller von Ihnen ausgenutzten Fälle von Anwaltskanzleien verstehen müssen auf nützliche Weise an der Anwendung zu arbeiten, das lohnt sich vielleicht, aber achten Sie auf die Kosten ...

Für mich ist ein bisschen mehr Tippen, vielleicht sogar ein bisschen Code-Duplizieren, aber das ich es vor Mr "C mit Klassen plus AWL" stellen kann, wenn es modifiziert werden muss, viel nützlicher als einige unglaublich elegante TMP-Dinge, die nur ich beibehalten kann (Und wird daher für immer erhalten bleiben). Denken Sie auch daran, dass der C mit Klassen-Typ der Fachexperte sein könnte und dass Fachwissen in der Regel viel wertvoller ist, als ein Sprachjurist zu sein.

Ich vergesse, wer es gesagt hat, aber "Jeder weiß, dass das Debuggen schwieriger ist, als es zu schreiben. Wenn Sie es also so geschickt wie möglich programmieren, wie werden Sie es dann jemals debuggen?"

Auch wenn ich dort wirklich modernes C ++ schreiben kann, ziehe ich es normalerweise vor, es nicht zu tun, bedeutet dies, dass ich weniger Wartungsprogrammierung durchführen muss.

Dan Mills
quelle
7

Nein solltest du nicht. Sie sind damit beschäftigt, Code zu erstellen, der einer Spezifikation entspricht. Dieser Code muss pflegbar sein, keine Ego-Reise. Sie könnten morgen von einem Bus überfahren werden, daher muss jemand in der Lage sein, Ihren Code abzurufen und die anstehende Aufgabe zu erledigen. Es ist jedoch von Vorteil, Ihre Arbeitgeber davon zu überzeugen, neue Techniken in ihre Programmierstandards aufzunehmen.

Darryl SCOTT
quelle
3
Sie sind damit beschäftigt, Code zu erstellen, der einer Spezifikation entspricht. ja, aber das vergisst du auch nach bestem Wissen .
t3chb0t
2

Die einzige Möglichkeit, diese Frage im Kontext zu beantworten, besteht darin, die spezifischen Probleme und die Art und Weise zu betrachten, wie Sie sie mit Metaprogrammierung gelöst haben. Wenn Sie hier keine Postleitzahl eingeben, können wir nicht wissen, ob Sie sich einer unnötigen Komplikation hingegeben haben, die Ihnen allein Spaß macht, ein nicht vorhandenes Problem zu "lösen". oder ob Sie die volle Kraft der Sprache eingesetzt haben, um eine einfache, elegante Lösung zu schreiben, die auf andere Weise nicht verfügbar ist.

In letzterem Fall möchte ich Sie ermutigen, dies gemeinsam mit Ihrem Team fortzusetzen .Jedes gute Team muss aussagekräftige Codeüberprüfungen durchführen, in denen nicht nur Stilfragen erörtert werden, sondern auch, ob die Lösung des Programmierers den besten Ansatz verwendet, die entsprechenden Sprachfunktionen verwendet, wartbar und testbar ist usw. Ihre Metaprogrammierlösung sollte eine solche Überprüfungssitzung ausfüllen, wahrscheinlich a ganzer Nachmittag. Die Programmierer, die Ihren Ansatz ablehnen, sollten Alternativen (wie die Codegenerierung mit Perl, Codeduplizierung usw.) auslegen und zeigen, wie sie im Vergleich zu Ihrer Lösung die genannten Kriterien erfüllen. Ihre Aufgabe ist es, als freundlicher "Gegner" des Arguments zu zeigen, dass dies eine Möglichkeit ist, die Arbeit schnell zu erledigen, dass die Wartung einfach ist, das Testen einfach ist und der Code tatsächlich lesbar ist, sobald Sie die Hürde überwunden haben Analyse der lustigen Grammatik.

Die meisten Programmierer sind faul und freuen sich über elegante, kleine Lösungen. Wenn Sie es sind, können Sie sie wahrscheinlich überzeugen, insbesondere wenn die aufgezeigten Alternativen nicht ausreichen.

Peter A. Schneider
quelle
0

Es gibt keine einzige richtige Antwort auf diese Frage.

Denn als Erstes sollten Sie sich fragen: In welche Situation bringen Sie Ihre Beschäftigung? Einige Leute werden tatsächlich als Code-Affen eingesetzt, um Spezifikationen zu kodieren, andere als Teamplayer, andere als Wissensarbeiter oder Experten.

Die einzige Konstante ist, dass Sie sie aus Sicht Ihres Arbeitgebers betrachten müssen, da dies im Wesentlichen bedeutet, ein Arbeitnehmer zu sein. Manchmal ist es in der Tat im besten Interesse Ihres Arbeitgebers, Ihre Kollegen dazu zu bewegen, besser zu werden und fortgeschrittene Techniken zu beherrschen. In einer anderen Situation können Sie jedoch viele Probleme und Verpflichtungen aufwerfen und den Erfolg der Projekte gefährden, an denen Sie beteiligt sind.

Ichthyo
quelle
-4

Die Frage ist nicht wirklich, ob Metaprogrammierung in Ordnung ist oder nicht, sondern ob es in Ordnung ist, besser zu sein als die anderen im Team. Hier sind ein paar kontroverse Punkte, wie ich es sehe ...


Ich bin kürzlich zu einem neuen Job gewechselt, bei dem ich in einem größeren Team arbeite, und diese [Meta-Programmierung] beunruhigt einige meiner Kollegen, weil sie es nicht verstehen.

Sie haben Angst, dass du besser bist als sie. Das ist gut. Du wirst der neue Experte sein. Sie haben gerade ihre Status-Quo-Welt zerstört.


Ich versuche immer, das volle Potenzial der Sprache auszuschöpfen, aber einige (nicht alle) meiner Kollegen sehen dies als Risiko an (einige begrüßen den Ansatz).

Sicher, niemand mag es, weniger geschickt zu sein als jeder andere. Deshalb versuchen sie, Sie davon abzuhalten, Techniken anzuwenden, die für ihn zu komplex sind. Sie können es entweder nicht verstehen oder werden es nicht verstehen, weil sie sich jetzt sicher fühlen.


Ich bin damit einverstanden, dass es ein Problem ist, Code zu schreiben, den niemand im Team verstehen kann.

Ich nicht. Ich denke, es zeigt Ihr Fachwissen.


Meine Frage ist, wer hat Recht, was soll ich tun?

Sie sollten alle Ihre Fähigkeiten nutzen, um den besten Code zu schreiben, den Sie schreiben können, und nicht auf diejenigen schauen, die ihn nicht verstehen. Andernfalls bleiben Sie auf ihrem Niveau stecken und sind nur ein gewöhnlicher Programmierer. Es ist gut, besser zu sein als andere, und es ist gut, sich zu bemühen, besser zu sein als sie. Sie werden nie neue Erfahrungen sammeln, wenn Sie nicht versuchen, etwas Neues zu verwenden oder Dinge anders zu machen.


Ich weiß, dass ich abgelehnt werde, aber so sieht es aus. Es ist kein Verbrechen, besser als andere im Team zu sein, und es ist kein Verbrechen, seine Fähigkeiten einzusetzen. Es ist nur so, dass jeder Angst hat, es zuzugeben ... weil sie auf der unqualifizierten Seite sind und es hassen, dass der Neue plötzlich etwas kann, was sie nicht können. Wenn sie klug wären, würden sie Sie um Hilfe und Rat bitten und Ihren Code nicht als unverständlich kritisieren.


BEARBEITEN

Es scheint viel Verwirrung um diese Frage zu geben. Wie die Kommentare zeigen, denken viele Menschen, dass es um die allgemeine Lesbarkeit von Code geht. Nein, ist es nicht. Es geht darum, ob bestimmte Sprachmerkmale / Konstrukte verboten oder vermieden werden sollten, weil einige Teammitglieder sie nicht verstehen.

Meine Antwort ist nein . Sie sollten nicht verboten werden. Wenn du etwas verbieten willst, wie würdest du das tun? Sie müssten eine Art Fragebogen erstellen, um herauszufinden, was Ihre Teammitglieder können und was nicht - oder besser gesagt, nicht lernen wollen, da ich denke, dass alle sprachlichen Funktionen irgendwo nützlich sind. Daher ist es immer wichtig, sie zu kennen und sie zu verwenden Gut und je mehr Sie wissen, desto besser ist der Code, den Sie schreiben können. Sie benötigen auch eine Skala, um zu definieren, welche Funktionen Anfänger, Mittelstufe oder Fortgeschrittene sind.

Um zu demonstrieren, wie albern solche Einschränkungen sind, nehmen wir ein wirklich einfaches Beispiel: Sie werden als Softwareingenieur eingestellt, aber Ihr zukünftiger Chef teilt Ihnen mit, dass Sie keine do/whileLoops verwenden dürfen, weil ein paar Leute anwesend sind Das Team, das sie noch nie benutzt hat und auch nicht benutzt hat, weil sie immer forSchleifen für alles benutzt haben, sodass sie do/whileSchleifen verwirrend finden.

Jetzt denkst du, das ist dumm und verrückt, nicht wahr? Das verbietet aber auch andere Funktionen. Einige Leute können sie benutzen und andere wollen sie nicht lernen.

Warum sollten Sie schlechteren Code produzieren, wenn Sie wissen, dass es etwas gibt, das es Ihnen ermöglicht, dasselbe mit viel weniger Aufwand zu tun und dennoch zu einem viel besser lesbaren, robusten Code zu führen?

Unabhängig davon, ob Sie nur grundlegende oder fortgeschrittene Sprachfunktionen verwenden, können Sie mit einer dieser beiden Funktionen einen ebenso unkomplizierbaren wie nicht verwaltbaren Code erstellen. Dies ist also ein völlig anderes Thema.

t3chb0t
quelle
10
Diese Antwort ist schrecklich. Meta-Programmierung impliziert nicht Vormachtstellung und umgekehrt
Polfosol
9
Nach meiner Erfahrung ist jeder, der das Gefühl hat, dass er über ein wesentlich höheres Fachwissen als der Rest seines Teams verfügt, tatsächlich dem Mahn-Krüger-Effekt zum Opfer gefallen. Das soll nicht heißen, dass einige Leute nicht viel geschickter sind als andere, oder dass in diesem Fall der Rest des Teams nicht inkompetent ist ... aber ein echter Experte wird sich immer auf einfachen Code und das Gesamtbild konzentrieren Engineering (einschließlich der Berücksichtigung von Teameffekten im Laufe der Zeit) statt nur Programmierung für Stilpunkte.
Daniel Pryden
3
Das Schreiben von Code, den andere nicht lesen können, beweist nicht, dass Sie besser sind als sie. Es beweist, dass Sie keinen lesbaren Code schreiben können.
Stig Hemmer
3
@StigHemmer anscheinend hast du die frage nicht verstanden und du wechselst das thema. Es geht nicht um nicht lesbaren Code, sondern um Code, der für andere aufgrund ihres Unwissens unverständlich ist.
t3chb0t
4
@ t3chb0t Mein Punkt war, dass diese beiden dasselbe sind.
Stig Hemmer