
Ich schimpfe oft mit Technologien, die ich für unzureichend halte, und als Antwort bekomme ich (zusammen mit Argumenten) pure Wut und Schmerz. Manchmal körperlich.
Entwickler kritisieren ihre Lieblingstechnologien aus irgendeinem Grund sehr persönlich. Dieser „Kult des Werkzeugs“ ist ein so seltsames Phänomen, dass ich es nicht logisch erklären kann. Einige sagen, dass jeder dazu neigt, weil die Denkprozesse eines Codierers sehr tief mit seiner Programmiersprache verflochten sind. Einige sagen, es sei ein Irrtum eines Junioren - Sie schreiben zum ersten Mal etwas, es funktioniert und Sie beginnen, Ihre Sprache wie etwas Göttliches zu behandeln.
Was auch immer es ist, ich habe es nie verstanden.
Ich habe Kultisten immer als Idioten angesehen. Aber ich versuche immer zu verstehen, warum Dummköpfe zu ihnen wurden, warum ich dieses Schicksal vermieden habe. Ich fange an zu denken und bam! - Es stellte sich heraus, dass ich auch ein Idiot bin. Ich bin ein Kultist, der F # verehrt. Und natürlich steckt eine Geschichte dahinter.
Ich habe als Junior C # -Entwickler angefangen. Dann-rohes Xamarin, Android-Entwicklung, der ganze Schebang. Meine ersten Schritte bei der Arbeit waren voller Schmerzen. Ich musste alleine eine Android-App schreiben, die auf Screenshots und Gifs der iOS-Version basiert. Es wurde nur jedes zweite Mal kompiliert, Buga waren überall und das einzige Feedback, das ich bekam, war - "Warum ist es nicht so wie im Screenshot?". Es war ein Albtraum und ich ging schnell.
Ich habe dann ein halbes Jahr damit verbracht, zu Hause das Programmieren zu lernen, und dann einen Job bei einem großen Personal bekommen. Dort war es viel besser organisiert - Team, Mentoren, Prüfungen, Muster, Codeüberprüfung, strenge Linters, hohe Standards für Codequalität, Lesbarkeit und Leistung. Mit einem Wort, alles war ausgereift. Und ich dachte, so sollte es funktionieren. Aber wie sich herausstellte, war es ein noch größerer Albtraum.
Über ein Jahr lang erstellte unser gesamtes Team ein Modul für ein Werkzeug, das mit Werkzeugen arbeitete, mit denen andere Werkzeuge hergestellt wurden. Wahrscheinlich die gleichen, mit denen wir die Module hergestellt haben. Jeden Tag mussten wir Indianer und Amerikaner anrufen und über Gott weiß was berichten.
Irgendwann wurde mir klar, dass ich immer weniger tat, aber nichts änderte sich. Ich habe in gebrochenem Englisch durch die Zähne gelogen: „Die ganze letzte Woche habe ich nach Fehlern gesucht. Immer noch kein Erfolg. Wird weitergehen. "
"Ok Phil, hört sich toll an" - antworteten meine transatlantischen Partner.
Irgendwann, verzweifelt und beschämend, ging ich zum Management und bat mich zu entlassen, aber stattdessen gaben sie mir aus irgendeinem Grund eine Gehaltserhöhung. Ich habe diese Geschichte schon einmal erzählt. Ich war weder glücklich noch traurig - es fühlte sich wie ein surrealer Witz an, als würde die Logik dieser Welt auseinanderfallen.
Seltsamerweise habe ich mich aus Langeweile und Ehrgeiz entschlossen, die Dinge zu Hause zu entwickeln und alles „richtig“ zu machen. Ich hatte zahlreiche Ideen, wie ich mit Softwareprojekten die Welt und meinen Geldbeutel verbessern kann. Ich habe alles nach dem Buch gemacht: ein Designdokument, Architektur, Systemanforderungen, ein VSTS-Projekt. Alles war organisiert und ausgereift, genau wie in Unternehmen.
Es kam nicht weiter.
Natürliche Schlussfolgerung - die Idee war Mist. Alter Code in den Papierkorb, neue Idee. Gleiches Ergebnis. Fangen Sie von vorne an. Dies ging ein paar Mal weiter. Ich sage es meinen Mitarbeitern und sie sind verwirrt. Was mache ich falsch? Ich mache es genauso wie diejenigen, die schon reich geworden sind.
Menschen mit meinem (hohen) Selbstwertgefühl sind oft besser dran als andere, müssen aber manchmal dafür bezahlen. Sie müssen sich selbst belügen, um mit dem Scheitern fertig zu werden. Und ich sagte mir: Jeder Entwickler ist zu allem fähig. Es geht darum, wie es gemacht wird, und meine Anforderungen an das Wie sind zu hoch. Sie sind nicht für ein Start-up geeignet und verdienen keine sinnlosen Geschäftsaufgaben. Nächster Gedanke: "Ich bin nicht bereit, meine Qualitätsstandards aufzugeben." Selbst wenn ich eine App erstellen muss, die furzt, wenn Sie auf den Bildschirm tippen, werde ich sie so schön und durchdacht wie möglich gestalten.
Also habe ich zu Hause einen lokalen Business-Frachtkult aufgebaut. Über alles gebracht - Rituale, Prozesse, Standards - aber nicht das eigentliche Fleisch der Sache. Ich spielte einen Geschäftsentwickler ohne Geschäft, wie einen Höhlenmenschen, der aus Stroh eine Landebahn und einen Wachturm baute und erwartete, dass Stahlvögel darauf landen würden.
Ich schrieb Stapel über Stapel formalen, strengen Codes, der mich dem Endergebnis nicht näher brachte, aber genau das Gegenteil. Wenn Sie darüber nachdenken, ist meine Karriere eine Geschichte von Misserfolg und Enttäuschung. Ich gab es ganz auf und schaute mir nur Fernsehsendungen bei der Arbeit an, während ich 16 Tassen Kaffee pro Tag trank.
Ganz unten bemerkte ich einen Habr-Artikel über F #, probierte ihn aus und dachte: „Hm, nicht schlecht!“. Mein Arbeitgeber hat glücklich einen Monat für mich bezahlt (obwohl er es nicht weiß).
F # war nicht schwer zu lernen, da es die gleiche Laufzeit wie C # hatte und ich bereits jeden Tag den funktionalen Ansatz für die Programmierung in TypeScript verwendet habe. Mir wurde klar, dass ich jedes meiner Projekte auf F # übertragen kann. Lassen wir meine technischen Fähigkeiten für einen Moment aus der Gleichung heraus, da alles relativ ist. In den Teams, in denen ich arbeite, bin ich großartig, aber in einem Team von beispielsweise F # -Entwicklern konnte ich nicht mehr als ein Hausmeister sein.
Aber ich konnte Probleme auf einer grundlegenden Ebene lösen, obwohl ich tief im Inneren wusste: Ich konnte nichts wirklich lösen. Ich werde einfach weiter Wissen in den Müll werfen. Ich habe mein Vertrauen in die Programmierung völlig verloren.
Eines Tages entschied ich, dass genug genug war. Ich würde aufhören. Es war ein kalter, dunkler Wintertag. Ich verließ das Büro, stieg in mein Auto - und es startet nicht. Nach einer Weile erwachte der Motor endlich zum Leben. Ich weiß nicht, ob ich den Rauch des Geruchs von brennendem Plastik früher bemerkt habe, aber dann brach ein Feuer unter der Motorhaube hervor. Ein paar Sekunden später rannte ich um den Parkplatz herum und forderte alle auf, ihre Autos von meinen wegzubringen.
Fünf Minuten später gab es nur noch einen alten brennenden Autokadaver und ein Telefon mit dummen YouTube-Videos. Es war -30 ° C und ich trug einen leichten Mantel eines Mannes, der in einem warmen Auto nach Hause fahren wollte. Vollständig ausgegeben und moralisch zerstört. Kein Geld für ein Taxi und viel zu viel Sorge für mich, um in öffentliche Verkehrsmittel zu gelangen. Ich ging nach Hause, ungefähr 10 km. Zuhause Ich musste meiner Frau mit dem Kind helfen, essen, sie ins Bett bringen, tausend kleine Dinge tun. Aber irgendwann gibt es nichts mehr, was mich ablenken könnte, und ich blieb meiner Schlaflosigkeit und einer Erkenntnis gegenüber - ich bin nichts wert, ich werde nie Erfolg haben.
An diesem schlimmsten Abend meines Lebens, der noch kalt von einem eiskalten Heimweg war, gab ich mir einen letzten Versuch.

Ich saß da und schrieb ein kleines digitales Biom auf F #, in dem maschinelle Lerneinheiten miteinander interagieren und sich entwickeln, während ich mit Parametern spiele und beobachte, was passiert.
Und ja, in dieser Nacht bin ich wahrscheinlich ein bisschen verrückt geworden.
Normalerweise verwende ich eine Mischung aus aufsteigendem und absteigendem Programmiermodell. Ich skizziere eine grobe Lösung mit Pseudocode und beginne dann, die wichtigsten Details als separate Module zu schreiben. Von klein nach groß.
Beim Übergang vom Pseudocode zum echten Code vervollständige ich ein oder zwei große Module und überprüfe, ob etwas funktioniert. Normalerweise nicht, also beginne ich zu iterieren und wiederhole diesen Vorgang von Anfang bis Ende, bis er funktioniert. Aber meistens gebe ich einfach nach der 5. oder 6. Iteration auf.
Ich habe den gleichen Ansatz mit F # versucht. Ich hatte eine allgemeine Vision des Projekts, und dann baute die Lösung Stein für Stein in meinem Kopf. Sie kommen mit einem Fall nach dem anderen und irgendwann stellen Sie fest, dass Sie wissen, wie es funktioniert. Und dann fängst du an zu programmieren und merkst, dass du es nicht tust. Gedanken werden nicht in Programmiersprachen übersetzt, obwohl Sie oft darin denken. Ich hatte das die ganze Zeit passiert.
Diesmal war es jedoch anders. Ich habe eine .txt-Datei in VSCode erstellt und den Pseudocode für eine Funktion geschrieben, die den Lebenszyklus meiner App beschreibt. Und mir wurde klar, dass mein Pseudocode in F # gültig ist. Ich brauche nichts zu übersetzen, ich habe nur die Hauptfunktion meines Projekts geschrieben. Okay, ich habe die Dateierweiterung geändert und sie der sauberen Lösung hinzugefügt. Da war meine Lebenszyklusfunktion. Es akzeptiert den aktuellen Weltzustand, eine Sache, die ihn verarbeitet (die Welt selbst) und den aktualisierten Zustand ausspuckt, eine Sache, die ihn in einen Satz von KI-Parametern und zurück übersetzt, sowie die KI selbst, die Parameter akzeptiert und die Lösung ausspuckt .
Dann war es einfach. Sie nehmen den Status, wandeln ihn in KI-Parameter um, geben sie an die KI weiter, verwandeln das Ergebnis wieder in den Weltzustand, geben es dem Spiel und das Ergebnis geht zurück in die Lebenszyklusfunktion. Eine schöne Rekursion, ein einfacher Algorithmus, großartiger Code, alles GoF aus der Box. Alles was übrig blieb war, es zum Laufen zu bringen.
Aber die Sache ist, ich muss nicht mehr an die Architektur denken. Ich schreibe, was Java- und Sharp-Entwickler als "Inversion des Steuercontainers" bezeichnen - eine Funktion, die die Lebenszyklusfunktion übernimmt und die Funktionen meiner Module (II, Spiel) durchläuft. VSCode hebt es rot hervor, weil es weder Funktionen noch Module hat, aber ich habe das, was ich brauche - sobald die roten Hervorhebungen verschwunden sind, kann ich das Projekt erstellen und es ist fertig.
Ich nehme die Module und lasse sie nacheinander auf die gleiche Weise arbeiten. Das gesamte Projekt besteht aus 5 Dateien. Die AI-Datei besteht aus 500 Zeilen - eine Menge, aber die meisten, wenn sie wirklich gut funktioniert. Das Schöne an diesem Ansatz ist, dass ich eine Funktion für den Arbeitslebenszyklus - das Herzstück meiner App - schreiben kann, ohne etwas anderes zu beschreiben.
Die gesamte Architektur besteht aus 10 Codezeilen, die in wenigen Minuten geschrieben wurden. Keine Schnittstellen, abstrakten Fabrics, Locs, all diese DefaultInterfaceNameClasses und anderer Mist, den ich in C # machen muss, bevor ich überhaupt verstehe, was ich erstellen möchte. Sie schreiben einen dummen Kern, der das Problem einfach löst, und er ist schöner als Ihre Leiden auf Unternehmensebene in Java oder Sharp.
Und ich habe alles getan, indem ich meine Gedanken in den Editor eingegeben habe, wie ich es in F # gedacht habe. Anstatt einen Plan in C # -Kommentaren zu skizzieren, habe ich Arbeitsfunktionen geschrieben. Anstatt zehn oder sogar Hunderte von Schnittstellen zu beschreiben, gibt es eine kleine Datei mit dem Domänenmodell der App. Klicken Sie auf "Build". Erhielt eine funktionierende Lösung. In einer Nacht. Mit Qualitätscode kann ich sicher zur Überprüfung geben. So einfach ist das.

Ich weiß nicht, worum es geht - ob F # eine monumental großartige Technologie ist oder ob sie einfach perfekt zu mir passt oder ob sie speziell für diese Aufgaben entwickelt wurde - was ist der Unterschied? Wichtig ist, dass ich in diesem Moment unterging und ein Rettungsboot brauchte. Das Leben warf mich F # und ich zog mich heraus. Jetzt ist es für mich nicht nur eine andere seelenlose Technologie - es ist ein riesiger emotionaler Deal.
Jetzt, wenn ich jemanden F # schimpfen höre - „Ein totgeborener Techniker! Ein Geek-Spielzeug ... “- Ich erinnere mich immer an die kalte Winternacht, das brennende Auto, die in meinem Mund gefrorene Zigarette, Depressionen und F #, die mich herausgezogen haben. Es ist, als hätte jemand meinen besten Freund beschissen.
Für einen Außenstehenden mag es seltsam aussehen, aber wenn Sie an diesem Tag an meiner Stelle gelebt hätten, hätten Sie genauso reagiert. Ich denke, das ist bei jedem Technologiekultisten üblich. Sie haben sich in ihre Sprachen verliebt, weil sie eine emotionale Bindung zu den Umständen haben, die sie dazu gebracht haben, sie zu entdecken. Und dann komme ich und spucke direkt in ihre Seele. Wer ist jetzt der Idiot? Ich bin Ich werde es nicht wieder tun, hoffe ich.