Se um programador fluente desconsidera boas práticas, sua fluência não funciona contra ele? [fechadas]

16

Estou trabalhando em um aplicativo bastante grande e com erros - e devido à maneira como ele foi escrito (pouparei os detalhes, mas viola as regras na maioria das áreas em que você pode pensar), é quase impossível desenvolvê-lo sem grandes refatorações.

Parte significativa do aplicativo foi criada por estagiários, n00bs etc .; mas também houve um programador na categoria de desenvolvedor mestre e, com toda humildade, o código que ele deixou para trás também é dúbio, de uma maneira diferente, talvez, mas ainda assim.

É verdade que seu código tende a fazer o trabalho - na maioria das vezes - mas é tipicamente enigmático, reinventando a roda (por exemplo, um grande método personalizado que realiza um backup de banco de dados SQL bastante comum) etc. Basicamente, confusão desnecessária e muita superengenharia

E isso me fez pensar que ser um programador altamente qualificado (eu deliberadamente não uso a palavra "desenvolvedor", assumindo que isso indica um conjunto mais amplo de habilidades), se não for acompanhado por outras qualidades, pode realmente ser meio venenoso.

Supondo que seja verdade, algumas das razões pelas quais pude pensar são:

  • se você estiver codificando com facilidade, parece (ou realmente é, em curto prazo) apenas mais rápido para lançar suas próprias soluções no local, sem recorrer a bibliotecas, funcionalidade preexistente etc.
  • se alguém é experiente o suficiente para manter facilmente uma imagem mental de um programa complexo, é menos inclinado a dividi-la em módulos, camadas etc.

Portanto, o que quero dizer é que, se um programador fluente é um desenvolvedor ruim, sua fluência não apenas compensa o último, mas na verdade causa ainda mais danos.

O que você acha daquilo? É verdade (até que ponto, se sim)?

Konrad Morawski
fonte
24
"Dê-me seis horas para cortar uma árvore e passarei os quatro primeiros afiando o machado." - Abraham Lincoln "Afie seu machado no seu próprio tempo." - Most Bosses
JeffO
15
Alguma confusão aqui para me causado pelo título, como quando li 'fluente'I.ThinkOf(this).KindOfThing()
Benjol
Você já perguntou a esse desenvolvedor sênior o motivo pelo qual ele fez essas coisas? Como você já indicou, o aplicativo está com erros. Portanto, talvez o desenvolvedor sênior tenha sido limitado no que foi capaz de fazer com o próprio aplicativo de buggy. Se o código dele funcionar apenas "na maioria das vezes", ele contém bugs e deve ser substituído e / ou corrigido.
Ramhound 28/07
@ Ramhound - não, como ele deixou a empresa antes de eu entrar. Ele foi a última pessoa a trabalhar nisso antes de eu começar. Eu sei dos colegas de trabalho que ele costumava estar com pressa, pois a correção do aplicativo era uma prioridade devido a muitas reclamações de clientes. Mas ele não estava fazendo um trabalho muito bom em termos de gerenciamento de tempo, pois claramente atravessava uma porta aberta de vez em quando. BTW, ele criou sua própria biblioteca para localizar aplicativos WPF e Winforms.
27511 Konrad Morawski
1
altamente relacionado: isso e isso . Algumas (muitas) pessoas ficam presas nessa fase ...
BlueRaja - Danny Pflughoeft

Respostas:

22

se você estiver codificando com facilidade, parece (ou realmente é, em curto prazo) apenas mais rápido para lançar suas próprias soluções no local, sem recorrer a bibliotecas, funcionalidade preexistente etc.

Sim. Eu fui esse cara. E eu aprendi que é uma coisa terrível.

Está tudo muito bem para você, você não precisa aprender algo novo.

Mas e o resto da sua equipe? Eles se tornam muito dependentes de você. Eles não podem procurar no Google por "Clive's Quicky ORM" para obter ajuda no mapeador de objeto-relacional que você escreveu.

E então chega o dia em que eles precisam contratar alguém novo e não podem procurar pessoas com experiência no Quicky ORM de Clive.

E finalmente chega o dia em que você sai e alguém percebe um bug no seu ORM. E estará lá, porque você não tem uma comunidade inteira de pessoas testando e consertando seu produto.

Sim, aprender Hibernate pode levar mais tempo do que escrever algo leve. Mas o benefício de fazer isso é grande demais para ignorar, IMHO.

pdr
fonte
1
Também fui esse cara - e discordo da segunda frase. Ser capaz de resolver a maioria dos problemas não significa que suas soluções sejam robustas, sustentáveis, flexíveis, escalonáveis ​​... ou mesmo que a implementação inicial seja desenvolvida rapidamente. Muitas das melhores idéias que você aprende fora dos manuais de referência de idiomas / bibliotecas são coisas que são "por que não pensei nisso?" simples, e também flexível, escalável, etc. Uma das piores coisas - percebendo que eu estava exposta a uma idéia mais cedo, mas rejeitou-a como um absurdo acadêmico inútil sem uso prático, então quando eu precisava dele ...
Steve314
6
Em algumas organizações, obter aprovação para usar uma biblioteca de terceiros pode levar seis meses ou mais. Em alguns casos, você pode esperar os seis meses e ser negado no final, de qualquer maneira. Eu criei o ORM único antes, apenas porque não queria perder tempo lidando com a burocracia quando já estava em um curto espaço de tempo.
Toby
2
@ Toby: ponto justo. Mas essas empresas geralmente estão além da economia de qualquer maneira.
Pd
Sem mencionar que a Força Aérea dos EUA é igual às empresas mencionadas pela @Toby. Tentamos empurrar Ruby on Rails, mas eles não gostaram.
Travis Pessetto
@ Existem alguns casos em que reinventar a roda é a coisa certa a fazer, a chave é garantir que você entenda por que você é
jk.
14

• se você estiver codificando com facilidade, parece (ou realmente é, em curto prazo) apenas mais rápido para lançar suas próprias soluções no local, sem recorrer a bibliotecas, funcionalidade preexistente etc.

Hábil no idioma, mas não nas ferramentas. Isso nem é realmente um codificador forte. É apenas polir uma habilidade (conhecimento da linguagem) e permitir que outra fique enferrujada (conhecimento da biblioteca). O contrário é tão ruim, mas mais fácil de detectar.

• se alguém é experiente o suficiente para manter facilmente uma imagem mental de um programa complexo, é menos inclinado a dividi-lo em módulos, camadas etc.

Isso é apenas preguiça disfarçada de habilidade. Não é preciso muito esforço para manter em mente o que você está trabalhando ativamente. É preciso ter habilidade para encontrar as costuras adequadas e dividir o código ao longo delas. Os codificadores que dizem que era mais rápido ou melhor deixar tudo em um único local geralmente não conseguem ver quais itens dividir.

Christopher Bibbs
fonte
1
Sim, de fato. E suponho que eu estaria mais oposição ao popular deste tipo se eu não tivesse ganho uma boa vida ao longo dos anos vindo para limpar após eles ... ;-)
Mike Woodhouse
4

Apenas verifique se isso não ocorre porque ele está trabalhando em um ambiente "Se o teclado não está clicando, você não está trabalhando". Todos nós olhamos para o código e nos perguntamos o que estávamos pensando. Além disso, esta loja está na prática de refatorar seu código? Isso pode ter sido um luxo que ele não recebeu.

No entanto, precisamos nos afastar de nossa primeira ideia (a que você pode simplesmente sentar e pensar) e fazer um pouco mais de planejamento, pesquisa e pensamento. A tentação de tirar cada pequeno problema do caminho é tentadora e todo o projeto está cheio dessa prática. Ninguém quer pagar às pessoas para consertar coisas que não estão quebradas, então por que refatorar?

Edit: Vamos garantir que não punamos aqueles que sabem as respostas. Há quem seja fluente e escreva um bom código com rapidez. A chave é não abordar todos os problemas dessa maneira.

JeffO
fonte
Exatamente o meu pensamento. Se o foco principal da empresa é fornecer o mais rápido possível, as pessoas geralmente trabalham tarde da noite e fazem coisas que não fariam se pudessem trabalhar sem pressão. Você se sente mais "produtivo" e útil se digitar vários códigos em que pensa ao digitar. Recostando-se para pensar ou mesmo conversar com colegas sobre um problema problemático ... esse tipo de coisa faz com que você sinta que está atrasando o projeto. Você poderia estar codificando naquele tempo, certo? ;-).
deadsven
Eu tive sorte. Eu estava autorizado a trabalhar em casa depois de me mudar. Todo mundo quer saber se está pronto e não estou trabalhando. Não vou ser punido por saber a resposta.
21411 JeffO
3

100%.

A maneira cínica de olhar para isso seria que esses tipos de codificadores estão realmente mantendo a maioria dos desenvolvedores em funcionamento, corrigindo bugs que são tão fundamentais que você pode dedicar milhares de horas de desenvolvedor sem ficar na metade do caminho para um estável, flexível e seguro , modular ou [sua propriedade de software favorita]. Esses sistemas têm tantas idiossincrasias que o próprio pensamento de migrar para outra coisa, mesmo com 95% dos recursos já existentes e uma comunidade vibrante por trás, é considerado algo entre ridículo e motivos para ser demitido.

Em resumo, codificadores fluentes podem causar mais danos do que uma horda de concorrentes, mas o preço geralmente é pago ao longo de muitos anos. E eles geralmente estavam simplesmente fazendo seu trabalho (como definido por outra pessoa).

Como saber se você é desenvolvedor ou codificador? Eu acho que isso é impossível, mas toda vez que você encontra uma maneira de simplificar seu código sem reduzir a qualidade, você dá mais um passo em direção à iluminação.

l0b0
fonte
1

O problema que você descreveu foi basicamente o NIH ("não inventado aqui") - existem outros sintomas?

Às vezes, o NIH, principalmente se estiver isolado para uma ou duas pessoas, pode ser tratado em uma discussão em grupo ("Joe aqui tem alguma experiência em fazer backups de SQL usando bibliotecas padrão - o que você acha, Joe?"). Isso pode ser menos conflituoso do que você ir diretamente para a pessoa e dizer "Ei! Use a biblioteca padrão, manequim!" :)

Scott C Wilson
fonte
1

Tendo estado na sua situação e tendo causado situações semelhantes, entendo sua frustração, mas acho que a resposta para sua pergunta é um "não" simples. A fluência não garante que um programador produza código sustentável. Muitas vezes, as organizações forçam os programadores a fornecer software mal projetado e implementado devido a restrições ridículas de orçamento e tempo. É possível que o programador fluente esteja cortando os cantos, apenas os programadores se preocupam em entregar algo com o qual os clientes se importam. Obviamente, isso não é bom na prática, mas infelizmente é uma realidade que a maioria dos programadores precisa lidar em algum momento de sua carreira. Há também a chance de que o programador fluente esteja apenas sendo preguiçoso ou complacente. Eu sei falar inglês perfeitamente, mas é mais fácil e divertido usar gírias.

Quanto ao uso do código de outra pessoa ou ao seu próprio argumento, acho que realmente se resume ao que faz o trabalho melhor. Às vezes, "melhor" não é responsável por coisas como estilo e manutenção, se "melhor" significa entregar um projeto de seis semanas em duas semanas. É por isso que refatoramos e refinamos. Além disso, o desenvolvedor deve estar ciente do que está disponível em termos de código de terceiros e precisa saber como usá-lo e confiar que ele funcionará e será adequadamente suportado / mantido. Dado que existem milhares de estruturas opcionais, bibliotecas e APIs para qualquer paradigma de desenvolvimento popular usando essas coisas, isso pode custar mais tempo, energia e estresse do que apenas criar o seu próprio. Além disso, encontro casos em que o código de terceiros simplesmente não faz exatamente o que eu preciso, que é quando ele '

Daniel Pereira
fonte
0

Estou naquele barco (código legado escrito fluentemente) e fui do tipo fluente por um tempo.

O maior obstáculo para soluções "rápidas e sujas" é sempre quando você precisa adicionar mais a elas posteriormente. Quando você precisar de mais recursos. Há muito o que você pode fazer sem estrutura. Depois disso, ele quebra e é caro reorganizá-lo (ainda que satisfatório, mas não muito apreciado).

Basicamente, você precisa se proteger de QUALQUER HACK que possa se tornar uma "solução viável", pronta para ser vendida por um vendedor ansioso. É o velho "Não está pronto! - Mas funciona, não?" dilema.

MPelletier
fonte
Como isso responde à pergunta?
Gnat
@gnat A pergunta é "O que você acha disso?", minha resposta foi o que eu pensava. Ainda sou da mesma opinião: a fluência (sendo capaz de fazer soluções rápidas, hacks etc.) pode levar a códigos nocivos a longo prazo. Você não pode apenas ser fluente em um idioma, você precisa saber como organizar o código.
MPelletier