Refatoração: A questão

Segue abaixo a transcrição de uma conversa sobre refatoração. Claro que teve o consentimento do interlocutor.

Comecei dando 4 motivos para refatorar. Ele replicou e acabou a brincadeira na tréplica. O que está em negrito, foi o que ele respondeu. A minha tréplica está no final de tudo, porque escrevi um texto e não fui respondendo pergunta a pergunta.

[list]Aprender as boas práticas, aumentando a possibilidade de escrever corretamente na próxima vez;[/list]
Aprender boas práticas é obrigação do Programador independente de refatoração. As boas práticas existiram muito antes do que a refatoração.

[list]Em algumas situações, como em if e/ou for aninhados, só vemos com clareza a divisão do código com o mesmo pronto ou semi-pronto. Vemos melhor se precisamos passar parâmtros, retornar alguma coisa, etc. Até com essa característica, apesar de demandar mais treinamento, o código de primeira pode começar a sair mais claro;[/list]
Se o programador for sagaz e consistente no desenho irá enxergar previamente os pontos em que precisa avaliar valores e tomar decisões, sem precisar de chegar ao ponte de ter que escrver o código para depois consertá-lo.

[list]Pegar prática na refatoração ajuda na refatoração de códigos legados;[/list]
Talvez o único ponto que faça sentido desde que o tempo refatorando não seja superior do que simplesmente tratar o código legado.

[list]As vezes, é mais fácil refinar a hierarquia de classes vendo a estrutura pronta. Fica mais fácil de mover um método para outra classe. Introduzir classes abstratas. Acho que assim a abstração fica um pouco mais suave. E é por isso que uma segunda opnião, geralmente, é importante.[/list]
Idem ao ponto 2, se o programador perder um mínimo de tempo desenhando as classes e avaliando a responsabilidade de cada uma não será necessário ficar refatorando infinitamente.

Análise
Após análise vemos que o RUP endereça todos esses pontos com muito mais agilidade e eficácia poi começa com um desenho consistente e o vai refinando a cada interção.

A minha tréplica
[i]Cara, com relação ao RUP, você falou a mesma coisa que eu, só trocou a palavra refatoração por refinamento. O problema do RUP, na minha opnião, é o número excessivo de documentação que no fim, geralmente, se mostram desnecessárias.

Nem sempre, por mais tempo que percamos na análise, conseguimos uma modelagem perfeita. Diria até que quase nunca. É claro que, com experiência, a primeira modelagem melhora. Mas experiência só vem com prática e tempo. O mesmo se aplica para o “programador sagaz”. A refatoração ajuda a memorizar e a experimentar as boas práticas. Dessa forma o programador ve na frente dele como não se deve fazer e como se deve fazer. Com isso identificado, fica mais fácil dele acertar de primeira.

Discordo da sua primeira réplica. As boas práticas são relativamente novas. Antes de meados da década de 90, o importante era fazer código complexo e ilegível. Era mito na época que isso demonstrava a alta capacidade do programador. A necessidade de refatoração sempre existiu. Entretanto, devido ao mito, era dada pouca importância, justamente porque código claro e soluções simples eram coisas de “amadores”.

Geralmente, refatorar e corrigir leva menos tempo que dar manutenção em código mal feito. Além disso, o tempo ganho com as próximas manutenções transformam esse “tempo perdido” em algo irrisório. Mais além, existem códigos que de tão incoerentes e pessimamente escritos, se tornam impossíveis de se manter.

Nunca falei que é necessário refatorar infinitamente. Claro que existe um fim.
[/i]

Não sei se falei muita besteira. Respondi intuitivamente, com o que já estudei até hoje e baseei minhas opniões na “compilação” de tudo que já li até a presente data. Esse diálogo aconteceu há cerca de 1 mês e, ainda, não mudaria um ponto do que disse. Pode ser que o pessoal experiente faça ressalvas. E estarei mais do que pronto a ouvir.

Obrigado.

[EDITADO: Redução de termos que poderiam parecer arrogantes no texto e no título.]

Abraços

Me preocupa sao consideracoes como essas vindas de um perfil tecnico, para o produto final vejo riscos em ter um profissional desses definindo o que é bom ou nao para o sw que esta sendo escrito. Mas se o seu “lider” ee na verdade o papel de gerente, que lida com outros assuntos igualmente importantes mas que passa longe de escrever o codigo em si, eu nao vejo pq a principio ter essa discussao sobre refactoring. Um(a) programador(a) deve saber refatorar quando ha compromisso com a qualidade daquilo que esta sendo construido, seja qual for o motivo que levou a querer adotar essa tecnica.

E nao preciso de autorizacao pra fazer aquilo que deveria ser trabalho meu e da equipe de desenvolvimento. Da mesma forma, sempre deve-se levar em conta o perfil da equipe que vc integra. Se suas ideias nao estiverem alinhadas com a da maioria vc passa a ser considerando risco para o projeto. Ainda que reconhecam a validade dos seus argumentos vc é um sabotador, nao alguem que vai melhorar o processo.

Cara, a discussão em torno da refatoração é por um motivo simples: Acredita-se que está perdendo dinheiro. E numa visão simplista, sim está. O custo do projeto é medido em horas. Cada hora melhorando algo que já funciona é “um desperdício” de dinheiro, numa visão imediatista. O que quero tentar mostrar para eles é que essa aparente perda, se transforma em ganho, se somar os benefícios de uma manutenção eficiente em torno do ciclo de vida da bagaça.

Quando é projeto de vida curta, até entendo. Mas em softwares que não tenham uma previsão inicial para sair do ar e que a manutenção será constante, acho que a qualidade é obrigação. Por isso não tem choque. E a equipe é sensacional. Está tendo uma troca de idéias.

Acho que atacar as capacidades de cada um também não é o caminho. O cara é um monstro em C, conhece programação.

O Fowler passou por isso e conta a história na introdução do livro Refactoring. Ele propos 2 semanas de reajuste e recusaram. 6 meses depois o projeto falhou e Kent Beck foi chamado para recomeçar.

Isso acontece nas melhores famílias.

EDIT: Ele não é exatamente o gerente. Ele participa do dia-a-dia da equipe, discute modelagem, essas coisas. Acima dele tem um gerente.

Abraços

Tem uma frase célebre que muito gerente usa errado: “Quality is free.” A interpretação que eles dão é a que o seu líder deu, de que não é preciso investir em qualidade, basta cobrar do peão que faça certo da primeira vez. Na verdade, quem criou essa frase queria dizer justamente o contrário: invista em qualidade, porque essa grana volta lá na frente.

Eu já passei por dois projetos de longa duração em que houve o refactoring quando a qualidade do código caiu tanto que se começou a falar em cancelar o projeto e re-escrever o sistema. Aí apareceu o budget pra parar tudo por algumas semanas e arrumar pelo menos os problemas mais graves.

A propósito, Celso, nesse projeto não existe change request, né? Afinal, se os analistas de negócio seguirem o RUP corretamente, não haverá nenhum motivo para rever os requisitos do sistema, certo? :wink:

[quote=celso.martins]Cara, a discussão em torno da refatoração é por um motivo simples: Acredita-se que está perdendo dinheiro. E numa visão simplista, sim está. O custo do projeto é medido em horas. Cada hora melhorando algo que já funciona é “um desperdício” de dinheiro, numa visão imediatista. O que quero tentar mostrar para eles é que essa aparente perda, se transforma em ganho, se somar os benefícios de uma manutenção eficiente em torno do ciclo de vida da bagaça.

Quando é projeto de vida curta, até entendo. Mas em softwares que não tenham uma previsão inicial para sair do ar e que a manutenção será constante, acho que a qualidade é obrigação. Por isso não tem choque. E a equipe é sensacional. Está tendo uma troca de idéias.

Acho que atacar as capacidades de cada um também não é o caminho. O cara é um monstro em C, conhece programação. Talvez ele ainda não tivesse visto esse ganho na frente. Isso acontece com qualquer um. O importante é saber ouvir e quando o argumento fizer sentido, reconhecer.

O Fowler passou por isso e conta a história na introdução do livro Refactoring. Ele propos 2 semanas de reajuste e recusaram. 6 meses depois o projeto falhou e Kent Beck foi chamado para recomeçar.

Isso acontece nas melhores famílias.
[/quote]

Acho valida sua atitude mas como lider nao me convenceria nem um pouco trocar o processo atual, a visao imediatista que funciona (supondo que esteja!), por possiveis beneficios futuros…

Por outro lado, talvez o proximo passo para uma equipe motivada seja por conta propria, ou seja sem o aval do lider, fazer o que acha certo, e no final mostrar resultados positivos ao inves de especular sobre os beneficios.

[quote=celso.martins]
EDIT: Ele não é exatamente o gerente. Ele participa do dia-a-dia da equipe, discute modelagem, essas coisas. Acima dele tem um gerente.

Abraços[/quote]

Ele define a arquitetura e garante que esteja sendo cumprida?

Repare, nao estou falando de requisitos nem de UML, mas escrever e inspecionar codigo, testes, integracoes, etc.

[quote=rubinelli]
A propósito, Celso, nesse projeto não existe change request, né? Afinal, se os analistas de negócio seguirem o RUP corretamente, não haverá nenhum motivo para rever os requisitos do sistema, certo? :wink: [/quote]

Acho que algo como a XP ou o SCRUM também trará benefícios grandes, mas um passo de cada vez. Mas, primeiro temos que nos preocupar mais com a qualidade, refatorando ou não, ao invés de somente focar nos prazos e sair fazendo de qualquer jeito. Algumas vezes dá para focar no prazo e na qualidade. O problema é o pensamento do “tempo perdido”, pois, as vezes, mesmo com tempo, as pessoas achavam que seria um desperdício de tempo refatorar. Acho que mudança de mentalidade nesse ponto é um salto grande.

Não são “possiveis beneficios futuros”. Na minha ótica, isso é tão certo quanto 2 + 2 = 4. Vamos lá.
Supondo que eu tenha uma média de 5 manutenções mensais simples em determinado sistema legado. Cada manutenção leva, em média, 2 dias para ser implementada e testada. Refatoramos o sistema e percebemos que esse tempo de manutenção caiu para 2 horas.

Obs: Já trabalhei em uma consultoria de sistemas em Delphi que gastava 2 semanas para entregar manutenções ridículas. Tudo era orientado a eventos e alguns tinham cerca de 300 linhas fazendo umas 20 coisas diferentes. Tentei implementar a OO e fui demitido.

Isso significa que:

Antes
8 * 2 * 5 = 80 horas usadas com manutenção do sistema

Depois
8 * 5 = 40 horas para a refatoração
2 * 5 = 10 horas usadas com manutenção do sistema
Total de 50 horas no primeiro mês e 10 horas nos meses subsequentes

Só no primeiro mês, já está estampada a diferença. Projete isso nos próximos 12 meses. E não é especulação. Os benefícios extraidos das boas práticas de desenvolvimento é fato comprovado pela experiência.

Alguns poderiam dizer que: Ahhh isso é benefício para o cliente e não para a consultoria. Para mim isso é outra visão superficial. O motivo é simples. Se você consegue fazer algo em 1/8 do tempo que era necessário anteriormente, você, na visão da gestão empresarial, está sendo mais eficiente. Você está fazendo mais com menos recursos. Eu diria que você está sendo, inclusive, mais competitivo, isto é: fazendo mais e melhor com menos recursos. No atual cenário da economia mundial, só há espaço para os competitivos.

Seu cliente fica feliz, você fica feliz, sua consultoria fica feliz. Por que sua consultoria DEVERIA ficar feliz? Porque, ao invés de estar concentrando esforços e se desgastando em reuniões para convencer o seu cliente de que as 80 horas foram necessárias (o que quase nunca é uma tarefa fácil), você estará concentrando esforços e se desgastando para conquistar novos clientes e, assim, estará solidificando as bases da sua empresa, garantindo uma penetração maior no mercado. E, provavelmente, utilizando o mesmo pessoal.

Cara, não esquenta a cabeça com isso. A equipe é motivada e gozamos de relativa liberade para executar nossos afazeres.

A arquitetura é definida em reuniões com os mais experientes da fábrica, como eu disse.

Abraços.

Como falei, mesmo que vc esteja certo dos beneficios existe uma distancia entre a teoria e a pratica. Se a equipe toda sente confiante nao ha pq nao tentar. Mas existem pessoas que simplesmente apreciam nao ter que tomar certas decisoes pelos outros.

[quote=celso.martins]

A arquitetura é definida em reuniões com os mais experientes da fábrica, como eu disse.

Abraços.[/quote]

Entao vc tem varios lideres? Qual a opiniao deles sobre refactoring?

[quote=cmoscoso]
Entao vc tem varios lideres? Qual a opiniao deles sobre refactoring?[/quote]

Cara, a idéia não é discutir a estrutura da equipe. E nem posso fazer isso. A idéia é discutir o impacto da refatoração, aparentemente negativo, no custo de um projeto.

Abraços.

bom nao vou mentir vou o texto mais idiota que ja li sobre a refatoracao. Quem respondeu o texto nao tem ideia do custo da manutencao de software dentro do projeto. E outra somente os bons programadores que tem codigos faceis de serem lidos, e que preservem a flexibilidade dentro de um software caso contrario, entra na gambiarra. É mais simples e facil programar, pelo “eu acho melhor ir assim, pq eu consigo entender”

Achei importante uma pequena apresentacao sobre refatoracao e anexei… para quem nao conhece o assunto… e tem um post no meu blog sobre
Refatoracao e manutencao de software

flw! abraco!

Não sei porque as pessoas tendem a criticar duramente outras pessoas que não compartilham da mesma opnião. Já disse que pode ser uma visão imediatista e, para aplicações de vida curta, eu até entendo que justifique. Encontrei muita gente assim ao longo da minha carreira. Como eu disse, no início do ano desmotivei com uma situação em que fui proibido de desenvolver uma aplicação OO. Em pleno 2008. Imagina refatorar os legados.

Interessante a sua apresentação.

Acho que a nossa postura deva ser de diálogo e demonstração de fatos. Assim poderemos ter uma mudança de mentalidade no local onde trabalhamos. Canso de ver gente reclamando (e não estou usando onde trabalho como exemplo) que essa forma de trabalho não dá, que não concorda com muitos pontos e deixa tudo por isso mesmo. Muitas vezes, por falta de coragem de falar com alguém que possa resolver. Ao invés de tentar mudar, ou aceita ou pede demissão e critica duramente o modelo. Assim não vamos conseguir nada.

Acho que essa mudança de mentalidade depende dos profissionais agirem e não esperar que gerentes ou quem quer que seja mude de opnião como em um passe de mágica.

Abraços.

celso.martins

Aqui vai minha idéia de refatoração:

Este tipo de “atividade” sempre existiu (baseado no que já lí e vivi nos anos 80 e 90), apenas o nome e a maneira com que é tratado ficou um pouco diferente.
Partindo do principio que +ou- 80% do tempo gasto em um projeto é em cima de manutenção (idéia que vem de muito tempo também) fica claro que o cuidado com a qualidade do código nunca será um desperdício.
Mas por que o nível satisfatório do código não é atingido logo na primeira vez que é feito? Se entendi bem esta pergunta é o centro do papo que vc teve com teu camarada; na minha opinião a resposta é a seguinte: sintese, é essa resposta. O desenvolvedor, em um nível mais amplo, poderá ter problemas de sintese em dois pontos: no entedimento do sistema (regras, fluxos etc…) e os recursos da linguagem que serão aplicados na solução; a medida que a sintese aumenta nos dois pontos melhores soluções são encontradas para o mesmo problema. Toda vez que escrevemos um código e materializamos a nossa solução, a nossa sintese sobre o problema aumenta fazendo com que consigamos criar uma solução melhor do que a aplicada anteriormente.
Logo, quando falamos de refatoração ou qualidade de código estamos indiretamente falando de um fenomeno (entre outros) que ocorre ao se tentar entender as coisas, isso acontece em todo universo não só na computação.
Quem paga a melhoria do código? Na minha opinião depende muito do contexto, se o projeto foi planejado pensando nesta questão, ele mesmo paga; as vezes um atividade leva menos tempo do que a prevista, logo a coisa já está paga. Se vc for como eu que é um pouco perfeccionista não importa quem irá pagar se o projeto ou eu; já fique até mais tarde para melhorar código sem receber pelo simples prazer de saber que fiz melhor e que com isso me tornei um desenvolvedor melhor e por ai vai…

flws

[quote=celso.martins]Cara, a discussão em torno da refatoração é por um motivo simples: Acredita-se que está perdendo dinheiro. E numa visão simplista, sim está. O custo do projeto é medido em horas. Cada hora melhorando algo que já funciona é “um desperdício” de dinheiro, numa visão imediatista. O que quero tentar mostrar para eles é que essa aparente perda, se transforma em ganho, se somar os benefícios de uma manutenção eficiente em torno do ciclo de vida da bagaça.
[/quote]

Refactoração (esse termo não existe, mas ok…) só funciona quando vc tem codigo de qualidade.
PEgar um POG e “des-pogá-lo” não é refactoração.
Refactoração acontece quando vc entende melhor o sistema e entende que algo está errado com a responsabilidade das classes.

Portanto, refactoração não tràs melhor qualidade ao seu sistema, trás mais valor ao sistema. Deste ponto de vista não é uma perda de tempo nem de dinheiro. (O custo medido em horas é uma analepse do seculo passado)

Agora, parece-me que vc está falando de “alterar o codigo que está ruim”.vou chamar a isso refinamento só para destinguir o conceito subjacente embora possamos chamar de refatoração.

Ora refinamento é bom na medida que :

  1. elevar o valor do sistema ( o mesmo que refactoração)
  2. elevar a qualidade do codigo.

Repare que para fazer refactoração vc precisa de codigo de boa qualidade para começar. Esse codigo só vem de duas formas:a) os programadores se preocupam com a qualidade a incluem à partida , b) os programadores injetam qualidade à posteriori.

Vc faria um refinamento para elevar a qualidade do codigo à posteriori.
Esta ação é perda de tempo e dinheiro ? Não. A menos que vc ache que qualidade não é bom. (alguns acham)
É correto aceitar que o gerente diga que não pode gastar tempo com isso ?
Depende. Se foi vc a fazer vc pode gastar tempo, mas isso deve impactar directamente em si já que foi vc que colocou pouca qualidade para começo de conversa.
Se o código é legado não. Contudo, se o codigo é legado, o refinamento deve apenas acontecer como pré-requisito de uma efacotração. Ou seja, se não pensa em mudar alguma coisa mais “subtancial” no sistema, não ha porque fazer refinamento.

A qualidade do codigo tem que estar lá desde do dia 1. E não ha desculpa para não estar. Tudo o resto pode estar errado, excepto a qualidade do codigo.

Eu costumo dizer que o objetivo ao construir um software não é que ele funcione, é que ele seja facil de alterar (manter).
Se funciona otimo, se não funciona e é facil de alterar, rápidamente se coloca a funcionar.

Qualidade de código injetada à posteriori é muito cara porque demora muito para as pessoas entendenrem as gambs feitas antes (até que elas mesmas fizeram). Boas práticas podem ajudar a aumentar a qualidade desde o dia 1, mas é preciso impor o padrão de qualidade. Isso, sem duvida, é o papel do lider tecnico.

Não ha desculpa para a falta de qualidade. Qualquer um que diga o contrário está enganado. E tem 2 saidas: a) desistir de desenvolvimento, b) aprender dar qualidade ao codigo

Colocar qualidade no codigo não é uma necessidade para o cliente, mas deve ser para o programador. Se ele quer ter orgulho do seu trabalho, claro…

[quote=fantomas]celso.martins

Aqui vai minha idéia de refatoração:

Este tipo de “atividade” sempre existiu (baseado no que já lí e vivi nos anos 80 e 90), apenas o nome e a maneira com que é tratado ficou um pouco diferente.
Partindo do principio que +ou- 80% do tempo gasto em um projeto é em cima de manutenção (idéia que vem de muito tempo também) fica claro que o cuidado com a qualidade do código nunca será um desperdício.
Mas por que o nível satisfatório do código não é atingido logo na primeira vez que é feito? Se entendi bem esta pergunta é o centro do papo que vc teve com teu camarada; na minha opinião a resposta é a seguinte: sintese, é essa resposta. O desenvolvedor, em um nível mais amplo, poderá ter problemas de sintese em dois pontos: no entedimento do sistema (regras, fluxos etc…) e os recursos da linguagem que serão aplicados na solução; a medida que a sintese aumenta nos dois pontos melhores soluções são encontradas para o mesmo problema. Toda vez que escrevemos um código e materializamos a nossa solução, a nossa sintese sobre o problema aumenta fazendo com que consigamos criar uma solução melhor do que a aplicada anteriormente.
Logo, quando falamos de refatoração ou qualidade de código estamos indiretamente falando de um fenomeno (entre outros) que ocorre ao se tentar entender as coisas, isso acontece em todo universo não só na computação.
Quem paga a melhoria do código? Na minha opinião depende muito do contexto, se o projeto foi planejado pensando nesta questão, ele mesmo paga; as vezes um atividade leva menos tempo do que a prevista, logo a coisa já está paga. Se vc for como eu que é um pouco perfeccionista não importa quem irá pagar se o projeto ou eu; já fique até mais tarde para melhorar código sem receber pelo simples prazer de saber que fiz melhor e que com isso me tornei um desenvolvedor melhor e por ai vai…
flws[/quote]

É exatamente dessa forma que eu penso. E já virei algumas noites melhorando coisas que eu mesmo fiz e que os outros fizeram, sem custo nenhum para ninguém. Só para o meu sono, mas com o benefício de ver algo bem feito no dia seguinte.

Abraços.

Concordo plenamente, Sérgio.
Eu só acrescentaria uma sugestão a todos os colegas: cuidado ao criticar publicamente um programa, pois ele pode ter sido feito por você!
Quem gosta de fazer bem feito está sempre aprendendo e evoluindo, então é natural que, hoje, faça melhor do que há algum tempo atrás.
Aliás, um bom profissional atinge um bom grau de desenvolvimento humano quando, ao abrir um programa para manutenção, resiste à tentação de ver quem é o autor. Isto é só perda de foco e de tempo.

É por isso que a recomendação é que não se coloque autor no código.
Quando trabalha sozinho vc já sabe que foi vc. Quando em equipe , não interessa quem fez.
Tá errado ? corrige e pronto.

Abaixo o tag @author ! :wink:

Concordo com alguns pontos e discordo de outros.

No livro do Fowler existem alguns exemplos que não dizem respeito a responsabilidade de classes, falam de responsabilidades de métodos, por exemplo. Outros pontos falam em “desaninhar” ifs/fors, etc. Não estou falando de POG. Meu conceito de POG é: uma solução que você poderia ter dado de uma forma mais simples e elegante mas, provavelmente por falta de conhecimento, fez de qualquer jeito. Essas soluções precisam ser refeitas e não refinadas ou refatoradas.

Acredito que se você está trazendo legibilidade, no mínimo, ao código, você está aumentando a qualidade.

Sim, estou falando disso. E englobando tudo. Refinamento de responsabilidade de classes e métodos, ifs/fors aninhados e mais o sem número de pontos levantados no livro do Fowler.

Acho que, devido a minha visão de que a refatoração traz sim qualidade ao código, é possível realiza-la a partir de código com pouca qualidade. Acho que o o ponto a ser definido aqui é se a refatoração vai levar mais tempo que a reconstrução. Se sim, acho que ela é desnecessária. Melhor reconstruir. Acho que a refatoração de códigos legados entra na justificativa de tempo de manutenção do meu outro post.

E sim, claro que já refatorei código meu (e continuo refatorando). Já cansei de terminar uma solução, não gostar e começar a pensar em quebra e remanejamento de métodos, etc. Já virei noites por achar que algo não cheirava bem. E como o fantomas disse, sim, procuro ser perfeccionista. Ainda não sei se é qualidade ou defeito, mas hoje tenho muito mais orgulho de algo que fiz de primeira do que algo que eu fazia anteriormente. E sinto a melhora a cada dia.

Algumas vezes ainda não consigo isso. E melhorando a qualidade do que faço posteriormente, creio que eu esteja treinando para ser mais perfeito da próxima vez.

Interessante esta visão.

Sim, mas acho que você esteja fazendo uma divisão radical entre gambiarra e qualidade total. Pelo que já vi por aí, existe um meio termo. Existem códigos que não são gambiarras, mas que também podem melhorar na qualidade.

Concordo em gênero, número e grau. Eu já vi uma empresa inteira que estava pouco se lixando para isso. Provavelmente vai quebrar, é só questão de tempo.

Pode não ser uma necessidade aparente. Porque a partir do momento que você reduza drasticamente o tempo de entrega de uma manutenção, vai passar a ser uma necessidade básica.

Abraços.

Concordo plenamente, Sérgio.
Eu só acrescentaria uma sugestão a todos os colegas: cuidado ao criticar publicamente um programa, pois ele pode ter sido feito por você!
Quem gosta de fazer bem feito está sempre aprendendo e evoluindo, então é natural que, hoje, faça melhor do que há algum tempo atrás.
Aliás, um bom profissional atinge um bom grau de desenvolvimento humano quando, ao abrir um programa para manutenção, resiste à tentação de ver quem é o autor. Isto é só perda de foco e de tempo.
[/quote]

Estou falando de forma generalizada, espero que tenha entendido desta forma. Não estou criticando A ou B. Critico muito mais o que eu faço.

Abraços.

[quote=sergiotaborda][quote=pinto]
Aliás, um bom profissional atinge um bom grau de desenvolvimento humano quando, ao abrir um programa para manutenção, resiste à tentação de ver quem é o autor. Isto é só perda de foco e de tempo.
[/quote]

É por isso que a recomendação é que não se coloque autor no código.
Quando trabalha sozinho vc já sabe que foi vc. Quando em equipe , não interessa quem fez.
Tá errado ? corrige e pronto.

Abaixo o tag @author ! ;)[/quote]

Talvez… presta atenção, estou dizendo talvez, com a tag author você possa identificar na sua equipe as pessoas que estão precisando de nivelamento. Se não usar a tag negativamente, acho que tudo bem.

Agora se trabalhar a pessoa que não esteja nivelada (me incluo nessa leva também), teremos uma equipe mais forte e evitaremos problemas futuros.

Ou não?

Abraços

[quote=sergiotaborda]
A qualidade do codigo tem que estar lá desde do dia 1. E não ha desculpa para não estar. Tudo o resto pode estar errado, excepto a qualidade do codigo. [/quote]

Tudo muito lindo, mas da última vez que chequei ainda não tinham inventado máquina do tempo para corrigir códigos que não tem qualidade desde o dia 1. Por incrível que pareça, nesta realidade que vivemos código ruim é muito mais regra que exceção.

E aí, deixa o lixo ficar um lixo? Deixa os prazos de hoje, amanhã, mês que vem e do resto do ano estourarem por causa desse código?

Temos aqui vários sistemas que qualquer alteração demora 1 semana para ser executada. Eu estimo que demoraria no máximo 2 dias se a arquitetura dela fosse mais… humana.

O que a gerência diz sobre o assunto? Não. “Não temos recursos para alocar p/ o projeto.” “Não temos tempo.” “Não tá funcionando? Então deixa.”

Nessas horas eu fico no dilema, de uma lado o diabinho fala “Se quem deveria se importar não se importa, por que eu deveria?”, do outro o anjinho “Faça você mesmo, para o bem de todos.”

[/rant]

Eu concordo em 100% com os argumentos do Celso na discussao.

Mas o que reparei aí é o que vejo sempre nesse tipo de discussão. Aqueles que são contra a ideia da refatoracao usam argumentos baseados num ideal. No deveria ser assim, no bom programador isso, no bom programador aquilo. No “Se vc fizer certo desde o principio nao precisa refatorar.”

Como se isso nao fosse obvio. O problema eh que pra nós programadores mortais isso nem sempre eh possivel. Quem sabe seja pra eles que sao os “ases” do design que consiguem resolver tudo com um pouco de UML (sei).

Num mundo ideal em que todas as pessoas sao felizes nao precisamo de refactoring.