«La programmation est meilleure que le sexe»



À l'aube de ma carrière, j'ai entendu cette phrase du chef du département ACS de l'une des usines soviétiques lorsqu'il a proposé d'aller travailler dans son département.

Naturellement, alors je ne pensais pas, et maintenant je ne pense pas que la programmation puisse remplacer un bon sexe. Mais ce n'est qu'après des années qu'il pouvait pleinement apprécier la profondeur des émotions qu'il mettait dans son slogan. Y compris parce que je ressens parfois des sentiments tremblants lors de la création de l'architecture parfaite ou du beau code de programme. Et bien que le concept de beauté pour chaque personne puisse avoir le sien, mais le désir de perfection est le même pour tout le monde.

Cependant, les émotions sont une chose et l'homme ingénieur raisonnable, c'est différent. Et je m'intéresse depuis longtemps à la question, mais quelle est la vraie raison pour laquelle je veux rendre le code beau?

Toute personne intéressée à réfléchir à la justification de la recherche du beau dans le développement de logiciels et dans d'autres disciplines techniques, je demande sous cat.

Préface


L'élément qui a motivé la rédaction de cet article a été le récent document sur Habr " Arrêtez déjà de craindre subjectivement de belles décisions dans le code - vous n'êtes pas des robots ", dans lequel l'auteur tente de justifier son envie intuitive de créer un beau code.

Cependant, à en juger par les commentaires sur cet article, tous les lecteurs ne partagent pas les arguments de l'auteur au niveau de "l'ingénierie chuyka". Bien qu'il existe des consonnes avec un tel argument:
«Bien sûr, le code devrait être beau. Les arbres de Noël, les bâtons, TOUT dans la vie devrait être beau! Sinon, si quelque chose est moche, vous pouvez dire du béton armé "c'est un bug" (parfois vous devez vivre avec, mais c'est un bug!) "
Certes, d'autres suggèrent de résister à la voix intérieure et de ne pas retarder le début du traitement du «perfectionnisme pathologique, qui peut être une forme d'obsession, de compulsions ou de TOC».

Mais si nous rejetons les plaisanteries et les blagues, le phénomène de la soif de beauté a été remarqué depuis l'Antiquité et n'est étranger à aucune des disciplines techniques. Après tout, il est peu probable que quiconque soutienne que le résultat du travail d'un architecte ou d'un ingénieur dans la conception d'automobiles ne peut être à la fois une perfection technique et esthétique.





Mais pour moi, le développement de logiciels est plus proche, ce qui sera discuté plus tard.

Sacrements du processus de création de logiciels


Le développement logiciel peut être abordé sous différents angles. D'une part, il s'agit d'une discipline purement technique qui ne permet pas les libertés, bâtie sur une approche de développement rigoureuse et cohérente. Il s'agit d'un processus établi et débogué depuis longtemps, qui comprend la collecte des exigences, l'élaboration de spécifications techniques, la planification, le suivi de la mise en œuvre des plans, l'exécution des résultats obtenus, etc.

Une autre option pour développer un produit logiciel est Agile téméraire, qui crache sur les conventions et exalte les désirs des clients. Il est prêt à refaire au moins à chaque itération l'architecture du produit logiciel pour tenter d'obtenir le résultat souhaité. Cette méthode ressemble plus à l'art de parvenir à un équilibre entre obtenir un logiciel fonctionnel et l'épuisement complet de la confiance et des ressources du client.

Et ce n'est qu'avec le temps que vous commencez à comprendre que les vérités communes sont beaucoup plus souples. Et dans une cascade claire, il y a un peu de flexibilité, et dans Agile, il y a des plans et des délais. Par conséquent, la vérité, comme toujours, se situe quelque part entre les deux.

Mais tout cela ne s'applique qu'à la partie externe du processus de travail. Et le plus triste, c'est que la création d'un beau code n'en dépend en aucune façon.

De plus, le même code peut être reconnu comme beau et laid à la fois! Et cela signifie que les concepts de beauté sont purement individuels (qui en douteraient). Qu'est-ce que le beau code et comment l'écrire? , Les résultats du 20ème Concours International de code inconnu sur le C .

J'ai donc dû creuser plus profondément, à la base de ce processus. Dans le sens de l'identité personnelle du développeur, qui peut agir en tant que programmeur, architecte, testeur, analyste, ou même être tous à la fois en même temps ou à différents moments.

Alors, qu'est-ce qui motive ces rouages, dans les petites entreprises et les grandes sociétés, dans les machines sans âme de l'industrie du logiciel?

Bien sûr, la recherche d'une force motrice ne peut se passer de psychologie.

Quelle est la force motrice?


Non, je ne vais pas citer d'articles scientifiques sur la psychologie ou la motivation personnelle. Maintenant, n'importe qui, s'il le souhaite, trouvera de nombreux articles sur ces sujets.

Je m'intéressais à la classification des raisons motivantes qui motivent les développeurs à créer du code programme. Puisqu'il y avait un espoir qu'il soit possible de trouver la raison de l'envie des développeurs, d'évaluer parfois la source d'un point de vue esthétique.

Malheureusement, je n'ai pas rencontré une telle classification (peut-être que je ne l'ai pas trouvée ou n'y ai pas cherché), par conséquent, à la suite de l'analyse de ma propre expérience et de la communication avec mes collègues, j'ai décidé d'identifier indépendamment les types de motivation suivants pour les développeurs avec des noms conventionnels: matériel , social et interne .

Motivation matérielle


Ce type de motivation est basé sur des incitations économiques. Le développeur ne se soucie pas de quoi et comment écrire. Il essaiera d'adhérer au style de codage approuvé dans le projet et il ne se soucie pas de la beauté du code. En conséquence, l'évaluation des résultats du travail (les leurs et ceux du travail des collègues) se fera d'un point de vue formel, où il n'y a pas de place pour l'esthétique.

Motivation sociale


Dans ce cas, le critère principal pour évaluer les résultats du travail est l'opinion de l'équipe, qui peut être des collègues de travail, des amis à l'université, etc. De plus, l'évaluation ne se fait pas uniquement par des critères formels de conformité avec le style de codage. Il y a déjà une composante émotionnelle, un critère abstrait de beauté.

Et il devient déjà important pour le développeur que le résultat de son travail soit d’abord accepté et approuvé par l’équipe, et que des raisons matérielles puissent disparaître. Dans les cas les plus avancés, le développeur est prêt à écrire du code même «pour la nourriture», afin de satisfaire un sentiment d'estime de soi au sein du groupe cible ou dans son environnement social.

Motivation intrinsèque


Une telle motivation est très similaire au social, seul le facteur d'évaluation n'est pas l'équipe, mais le développeur lui-même. Avec une motivation interne, les incitations matérielles sont complètement absentes, et le résultat du travail peut ne jamais être publié du tout, car il a déjà apporté (ou continue d'apporter) satisfaction à son auteur par le seul fait même de son existence et ne nécessite aucune appréciation confirmative de l'extérieur.

Bien sûr, une telle séparation des motifs pour les programmeurs est conditionnelle et peut passer d'un type à l'autre ou même être une combinaison de plusieurs facteurs de motivation.

Mais si vous regardez le résultat du travail des programmeurs de ce point de vue, alors dans un tel système de classification, vous pouvez déjà trouver de la logique et essayer de trouver la beauté dans presque n'importe quel code source (programme du concours IOCCC ):

typedef unsigned char t;t*F="%c",l[]="|\\/=_ \n](.\0(),*(.(=(}*.)[[*.",N='\n',*
r;typedef(*H)();extern H Ar;Q(a){return(a|-a)>>31;}H S(c,a){return(H)(a&~c|(int
)Ar&c);}extern t*ist;V(t*u){*u^=*u&2^(*u>>7)*185;}Z(t*u,t n){*u-=n;}e(t c,H h){
R(h,Q(*                                                                 r^c));}
I(){r=l                                                                 +7-4*Q(
getchar                                                                 ()^*l);
}R(H h,                int                                              c){Ar=S
(c,h);-                main()                                           ;}P(){r
++;}z()                {                                                O(&N);}
O(t*c){                    printf(                                      F,+*c);
}T(){r=                        "This is not a function\n"               ;}w(U){
U=Z(r,8                    );                                           r-=~Q(*
r/8-4);	                   return 0;                                    }M(){r=
ist-68;                }                                                h(){t G
=r[1]-r                                                                 [2]^*r;
G^=30;V                                                                 (&G);e(
0,(O(&G                                                                 ),P(P(*
r++)),z));}g(){M();R(h,0);}f(){P(O(r));e('f',g);}p(){P();e('a',f);}d(){P(O(r));
e('n',p);}c(u){u=r[-2];T(Ar=d);R(f,Q(u^'"'));}n(){e(w(O(l+*r%8)),c);}a(){I();R(
n,0);}main(){S(Q(Ar),a)();}H              Ar;t*ist="Rene Magritte"-(1898-1967);

Quand une blague vous fait penser


Initialement, cet article a été écrit comme une blague, et son nom parle de lui-même, donc l'image a été choisie en conséquence.

Imaginez ma surprise quand je me suis rendu compte que la classification formulée des motifs pour les programmeurs désireux de beauté me rappelle beaucoup quelque chose. Ces motifs sont très clairement projetés sur la célèbre pyramide des besoins de Maslow.



La motivation matérielle ferme le besoin de fondation de la pyramide. Ce sont des besoins physiologiques et de sécurité. La motivation sociale se situe au milieu de la pyramide et conduit à la satisfaction des besoins d'appartenance, d'amour et de reconnaissance. Et enfin, la motivation intrinsèque projeté très clairement au sommet de la pyramide et ferme le besoin de connaissance, d'esthétique et de réalisation de soi.

N'est-ce pas une blague?


À la suite d'une tentative non sérieuse d'étudier les envies de beauté chez les programmeurs, des conclusions tout à fait raisonnables ont été obtenues qui, si elles sont souhaitées, peuvent être utilisées dans l'industrie du développement de logiciels.

En effet, dans le cas de l'émergence d'une véritable méthodologie pour évaluer la beauté du code du point de vue de la motivation, il ne sera pas difficile de l'ajouter à divers utilitaires pour évaluer le style de codage, tels que pylint, cpplint et autres peluches. Et après cela, il sera possible d'évaluer la motivation de développeurs spécifiques sans effectuer de tests psychologiques et sans remplir de questionnaires ennuyeux. Il suffira de passer leur code à travers l'analyseur.

J'ai peut-être même laissé le génie sortir de la bouteille, car s'il devient possible de mesurer la motivation par le code créé, alors la prochaine étape naturelle sera la transition vers sa gestion. En effet, cette méthode d'évaluation de la motivation est très facilement automatisée, et là où il y a une opportunité de mesure opérationnelle, il y a aussi l'opportunité d'une gestion opérationnelle du paramètre mesuré.

En d'autres termes, la disponibilité d'informations opérationnelles sur l'état mental des membres de l'équipe pour les chefs de projet les aidera à évaluer les résultats des tentatives de déplacement de la motivation vers des motifs sociaux ou internes, naturellement, pour économiser sur les incitations économiques. ;-)

MISE À JOUR 1: Je vais laisser un lien vers le croquis dejanvarevsur le sujet de l'article: Sergey et «la programmation vaut mieux que le sexe»

MISE À JOUR 2:
Selon les premiers résultats du vote, une tendance est apparue à voter principalement pour la motivation intrinsèque (145 - 60,3%). Mais avant de choisir la troisième option lors du vote, veuillez considérer ceci: Qui définit les critères de qualité (ou d'esthétique) dans votre projet?

Si vous êtes un chef d'équipe, un architecte ou une autre personne qui accepte ou influence de manière significative les règles de détermination d'une telle évaluation, alors votre choix est le bon.

Mais si votre contribution à la formation des critères de qualité du code est insignifiante (par exemple, ces critères ont été déterminés avant même que vous rejoigniez le projet), mais que tout vous convient parfaitement, alors vous êtes probablement en harmonie avec la motivation interne et sociale, mais lors de l'entretien, le bon choix voter pour la deuxième option, c'est-à-dire motivation sociale.

Pour vérifier cela sans équivoque, imaginez une situation dans laquelle vous avez une mauvaise humeur "noire" et le résultat du travail (le code du programme écrit à ce moment-là) lui correspond. Votre engagement sera-t-il approuvé? Si oui, même si vous ne respectez pas pleinement les critères de qualité acceptés, votre motivation est vraiment interne. Mais si votre code est rejeté, votre motivation est toujours sociale, bien qu'elle soit généralement en harmonie avec l'Interne.

All Articles