Um dos principais objetivos das empresas de desenvolvimento de software é aumentar o fator Bus. Isso também é defendido em uma palestra organizada pelo Google .
Isso significa que você deve codificar e documentar tudo de forma que, se você for atropelado no ônibus amanhã, o projeto ainda possa continuar. Em outras palavras, você deve ser facilmente substituído por outro programador com uma habilidade semelhante à sua.
Ser substituível, não é contra o interesse de um desenvolvedor? No livro, a regra 11 das 48 leis do poder estabelece que você deve tentar manter as pessoas dependentes de você, a fim de obter poder, o que se traduz em recompensas monetárias.
Além do cenário, em que você precisa de alguma documentação para continuar um projeto após 6 meses de pausa, parece haver um claro conflito de interesses entre o desenvolvedor e a empresa de software.
Portanto, como programador, você deve realmente escrever uma excelente documentação e um código facilmente legível para todos; ou você deve escrever código e documentação de uma maneira que ele faça o trabalho e você possa entendê-lo, mas outra pessoa pode ter problemas para entendê-lo?
fonte
Respostas:
Você deve se esforçar para se tornar insubstituível, não escrevendo código que ninguém mais entende, mas reunindo mais experiência e conhecimento do que outros. A maneira anterior faz de você um desenvolvedor com quem todos tentam evitar trabalhar, pois eles temem e detestam manter o código que você escreveu. Da última maneira, você se torna um membro da equipe procurado, que os gerentes desejam ter em sua equipe.
Na minha experiência, escrever código limpo e bem documentado (e de preferência auto-documentado) sempre valeu a pena. Na verdade, aproveitei quase todas as oportunidades para ajudar e ensinar os outros (além de aprender com eles quando eles sabiam algo melhor), e quase nunca me senti em perigo de ser substituído por alguém menos capaz do que eu. De fato, isso geralmente ajudou toda a equipe a trabalhar melhor e resolver problemas mais rapidamente, o que é o sonho de todo gerente - e um gerente sensato não deseja substituir os membros de uma boa equipe.
fonte
Se você vai manipular organizações ou pessoas de forma tão transparente, é melhor que seja estúpido ou em um congestionamento que não lhes deixa outra escolha. Uma loja de desenvolvimento de software bem administrada examinaria seu código obscuro e a documentação ausente e simplesmente o demitiria antes que você pudesse causar muitos danos. Se eles são mal executados ou não conseguem que outros desenvolvedores trabalhem para eles, por que você gostaria de ter uma segurança com eles?
PS Nem Greene nem Maquiavel realmente conseguiram muito além de escrever livros que tentavam lisonjear os "homens durões" da época. Siga os conselhos deles com um grão de sal.
fonte
Se você é insubstituível, não pode ser promovido.
fonte
Você não quer ser insubstituível. Você não quer que as pessoas se sintam dependendo de você, quer que elas o apreciem. Geralmente, você quer ficar longe das pessoas, que acreditam que metade das leis do poder deve ser aplicada aos relacionamentos (profissionais ou pessoais).
Essas regras são um conjunto de instruções sobre como estabelecer com êxito uma situação de perda e ganho. O que você quer é uma situação em que todos saem ganhando .
Assim que as pessoas começarem a sentir, você está tentando empurrá-las para o lado perdedor de uma situação em que todos perdem, eles reagirão. As tentativas de estabelecer situações de perda e perda geralmente acabam em um resultado de perda e perda, porque você está efetivamente desperdiçando recursos para colocar seu parceiro em uma posição de perda, em vez de investi-los no sucesso geral de sua parceria.
Se você fizer isso com seus empregadores, eles tentarão forçar medidas contra você, para reduzir o monopólio do conhecimento. Principalmente, essas diretrizes serão ridículas sobre como você deve fazer seu trabalho e, assim, transformar sua vida profissional em um inferno. Além disso, eles ligam para você às 3 horas da noite, quando algo quebra, porque você é a única pessoa que pode consertá-lo. Tentar explorar situações como alavancagem provavelmente sairá pela culatra e causará mais problemas.
Então, corte a porcaria e faça seu trabalho corretamente. Se não for para mais nada, então para você, porque é provável que você seja a pobre alma, que precisa fazer algumas alterações no código daqui a dois anos.
fonte
As respostas negativas não são muito surpreendentes, dado o número de programadores acima da média que este site atrai. As pessoas talentosas geralmente não precisam recorrer a esse tipo de tática de segurança através da ofuscação. Mas eu trabalhei em um fornecedor automotivo da Fortune 500 com alguns desenvolvedores não tão talentosos que criaram pequenos feudos para si mesmos, que eles zelosamente guardavam, criando quantidades abundantes de documentação para as horrendas interfaces que eles haviam projetado.
O trabalho de um indivíduo era manter o código de um módulo que fazia a ponte entre dois subsistemas completamente separados, permitindo que os módulos de cada sistema se comunicassem por meio de um UART. Basicamente, era a Programação Serial 101. Em vez de apenas criar uma interface geral que se parecia com isso:
ele criou opcodes separados para cada mensagem que dois módulos de comunicação podem querer enviar um ao outro. O que significava que seu módulo precisava conhecer todas as mensagens e precisava ser atualizado sempre que uma mensagem fosse adicionada ou alterada. Fale sobre intimidade inadequada!
O problema é que esse cara manteve um documento do Word listando ordenadamente todos os códigos / mensagens e atualizou-o diligentemente, conforme necessário. Tornou-se todo o seu trabalho . Algumas vezes por semana, ele enviava uma nova revisão a todas as pessoas infelizes o suficiente para tê-lo em seu caminho crítico. E isso foi visto como 'profissional', já que a gerência adorava ver a documentação. Meio que me faz chorar pela indústria automotiva.
Acho que meu argumento é: às vezes escrever documentação pode, de fato, proteger programadores medíocres. Os gerentes geralmente não conseguem distinguir a diferença entre um bom design e um ruim, e muitos são forçados a tomar decisões técnicas com informações limitadas. É incrivelmente estressante para eles. Ver um documento do Word com dezenas de tabelas bem formatadas pode ser muito reconfortante - mesmo que o que ele descreve seja uma idéia fundamentalmente ruim.
fonte
Eu odeio dizer isso a você, mas todo mundo é substituível. Claro, às vezes pode ser um pequeno desafio substituí-lo (se você é experiente e inteligente o suficiente), mas são anos-luz do impossível.
A maneira de realmente ser uma mercadoria valiosa para o seu empregador (não apenas o empregador atual, mas qualquer empregador) é demonstrar a capacidade de escrever um código que seja fácil de entender por qualquer pessoa que esteja lendo o código (pouco tempo de aceleração para trabalhar com ele) e documentar o código (qualquer pessoa pode obter uma visão geral de alto nível de seus sistemas sem precisar pesquisar no código).
Na verdade, ser bom em documentação de código é uma qualidade difícil de encontrar hoje em dia, de modo que sozinho o ajudará a diferenciá-lo dos outros.
Código limpo e bem documentado também merece ser colocado em um currículo (pelo menos, resultados tangíveis, ou seja, "fomos capazes de atrair
n
novos desenvolvedores com o mínimo de ramp up e assistência devido à minha documentação), onde estamos sendo sorrateiros sobre como criar você mesmo "insubstituível" não é.fonte
Depende de quais são os interesses desse desenvolvedor. Se você é alguém que quer se destacar em um único emprego por toda a sua carreira, seja completamente indispensável para uma empresa que recompensa a incompetência e ganha muito dinheiro, então sim, absolutamente.
Mas o que acontece quando a empresa falha, provavelmente porque eles contrataram muitas pessoas assim? Para onde você vai depois? E quando eles perguntam por que você permaneceu no mesmo emprego por 15 anos? E assim por diante.
Agora olhe para ele de uma maneira diferente: quantos desenvolvedores perderam o emprego sendo alguém que escreve código que qualquer um pode ler?
A única probabilidade de que isso aconteça é se a empresa estiver com problemas e tornar as pessoas redundantes. Se isso estiver acontecendo, é melhor você sair e estará muito bem preparado para as próximas entrevistas. Além disso, sua consciência estará completamente livre - você não deixará para trás um código inexplicável que você escreveu para seu próprio ganho.
Não sei que tipo de pessoa você é, mas isso serve melhor aos meus interesses.
Pessoalmente, acho que uma das minhas maiores forças é automatizar meu próprio trabalho. O que você acha que uma empresa tende a pensar quando me tornei excedente aos meus próprios requisitos? Eles pensam "ok, vamos nos livrar dele agora" ou eles pensam "por que não o colocamos em outro papel e o deixamos fazer de novo"?
fonte
Você está certo, mas acho que não entendeu o significado de substituível. Eu pude encontrar mil desenvolvedores que escrevem códigos agitados, sem documentos, que podem rapidamente se transformar em uma bagunça insustentável.
Um desenvolvedor que produz não apenas programas estáveis, mas também código limpo, documentação informativa e garante a continuidade do projeto, que não é apenas insubstituível, mas inestimável .
fonte
Abordarei esta questão de uma perspectiva diferente, uma vez que já existem várias respostas excelentes.
Considere o que acontece quando você joga pequenos jogos, tentando se tornar "insubstituível", impedindo que outras pessoas aprendam como seu código funciona. Você permanece no mesmo trabalho, mantendo suas próprias bagunças enquanto a empresa o tolerar. E esse é o melhor cenário, o pior cenário é que outros engenheiros e gerentes mais talentosos e éticos da sua empresa veem o obstáculo que suas más práticas impõem à empresa e decidem fazer algo a respeito: demitindo e reescrevendo tudo do zero. Já foi feito. De fato, é uma coisa bastante comum acontecer.
Agora considere o que acontece quando você escreve um bom código e uma boa documentação. Você cria um componente ou sistema que funciona bem e, depois de um tempo em operação, os bugs funcionam sem problemas e dificilmente precisam ser vistos. É preciso pouco esforço para mantê-lo. Você pode então avançar para projetos maiores e melhores, com uma sólida vitória. As pessoas o reconhecerão por ter feito um bom trabalho e começarão a respeitar sua opinião. Você poderá subir na cadeia alimentar e tomar decisões mais significativas, realizar trabalhos mais importantes e com impacto, ou gerenciar projetos em um nível superior. Sua carreira irá melhorar, você será promovido, ganhará mais dinheiro, ganhará reconhecimento e aprovação de seus colegas, acrescentará cada vez mais sucessos de projetos cada vez mais importantes ao seu histórico.
Qual rota você prefere?
fonte
Se você é o único ponto de falha, seu cliente (ou empregador) provavelmente tentará substituí-lo; sempre há um ponto em que é mais barato substituir o software do que mantê-lo, por mais essencial que pareça. Há uma razão pela qual a TI é uma das profissões mais terceirizáveis.
Por outro lado, ser substituível oferece vários benefícios inestimáveis:
fonte
Se você não gastar 5 minutos escrevendo alguma documentação rápida, passará uma hora relendo e explicando às pessoas quando elas precisarem usar seu código.
Pior ainda poderia ser passar dias procurando um novo emprego, porque seu chefe descobriu que você não estava escrevendo código de manutenção.
fonte
Uma documentação excelente ficará obsoleta com a refatoração / evolução, e mantê-la atualizada é realmente demorada.
Código limpo + teste de unidade> excelente documentação
fonte
A resposta para sua pergunta é sim". Sim, você deve escrever boa documentação e código limpo. Deliberadamente, agir de outra forma mostra falta de integridade, o que, apesar de cada vez mais prevalecente no mundo dos negócios, não é de repente algo "bom".
Ninguém é insubstituível. As pessoas que fabricam uma situação em que pensam que são tendem a descobrir da maneira mais difícil que não são. Fabricar uma co-dependência para si mesmo é contraproducente, pois também limita você, não apenas seu empregador.
fonte
Premissa falsa. Os principais objetivos de uma empresa de desenvolvimento de software (de qualquer maneira em que trabalhei) são produzir o melhor software possível e ganhar dinheiro, não necessariamente nessa ordem. Reduzir o "fator de ônibus" é apenas uma maneira de evitar perder dinheiro.
O que isso significa para você?
Você quer que as pessoas dependam de você porque você as prejudicou de tal maneira que elas só podem avançar com sua ajuda? Ou você quer que as pessoas dependam de você porque você é inteligente e perspicaz, confiável, confiável e capaz de ajudar outras pessoas a fazerem seu trabalho melhor também? Deseja fazer com que seus colegas pareçam ruins sem a sua ajuda ou deseja que eles o apreciem por fazê-los parecer bons?
A decisão é sua.
fonte
(assumindo código de produção)
Eu tendem a ir um pouco mais longe. Eu escrevi sobre tornar os programas "à prova de idiotas", mas nem sempre qualifico isso: escrevo muito código que outras pessoas não verão ou trabalham (pelo menos, essa é a expectativa quando é escrita). Eusou o idiota do qual estou tentando me defender nesse caso. É uma coisa boa quando o seu programa detecta problemas para você, e o problema foi tão simplificado que é bastante óbvio que há um erro e sua origem. A verdade é que os detalhes da implementação são óbvios quando você escreve um programa (a menos que esteja implementando prematuramente), mas eles devem ser abstraídos e resistentes a erros para os clientes (mesmo quando existe a localização do módulo). A razão é que os programas se tornam muito complexos. Às vezes, você pode separar problemas, mas não o tempo todo. Se você mantiver seus componentes muito rígidos, simples, bem encapsulados e à prova de idiotas, eles tendem a escalar bem e a maioria dos defeitos é detectada antes do envio. É mais fácil reutilizar, e você tem mais confiança e facilita a reutilização dos programas. Além disso, esses programas complexos que você escreve apenas se tornam mais complexos (mesmo para você) depois de algum tempo fora do programa. Quando você o lê em 6 meses, pode levar uma quantidade absurda de tempo para entender e depurar em comparação com a versão à prova de idiotas. Se um componente introduzir uma alteração de ruptura, ele poderá não ser detectado por um longo tempo, caso contrário. Programas são complexos; você não pode escapar dessa realidade, mas pode torná-la à prova de idiota, o que tornará sua vida muito mais fácil quando algo der errado ou quando precisar ser reutilizado ou alterado. Portanto, a abordagem à prova de idiotas significa que seu software pode ser entendido, reutilizado ou mantido por seus juniores ou por pessoas mais novas da equipe (não apenas alguém tão bom / experiente quanto você). A substituição é uma preocupação separada: se as pessoas adoram trabalhar com seus programas, você está fazendo um bom trabalho - não não se preocupe com a substituição. Claro, eu poderia criar cenários em que programas ininteligíveis poderiam salvar seu trabalho, mas escrever um bom programa que outros possam usar e manter é claramente o mal menor (veja as resenhas dos outros). Se me pego escrevendo algo que não é à prova de idiotas, tento consertar isso.
Você realmente não tem ideia do que estava pensando algumas vezes ao revisitar implementações inativas. Quando você é realmente experiente, o problema é mais simples, porque você pode confiar mais em metodologias ou abordagens estabelecidas que você usa. Isso, no entanto, também pressupõe que essas metodologias sejam invariantes. Embora a documentação possa relaxar, você ainda precisa ser defensivo em suas implementações (por exemplo, você sabe que não deve passar NULL nesse cenário - teste essa condição).
Eu recomendo a abordagem à prova de idiotas, que é ainda mais clara e mais resistente a erros do que a abordagem de fator de barramento. Escreva seus programas e documentação para que seja facilmente entendido por alguém externo ao projeto - isso também é bom para você. Isso aumentará seu valor para sua empresa e equipe; eles não desejarão substituí-lo.
fonte
Você entendeu fundamentalmente o jogo. O jogo não é continuar fazendo as mesmas coisas antigas que você fez antes, sendo responsável por todo o código que você escreveu, porque ninguém mais o entende. O jogo é concluir um projeto e avançar para o próximo, deixando para trás um código que outra pessoa possa entender e trabalhar com facilidade na sua ausência, para que você possa fazer coisas novas e assumir mais e diferentes responsabilidades. Sua premissa só funciona se você estiver feliz por ficar parado repetindo a mesma coisa sem chance de aprender ou melhorar.
fonte
Também vou apontar que, se você não tiver oportunidade de analisar esse código com muita frequência, também terá problemas para descobrir isso em seis meses se o ofuscar deliberadamente.
fonte
Documento o pequeno código que escrevo, não para que outros possam lê-lo, mas para que eu possa lê-lo em três meses! Trata-se de facilitar a manutenção. Se você é responsável pelo código que escreveu e não pode consertar os erros que aparecerem mais tarde, então você quer que seja bem documentado ... É muito irrelevante o quão substituível você é se não conseguir para fazer o seu trabalho!
fonte
Todos os profissionais de informática "insubstituíveis" com os quais tive a infelicidade de interagir foram substituídos, em grande parte porque estavam tentando manter reféns os recursos de seus empregadores. Quando algumas pessoas que me relatam dizem que seu tempo é valioso para "desperdiçar" a documentação, eu as substituo o mais rápido possível.
Parece que se um empregado em potencial considerar as 48 leis do poder aceitáveis ética ou moralmente, você estaria melhor sem elas.
fonte
Se você REALMENTE deseja ser insubstituível (que você pode reconsiderar após ler todas as respostas ...) - por que parar de não documentar o código?
Há um guia verdadeiramente brilhante sobre como escrever código não-sustentável que você definitivamente deveria ler: http://thc.org/root/phun/unmaintain.html
Desfrutar! (Eu certamente fiz ...)
fonte