Sou forçado a escrever um código incorreto. Como guardo meu rosto? [fechadas]

69

Sou apenas um desenvolvedor júnior, mas meu trabalho me obriga a trabalhar com um código PHP realmente terrível (pense no pior código PHP que você já viu; depois pense no código duas vezes mais ruim). Eu costumo tentar consertar bugs e lutar com a base de código para adicionar novos recursos. Às vezes, recebo ordens para que as coisas funcionem o mais rápido possível, o que geralmente envolve hacks sujos.

O produto era de código aberto anteriormente e estou preocupado que ele possa ser de código aberto no futuro. Eu ficaria envergonhado se alguém (especialmente os empregadores em potencial) pudesse encontrar meu nome ao lado de alguns dos conjuntos de alterações. O que posso fazer para proteger meu bom nome?

Não tenho certeza se isso é relevante, mas vou acrescentar que nem meu chefe nem meus colegas querem admitir que o código é ruim, mas não tenho certeza se posso culpá-los por isso - para muitos deles esse é o seu primeiro emprego.

Vergonha
fonte
21
Como você é forçado a escrever um código incorreto? Por que você não consegue se levantar, parar de colocar seu nome em código incorreto e explicar o problema, a solução, o custo em termos de tempo, esforço e dinheiro e os benefícios de corrigir os problemas agora aos seus superiores?
Thomas Owens
17
"encorajando hacks rápidos e sujos"? Encorajando? Qual é pior. Seu orgulho (e encontrar um novo emprego) ou manter-se nesse emprego. Pode não ser ruim defender o que é certo. O que está parando você? Ameaças de violência? Chantagem? Procedimentos criminais? A sério. O que impede você de escrever um bom código? Por favor, seja específico . E honesto.
S.Lott
113
Se houver algum consolo, até o bom código que você escreve hoje ficará ruim para você em cinco anos.
Kyralessa
7
encare isso O PHP incentiva "rápido e sujo" por não desencorajá-lo e facilitar a questão. Eu diria que o PHP se destaca em "qucik e sujo" melhor do que qualquer outra linguagem, exceto talvez Perl, uma vez que o momento é estabelecido, difícil parar, especialmente se a gerência também está incentivando o comportamento. No código final que parece funcionar, independentemente das práticas, é mais valioso para a empresa do que nenhum código.
7
Desculpe, mas não são maneiras certas e erradas para escrever código. O caminho certo usa práticas padrão da indústria; a má maneira que hackeia as coisas e diz que "funciona".
Wayne Molina

Respostas:

132

Roma não foi construída em um dia, mas você pode ser um bom 'escoteiro'. Toda vez que você tocar no código, deixe-o melhor do que era antes. Não é necessário um tempo extraordinário para usar nomes de funções sensíveis, bons padrões de codificação e inserir comentários decentes quando você trabalha.

Eu acho que o perigo é pensar que é tudo ou nada. Só porque você não pode gastar o tempo que deseja escrever um código elegante, não significa que você precisa desistir totalmente e escrever um lixo.

Amy Anuszewski
fonte
2
+1. Você não precisa sacrificar tudo em que acredita apenas para torná-lo uma solução rápida.
tdammers
4
+1: para tudo ou nada - muito verdadeiro.
Umber Ferrule
3
A regra do escoteiro nas mãos erradas pode ser exatamente o que causa o problema, porque a definição de 'nome da função sensível' de seu supervisor pode ser 'bolChkLst' (notação húngara para atender ao guia de estilo, ChkLst em vez de CheckList porque 'menor é melhor' '). Aqui estão algumas implementações da regra do escoteiro que encontrei em diferentes trabalhos que tentei não seguir: 'Unir funções, para ter o mínimo possível', 'não carrega argumentos por meio de três chamadas, use globais', 'use SQL inline para exibir faça isso mais rápido ''
keppla
40
+1 paraEvery time you touch the code, leave it better than it was before.
Qwerky
3
+1. Se você tiver muitas melhorias claras comprometidas, quem realmente analisar sua contribuição não achará que você é um programador ruim. Os potenciais empregadores que assumem que você é péssimo porque o projeto é péssimo não são pessoas para quem você deseja trabalhar.
Mateus Leia
59

Concorde com S.Lott a partir dos comentários * (pela primeira vez :) Ninguém está forçando você a escrever um código incorreto. A questão é, dev junior. muitas vezes (este site também é o culpado por isso) se perdem nas melhores práticas, "código bonito", ... como você quiser chamá-lo ... e eles não são muito realizados; ou eles fazem isso, mas perdem muito tempo. Ao dizer a eles para escrever um código incorreto (que também funciona), ele obtém mais do que "através disso", apenas os faz entregar algo. À medida que o tempo passa, isso resulta que um desenvolvedor júnior (agora não mais :) rapidamente cria uma solução rápida e suja, mas passa o resto do tempo aprimorando-a. E com o passar do tempo, você aprende mais e, em algum momento, começa a oferecer soluções rápidas e sujas, que na verdade são um bom código.

Mas, se você seguisse o seu caminho e tentasse escrever um código perfeito desde o início, provavelmente passaria muito tempo e não faria quase nada.

Então ... escreva códigos ruins, ... muitos deles, códigos que mal funcionam e, em seguida, ITERATE. Cada iteração é um pouco melhor!

Ninguém escreveu a solução perfeita pela primeira vez.

* isto, se fosse mais curto, teria sido um comentário.

Torre
fonte
11
+1 Eu concordo plenamente com esta resposta. Eu te voto duas vezes.
Vitor Py
3
Concordo. Essa é uma ótima maneira de resolver a "paralisia da análise", que pode se manter à medida que você tenta alcançar a solução "perfeita" para um problema. Eu escrevi algo semelhante no StackOverflow .
Kyralessa
4
+1. Eu já li isso em programadores (mas não sei a fonte): dois grupos foram encarregados de criar cerâmica dentro de um determinado período de tempo. Um para criar um item da melhor qualidade possível e outro para criar o maior número possível de itens. No final, o último grupo forneceu itens de melhor qualidade, porque a repetição é o caminho para o domínio. A contemplação por si só não levará a lugar algum. No final, todos aprendemos fazendo e nosso medo de fazer algo errado é o que nos impede de tentar, possivelmente falhando, mas definitivamente aprendendo com nossos erros.
back2dos
11
Como corolário, use um repositório! Mesmo que seja apenas pessoal, você configurou em sua própria máquina. Depois de começar a usá-los, você percebe como é libertador fazer várias alterações, descobrir que não funcionou e reverter. My fav pessoal é fósseis
Spencer Rathbun
11
"Então ... escreva códigos ruins, ... muitos deles ... códigos que mal funcionam, e depois ITERATE. Cada iteração é um pouquinho melhor!" E se você nunca conseguir iterar porque novos projetos continuam se acumulando ... e você começa a perceber que o que você pressiona como alfa tende a permanecer até o projeto morrer. O que, é claro, é acelerado como resultado do código inicialmente de merda e da falta de atualização. Eu acho que é esses tipos de situações que embalam muitos devs júnior em pensar que eles precisam escrever "código bela" a partir do get-go ...
Serhiy
40

Os comentários do código são seus amigos aqui.

Sempre que você sentir que precisa escrever algum truque barato por causa da pressão, basta dizer algo como: "Este código faz X por causa de restrições de tempo. Idealmente, eu faria Y. - Ashamed One, 5 de julho de 2011"

Então, se os empregadores em potencial virem isso, eles perceberão que você prefere escrever um bom código, mas você também está disposto a ajustar seu estilo de codificação às necessidades da empresa. A maioria dos empregadores vê essas duas coisas como boas.

Bob Murphy
fonte
4
Exatamente. Comentários e mensagens de confirmação também. Eu nunca fiz isso, mas seria interessante avaliar um desenvolvedor com base em nada além de conjuntos de alterações anotados atribuídos a eles em alguns vcs.
timdev
bem, você pode dizer algo sobre alguém cujos comentários cometem são "fixas", "feito", "blahblahblah" :)
gbjbaanb
+1 Eu já fiz isso várias vezes e, no caso de desenvolvedores pares, ele simplesmente funciona.
Jacek Prucia
7
Geralmente, excluo comentários assim sempre que os encontro. Um comentário marcado como TODO ou FUTURE-ENHANCEMENT pode merecer ficar, mas desculpas são apenas lixo.
21811 Kristopher Johnson
11
Concordo em incluir uma explicação sobre por que uma solução abaixo do ideal foi implementada (e qual poderia ser essa solução) eu faço isso de tempos em tempos. No entanto, eu não acho que seja algo para se envergonhar ou se desculpar. Significa apenas que havia coisas mais importantes a fazer no momento em que você estava trabalhando nesse trecho de código e que a implementação fornecida foi suficiente.
Justin Ohms
10

Depende de como eles te forçam.

Na minha experiência, existem duas possibilidades:

Você se sente forçado por uma agenda apertada, código legado etc.

Nesse caso, como a maioria das outras respostas já diz, cabe a você "otimizar a frescura". Você pode não ter tempo para reescrever a base de código no MVC, mas como primeira etapa, por exemplo, você pode parar de colar seu SQL manualmente e, em vez disso, escrever um texto agradável execute_sql($query, $params), que estabeleça a base para abstrações como fetch_customer($filter_params)etc. Lembre-se, tudo de bom Em última análise, as práticas estão aí para que seu chefe obtenha um produto mais cedo; portanto, há apenas um conflito em quanto tempo investir no futuro versus no agora.

Quando você define o contexto certo ('dentro de 6 meses, sem ter tempo extra, refatorei o código monolítico para MVC'), você deve deixar seu nome no código e tentar se orgulhar como um terapeuta, que ensina uma vítima de derrame a: diga palavras únicas novamente.

Você está explicitamente ordenado a implementá-lo da maneira que considerar inadequada

A tentativa de separar a visualização do modelo não sobrevive à revisão, porque 'é muito complicado, por que você simplesmente não faz consultas SQL simples?'. Você execute_sqlfica enlatado porque 'um codificador com disciplina não precisa disso'.

Este caso é péssimo. Na minha experiência, geralmente vem com microgerenciamento e líderes de equipe que foram promovidos por motivos políticos, não por seus sucessos. O verdadeiro problema é que você é encarregado de algo (o código) que você não pode controlar (você deve fazê-lo da maneira deles). A melhor solução seria resolver a causa raiz (ou seja, que você é tratado como um grunhido). A segunda melhor solução (e na minha experiência, a usual) é sair.

A vantagem é que, nesse cenário, é provável que seu nome não seja publicado de qualquer maneira, porque o líder da equipe assume o crédito por todo o sucesso.

keppla
fonte
8

Estou bastante confiante de que seu chefe exige que você entregue algo rápido, mas não que você faça um esforço extra para torná-lo deliberadamente ruim. O que significa que, sempre que você tiver uma escolha entre um código muito ruim e um pouco menos ruim, e as duas opções levarem um tempo igualmente longo para implementar, você opta pela opção um pouco menos ruim. Essa é a solução de curto prazo, e não requer nenhum esforço.

A longo prazo, converse com seu chefe. Explique como investir 15 minutos aqui pode economizar horas lá. Certifique-se de ter exemplos convincentes - não do tipo "se eu fizesse isso e aquilo aqui, minha esperança é que eu fosse capaz de fazer outra coisa no próximo ano", mas sim: "olha, aqui eu fiz isso, e porque disso, levei três horas para encontrar o problema; se eu tivesse feito isso dessa maneira, o bug teria aparecido imediatamente ". Um aviso aqui: embora o código elegante e de manutenção seja muito melhor e mais eficiente, às vezes não é. Há situações em que uma solução rápida desleixada é perfeitamente justificada: às vezes, você está escrevendo um código de uso único, às vezes, mantendo vivo um pedaço desatualizado de lixo, aguardando a coisa real; Às vezes, o benefício de uma solução adequada não

Se tudo mais falhar, procure outro emprego.

tdammers
fonte
3

Ninguém obriga a escrever código incorreto. Você pode mudar essa situação e torná-la positiva. Mudança pioneira de políticas e procedimentos. E você nem sempre pode ser o "sim" homem / mulher também. Se eles disserem que precisam da funcionalidade x antes do final do dia, diga que não é possível, mas dê justificativas por que realmente não é. Onde houver um problema, ofereça soluções. Não é apenas um olho cego, ou pior ... adicionando a ele.

Sua loja de desenvolvedores não é a primeira a ter prazos rígidos, apesar de ainda ter o desejo de manter um código bem projetado.


fonte
4
-1: Nos EUA, se seu chefe disser "Escreva um código de baixa qualidade", e você se recusar a fazê-lo, eles poderão demiti-lo. Desobedecer uma instrução direta para fazer algo legal é motivo para rescisão involuntária. Portanto, embora isso possa não estar "forçando" você, as alternativas para fazer o que seu chefe diz podem ser muito piores.
Bob Murphy
Tudo depende da sua abordagem. Idealmente, você teria uma figura superior que valorizaria sua experiência e seu julgamento deveria ser altamente considerado. Muitas vezes, as pessoas que ditam prazos não são desenvolvedores, e devem levar em consideração o que é possível e o que não é. É claro que você pode escrever um código "ruim" debaixo das cobertas, mas o retrocesso pode ser suficiente para que todos fiquem felizes: bons resultados com um bom código.
11
Os números superiores ideais para os quais você realmente não trabalha são excelentes, mas a pessoa que assina seu salário é a pessoa que você deve agradar. Ter coletores de contas ligando a qualquer hora, quando você está fora do trabalho, é realmente muito chato.
Bob Murphy
11
Há mais do que interesse próprio. Sou gerente e empresário e posso garantir que, se todo o cliente está pagando rápido e sujo, fazer um bom trabalho que perde dinheiro levará à demissão de pessoas. Tive que demitir uma empresa inteira uma vez e nunca mais quero fazê-lo. Portanto, embora eu seja definitivamente a favor de uma postura moral ... escrever código de baixa qualidade geralmente não é uma questão moral, e em algum momento é preciso escolher entre a preferência pessoal e as questões práticas de pessoas que têm ou não emprego.
Bob Murphy
11
Eu quase nunca advogaria uma reescrita em grande escala de um grande sistema, mas isso não significa que o código que você escrever no futuro seja horrível.
6118 PeterAllenWebb
3

Qualquer empresa precisa encontrar um equilíbrio entre escrever código brilhante, com extensa documentação e testes de unidade e colocar produtos no mercado em um orçamento e espaço de tempo razoáveis.

O melhor código do mundo não importa se obsoleto antes de ser lançado.

Ser pragmático é tentar encontrar esse equilíbrio. Consertar os recursos rapidamente pode ser comercialmente essencial no momento, não significa que sempre será.

É preciso muita experiência (mais do que a maioria dos codificadores já tem) para obter esse equilíbrio corretamente. É muito fácil ir para qualquer extremo. Encontrar um caminho do meio é mais difícil.

Não estou dizendo que seu chefe está certo. Como codificador, há uma tentação de tentar criar constantemente um código bonito que não é comercialmente viável. Estar atento a essa tentação pode ajudá-lo a perceber que alguns desses hacks não são tão ruins.

A maior parte do código, após um tempo suficiente, conterá hacks para situações específicas que eram muito caras para refatorar em uma estrutura geral.

Jeremy French
fonte
2

Gostaria de acrescentar que você não deve continuar como está fazendo agora, sem dizer nada e apenas invadir e invadir.

Você precisa se levantar e apontar para um código concreto e dizer o que é uma porcaria. Seja específico e use métricas de código para fazer backup de suas reivindicações. Nada é mais embaraçoso do que afirmar que um código é ruim, quando na verdade não é, você simplesmente não entendeu o que estava sendo feito.

Estou certo de que existem muitas ferramentas disponíveis gratuitamente para análise de código php http://en.wikipedia.org/wiki/Code_analysis

Além disso, é claro que isso http://en.wikipedia.org/wiki/Code_smell

Leia, resuma o que você pode encontrar em seu aplicativo e, claro, liste alternativas . É uma má prática apenas levantar-se e gritar "Não gosto de como isso é feito" sem apresentar uma alternativa (de preferência) uma maneira melhor de fazê-lo.

Os hacks rápidos custam dinheiro. E não o veja de maneira totalmente negativa - Você pode aprender muito com esse trabalho agora e aproveitar as experiências que agora faz no seu próximo.

hth

UrbanEsc
fonte
0

Antes de mais nada, você usa algum tipo de controle de origem, certo? Caso contrário, comece a partir daí. Isso o ajudará primeiro e será adotado pelo resto da equipe rapidamente.

Se você tem controle de origem, não deve colocar seu nome no código, basta colocar o nome da sua empresa. É comum no código incorreto colocar um histórico de revisões nos comentários na parte superior dos arquivos; isso é melhor delegado ao controle de origem.

Agora, com relação à qualidade do código, você não poderá alterá-lo como uma abordagem do big bang. Lentamente, um por um, adicione novas abordagens para diferentes problemas. Se você fizer o que é certo, você economizará algum tempo e o usará para melhorar a qualidade geral.

Para dar um exemplo meu, cheguei ao meio de um projeto com um aplicativo Perl / CGI onde todo o HTML estava no código. O aplicativo inteiro estava em um único arquivo sem estrutura clara. Nada foi versionado. Comecei configurando um repositório CVS (sem SVN disponível no momento), colocando uma interface da Web para o cliente. No começo, eu estava lidando com os commits dos meus colegas. Em seguida, divido todos os métodos em diferentes módulos (arquivos). Nesse ponto, os colegas começaram a adotar o CVS. Em seguida, mudei o HTML do código. Então, toda vez que eu fazia uma alteração em alguma parte do código, levava um tempo para refatorar parte dele. No final, a velocidade de desenvolvimento aumentou tanto que o cliente ficou extremamente feliz. Eles solicitavam uma alteração cosmética e, em vez de dizermos "levará 2 dias",

Essa abordagem, no entanto, só funcionará se você dominar o código geral suficientemente bem. Se você não entender o quadro geral, se algumas partes do aplicativo permanecerem ininteligíveis, isso tornará seu trabalho muito difícil.

Uma última coisa, às vezes, uma reescrita completa é a única solução, mas geralmente é muito difícil justificar seu custo para o gerenciamento.

Eric Darchis
fonte
0

Como você é um desenvolvedor júnior, isso é realmente uma coisa boa. Ser jogado no meio de uma grande e velha bagunça de código ensinará muito mais sobre o que não fazer, do que apenas trabalhar em código perfeitamente "limpo". Aproveite a situação e aprenda a refatorar o código incorreto e lentamente convertê-lo em algo mais gerenciável. E não reclame sobre ter que ser o mais rápido possível. Esse é o ponto - aprenda a refatorar e limpar o código enquanto faz as coisas dentro de um prazo apertado. Afinal, qualquer um pode escrever um código perfeito se tiver um tempo infinito disponível.

GrandmasterB
fonte