“Programação é melhor que sexo”



No início da minha carreira, ouvi essa frase do chefe do departamento da ACS de uma das fábricas soviéticas quando ele se ofereceu para trabalhar em seu departamento.

Naturalmente, não pensei e agora não acho que a programação possa substituir o bom sexo. Mas somente depois de anos, ele foi capaz de apreciar plenamente a profundidade das emoções que colocou em sua frase de efeito. Inclusive porque às vezes sinto sentimentos trêmulos ao criar a arquitetura perfeita ou o belo código do programa. E embora o conceito de beleza para cada pessoa possa ter o seu, mas o desejo pela perfeição é o mesmo para todos.

No entanto, as emoções são uma coisa e o homem engenheiro é razoável, é diferente. E há muito que me interesso pela pergunta, mas qual é a verdadeira razão pela qual desejo tornar o código bonito?

Qualquer pessoa interessada em pensar na lógica de encontrar o belo no desenvolvimento de software e em outras disciplinas técnicas, pergunto em cat.

Prefácio


O ímpeto para escrever este artigo foi o material recente sobre Habr " Pare de já temer decisões subjetivamente bonitas no código - você não é um robô " , em que o autor tenta comprovar seu desejo intuitivo de criar um código bonito.

No entanto, a julgar pelos comentários nesse artigo, nem todos os leitores compartilham os argumentos do autor no nível de "engenharia chuyka". Embora haja consoantes com esse argumento:
“Claro, o código deve ser bonito. Árvores de Natal, paus, TUDO na vida deve ser lindo! Caso contrário, se algo é feio, você pode dizer concreto reforçado "isto é um bug" (às vezes você tem que viver com ele, mas é um bug!) "
É verdade que outros sugerem resistir à voz interior e não atrasar o início do tratamento para o "perfeccionismo patológico, que pode ser uma forma de obsessão, compulsão ou TOC".

Mas se descartamos as piadas e brincadeiras, então o fenômeno do desejo pela beleza é notado desde os tempos antigos e não é estranho a nenhuma das disciplinas técnicas. Afinal, é improvável que alguém argumente que o resultado do trabalho de um arquiteto ou engenheiro no design de carros não possa ser tanto perfeição técnica quanto estética.





Mas para mim, o desenvolvimento de software está mais próximo, o que será discutido mais adiante.

Sacramentos do processo de criação de software


O desenvolvimento de software pode ser abordado de diferentes ângulos. Por um lado, essa é uma disciplina puramente técnica que não permite liberdades, construída sobre uma abordagem difícil e consistente ao desenvolvimento. É um processo estabelecido e depurado há muito tempo, que inclui a coleta de requisitos, o desenvolvimento de especificações técnicas, o planejamento, o monitoramento da implementação dos planos, a execução dos resultados obtidos, etc.

Outra opção para o desenvolvimento de um produto de software é o Ágil imprudente, que cuspe em convenções e exalta os desejos dos clientes. Ele está pronto para refazer pelo menos a cada iteração a arquitetura do produto de software, na tentativa de alcançar o resultado desejado. Esse método é mais parecido com a arte de alcançar um equilíbrio entre obter software de trabalho e o esgotamento completo da confiança e dos recursos do cliente.

E somente com o tempo você começa a entender que verdades comuns são muito mais flexíveis. E em uma cachoeira clara, há um pouco de flexibilidade, e no Agile há planos e prazos. Portanto, a verdade, como sempre, está em algum lugar no meio.

Mas tudo isso se aplica apenas ao lado externo do processo de trabalho. E o mais triste é que a criação de um código bonito não depende disso.

Além disso, o mesmo código pode ser reconhecido como bonito e feio ao mesmo tempo! E isso significa que os conceitos de beleza são puramente individuais (quem duvidaria disso). O que é um código bonito e como escrevê-lo? , Os resultados do 20º Concurso Internacional de código desconhecida no C .

Portanto, eu tive que cavar mais fundo, até a base desse processo. Na direção da identidade pessoal do desenvolvedor, que pode atuar como programador, arquiteto, testador, analista ou mesmo ser todos eles ao mesmo tempo ao mesmo tempo ou em diferentes momentos.

Então, o que impulsiona essas engrenagens, em pequenas empresas e grandes corporações, nas máquinas sem alma da indústria de software?

Obviamente, a busca por uma força motriz não pode prescindir da psicologia.

Qual é a força motriz?


Não, não vou citar artigos científicos sobre psicologia ou motivação pessoal. Agora qualquer pessoa, se desejar, encontrará muitos artigos sobre esses tópicos.

Eu estava interessado na classificação de razões motivadoras que motivam os desenvolvedores a criar o código do programa. Como havia uma esperança de que nisso seja possível encontrar o motivo do desejo dos desenvolvedores, às vezes avalie a fonte de um ponto de vista estético.

Infelizmente, não encontrei essa classificação (talvez não a tenha encontrado ou não estava lá). Portanto, como resultado da análise de minha própria experiência e da comunicação com meus colegas, decidi identificar independentemente os seguintes tipos de motivação para desenvolvedores com nomes convencionais: material , social e interno .

Motivação material


Esse tipo de motivação é baseado em incentivos econômicos. O desenvolvedor não se importa com o que e como escrever. Ele tentará aderir ao estilo de codificação aprovado no projeto e não se importa com a beleza do código. Nesse sentido, a avaliação dos resultados do trabalho (tanto os próprios quanto os resultados dos trabalhos dos colegas) será realizada de um ponto de vista formalizado, onde não há lugar para a estética.

Motivação social


Nesse caso, o principal critério para avaliar os resultados do trabalho é a opinião da equipe, que pode ser colegas de trabalho, amigos da universidade, etc. Além disso, a avaliação é feita não apenas por critérios formais de conformidade com o estilo de codificação. Já existe um componente emocional, um critério abstrato de beleza.

E já está se tornando importante para o desenvolvedor que o resultado de seu trabalho seja antes de tudo aceito e aprovado pela equipe, e razões materiais podem ser esquecidas. Nos casos mais avançados, o desenvolvedor está pronto para escrever um código, mesmo “para alimentos”, a fim de satisfazer um senso de autoestima entre o grupo-alvo ou em seu ambiente social.

Motivação intrínseca


Essa motivação é muito semelhante à social, apenas o fator de avaliação não é a equipe, mas o próprio desenvolvedor. Com motivação interna, os incentivos materiais estão completamente ausentes, e o resultado do trabalho pode nunca ser publicado, porque ele já trouxe (ou continua a trazer) satisfação a seu autor simplesmente pelo fato de sua existência e não exige nenhuma avaliação confirmatória do exterior.

Obviamente, essa separação de motivos para programadores é condicional e pode fluir de um tipo para outro ou até ser uma combinação de vários fatores motivadores.

Mas se você observar o resultado do trabalho dos programadores desse ponto de vista, nesse sistema de classificação você já poderá encontrar alguma lógica e tentar encontrar a beleza em praticamente qualquer código-fonte (programa do concurso da 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);

Quando uma piada te faz pensar


Inicialmente, este artigo foi escrito como uma piada, e seu nome fala por si próprio; portanto, a imagem foi escolhida de acordo.

Imagine minha surpresa quando percebi que a classificação formulada dos motivos para os programadores desejarem a beleza me lembra muito de algo. Esses motivos são claramente projetados na famosa pirâmide de necessidades de Maslow.



A motivação material encerra a necessidade da fundação da pirâmide. Essas são necessidades fisiológicas e de segurança. A motivação social cai no meio da pirâmide e leva à satisfação das necessidades de pertencimento, amor e reconhecimento. E, finalmente, motivação intrínseca muito claramente projetada no topo da pirâmide e fecha a necessidade de conhecimento, estética e auto-atualização.

Isso não é uma piada?


Como resultado de uma tentativa não séria de estudar os desejos de beleza entre os programadores, foram obtidas conclusões bastante razoáveis ​​que, se desejado, podem ser usadas na indústria de desenvolvimento de software.

De fato, no caso do surgimento de uma metodologia real para avaliar a beleza de um código do ponto de vista da motivação, não será difícil adicioná-lo a vários utilitários para avaliar o estilo de codificação, como pylint, cpplint e outros fiapos. E depois disso, será possível avaliar a motivação de desenvolvedores específicos sem realizar nenhum teste psicológico e preencher questionários chatos. Será o suficiente para passar o código deles através do analisador.

Talvez eu até tenha deixado o gênio sair da garrafa, porque se for possível medir a motivação pelo código criado, o próximo passo natural será a transição para seu gerenciamento. De fato, esse método de avaliar a motivação é muito fácil de automatizar e, onde existe uma oportunidade para a medição operacional, há também a oportunidade para o gerenciamento operacional do parâmetro medido.

Em outras palavras, a disponibilidade de informações operacionais sobre o estado mental dos membros da equipe para os gerentes de projeto os ajudará a avaliar os resultados de tentativas de mudar a motivação em direção a motivos sociais ou internos, naturalmente, para economizar em incentivos econômicos. ;-)

ATUALIZAÇÃO 1: Vou deixar um link para o esboço dejanvarevsobre o tema do artigo: Sergey e “programar é melhor que sexo”

ATUALIZAÇÃO 2:
De acordo com os primeiros resultados da votação, surgiu uma tendência ao voto principalmente pela motivação intrínseca (145 - 60,3%). Mas antes de escolher a terceira opção ao votar, considere o seguinte: Quem define os critérios de qualidade (ou estética) em seu projeto?

Se você é um líder de equipe, arquiteto ou outra pessoa que aceita ou influencia significativamente as regras para determinar essa avaliação, sua escolha é a certa.

Mas se sua contribuição para a formação de critérios de qualidade de código for insignificante (por exemplo, esses critérios foram determinados antes mesmo de você ingressar no projeto), mas tudo lhe convém completamente, é provável que você esteja em harmonia com a motivação interna e social, mas, quando entrevistado, a escolha certa votar na segunda opção, ou seja, motivação social.

Para verificar isso inequivocamente, imagine uma situação em que você tenha um mau humor "preto" e o resultado do trabalho (o código do programa escrito naquele momento) corresponda a ele. Seu commit será aprovado? Se sim, mesmo que você não cumpra totalmente os critérios de qualidade aceitos, sua motivação é realmente interna. Mas se seu código for rejeitado, sua motivação ainda será Social, embora geralmente esteja em harmonia com o Interno.

All Articles