Isso é algo em que estou pensando desde que li esta resposta no controverso tópico de opiniões sobre programação :
Seu trabalho é sair do trabalho.
Quando você está escrevendo um software para o seu empregador, qualquer software que você criar deve ser escrito de tal maneira que possa ser adquirido por qualquer desenvolvedor e entendido com um esforço mínimo. Ele é bem projetado, escrito de forma clara e consistente, formatado de forma limpa, documentado onde precisa estar, compilado diariamente conforme o esperado, verificado no repositório e com a versão apropriada.
Se você for atropelado por um ônibus , demitido, demitido ou sair do emprego, seu empregador poderá substituí-lo a qualquer momento, e o próximo funcionário poderá assumir seu papel, pegar seu código e ser correndo dentro de uma semana no máximo. Se ele ou ela não puder fazer isso, você falhou miseravelmente.
Curiosamente, descobri que esse objetivo me tornou mais valioso para meus empregadores. Quanto mais eu me esforço para ser descartável, mais valioso me torno para eles.
E isso já foi discutido um pouco em outras questões, como essa , mas eu queria trazê-lo novamente para discutir de um ponto em branco " é um cheiro de código !! " do ponto de vista - que realmente não foi coberto em profundidade ainda.
Sou desenvolvedor profissional há dez anos. Eu tive um trabalho em que o código foi bem escrito o suficiente para ser captado relativamente rapidamente por qualquer novo desenvolvedor decente, mas na maioria dos casos na indústria, parece que um nível muito alto de propriedade (propriedade individual e de equipe) é o norma. A maioria das bases de código parece não ter a documentação, o processo e a "abertura" que permitiriam a um novo desenvolvedor buscá-las e trabalhar com elas rapidamente. Sempre parece haver muitos pequenos truques não escritos e hacks que apenas alguém que conhece muito bem o código base (o "possui") saberia.
Obviamente, o problema óbvio disso é: e se a pessoa sair ou "for atropelada por um ônibus"? Ou no nível da equipe: e se toda a equipe sofrer intoxicação alimentar quando sair para o almoço da equipe e morrerem? Você seria capaz de substituir a equipe por um novo conjunto de novos desenvolvedores aleatórios de maneira relativamente indolor? - Em vários dos meus empregos anteriores, não consigo imaginar isso acontecendo. Os sistemas estavam tão cheios de truques e hacks que você " apenas precisa saber ", que qualquer nova equipe contratada levaria muito mais tempo que o ciclo de negócios lucrativo (por exemplo, novos lançamentos estáveis) para fazer as coisas funcionarem novamente. Em resumo, não ficaria surpreso se o produto tivesse que ser abandonado.
Obviamente, perder uma equipe inteira ao mesmo tempo seria muito raro. Mas acho que há uma coisa mais sutil e sinistra em tudo isso - que é o ponto que me levou a pensar em iniciar esse tópico, pois não o vi discutido nesses termos antes. Basicamente: acho que uma grande necessidade de propriedade do código é muitas vezes um indicador de dívida técnica . Se houver uma falta de processo, comunicação, bom design, muitos pequenos truques e hacks no sistema que você "apenas precisa saber", etc. - geralmente isso significa que o sistema está se endividando progressivamente cada vez mais.
Mas o fato é que a propriedade do código geralmente é apresentada como uma espécie de "lealdade" a um projeto e empresa, como uma forma positiva de "assumir a responsabilidade" pelo seu trabalho - por isso é impopular condená-la completamente. Mas, ao mesmo tempo, o lado da dívida técnica da equação geralmente significa que a base de código está ficando progressivamente menos aberta e mais difícil de trabalhar. E, especialmente, à medida que as pessoas seguem em frente e os novos desenvolvedores precisam tomar seu lugar, o custo da dívida técnica (ou seja, manutenção) começa a subir.
Então, em certo sentido, acho que seria uma coisa boa para nossa profissão se um alto nível de necessidade de propriedade de código fosse visto abertamente como um cheiro de trabalho (na imaginação popular do programador). Em vez de ser visto como "assumindo responsabilidade e orgulho" no trabalho, deveria ser visto mais como "entrincheirando-se e criando segurança artificial no emprego por meio de dívidas técnicas".
E acho que o teste (experimento mental) deveria ser basicamente: e se a pessoa (ou mesmo toda a equipe) desaparecesse da face da Terra amanhã. Isso seria um ferimento gigantesco - possivelmente fatal - para o projeto, ou poderíamos atrair novas pessoas, levá-las a ler os documentos e arquivos de ajuda e brincar com o código por alguns dias - e depois voltar para negócios em algumas semanas (e voltando à produtividade total em mais ou menos um mês)?
fonte
Respostas:
Acho que devemos fazer a diferença entre a propriedade do código:
O primeiro deve ser encorajado. Se ninguém for responsável por códigos e bugs de baixa qualidade, coisas ruins acontecerão . Isso não significa que o bug relacionado ao seu próprio código deve ser atribuído a você sempre: se o código for escrito corretamente, qualquer pessoa poderá corrigi-lo em qualquer parte do código. Mas se você não tiver nenhum comentário sobre os erros que você faz, você produzirá os mesmos erros repetidamente .
A propriedade do código pode ajudar muito os gerentes e os desenvolvedores, especialmente os desenvolvedores. Se eu souber que 80% dos bugs no produto estavam no meu código enquanto éramos três desenvolvedores trabalhando no projeto, e que 75% desses bugs estavam relacionados à injeção de SQL, seria mais cuidadoso ao escrever código da próxima vez, e faça um esforço extra para escrever corretamente as consultas ao banco de dados.
O segundo (propriedade do código do estilo do código / hacks, etc.) é principalmente uma coisa ruim. O que isso traz para o produto? Não aumenta a qualidade do produto, mas diminui a uniformidade do código-fonte e dificulta sua manutenção ultimamente .
Para muitos projetos grandes, as pessoas não ficam a vida toda trabalhando no mesmo pedaço de código. E aqui, eu nem falo sobre coisas horríveis, como o desenvolvedor sendo atropelado por um ônibus: não acho que a propriedade do código seja a primeira preocupação neste caso. Mas muitas coisas pequenas acontecem: as pessoas migram do desenvolvimento para o gerenciamento ou para outros trabalhos, ou escolhem outros projetos, ou trabalham em outras coisas, ou começam a usar outro idioma (se vários idiomas forem usados em um projeto), etc.
Uma parte do código de um projeto também pode ser reutilizada em outro projeto, e o desenvolvedor que trabalha nesse outro projeto gostaria de modificar algumas partes do código para atender às novas necessidades, sem pedir orientação ao ex-escritor do código.
É um cheiro de código? Bem, depende do que você quer dizer com cheiro de código. Para mim, é tudo sobre a coerência geral do projeto e o gerenciamento correto . Em um bom projeto,
Para concluir, a propriedade do código deve ser rastreada por meio do controle de versão, mas você não deve poder dizer que um pedaço de código foi escrito por você ou outra pessoa em uma equipe .
fonte
Primeiro, precisamos definir o que é "propriedade do código".
Quando uma parte (parte) do código está no processo inicial de desenvolvimento, geralmente é necessário designar uma ou duas pessoas como "proprietários" porque:
Normalmente, há um único proprietário para cada tarefa. Proprietários duplos são possíveis com a programação em pares. Não seria prático fazê-lo sem nenhuma "propriedade de código" designada de forma restrita.
Nota:
Consulte a resposta do @ MainMa para outros problemas durante o desenvolvimento. Nesses casos, "propriedade do código" é um sintoma de problemas maiores, ou seja: escolha subótima da arquitetura, inconsistência no estilo de codificação e geralmente falta de qualidade do código.
Depois que uma peça é escrita e aceita na base de código ("pronto"), a pergunta mais geral sobre "propriedade do código" é exibida.
Sempre haverá alguma parte do conhecimento do domínio (entendimento tácito dos requisitos dos clientes, problemas de compatibilidade com sistemas misteriosos etc.) que são difíceis de formalizar em especificações escritas. Portanto, quando há um evento de calamidade, é necessário esperar alguma perda de conhecimento do domínio.
Juntamente com a perda de conhecimento do domínio, você também perderá os respondentes especializados que podem explicar os detalhes do sistema. Nesse aspecto, a perda do especialista é uma coisa universalmente ruim. O conhecimento deveria ter sido capturado anteriormente.
Isso não significa que a existência de "especialistas" seja ruim: considere os especialistas como um "cache" do conhecimento escrito. Os especialistas costumam responder a perguntas mais rapidamente do que procurar e digerir o conhecimento escrito.
No entanto, às vezes "propriedade do código" refere-se a barreiras estabelecidas pelos desenvolvedores ativos de um projeto para impedir que terceiros modifiquem o código.
Existem boas e más barreiras:
Nesse caso, o privilégio de editar o código-fonte de outro projeto não deve se basear na propriedade do código, mas deve ser baseado no mérito.
Por fim, a resposta de @Graham Lee aponta para a fragmentação do conhecimento e da arquitetura causada pela departamentalização.
Nesse caso, "propriedade do código" é um dos sintomas da departamentalização. Um segundo sintoma é a "falta de interesse nos projetos de outras equipes". Como organização, os gerentes precisarão tomar medidas para incentivar a transferência de conhecimento e a colaboração entre equipes e departamentos.
fonte
Mais insidiosamente, algumas empresas (trabalhei em uma) organizam sua estrutura de gerenciamento em torno de equipes funcionais: você gerencia os desenvolvedores de clientes do Windows, ela gerencia a equipe do instalador, ele gerencia os desenvolvedores de back-end e assim por diante. Isso não apenas leva à forte propriedade do código que você descreve, como a consagra à maneira como os negócios funcionam. Transforma a arquitetura de software em uma briga política.
Isso é um problema? É se a arquitetura é ou se torna subótima. É impossível dizer (por exemplo) que o instalador funcionaria melhor ou seria mais barato de desenvolver se fosse apenas um caso de uso do cliente, porque isso está tirando o controle de uma equipe e de seu gerente. As divisões entre os módulos funcionais tornaram-se fatos sobre a forma como o departamento de engenharia é executado, e é preciso muita agitação para alterar esses fatos.
[No caso de a discussão acima não esclarecer, minha resposta para sua pergunta é sim. A propriedade do código é um cheiro de código, porque pode impedir que pessoas inteligentes com boas idéias - ou mesmo apenas pessoas que estão disponíveis quando você precisar delas - trabalhem no código. Obviamente, ter controles para interromper mudanças caprichosas é uma coisa boa, mas se você tem um engenheiro que pode ver como consertar um bug e tem tempo para fazê-lo, não deve bloqueá-lo apenas porque outra pessoa escreveu o código do buggy. ]
fonte
Resolvendo sua pergunta de um ponto de vista um pouco diferente, a propriedade do código NÃO é um cheiro de código. Em vez disso, é um cheiro de gerenciamento e recursos .
Pense no significado de um cheiro de código. É uma metáfora que diz quando você olha para o seu código, que algo não está certo com o código e / ou o design do software, mas o problema pode não ser tão óbvio que consiga identificar o que o problema exato pode ser, mas você provavelmente já teve uma boa ideia. Em sua casa, se algo cheira mal, você segue seu nariz até localizar a fonte do problema e depois faz algo a respeito. Da mesma forma, se o código tiver um problema, você o investiga e o altera até que se torne um problema menor ou, como alguns podem dizer, bonito ou bem trabalhado .
A propriedade do código, por outro lado, pode ser um problema sério. Ele sugere uma falta de supervisão e um risco de que, se o proprietário do código sair, esse conhecimento sobre o código e os problemas específicos que ele resolver não estarão mais disponíveis para a empresa. Isso não tem nada a ver com o próprio código. Basicamente, isso se resume a uma situação de gerenciamento de riscos da mesma maneira que nos leva a manter backups de nossos dados e se aplica igualmente à propriedade de tarefas ou propriedade de documentos em outras áreas da empresa.
Eu acho que é bom descrever outros problemas de negócios como cheiros , mas certamente não implica que apenas porque há um cheiro , isso tenha a ver especificamente com o código.
fonte
Defino a propriedade do código como a responsabilidade pessoal pelo código que você escreve, com o entendimento de que outras pessoas trabalharão no seu código no futuro . Se você pensar nas coisas dessa maneira, será menos provável que você escreva um hack porque a) os erros nesse módulo podem ser rastreados até você eb) os membros da equipe provavelmente terão dificuldade em modificar o código no futuro .
Escrevi um post sobre isso há vários meses, em que argumentei que, sem a propriedade do código, como eu a defino, uma base de código geralmente é vítima da Tragédia dos Comuns .
Pela sua definição de propriedade do código, concordo que é ruim ter um código no qual apenas o autor possa trabalhar.
fonte