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.
fonte
Respostas:
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.
fonte
Every time you touch the code, leave it better than it was before.
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.
fonte
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.
fonte
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 comofetch_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_sql
fica 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.
fonte
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.
fonte
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
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.
fonte
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
fonte
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.
fonte
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.
fonte