Warum Programmierer saugen

Vor langer Zeit schrieb ich einen Artikel zum Thema "Warum Computer saugen" (der am Ende die Namen "Computer" und " Was ist los mit Computern " erhielt [der Link ist im Original unterbrochen, also eine Kopie aus dem Webarchiv - Anmerkung des Übersetzers ] in zwei anderen Versionen, und der ursprüngliche Name kam nie heraus). Der Artikel war lang genug, aber die Essenz lief auf die Idee hinaus, dass Computer Mist sind, weil Programmierer wildeste komplexe Dinge erschaffen, die niemand sonst verstehen kann, und weil Komplexität auf noch größerer Komplexität basiert, solange jeder einzelne Der Aspekt des Programms wird nicht unüberschaubar.


Bild
CPAP von hier


Was ich damals nicht wusste, war, warum Programmierer dies tun. Es war offensichtlich, dass sie dies taten ; Aber warum erstellt die Softwareindustrie so viel wilden, komplexen und unlesbaren Code? Warum geht das so weiter, obwohl die Entwickler anscheinend aus den ersten negativen Erfahrungen gelernt haben sollten? Was hat Programmierer dazu gebracht, nicht nur schlechten Code zu schreiben, sondern ihn immer wieder zu machen?


Nun, das war mir ein Rätsel, aber irgendwie war ich zuerst nicht besonders besorgt darüber. Die Idee, dass „schlechte Programme von schlechten Programmierern stammen“, ist so einfach und offensichtlich, dass sie als Grundlage für eine ganze Studie auf dem Gebiet der Programmierung diente, die letztendlich zu guten Ergebnissen führte (die hauptsächlich in diesem Blog beschrieben werden und auch Gegenstand von sind Bücher, die gerade geschrieben werden). Das Problem wurde identifiziert (schlechte Programmierer, die Komplexität erzeugen), und auf den ersten Blick hatte sie eine Lösung (Regeln für die Softwareentwicklung erstellen, die dies verhindern würden), und das war genug für mich.


Aber ich habe mich immer noch gefragt, ob weltberühmte Universitäten, technische Schulen und Bildungsprogramme trotz jahrzehntelanger Erfahrung im Unterrichten von Softwareentwicklungstechniken so schreckliche Programmierer abschließen. Natürlich waren viele der Prinzipien der Programmgestaltung nie vertraulich, und viele gute Tipps stehen vor der Tür, und viele von ihnen sind sehr allgemein gehalten. Auch wenn die Leute nicht zur Schule gingen, haben sie solche Ratschläge nicht gelesen ?


Nun, die Wahrheit war jenseits meiner Vorstellungskraft und es dauerte fast fünf Jahre, um im Bugzilla-Projekt unter Beteiligung einer großen Anzahl von Entwicklern zu arbeiten, so dass ich eines schönen Tages plötzlich eine schreckliche Tatsache erkannte:


Die überwiegende Mehrheit (90% oder mehr) der Programmierer hat keine Ahnung, was sie tun.


Nicht, dass sie nichts über Softwareentwicklung gelesen hätten (obwohl dies höchstwahrscheinlich nicht der Fall ist). Nicht dass Programmiersprachen zu kompliziert waren (obwohl es so ist). Tatsache ist, dass die meisten Programmierer keine Ahnung haben, was sie tatsächlich tun. Sie ahmen einfach die Fehler anderer Programmierer nach - sie kopieren den Code und drucken mehr oder weniger aussagekräftige Zaubersprüche auf den Computer, in der Hoffnung, dass er sich ähnlich verhält, wie sie es erwarten, ohne die Mechanik des Computers, die Prinzipien der Softwareentwicklung oder den Wert wirklich zu verstehen jedes einzelne Wort und Symbol, das sie in den Computer eingeben.


Dies ist eine kühne, schockierende und beleidigende Aussage, aber meine Erfahrung bestätigt sie. Ich habe persönlich den Code von Dutzenden von Programmierern durchgesehen und bewertet. Ich habe den Code vieler anderer gelesen. Ich habe mit vielen, vielen Programmierern über Softwareentwicklung gesprochen und Artikel von Hunderten von Entwicklern gelesen. Die Anzahl derer, die wirklich verstehen, was sie tun, beträgt nur etwa 10% aller Programmierer, mit denen ich jemals gesprochen, gearbeitet oder gehört habe.


Open Source-Entwickler sind die Besten der Besten. Das sind Leute, die auch in ihrer Freizeit programmieren wollen. Und selbst dann würde ich sagen, dass nur etwa 20% der Open Source-Entwickler wirklich gut darin sind, was sie tun.


Aber warum so? Was ist das Problem? Wie kann es sein, dass in dieser Branche so viele Menschen arbeiten, die keine Ahnung haben, was sie tun?


Nun, es scheint, dass sie irgendwie "dumm" sind. Aber was ist Dummheit? Menschen werden nicht dumm, nur weil sie etwas nicht wissen . Es gibt vieles, was nicht jeder weiß. Aber das macht sie nicht dumm. Dies macht sie über bestimmte Dinge ahnungslos, aber nicht dumm. Nein, Dummheit, echte Dummheit - es bedeutet, nicht zu wissen, dass Sie etwas nicht wissen . Dumme Leute denken, dass sie etwas wissen, obwohl sie es nicht wissen , oder sie erkennen nicht, dass das Wissensgebiet viel breiter ist als sie denken .


Diese "Dummheit" ist in fast jedem Bereich zu finden, und Softwareentwicklung ist keine Ausnahme. Viele Programmierer erkennen einfach nicht, dass es bestimmte Gesetze oder allgemeine Prinzipien für die Softwareentwicklung gibt, und versuchen daher nicht einmal, sie zu finden. Viele Softwareunternehmen versuchen nicht, das Verständnis der Entwickler der von ihnen verwendeten Programmiersprachen zu verbessern. Vielleicht liegt dies daran, dass das Management der Ansicht ist, dass Programmierer „dies alles bereits wissen sollten, da sie dafür eingestellt wurden“.


Leider ist diese Ansicht bei der Entwicklung von Software schädlich, denn wenn Sie ein wirklich guter Programmierer sein möchten, müssen Sie viel wissen. Jeder, der glaubt, alles zu wissen (oder der einen „blinden Fleck“ hat, aufgrund dessen er nicht sieht, was er sonst noch lernen soll), verwischt seinen idealen Code ohne Wissen - Wissen über die Existenz, das er nicht kennt Sie kennen und erkennen nicht einmal die Tatsache eines Mangels an Wissen .


Egal wie viel Sie wissen, in jedem Bereich gibt es immer etwas anderes, und die Programmierung ist keine Ausnahme. Zu denken, dass Sie wissen, dass alles immer falsch ist.


Manchmal ist es schwierig zu bestimmen, was Sie überhaupt lernen müssen. Es gibt so viele Daten, aber wo fängst du an? Um dies zu unterstützen, habe ich einige Fragen gestellt, die ich mir oder anderen stellen muss, um herauszufinden, welche Bereiche weiter untersucht werden müssen:


  • Wissen Sie alles über jedes Wort und jedes Zeichen auf jeder Seite Ihres Codes?
  • Haben Sie die Dokumentation für jede von Ihnen verwendete Funktion gelesen und vollständig verstanden?
  • Haben Sie ein exzellentes Verständnis der Grundprinzipien der Softwareentwicklung - so gut, dass Sie es unerfahrenen Programmierern in Ihrem Unternehmen erklären können?
  • Verstehen Sie, wie jede Komponente des Computers funktioniert und wie sie zusammenarbeiten?
  • Verstehen Sie die Geschichte von Computern und wie sie sich weiterentwickeln werden, um zu verstehen, wie Ihr Code auf Computern ausgeführt wird, die in Zukunft erstellt werden?
  • Kennen Sie die Geschichte der Programmiersprachen, um zu verstehen, wie sich die von Ihnen verwendete Sprache entwickelt hat, und warum funktioniert das so?
  • Verstehen Sie andere Programmiersprachen, andere Programmieransätze und Computertypen, die sich von denen unterscheiden, mit denen Sie verstehen, welches Tool für jede Aufgabe am besten geeignet ist?
  • Von oben nach unten sind die wichtigsten Dinge aufgeführt, die ein Programmierer benötigt, um zu verstehen, welchen Code er schreibt. Wenn Sie all diese Fragen ehrlich mit „Ja“ beantworten können, sind Sie definitiv ein großartiger Programmierer.

Vielleicht sieht die Länge der Liste deprimierend aus. „Wow, lesen Sie die Dokumentation für jede Funktion? Ja, es wird viel Zeit in Anspruch nehmen! " Okay, wissen Sie, was sonst noch viel Zeit in Anspruch nimmt? Werden Sie ein guter Programmierer, ohne die Dokumentation zu lesen . Und weißt du wie viel? Ewigkeit , weil dies niemals geschehen wird.


Sie werden niemals ein guter Programmierer, wenn Sie einfach den Code eines anderen kopieren und beten, dass er für Sie funktioniert. Noch wichtiger ist jedoch, Zeit in das Training zu investieren, um ein guter zu werden [ Programmierer - ca. Übersetzer ]. Die jetzt verbrachte Zeit macht Sie in Zukunft zu einem viel schnelleren Programmierer. Wenn Sie in den ersten drei Monaten nach dem Erlernen einer neuen Technologie viel Zeit mit Lesen verbringen, werden Sie in den nächsten 10 Jahren wahrscheinlich zehnmal schneller sein, als wenn Sie sich nur beeilen würden, sie zu verwenden, ohne etwas zu lesen.


Ich möchte sofort klarstellen - natürlich wird es nicht funktionieren, nur drei Monate zu lesen und ein guter Programmierer zu werden. Erstens ist es zu langweilig - niemand möchte drei Monate lang eine Theorie stopfen, ohne etwas zu üben. Nur wenige Menschen können dies lange genug tun, um überhaupt Programmierer zu werden, ganz zu schweigen davon, sofort gut zu sein. Daher möchte ich sofort darauf hinweisen, dass das Verständnis aus der Praxis und nicht nur aus der Theorie stammt. Aber ohne Theorie zu studieren, erscheint das Verständnis möglicherweise überhaupt nicht . Daher ist es wichtig, ein Gleichgewicht zwischen praktischer Programmierung und Theorie zu finden.


Ich greife keinen Programmierer an, mit dem ich persönlich zusammengearbeitet habe, oder einen bestimmten Programmierer im Allgemeinen. Ich bewundere fast jeden Programmierer, den ich jemals als Person gekannt habe, und ich erwarte, andere zu bewundern, wenn ich sie treffe. Stattdessen fordere ich alle Programmierer auf, ihren Geist für das Neue zu öffnen, damit es immer neues Wissen gibt, dass Theorie und Praxis der Schlüssel zur Meisterschaft sind und dass es nichts Schändliches ist , etwas nicht zu wissen - wenn Sie Sie wissen , dass Sie etwas nicht wissen. Nehmen Sie sich einfach Zeit, um es bei Bedarf herauszufinden.


Von einem Übersetzer: Ich habe versucht, in einem literarischen Stil zu übersetzen, daher wurden möglicherweise einige Aussagen oder Ideen aus dem Original verzerrt, weil die Übersetzung besser lesbar gemacht werden sollte. Wenn ja, fahren Sie bitte nicht mit angepissten Lappen, sondern schreiben Sie in PM.

Source: https://habr.com/ru/post/de402565/


All Articles