Le code sans visage tuera la programmation, et nous n'y ferons rien.


Lors de la discussion suivante, un ami a exprimé une pensée qui m'a beaucoup frappé. «Dans les YAP les plus populaires, il existe de nombreuses façons différentes de faire la même chose. Cela entraîne des problèmes. Mais dans Go, tout n'est pas le cas. La philosophie du langage est que sur Go, différents développeurs résolvent les mêmes problèmes de la même manière. Par conséquent, leur code est facile à lire, prévisible et fiable. Et si les grandes entreprises choisissent Go. " Il s'agit d'un argument assez puissant qui doit être soigneusement examiné avant de réfuter.


Par conséquent, je l'ai double-étalé, m'accrochant au manque de génériques, et emporté une idée intelligente, vécu avec lui pendant plusieurs jours, et à un moment donné formé sa sombre vision.


Mon travail consiste à choisir la solution la plus appropriée parmi un nombre infini de combinaisons. C'est pour ça que je suis payé, et c'est pour ça que j'aime mon travail, et donc ma vie. Mais ils me disent - une super solution n'est pas nécessaire. Vous avez besoin de l'habituel. Parce que le produit fini est plus important que sa mise en œuvre.


S'ils me jettent dans la rue et prennent un imbécile à ma place, il peut facilement travailler avec mon code. L'entreprise sera donc beaucoup plus à l'aise. Les entreprises ne veulent pas dépendre du hasard. L'idée que la mauvaise humeur du développeur principal va tirer un profit de l'entreprise ne plaît pas aux cadres supérieurs. Ils sont devenus des cadres supérieurs parce qu'ils savent comment éviter les situations où leur entreprise sacrée perd de l'argent. Et maintenant, nous vivons à une époque où «bien fait» et «rentable» sont deux choses différentes.


Et je comprends comment nous en sommes arrivés là. Je vais vous expliquer maintenant, faites attention à vos doigts:



Comme la plupart des ingénieurs, je crois que je fais de grandes choses. Ce que j'invente, automatise, fais avec mon travail et mon cerveau, la vie de toute l'humanité est meilleure, tandis que tous les obscurantistes ne font que mordre la langue. Mais ensuite, je tire le nez de mon éditeur de code et je suis horrifié de voir à quel point je me trompe cruellement.


Qu'est-ce que je fais?


Je pense donc à l'architecture d'un système très chargé, mais dans 95% des cas, ils l'utiliseront pour trier rapidement les selfies avec des motifs et des photos d'un chien préféré sur un téléphone. Je développe donc un client VPN, et que vont-ils en faire? Regarder toutes sortes de films pornos et de stupides pirates?


Mes cerveaux sont servis par une petite liste de souhaits minute par minute afin que les gens m'apportent de l'argent, afin que je satisfasse également ma liste de souhaits.


L'informatique fait de bonnes choses, mais leur pourcentage est négligeable. La plupart répondent à des besoins farfelus qui n'existaient tout simplement pas auparavant, car l'informatique n'existait pas. Autrement dit, les ingénieurs ne font pas de grandes choses, les ingénieurs maintiennent simplement l'infrastructure pour transférer la pâte entre les personnes.


Dans de telles circonstances, l'écriture d'un bon code n'est plus nécessaire. Cela n'est nécessaire que pour que je m'amuse davantage et je ne m'épuiserai plus. Mais tôt ou tard, le cadre supérieur vient et dit: «C'est tout, clouez-vous et balle. Il est temps de couper le butin. "


Au lieu du «bien universel» abstrait, l'informatique a appris à se livrer à une modeste liste de souhaits et, grâce à cela, elle est devenue une industrie gigantesque, où des centaines de millions de personnes travaillent. La programmation était une affaire d'élite, maintenant n'importe quel meunier restera assis pendant un an environ et ira écrire du code.


Et quand il entrera dans l'industrie, il n'y aura pas de temps pour creuser profondément - le produit est nécessaire ce soir, sinon nous perdrons de l'argent. Creuser la technologie profonde et apprendre se transforme en passe-temps, nécessaire uniquement pour ne pas devenir fou de la réalisation de votre propre inutilité.


Dans un système où vous devez lancer une nouvelle fonctionnalité sur le marché une fois par semaine, vous avez besoin d'approches simples et d'outils primitifs. Quand un développeur cool propose une nouvelle technologie, il essaie de la faire en sorte qu'elle soit demandée par la majorité, car la demande de la majorité est la valeur principale du monde moderne. Voilà pourquoi il y a de telles philosophies et telles ici Go.


Et je pense - je n'ai pas besoin de tout ça. Tout cela provoque un rejet.


Si vous regardez attentivement, mon VSCode est rempli de symptômes dangereux. Mon tslint ne me permet pas d'ajouter un espace supplémentaire. Mon code ne se construit pas si j'ai nommé une variable avec la mauvaise lettre. Mon compilateur ne fonctionnera pas car je n'ai pas ajouté de commentaires à la méthode publique. Tout est simple ici - écrivez, les gars, le même code. Code sans visage. Ce n'est pas un roman pour toi, quel est le style de l'auteur?!


Je suis généralement d'accord pour dire que de telles conventions sont une bonne chose, mais seulement tant qu'elles se rapportent à l'apparence du code. Le moment où l'on vous enlève l'opportunité de choisir comment ce code fonctionnera est mon pire cauchemar. Imaginez un cas: vous avez écrit un module complexe sensible aux performances, et ils vous disent: «Écoutez, c'est trop compliqué. Rendons les choses plus simples, il n’est pas important que cela fonctionne pire. » Cela vous semble-t-il absurde? Et il en sera ainsi. Sérieusement. Oui, c'est déjà le cas. Ils n'ont pas ajouté de génériques à Go car les génériques sont complexes.


Go est un effet métier, pas une solution d'ingénierie. Il se contredit. Ici, il veut de la fiabilité, ce qui laisse la complexité. Mais la complexité de l'industrie est venue de la fiabilité. Les génériques existent juste pour des raisons de fiabilité, afin d'anticiper les bugs potentiels en temps de développement. Et oui, ils sont assez compliqués.


En programmation, je veux être créatif. Je veux avoir un grand nombre d'options lors de la conception d'un système. Nous simulons la réalité dans le monde des machines, mais je sais avec certitude: la réalité n'est pas une chose simple, il n'y a pas de bonnes et de mauvaises réponses. Et j'ai le sentiment que les technologies comme Go recherchent des réponses simples. Comme, prenons une bonne décision pour chaque tâche. Mais c'est un canular! Cela peut fonctionner, mais il y a toujours une meilleure solution. Et sous la pression du fait que nous n'avons pas de budget pour des solutions de haute qualité, nous tuons les logiciels nous-mêmes, puis nous sommes déçus que tout fonctionne mal.



La philosophie du code sans visage veut faire de moi une machine à copier-coller le passe-partout. Et en y réfléchissant, j'arrive à une contradiction encore plus terrible.


J'ai toujours cru que le message de base du développement était: "Tout ce qui peut être automatisé doit l'être." Mais l'ironie est que mon message est également fatal.


Je ne suis pas prêt à faire quelque chose qu'une machine que je peux construire pourrait faire. C'est irrationnel, et on m'a appris à être rationnel. Mais comme je dois tout automatiser, il s'avère que je dois automatiser et automatiser - c'est-à-dire le développement. Et il s'avère que nous devons être satisfaits des langues qui nous y amènent progressivement. Autrement dit, ma profession, comme la plupart des autres, dans un monde idéal ne devrait pas exister.


Les progrès ne peuvent pas être arrêtés. Mais il peut aller de différentes manières, dont je suis sûr à coup sûr. Si la programmation se tourne maintenant vers la piste Go et les pratiques sans visage, alors nous arriverons à l'automatisation très courbe et non optimisée que vous pouvez imaginer.


Ma solution au problème est utopique et ne résistera pas aux critiques. Je comprends qu'il est trop tard pour l'offrir, mais quand même.


Je séparerais l'entreprise et l'informatique afin que seules les organisations à but non lucratif puissent faire de la programmation. Et que leur priorité devrait être une profonde amélioration de la technologie, à l'abri du flux quotidien. Que l'exigence "nous libérons ce qui est, sinon le profit disparaîtra" était moralement inacceptable. Je ferais de mon mieux pour maintenir le seuil d'entrée dans la programmation aussi haut que possible afin que les outils ne s'adaptent pas au développeur moyen lorsqu'un ingénieur expérimenté et diplômé d'hier des cours sont obligés d'écrire le même code.


Oui, cela ralentira les progrès pendant des siècles et privera nos vies de tous les jolis petits pains sur lesquels nous collons quotidiennement. Mais au moins, cela ramènera l'idée de progrès à celle en laquelle nous croyons aux moments de nos pulsions idéalistes les plus fortes.

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


All Articles