Escolha o esforço de design de código ou a preguiça no mundo do Banco

23

Trabalhei por dois anos em um grande banco de investimentos.

Fiz alguns projetos técnicos com o desejo de criar o código mais otimizado, respeitando os bons padrões de design adaptados, o princípio SOLID, a lei do deímetro e evitando todo tipo de código duplicado ...

Quando a entrega na produção => zero bugs, tudo aconteceu como esperado.

Mas a maioria dos desenvolvedores veio até mim para precisar que todo o meu código é muito complexo para a compreensão da leitura. Ouvi, por exemplo: "faça alguns se e instâncias de, esqueça o polimorfismo, para que seja muito fácil corrigir bugs de produção de emergência". Eu não preferi responder ......

Conhecer esses desenvolvedores não é nada curioso, recusar esforços para entender um bom design (por exemplo, 90% dos desenvolvedores não sabem o que é um Padrão de Estratégia e criam código de procedimento e nunca projetam porque desejam, eles disseram, simplicidade ), meus gerentes de projeto me disseram que eu realmente estou no caminho errado e sou idealista demais para o mundo do Banco.

O que você me aconselharia? Devo manter o desejo de um código realmente bom ou me adaptar à maioria dos desenvolvedores que, repito, não são realmente interessantes pelo código de design que está de acordo comigo, toda a beleza do nosso trabalho de desenvolvedor.

Ou, pelo contrário, eles deveriam aprender princípios e práticas recomendadas básicas de OO para se adaptarem ao meu código?

Mik378
fonte
19
É difícil voar como uma águia quando você trabalha com perus ;-)
JonnyBoats
8
Mude sua organização ou mude sua organização. - Martin Fowler
Don Roby
9
@ Mik378 Você pode ter um problema de comunicação. Se você documentar seu código de maneira tão superficial quanto você escreveu esta pergunta (e quanto mais "fragmentos" de OO houver, mais documentação será necessária, para que as pessoas saibam o que essa ITradeSettlementVisitorinterface deve fazer), seus colegas terão razão em reclamar. Uma coisa é escrever um código bonito do qual você gosta; outra é estruturar e documentá-lo de uma maneira que o torne acessível e utilizável para outras pessoas.
2841111
2
@quant_dev: Acho que você está assumindo um pouco demais sobre o Mik378. Sua pergunta não me parece mal formulada; ele simplesmente não é um falante nativo. Não gosto da verbosidade e do design superengenharia no OO, como você parece fazer, mas a situação que o Mik378 descreve também soa como um sino: trabalhei com muitos programadores que não conseguiam entender coisas simples, como expressões booleanas (para que escreva "if (exp) então True else False") ... É provável que esse tipo de pessoa também se assuste com padrões de design, polimorfismo e, portanto, reverta para o antigo código de procedimento.
Andres F.
2
Eu discordo totalmente que manter o código simples e fácil de manter para seus colegas de trabalho está sendo preguiçoso, conforme indicado no título.

Respostas:

20

meus gerentes de projeto me disseram que eu realmente estou no caminho errado e sou idealista demais para o mundo do Banco.

GTFO!

Hora de sair e ter pena deles. Por que você deveria dar a mínima? Você sabe que isso lhes custará dinheiro a longo prazo com sua equipe incompetente. Este não é um jogo de discussão técnica. Isso é sobre política. Peça que eles treinem os outros desenvolvedores ou o GTFO! Se você não tem peso político suficiente, então o GTFO! Procure uma empresa com melhores práticas.

A única razão para ficar lá é uma compensação adequada para suas dores de cabeça. Então é melhor pagar bem acima da média ou GTFO! Duvido que você também possa crescer lá como desenvolvedor de software. O crescimento de nossa profissão é alcançado principalmente por trabalhar com pessoas que são melhores que você e que incentivam as melhores práticas. E quanto melhor você for, maior será o seu valor de mercado para as empresas que se importam.

Sim, eu sei que essa não é uma das minhas respostas habituais, mas realmente, se você não pode jogar o jogo político nesta empresa, a GTFO.

O que você me aconselharia? Devo manter o desejo de um código realmente bom ou me adaptar à maioria dos desenvolvedores que, repito, não são realmente interessantes pelo código de design que está de acordo comigo, toda a beleza do nosso trabalho de desenvolvedor.

Eu não trabalharia para uma empresa que deseja que eu forneça soluções abaixo do ideal. Eu quero esculpir meu nome no software. Eu quero me orgulhar disso. Não escrevo aplicativos procedurais em linguagens baseadas no paradigma OO. Eu acredito em software de alta qualidade e, se a empresa não acreditar, vou fazer o GTFO! Espero que você tenha o suficiente "foda-se dinheiro".

Falcão
fonte
4
+1 - Uma vez que me ocorreu o que era o GTFO ... ( urbandictionary.com/define.php?term=gtfo )
Reddog
2
@ Falcon Eu concordo totalmente com você e é um prazer encontrar pessoas compartilhando minha ideia; e especialmente quando você diz: "O crescimento de nossa profissão é alcançado principalmente ao trabalhar com pessoas que são melhores que você e que incentivam as melhores práticas". O mais surpreendente e o mais frustrante é que sou o desenvolvedor mais jovem e não aprendi realmente com os mais antigos. Obrigado pela sua resposta :)
Mik378
+1, concordo plenamente. Esse banco simplesmente não parece um bom ambiente de trabalho, e seus problemas parecem insuperáveis: programadores ruins, gerenciamento ruim. GTFO de fato!
Andres F.
2
@ Mik378: Seu empregador atual não pode usar totalmente suas habilidades e, consequentemente, não poderá pagar o que você vale. Uma organização melhor poderá obter mais valor de você e pagar mais.
precisa
+1, se você puder dar mais votos positivos, você receberá 1000 de mim. Tendo trabalhado em um banco de investimento, sei exatamente com o que o Mik378 está lidando. É um terreno fértil para comportamento tóxico, respondedores de polaridade e egomania. Não é um ambiente de ideias para promover a excelência técnica.
Desolate Planet
18

Local difícil. Eu acho que você pode seguir dois caminhos em paralelo, mantendo seu ponto de vista e mostrando vontade de comprometer:

  • Isto é sobre dinheiro. Como qualquer trabalho de desenvolvedor, de fato, mas como você enfatiza o ambiente do banco, isso deve funcionar ainda melhor;). Mostre a eles que seu estilo economiza dinheiro. Encontre um exemplo de como uma alteração nos requisitos pode ser feita com muita facilidade devido ao seu design. Tente encontrar um pedaço de outro código (você precisa se certificar de que não fica muito agressivo aqui, mas, ei, é sobre comparar estilos de código), que é propenso a quebrar em breve, e mostre a eles como você não precisa se preocupe com esses problemas porque seu código é de melhor qualidade para começar.

  • Isto é sobre dinheiro. E se o seu estilo de codificação realmente custar dinheiro? Pode ser que isso funcione se outras pessoas gastarem mais tempo tentando entender seu código do que o que está sendo salvo pelo design adequado. Você pode estar fazendo a coisa certa tecnicamente e ainda não contribuir positivamente para o esforço da equipe. Além disso, é possível exagerar no design do OOP. Estou com você do lado "o bom design é bonito", mas estou tentando conscientizá-lo aqui do ponto de vista deles e de como eles podem realmente estar certos da perspectiva deles. Paralelamente ao ponto anterior, tente encontrar um ponto em que você o exagerou. Isso dá a você espaço para manobrar: você pode dizer, ok, eu posso ser um pouco mais pragmático aqui e ali, mas veja, também existem lugares onde esse código é realmente melhor.

Nicolas78
fonte
Obrigado pela sua resposta desenvolvida. Tenho observado o seu conselho :)
Mik378
Vou acrescentar a isso o simples problema do FizzBuzz. Escreva-o em Java e, em seguida, faça-o novamente de maneira TDD, tornando-se ilegível de repente, não é ;-).
Martijn Verburg
@ Martijn Verburg - Você acha que o TDD leva a um código ilegível?
Don Roby
@Don Roby - às vezes sim, especialmente quando se lida com algo como o FizzBuzz em um idioma OO #
Martijn Verburg
+1 @ Nicolas78 "Além disso, é possível exagerar no design do OOP" - por exemplo, criar tipos de dados primitivos Objetos como int, por exemplo.
Therobyouknow
16

Mas a maioria dos desenvolvedores veio até mim para precisar que todo o meu código é muito complexo para a compreensão da leitura

Já lhe ocorreu que eles podem estar certos?

Eu trabalhei com alguém que se esforçou muito para escrever código que ele descreveu como elegante. Ele passou muito tempo censurando o trabalho de outras pessoas por não ser elegante. Quando for necessário manter o código, o código dele não é o código que eu escolheria para modificar. É tão preciso e exato que a mudança é profundamente carregada de perigos.

A palavra interessante que você menciona aqui é "complexa". Código que pode ser descrito como complexo raramente pode também ser descrito como particularmente bom.

tentador
fonte
1
+1000 Concordo. Código é para humanos. A ressalva é, é claro, que os outros codificadores devem ser capazes de ler o que a maioria dos codificadores escreve. Qualquer pessoa que não entenda o básico deve melhorar.
Iain Titular
3
+1 @temptar para "Ocorreu a você que eles podem estar certos?" e "Código que pode ser descrito como complexo raramente pode também ser descrito como particularmente bom".
Therobyouknow
2
-1: Não acho que eles estejam certos, apenas um pouco seniores, e acho que uma leitura mais atenta da pergunta torna isso óbvio. A frase-chave do OP é "evitar todo tipo de código duplicado ..." Ele está tentando secar o código, mas fazer isso requer uma sofisticação que seus colegas aparentemente não têm. Ele também citou sugestões de seus colegas para "apenas adicionar uma if ... instanceof". Isso também me diz que o OP está no caminho certo e seus colegas estão construindo uma grande WTF.
Kevin cline
o que me preocupou é que a POO "muito complexa" pode ser uma coisa boa, mas também pode ficar muito complexa muito rapidamente. Suspeito que o Pôster Original tenha bebido a ajuda legal do OOP e não entendeu que nem sempre é a melhor maneira de codificar, e que ele pode estar introduzindo muita complexidade extra onde não é necessário.
Zachary K
Parece que esse seu colega de trabalho não possui os testes para manutenção futura. Você pode trazer isso à tona com o gerente de projeto.
10

Os fabricantes de móveis da era vitoriana (pelo menos aqueles cujo trabalho ainda hoje vemos) eram verdadeiros artesãos, o que eles fizeram foi funcional, bonito, bem trabalhado, projetado e construído para durar uma vida. No entanto, nos últimos 150 anos, o mundo mudou. Poucas pessoas estão dispostas a pagar por esse tipo de artesanato, quando alternativas mais baratas são mais comercialmente pragmáticas ao comprar uma mesa de jantar.

Muitos programadores querem ser os artesãos do passado, infelizmente, o comércio dita que isso não pode acontecer o tempo todo. Você tem uma escolha, adaptar ou sair. Existem empresas que querem artesãos, mas são superadas em número por aquelas que querem produtos que funcionam principalmente, baratos e agora.

A dica para mim de que você não é adequado para a maioria dos desenvolvimentos comerciais de software é o "Quando a entrega na produção => zero bugs". Nem a Nasa conseguiu isso com os ônibus espaciais.

Os únicos lugares em que sua atenção aos detalhes e, portanto, o custo inicial, provavelmente serão aceitáveis ​​são os sistemas de nível 1 de vida crítica - por exemplo, aviônicos / aeroespaciais, automotivo, militar e médico.

mattnz
fonte
1
+1 em @mattnz para "Você pode escolher, adaptar ou sair"
therobyouknow 29/11/11
2
Eu discordo - isto é um banco . Eles tendem a gostar que não haja bugs em seus softwares, pois os erros podem ficar bastante caros. As soluções também podem funcionar por anos ou décadas.
2

O problema é que você está trabalhando no lugar errado. Parece que você é um programador muito academicamente inclinado. Você não se sairá bem no ambiente em que se encontra e é bem provável que alguma desculpa seja inventada para se livrar de você e do seu código "muito complexo". Você pode receber tarefas indesejadas e / ou análises de desempenho ruins e até que você saia por conta própria ou que elas tenham uma trilha de papel com cobertura traseira suficiente para demiti-lo.

Eu recomendo que você encontre um lugar para trabalhar que valorize suas tendências acadêmicas. Eles estão lá fora. Você também encontrará alguns que estão em cima do muro entre pragmáticos e acadêmicos. Um trabalho como esse pode ser sua melhor opção, pois permitiria convidar um pouco de caos à sua abordagem, ajudando outros a refrear o deles.

jfrankcarr
fonte
+1 em @jfrankcarr pela observação perspicaz de "podem receber atribuições indesejadas" (uma forma de demissão construtiva)
therobyouknow 29/11/11
2

Antes de tomar medidas drásticas como mudar de empregador, tentaria melhorar sua própria capacidade de explicar aos não programadores como os executivos por que sua maneira de codificar é melhor para a empresa e economizar tempo e dinheiro. Além disso, verifique se você não aplicou padrões de design apenas por motivos de design - você tem certeza de que também seguiu as regras do KISS e YAGNI? (Ok, padrão de estratégia e polimorfismo não são ciência do foguete, dê aos seus colegas algum tempo para se adaptarem e explique a eles por que você escolheu essa abordagem.)

Doc Brown
fonte
Concordo que o problema é que eles não querem aprender, não querem mudar de mentalidade (não sou um gênio em Java, mas quando não entendo algo que a maioria das pessoas considera excelente para sei, farei um esforço para aprendê-lo (livros, artigos da Internet, stackoverflow etc ...) Para resumir, eles não querem ter dor de cabeça com padrões (digo padrão, mas posso dizer "Excelente" princípio de programação mais em geral) que não levá-los muito mais dinheiro ... é difícil dizer isso, mas é tão verdadeiro Se apenas aplicativo estava funcionando bem => Eu certamente não iria escrever este tópico..
Mik378
@ Mik378: você está falando muito sobre o que "os outros fazem de errado". Claro que tudo o que você fez foi certo?
Doc Brown
O polimorfismo do @DocBrown tem a desvantagem distinta de fragmentar a lógica entre arquivos, em que simples instâncias de mantê-lo em um único método. Talvez as unidades de trabalho sejam muito pequenas?
2

Na minha empresa, realizamos uma série de workshops baseados no Clean Code Developer . O objetivo era criar um fórum fora do dia-a-dia, com seus prazos agitados e compromissos ruins, onde os desenvolvedores pudessem aprender sobre os princípios de design de software (como você mencionou), técnicas de programação etc. e refletir sobre seus projetos e seu próprio trabalho.

Exemplos da vida real de projetos reais também foram discutidos. O feedback dos participantes foi AFAIK muito positivo. É difícil medir um benefício real, no entanto.

A participação nesses workshops foi em parte no tempo patrocinado pela empresa, em parte no tempo livre dos participantes. Você não alcançará os colegas que não se importam com o aprendizado e simplesmente querem fazer o trabalho deles e ir para casa, mas para qualquer pessoa que tenha algum interesse em seu trabalho, isso pode ser interessante.

Robert Petermeier
fonte
Eu gosto muito dessa ideia.
tentar
2

Antes de tudo, eu verificaria se o seu caminho é realmente melhor. O código orientado a objetos pode ser muito bom, mas também pode ser um pesadelo de efeitos colaterais ocultos e cada ação pode exigir várias classes diferentes.

Melhor ainda, vá para a InfoQ e assista à palestra de Rich Hickey sobre "Simple Made Easy"

Zachary K
fonte
1

Você vai ter que ceder um pouco se quiser continuar trabalhando lá sem lutas constantes. Um grupo de desenvolvedores que é totalmente processual não aceita polimorfismo imediatamente. Embora eles não consigam projetar de maneira OO, eles podem aprender com seu código. Eles podem perceber que alguns de vocês codificam é mais fácil de manter.

Como uma observação lateral, é necessário fazer perguntas durante o processo de entrevista para ver qual processo de desenvolvimento e metodologia de codificação é usada se você achar importante corresponder às suas preferências.

JeffO
fonte
0

Emergências acontecem. Você não é perfeito e as mãos deles estragam seu código em algum momento. Isso, a menos que você nunca tire uma folga, o que, como o seu médico de família confirmará, não é bom para sua saúde. E leva a maiores chances de emitir código ruim.

Seu código pode ter uma qualidade mais alta (fato não comprovado), mas eles têm políticas . (com certeza)

Você foi avisado para seguir as políticas e será responsável por não segui-las. Em uma situação de emergência. Em um aplicativo bancário. Quero dizer, se seu objetivo está acabando mal e na prisão , posso descobrir muitas maneiras mais engraçadas e significativas de obter o mesmo resultado.

Vocês, colegas de cela, ficariam encantados em ouvi-lo divagando sobre a falta de curiosidade de seus ex-colegas de trabalho.

(então, novamente, sua empresa provavelmente não possui políticas internas contra o design de OO, mas o engenheiro desajeitado treinado por COBOL que tentará corrigir seu código vai compensar algo do nada e, IMHO, na pior das hipóteses, ele ' terá 40% de chance de marcar um acerto crítico)

ZJR
fonte
1
Pessoalmente, acho que um desenvolvedor muito bom faz um ótimo código tão rapidamente quanto esse código sujo. Concordo com você no aspecto da emergência ... mas quando um projeto é planejado por 4 meses, e os desenvolvedores nem sequer têm uma visão global do que farão, como e se já existe algo no aplicativo que irá ajudá-los, não pude aceitar. Quando um desenvolvedor diz: "Eu sei que esse código é horrível, mas nunca o refatorarei porque posso quebrá-lo", é ridículo. Eles são engenheiros ou não? Um engenheiro deve assumir riscos e fazer alguns bons testes unitários reais para ser Confiant
Mik378
1
Eu concordaria se não estivéssemos falando de bancos aqui. Eu sempre sinto que eles são um grupo diferente dos outros programadores. Eles também são geralmente mais velhos. (No meu entorno, no mínimo, como em todo lugar, eu deduzo) A matemática deles é simples, mas a precisão deles não é.
ZJR
@ZJR Você está se empolgando aqui, com suas profecias do OP cumprindo pena de prisão por usar OO. A maioria dos códigos bancários não está sujeita a esse escrutínio.
3141111
0

Tente lembrar que a programação é considerada por alguns como um meio para um fim, e não por si mesma. Pense em todos os produtos e serviços que você usa: você gasta muito tempo pensando se o código abaixo é feito de forma elegante? Ou você simplesmente os aprecia como eles simplesmente funcionam? Encontre um setor ou causa de sua paixão, encontre uma organização com isso e ofereça soluções que incluem programação, mas não apenas isso. Os problemas podem ser resolvidos de maneira brilhante de diferentes maneiras.

therobyouknow
fonte