J'ai perdu confiance dans l'industrie, brûlé, mais le culte de l'outil m'a sauvé



Je me rends souvent aux technologies que je trouve inadéquates, et en réponse je reçois (avec des arguments) de la colère et de la douleur. Parfois physique.

Les développeurs prennent la critique de leurs technologies préférées très personnellement pour une raison quelconque. Ce «culte de l'outil» est un phénomène si étrange que je ne peux pas l'expliquer logiquement. Certains disent que tout le monde y est enclin, car les processus de réflexion d'un codeur s'entrelacent très profondément avec son langage de programmation. Certains disent que c'est un sophisme junior - vous écrivez quelque chose pour la première fois, cela fonctionne, et vous commencez à traiter votre langue comme quelque chose de divin.

Quoi que ce soit, je ne l'ai jamais compris.

J'ai toujours considéré les cultistes comme des imbéciles. Mais j'essaie toujours de comprendre pourquoi les imbéciles sont devenus eux, pourquoi j'ai évité ce destin. Je commence à penser et bam! - il s'est avéré que je suis aussi un imbécile. Je suis un cultiste qui adore F #. Et, bien sûr, il y a une histoire derrière.



J'ai commencé en tant que développeur junior C #. Xamarin brut, développement Android, tout le tralala. Mes premiers pas au travail ont été remplis de douleur. J'ai dû écrire une application Android seule basée sur des captures d'écran et des gifs de la version iOS. Il n'a été compilé qu'une fois sur deux, le buga était partout, et le seul commentaire que j'ai reçu était - "pourquoi n'est-ce pas comme dans la capture d'écran?". C'était un cauchemar et je suis vite parti.

J'ai ensuite passé une demi-année à apprendre à coder à la maison, puis j'ai obtenu un emploi dans une grande outstaff. Là, c'était beaucoup plus organisé - équipe, mentors, examens, modèles, révision de code, linters stricts, normes élevées de qualité, de lisibilité et de performance du code. En un mot, tout était mûr. Et je pensais que cela devrait fonctionner. Mais il s'est avéré que c'était un cauchemar encore plus grand.

Pendant plus d'un an, toute notre équipe a réalisé un module pour un outil qui fonctionnait avec des outils qui étaient utilisés pour fabriquer d'autres outils. Probablement les mêmes que ceux que nous avons utilisés pour fabriquer les modules. Chaque jour, nous devions appeler des Indiens et des Américains et faire rapport sur Dieu sait quoi.

À un moment donné, j'ai réalisé que je faisais de moins en moins, mais rien n'a changé. J'ai menti entre mes dents dans un anglais cassé: «Toute la semaine dernière, je cherche un bug. Toujours pas de succès. Continuera. "

«Ok Phil, ça sonne bien» - ont répondu mes partenaires transatlantiques.

À un moment donné, désespéré et honteux, je suis allé à la direction et j'ai demandé à me licencier, mais à la place, ils m'ont donné une augmentation pour une raison quelconque. J'ai déjà raconté cette histoire auparavant. Je n'étais ni heureux ni triste - c'était comme une sorte de blague surréaliste, comme si la logique de ce monde s'effondrait.

Curieusement, par ennui et par ambition, j'ai décidé de développer les choses à la maison et de tout faire «correctement». J'ai eu de nombreuses idées sur la façon d'utiliser des projets logiciels pour améliorer le monde et mon portefeuille. J'ai tout fait par le livre: un document de conception, l'architecture, la configuration système requise, un projet VSTS. Tout était organisé et mature, comme dans les entreprises.

Ça n'allait nulle part.

Conclusion naturelle - l'idée était de la merde. Ancien code dans le bac, nouvelle idée. Même résultat. Recommencez. Cela a continué plusieurs fois. Je dis à mes collègues et ils sont confus. Qu'est-ce que je fais mal? Je le fais exactement de la même manière que ceux qui se sont déjà enrichis.

Les gens avec mon (haut) niveau d'estime de soi sont souvent mieux lotis que les autres, mais doivent parfois payer pour cela. Vous devez vous mentir pour faire face à l'échec. Et je me suis dit: tout développeur est capable de tout. Tout dépend de la façon dont cela est fait, et mes exigences concernant le «comment» sont trop élevées. Ils ne sont pas adaptés à un démarrage à domicile et ne sont pas dignes de tâches commerciales inutiles. Pensée suivante: "Je ne suis pas prêt à abandonner mes standards de qualité." Même si je dois créer une application qui pète lorsque vous appuyez sur l'écran, je la rendrai aussi belle et réfléchie que possible.

J'ai donc créé chez moi un culte du fret commercial local. Apporté tout - rituels, processus, normes - mais pas la chair réelle de la chose. J'ai joué un développeur d'entreprise sans entreprise, comme un homme des cavernes qui a fait une piste et une tour de guet en paille et s'attendait à ce que des oiseaux d'acier y atterrissent.

J'ai écrit des tas sur des tas de code formel et strict qui ne m'a pas rapproché du résultat final, mais exactement le contraire. Si vous y réfléchissez, ma carrière est une histoire d'échec et de déception. Je l'ai abandonné complètement et j'ai juste regardé des émissions de télévision au travail tout en buvant 16 tasses de café par jour.

Au fond, j'ai remarqué un article Habr sur F #, je l'ai essayé et j'ai pensé "Hm, pas mal!". Mon employeur a payé avec plaisir un mois d'études pour moi (bien qu'il ne le sache pas).

F # n'était pas difficile à apprendre, car il avait le même temps d'exécution que C # et j'utilisais déjà quotidiennement l'approche fonctionnelle de la programmation en TypeScript. J'ai réalisé que je peux transférer n'importe lequel de mes projets vers F #. Laissons mes compétences techniques en dehors de l'équation pendant un moment, car tout est relatif. Dans les équipes dans lesquelles je travaille, je suis génial, mais dans une équipe de développeurs F #, par exemple, je ne pouvais être rien de plus qu'un concierge.

Mais je pouvais résoudre des problèmes à un niveau basique, même si au fond je savais: je ne pouvais vraiment rien résoudre. Je vais continuer à jeter des connaissances à la poubelle. J'ai complètement perdu ma foi en la programmation.

Un jour, j'ai décidé que c'était assez. J'allais arrêter. C'était une journée d'hiver froide et sombre. Je suis sortie du bureau, je suis montée dans ma voiture - et ça ne démarre pas. Après un certain temps, le moteur a finalement pris vie. Je ne sais pas si j'ai remarqué la fumée de l'odeur de plastique brûlant plus tôt, mais un incendie a éclaté sous le capot. Quelques secondes plus tard, je courais autour du parking en disant à tout le monde de retirer leurs voitures des miennes.

Cinq minutes de panique et de chaos plus tard, il ne restait qu'une vieille carcasse de voiture en feu et un téléphone avec des vidéos YouTube stupides. Il faisait -30 ° C et j'étais dans un manteau léger d'un homme qui avait l'intention de rentrer à la maison dans une voiture chaude. Complètement dépensé et moralement détruit. Pas d'argent pour un taxi et beaucoup trop d'attention pour moi dans les transports publics. Je suis rentré à pied, environ 10 km. À la maison, j'avais besoin d'aider ma femme avec l'enfant, de manger, de les coucher, de faire mille petites choses. Mais finalement, il n'y a plus rien pour me distraire et je suis resté face à face avec mon insomnie et une prise de conscience - je ne suis digne de rien, je n'y arriverai jamais.

Dans cette pire soirée de ma vie, encore froide d'une marche glaciale à la maison, je me suis donné une dernière chance.



Je me suis assis et j'ai écrit un petit biome numérique sur F #, où les unités d'apprentissage automatique interagissent et se développent, pendant que je joue avec les paramètres et regarde ce qui se passe.

Et oui, ce soir-là, je suis probablement devenu un peu fou.

Habituellement, j'utilise un mélange du modèle de programmation ascendant et descendant. Je présente une solution approximative avec un pseudocode, puis commence à écrire les détails les plus importants sous forme de modules séparés. Du petit au grand.

Passant du pseudocode au vrai code, je complète un ou deux gros modules et vérifie si quelque chose fonctionne. Habituellement, ce n'est pas le cas, donc je commence à répéter, en répétant ce processus du début à la fin jusqu'à ce qu'il fonctionne. Mais le plus souvent, j'abandonne juste après la 5e ou la 6e itération.

J'ai essayé la même approche avec F #. J'avais une vision générale du projet, puis la solution était de construire, brique par brique, dans ma tête. Vous arrivez avec un cas après l'autre, puis à un moment donné, vous vous rendez compte que vous savez comment le faire fonctionner. Et puis vous commencez à coder et réalisez que non, vous ne le faites pas. Les pensées ne se traduisent pas en langages de programmation, même si vous y pensez souvent. Je faisais ça tout le temps.

Cette fois, cependant, c'était différent. J'ai créé un fichier .txt dans VSCode et écrit le pseudocode pour une fonction qui décrit le cycle de vie de mon application. Et j'ai réalisé que mon pseudocode est valide en F #. Pas besoin de traduire quoi que ce soit, je viens d'écrire la fonction principale de mon projet. D'accord, j'ai changé l'extension de fichier, je l'ai ajoutée à la solution propre. Il y avait ma fonction de cycle de vie. Il accepte l'état mondial actuel, une chose qui le traite (le monde lui-même) et crache l'état mis à jour, une chose qui le traduit en un ensemble de paramètres d'IA et inversement, ainsi que l'IA elle-même qui accepte des paramètres et crache la solution. .

Alors c'était simple. Vous prenez l'état, le transformez en paramètres d'IA, les alimentez à l'IA, remettez le résultat dans l'état mondial, donnez-le au jeu, et le résultat retourne dans la fonction de cycle de vie. Une belle récursivité, un algorithme simple, du code sublime, tout le GoF prêt à l'emploi. Il ne restait plus qu'à le faire fonctionner.

Mais le fait est que je n'ai plus à penser à l'architecture. J'écris ce que les développeurs Java et Sharp appellent «inversion du conteneur de contrôle» - une fonction qui prend la fonction de cycle de vie et passe par les fonctions de mes modules (II, Game). VSCode le surligne en rouge car il n'a ni fonctions ni modules, mais j'ai ce dont j'ai besoin - dès que les surbrillances rouges ont disparu, je peux construire le projet et c'est fait.

Je prends les modules et les fais, un par un, travailler de la même façon. L'ensemble du projet est de 5 fichiers. Le fichier AI est de 500 lignes - beaucoup, mais surtout s'il fonctionne vraiment bien. La beauté de cette approche est que je pouvais écrire une fonction de cycle de vie de travail - le cœur de mon application - sans décrire quoi que ce soit d'autre.

L'architecture entière est composée de 10 lignes de code, écrites en quelques minutes. Aucune interface, structure abstraite, loc, toutes ces DefaultInterfaceNameClasses et autres conneries que je dois faire en C # avant même de comprendre ce que je veux créer. Vous écrivez un noyau stupide qui résout simplement le problème, et c'est plus beau que vos souffrances au niveau de l'entreprise en Java ou Sharp.

Et je l'ai fait tout simplement en tapant mes pensées dans l'éditeur, comme je le pensais en F #. Au lieu de décrire un plan dans les commentaires C #, j'ai écrit des fonctions de travail. Au lieu de décrire des dizaines voire des centaines d'interfaces, il y a un petit fichier avec le modèle de domaine de l'application. Cliquez sur "build". Reçu une solution de travail. En une nuit. Avec un code de qualité, je peux en toute confiance donner à revoir. Aussi simple que ça.



Je ne sais pas quel est le problème - si F # est une technologie monumentale géniale, ou si elle me convient parfaitement, ou si elle est créée spécifiquement pour ces tâches - quelle est la différence? Ce qui est important, c'est qu'à ce moment-là, je coulais et j'avais besoin d'un canot de sauvetage. La vie m'a jeté F # et je m'en suis sorti. Maintenant, ce n'est pas seulement une autre technologie sans âme pour moi - c'est une énorme affaire émotionnelle.

Maintenant, quand j'entends quelqu'un gronder F # - «Une technologie mort-née! Un jouet de geek ... »- Je me souviens toujours de la froide nuit d'hiver, de la voiture en feu, de la cigarette gelée dans ma bouche, de la dépression et du F # qui m'ont tiré de là. C'est comme si quelqu'un avait jeté de la merde sur mon meilleur ami.

Cela peut sembler étrange à un étranger, mais si vous aviez vécu ce jour-là à ma place, vous auriez réagi de la même manière. Je pense que c'est courant dans tout adepte de la technologie. Ils sont tombés amoureux de leurs langues, car ils ont un attachement émotionnel aux circonstances qui les ont fait découvrir. Et puis je viens et crache directement dans leur âme. Qui est l'idiot maintenant? Je suis Je ne recommencerai pas, j'espère.

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


All Articles