
Je critique souvent les technologies qui me semblent fausses, et en retour, je reçois non seulement des arguments, mais aussi de la méchanceté pure et simple, du ressentiment et même du visage.
Les injections adressées à la technologie sont développées par les développeurs à leurs frais. Le culte de l'outil est une chose très étrange qui ne peut pas être expliquée logiquement. Certains disent que tout le monde a un culte, parce que la pensée est étroitement liée au yap. D'autres disent que c'est une maladie junior - vous avez écrit quelque chose pour la première fois, c'est arrivé, par plaisir, vous pensiez que votre jappement était un miracle de Dieu.
Quoi qu'il en soit, je n'ai jamais compris ces ordures.
Les partisans des cultes me paraissent des imbéciles infranchissables. Et j'essaie toujours de comprendre comment les imbéciles sont devenus des imbéciles, et pourquoi je ne suis pas devenu imbécile. A commencé à réfléchir et à bam! - Je m'en suis rendu compte. Je suis un adepte stupide qui fait l'éloge de F #. Et bien sûr, il y a une histoire derrière cela.
J'ai commencé ma carrière en tant que junior C # dev. Raw puis Xamarin, développement pour android. Les premières étapes du premier emploi ont été remplies de douleur. J'ai fait seule l'application en utilisant des captures d'écran et des gifs de la version iOS. Tout a fonctionné une fois, il y a eu beaucoup de problèmes et le seul retour que j'ai reçu était «pourquoi ne pas aimer sur la photo?». C'était un cauchemar, et je suis vite parti.
Il a étudié à la maison pendant six mois, puis a obtenu un emploi dans une grande outstaff. Tout était là comme chez les gens - l'équipe, les mentors, les examens, les modèles, les révisions de code, le linter strict, les exigences les plus élevées en matière de qualité, de lisibilité et de performance du code. En un mot - une approche adulte. J'ai définitivement décidé pour moi - c'est exactement ce qui doit être fait. Mais il s'est avéré que ce cauchemar est encore pire.
Depuis plus d'un an, nous avons constitué toute une équipe d'un module pour un outil qui fonctionne avec des outils conçus pour développer des outils. Peut-être ceux-là mêmes dont nous avons besoin pour faire le module. Chaque jour, nous étions obligés d'appeler des Indiens ou des Américains, et on ne sait pas trop sur quoi faire rapport.
À un moment donné, j'ai remarqué que je faisais de moins en moins, mais rien ne changeait. Dans un anglais cassé, j'ai menti franchement: «Ol past Vik a serch pour bug. Steele connaît les saxophones. Ville continent »
"Ok Phil, ça sonne bien", a déclaré à l'étranger.
Une fois, dans une crise de honte et de désespoir de mon inutilité, je suis allé voir mes supérieurs et j'ai demandé à être licencié, mais pour une raison quelconque, ils ont augmenté mon salaire.
J'ai déjà dit à ce sujet . Je n'étais ni drôle ni joyeux - c'était un sursaut suicidaire, comme si le monde de l'inutilité avait vaincu le monde de la logique.
Une étrange contradiction, mais en même temps par ennui et super-ambition, j'ai décidé de jouer un développeur cool à la maison. Beaucoup d'idées ont toujours été dans ma tête pour améliorer le monde et votre portefeuille à l'aide de projets logiciels. J'ai tout bien fait. TK, architecture, configuration requise, projet en VSTS. Le tout de manière adulte, tout comme les entreprises.
Nikher n'a pas fonctionné.
Décidé - l'idée est de la merde. Le code poubelle, je prends une nouvelle idée, quittez, tout se répète plusieurs fois. Je dis à mes collègues, ils sont perplexes. Comment ça? Après tout, je fais tout exactement la même chose que ceux qui ont déjà arraché leur pièce.
Une personne ayant mon estime de soi est généralement plus facile à vivre que les autres, mais cela coûte cher à payer. Vous avez besoin d'une auto-illusion de haute qualité pour faire face à vos échecs. Et je me suis dit: tout développeur peut tout faire. Toute la question est de savoir comment cela sera fait. Et mes exigences pour ce «comment» sont trop élevées. Ils ne conviennent pas aux "startups" à domicile et ne sont pas dignes de tâches commerciales inutiles. La pensée suivante: "Je ne suis pas prêt à abandonner mes standards de qualité." Même si vous avez besoin de faire une application qui tapette l'écran à l'écran, je la rendrai aussi haute qualité et réfléchie que possible.
En conséquence, j'ai organisé un culte commercial de fret local à la maison. Il a apporté des rituels, des processus, des ordres, mais pas du contenu. Je viens de jouer un développeur d'entreprise sans entreprise, comme un Papou qui a aveuglé une piste et des tours de paille, et maintenant il s'attend à ce que des oiseaux de fer s'y assoient, comme des gens étranges sur une île voisine.
J'ai écrit des tas incroyables de code formel qui ne me rapprochaient pas du résultat, mais au contraire, je me promenais encore et encore. Ma carrière est, bon sang, une histoire d'échecs et de déceptions. J'ai craché sur tout, mis fin à moi-même et regardé des émissions de télévision au travail, bu 16 tasses de café et fumé pendant une demi-journée.
Arrivé au fond, absolument par accident j'ai lu un article sur Habré à propos de F #, j'ai essayé, et tel: «Hm! Pas mal. " Mon employeur m'a volontiers payé un mois de formation (il ne le sait cependant pas).
F # n'était pas difficile à apprendre, il a le même temps d'exécution que C #, et j'ai appliqué l'approche fonctionnelle à la programmation tous les jours en TypeScript. J'ai donc réalisé que je pouvais transférer n'importe lequel de mes projets vers F #. Laissons mes compétences techniques en dehors des parenthèses, car les compétences sont une chose relative. Dans les équipes où je travaille maintenant, je suis cool, et dans l'équipe de développeurs F #, par exemple, je pourrais tout au plus prétendre au poste d'assistant nettoyeur.
Mais à mon niveau, j'étais déjà capable de résoudre des problèmes. Bien que je sache au fond - je ne déciderai de rien. Il suffit de tourner la tête et de continuer à jeter des connaissances à la poubelle. J'ai complètement perdu confiance dans le développement.
Et un jour, j'ai décidé de renoncer à toute cette baise. C'était l'hiver, froid et sombre. J'ai quitté le bureau dans la rue, je suis entré dans une brouette - ça ne démarre pas. Enfin, le moteur cliqueta. Je ne sais pas ce qui s'est passé avant - soit j'ai senti une odeur de brûlé, soit j'ai vu de la fumée. Puis une flamme a éclaté sous le capot. Encore une seconde, et moi, comme un psychopathe, je cours autour du parking et je crie à tout le monde de chasser mes voitures des miennes.
Après cinq minutes de panique et de chaos, il n'y avait plus qu'un vieux morceau de merde brûlé et un vidyushka de toutes sortes d'idiots qui ont ensuite gagné des milliers de vues dans des «entendus» locaux. Moins 30, je suis dans la veste d'automne d'un homme qui allait rentrer chez lui dans une voiture chaude. Farci jusqu'au bout, complètement moralement brisé. Pas d'argent de taxi, transports en commun pour les mobiles. Je suis rentré chez moi à pied, dix kilomètres. À la maison, vous devez aider votre femme et votre enfant, manger, les coucher, faire mille choses. Mais la nuit vient, les choses distrayantes se terminent, des excuses aussi, et je suis laissé seul avec des déceptions et de l'insomnie - je ne suis bon à rien, rien ne fonctionnera jamais.
En cette pire soirée de ma vie, pas encore vraiment en train de m'échauffer, j'ai décidé de me donner un dernier essai.

Je me suis assis et j'ai décidé d'écrire un petit biome numérique en F #, où les unités d'apprentissage automatique interagiront avec elles-mêmes, se développeront, et je tordrai les paramètres et voir en quoi elles transforment ce monde.
Et oui, peut-être alors j'ai conduit un peu d'esprit.
Habituellement, j'utilise un mélange d'une approche de conception descendante et ascendante. Je décris la solution en termes généraux en utilisant un pseudocode. Ensuite, je commence à implémenter le plus important des détails, qui, en tant que modules indépendants, je fais le contraire. Des détails au général.
Déjà sans pseudo-code, j'implémente deux ou trois grands modules, et je vois si cela fonctionnera. Habituellement, cela ne fonctionne pas, et je commence à utiliser des itérations, en répétant ce processus du début à la fin jusqu'au début. Mais le plus souvent, je lance simplement des itérations le cinquième ou le sixième.
Avec F #, j'ai appliqué la même approche. J'avais une vision du projet en termes généraux. Dans la tête, brique par brique, la réalisation se construit. Vous réfléchissez sur un cas après l'autre, et à un moment donné vous comprenez - tout, vous savez déjà comment le coder. Et puis vous vous asseyez pour coder, et vous comprenez que non. Les pensées ne sont pas transférées à YP, bien qu'il vous ait semblé que vous y pensiez. Je l'ai si constamment.
Mais cela s'est avéré différemment. J'ai créé un fichier txt dans VSCode et écrit un pseudo-code pour une fonction qui décrit le cycle de vie de mon application. Et je me suis rendu compte que mon pseudo-code est F # valide. Rien à changer, je viens d'écrire la fonction principale du projet. D'accord, changé l'extension du fichier, l'ajoutée à une solution propre. Voici la fonction du cycle de vie. Il prend l'état actuel du monde, la chose qui le traite (en fait le monde lui-même) et crache l'état mis à jour, la chose qui transforme l'état en un ensemble de paramètres pour l'IA et vice versa, et l'IA elle-même, qui reçoit ses paramètres et crache la décision.
Alors tout est simple. Ils ont pris l'état, l'ont transformé en paramètres de l'IA, ont alimenté les fonctions de l'IA, ont remis le résultat dans l'état, à son tour, il a été donné à la fonction de jeu, et le résultat a été donné à la même fonction de cycle de vie. Récursion divine, algorithme simple, beau code, tout GoF prêt à l'emploi. Il reste à implémenter toutes ces fonctions.
Mais le fait est que je n'ai plus besoin de penser à l'architecture. J'écris ce que les sharpe-javists appellent le terme cool Inversion of control container - une fonction qui prend une fonction de cycle de vie et la jette dans les paramètres de fonction de mes modules (II, Game). VScode le souligne en rouge, car il n'y a pas encore de modules ou de fonctions. Mais j'ai compris l'essentiel - dès que les soulignements rouges disparaissent et que le projet peut être construit, la solution est prête.
Je le prends juste et implémente ces modules un à la fois, en travaillant de la même manière. L'ensemble du projet est composé de cinq fichiers. Fichier AI - 500 lignes, nombreuses, mais idiomatiques. La beauté de l'approche est que j'ai pu écrire une fonction de cycle de vie de travail - le cœur de mon application - sans décrire autre chose.
L'architecture entière est composée de 10 lignes de code écrites en une minute. Aucune interface, usines abstraites, Iocs, toutes ces DefaultInterfaceNameClass et autres conneries que je dois faire en C # avant même de comprendre ce que je veux faire. Vous prenez et écrivez un code stupide qui résout simplement le problème, et vous l'obtenez encore mieux que votre entreprise ne souffre de ces objets tranchants java.
Je l'ai fait en dirigeant simplement mes pensées dans l'éditeur, comme si je pensais en F #. Aux endroits où j'écrirais un plan de travail en C # dans les commentaires du code, j'ai trouvé des fonctions de travail. Au lieu de décrire des dizaines, puis des centaines d'interfaces, un petit fichier avec un modèle de domaine de l'application. Construisez-le. Vous avez une solution de travail. Pour la nuit. Avec un bon code, qui par la suite n'a pas eu peur de se montrer sur le chien. Si simple.
Le matin, j'ai écrit au travail que j'étais malade et j'ai plongé tête baissée dans le projet pendant une semaine, jusqu'à ce que je réalise que mon idée s'est concrétisée depuis longtemps et que personne n'en avait besoin. Mais j'ai retrouvé ma foi, et c'était l'essentiel.

Je ne sais pas quel est le problème ici - est F # la technologie la plus impressionnante, ou elle me convient trop bien, ou elle a été créée spécifiquement pour de telles tâches - quelle est la différence? L'important est qu'à ce moment-là je me noyais et j'avais besoin d'une bouée de sauvetage. La vie m'a jeté F # et je suis sorti. Maintenant, ce n'est pas seulement une technologie sans âme pour moi - c'est une énorme portée émotionnelle.
Quand quelqu'un se moque de moi F #: «Technologie mort-née! Un jouet pour les nerds ... »- Je me souviens immédiatement de l'obscurité hivernale, d'une voiture en feu, d'une cigarette gelée à mes lèvres, d'un état déprimé et d'un F # qui m'a tiré de là. Autrement dit, ils semblaient chier mon meilleur ami. Ma réaction est évidente: je suis offensé et je suis en colère.
Cela semble étrange de l'extérieur, mais si vous viviez ce jour-là à la place de moi, vous réagiriez également. Je pense que c'est le cas de tous les adeptes de la technologie. Ils sont tombés amoureux de leurs yapis, car les circonstances dans lesquelles ils les ont rencontrés sont très aiguës pour eux personnellement. Et je viens et je crache dans leur âme. Eh bien, et qui est un idiot? Je suis idiot. J'espère que non.
Si quelque chose, à propos de F #
ici .