Na semana passada fui contactado para adicionar funcionalidades no sistema feito em Rails de um banco que todos conhecem. No primeiro momento fiquei contente e surpreso de um banco ter realizado um projeto utilizando Rails como tecnologia, já trabalhei com sistemas para diversos bancos e o mais moderno que vi foi o Struts 2.
Os sentimentos foram mudando conforme ia revisando o código que já estava feito. Sem exagerar, essa aplicação feita em Rails é a pior aplicação que eu já vi, considerando também aplicações feitas em Java, PHP e ate ASP, tecnologias com as quais já trabalhei.
Muitos devem estar se perguntando agora como uma aplicação feita em Rails pode ser tão assustadora assim, por isso vou mencionar umas “características” dela.
Para começar, a aplicação não utilizava um sistema de controle de versões, os arquivos estavam por exemplo assim: index.html.erb, index.html.erb.1, index.html.erb.14112008, e por ai vai.
O primeiro código que analisei foi o do modelo, abri uns arquivos e encontrei todo tipo de coisas. Existia HTML e XML que estava sendo gerado no modelo, existiam métodos que recebiam como parâmetros o nome do controller e o nome da action, alguns ate o nome da view. Alguns métodos eram nomeados the ruby way e outros camelCase, e para finalizar aqui, encontrei métodos com as mesmas linhas de implementação, mas com nome diferente.
Seguidamente passei aos controllers, o código não melhorou. Tinham controllers com mais de 1000 linhas de código, métodos com mais de 100 linhas, menus e outras coisas dinâmicas em HTML sendo geradas e novamente, variáveis de tudo tipo, the ruby way e camel case.
Para finalizar: as views. Aqui não tenho muito a dizer, quase tudo era HTML puro, muito HTML, muita coisa repetida. Tinha muito HTML porque não eram utilizados os layouts do Rails, no máximo eram utilizados alguns partials, que foram colocados na pasta layout…
Mas por que estou dizendo todo isto? Porque não podemos ver coisas assim e ficar de braços cruzados!
Eu venho do mundo Java e no mundo Java tem uma excelente tecnologia chamada Hibernate. Mesmo sendo excelente, ela nunca ganhou seu espaço firme no mercado brasileiro justamente porque sempre alguem a utilizou do jeito errado. São varias empresas já as que me dizerem: “Não utilizamos mais Hibernate porque em tal projeto não deu certo”.
A mesma historia não pode se repetir com Rails!
Eu tenho enviado um email para a empresa responsável pelo sistema dando a conhecer que o produto deles foi realizado com uma qualidade péssima e dei a conhecer que não existia necessidade disso, dado que eu sei que no mercado existem excelentes desenvolvedores que morrem de vontade de trabalhar com Rails e não possuem a oportunidade. Muitas pessoas se esforçam fortemente para melhorar o desenvolvimento de software, especialmente no Brasil, e um trabalho desses simplesmente pode causar um estrago enorme .
No mesmo email prometi também que não ia mencionar o nome da empresa se ela me prometesse que ia melhorar essa qualidade.
Meu email não foi respondido, mas por outra pessoa eu ja sei que foi lido. A mesma pessoa comentou que não era meu problema, que a empresa não se importava com a qualidade do projeto, que ela tinha conseguido vender ele é ter ganhado dois prêmios, que isso era o que importava para ela, finalizando com que ia ser processado e iam queimar meu nome se anunciava o nome da consultora.
Não sei por que poderia ser processado se não tenho mentido em nada, mas para não arriscar, vou manter o nome em off.
Sobre o nome, eu queria deixar claro que estou escrevendo esse texto porque não consigo me conformar com coisas feitas de mal jeito. Eu amo minha profissão e meu pais e essas duas coisas são minhas principais motivações para realizar as coisas com a maior qualidade possível, isso é o que podem esperar de mim.
Acho que não é preciso argumentar e que tudo mundo consegue entender aqui que empresas com esse pensamento, que não aspiram a excelência e não se preocupam com qualidade são negativas para os que se esforçam com melhorar a comunidade e a industria de Software.
Queria dar a conhecer a vocês que esse tipo de entidades já chegaram ao mundo Rails e incentivar a que, no possível, tentem evitar que aconteçam essas coisas que vocês acham erradas e que indiretamente terminam afetando a todos nos.
19 respostas ate agora ↓
1 Leandro Silva // Apr 8, 2009 at 3:21 pm
Lamentável :-/
2 Felipe Coury // Apr 8, 2009 at 3:35 pm
Diego, eu sei exatamente como você se sente.
Eu trabalhei durante 5 anos para uma grande operadora de telefonia celular.
Em meio a outros projetos, desenvolvi a primeira versão de um gateway para controle de votações via SMS, como estas do Big Brother.
Isso foi em 2000. Na época, sistema de gerenciamento de filas se resumiam ao MQ Series e outros gatos pingados. Não havia esta série de artigos sobre concorrência, threads, etc.
Depois de muito trabalho, de muita persistência, colocamos um sistema no ar, utilizando a JVM da Microsoft (essa operadora era Golden Partner ou algo assim da Microsoft, então JVM da Sun, nem pensar!).
Chegamos até a descobrir e reportar um bug no JAR de JDBC do MS SQL. Corrigirmos direto no código fonte da biblioteca (que felizmente era distribuído), e conseguimos entregar um sistema decente, que funcionava extremamente bem nas condições da época.
Porém sua performance começou a ficar crítica quando as votações começaram a ficar mais populares.
Nesta época, esta tal operadora estava sendo comprada por um grupo e todo novo desenvolvimento (nosso filé mignon
) teria que ser feito por uma empresa gigante de outsourcing.
Demoramos cerca de 30 dias para gerar uma especificação com todos os pré-requisitos, seja de funcionalidade, seja de performance para entregar à tal empresa. Te digo que, se usássemos BDD na época, 90% estaria pronto. O prazo que eles tinham era de dois meses.
Uns quatro meses depois eles nos enviaram o resultado. Nesse ponto, eu já tinha escrito uma série de testes de aceitação e até um simulador para fazer teste de carga.
Você não imagina a decepção quando o código chegou. A primeira funcionalidade era que a fila deveria ser persistente e, ao decidir fazer o shutdown do sistema, a fila deveria ser persistida e carregada posteriormente, na próxima inicialização. Este requisito falhou logo de cara, assim como todos os seguintes. O pior veio quando comecei um code review. O sistema era feito usando programação estruturada dentro de classes java, que poderiam receber nomes lindos, como doAll()
No final das contas, o projeto - e o dinheiro, que não foi pouco - foi todo pro lixo e adivinha? Continuamos usando o sistema com JVM da Microsoft durante um bom tempo, usando paliativos, como fazer restart do sistema de tempos em tempos para evitar overhead e memory leaks (dando uma de babá mesmo).
Infelizmente, muitos sistemas são julgados - e premiados - pela sua casca exterior. Eu acredito que isso seja justo, quando olhamos o ponto de vista de seus usuários.
Porém, uma empresa que desenvolve sistemas nunca pode deixar de evoluir em termos de qualidade, nem deixar inspecionar de forma constante o produto final de seus desenvolvedores.
Acho que programadores ruins não são específicos do nosso país; desta ou daquela linguagens. Eu iria mais além: isso não é nem inerente somente a nossa profissão… Existem profissionais ruins em todas as áreas.
Nossa responsabilidade é identificá-los e tomar a decisão de treiná-los, orientá-los ou apenas não querer que eles sejam parte de nosso time.
Em paralelo, empresas como as que você mencionou sempre vão existir, principalmente em setores onde a politicagem e o QI (quem indica) vale mais do que o QI tradicional.
Novamente, eu acho que cabe a todos nós tomar a decisão que achamos correta, afinal não somos obrigados a nada, nem a trabalhar com uma empresa incompetente. Como eu li em algum blog, demita o seu cliente!
Eu apoio a sua atitude e assino embaixo que devemos sempre buscar o melhor em termos de qualidade, independente do que estivermos fazendo.
Abraços,
Felipe.
3 Daniel Docki // Apr 8, 2009 at 5:32 pm
Hmmm…é o Brasil né?
Mas me diz uma coisa, se a coisa ta braba mesmo, o seu cliente não pode exigir um ressarcimento do valor pago a essa empresa por tal falta de compromisso e qualidade do software?
Isso depende do contrato claro entre eles…sei lá…sempre aonde trabalhei, sempre preservei a qualidade…
4 Uchoaaa // Apr 8, 2009 at 6:04 pm
Cara, concordo contigo! É realmente de se ficar indgnado com sistemas como esse.. E olhe que, assim como vc, já trabalhei com ASP 3.0 e não vi sistema tão ruim!!
5 William // Apr 8, 2009 at 10:32 pm
Concordo em partes com a sua indignação…
Como desenvolvedor, realmente é revoltante esses tipos de coisa…
Eu já peguei projetos que pareciam que tinham “ofuscado” o código, onde, por exemplo, um método com o nome parecido com “CalculaMetragem” excluia um registro do banco..
Mas tem o lado da consultoria também..
Por exemplo, se o cliente deles pagou uma merreca num sistema gigantesco, você acredita que vai sair algo descente?
Eu tenho certeza que não.
Seria como você ir no posto abastecer e ver que a gasolina tá 0,99 e achar que tá comprando algo de qualidade.. Não tem como…
Não estou falando que consultoria está certa em entregar do jeito que estava, afinal ela poderia ter recusado o projeto, mas até agora não vi uma consultoria fazer isso (infelizmente).
Logicamente que quem sai perdendo, sempre, somos nós desenvolvedores…
6 Daniel Lopes // Apr 9, 2009 at 9:03 am
Nossa, isso é fod*.
Quanto a qualidade eu não concordo muito com o William. Quando o escopo e valor do projeto é pequeno, eu ao menos, não faço código mal feito e bagunça. Apenas diminuo o número de features e complexidade do sistema, mas ainda mantenho a qualidade alta.
7 Warlley // Apr 9, 2009 at 10:48 am
O meu maior medo começou a se manifestar. Bem, eu imagino que toda tecnologia envolva profissionais ruins. Eu nem preciso citar nomes aqui, mas quanto mais popular, mais adeptos e isso faz com que venha aquela leva de maus programadores. Eu também me sinto bastante incomodado quando vejo um código ruim, principalmente na minha linguagem preferida. Acho que esse é o preço da popularidade, eu prefiro que Ruby não seja tão popular assim!
8 Tiago Albineli Motta // Apr 9, 2009 at 2:04 pm
O maior problema é não reconhecer o problema. A empresa deveria agradecer esse tipo de feedback, para poder melhorar e tudo mais. Contudo, parece que o orgulho e a vaidade falam mais alto nessa hora.
9 William // Apr 9, 2009 at 2:22 pm
Daniel,
O que eu quis dizer não é que, por ser um escopo grande e uma verba pequena, EU desenvolvedor irei fazer de qualquer jeito.. De jeito nenhum!
O que eu quis dizer é que, o que eu vi acontecer, foi a consultoria pegar um bando de gente que não conhece (estagiários, jr., etc) sem respaldo de algum cara que conheça mais e deixar eles “se virarem”, para diminuir custos.
Este foi o exemplo daquele projeto que eu comentei sobre “CalculaMetragem”. Provavelmente o método o cara foi fazendo e fazendo e não refatorou/pensou um pouco mais.
Eu não acho que isso seja culpa do desenvolvedor, afinal, o cara não tinha alguém para dar apoio e ajudá-lo.
OBS:
Espero que agora eu tenha sido mais claro, rsrsrs.
10 Adler Medrado // Apr 10, 2009 at 8:08 am
Código mal-feito e bizarro é algo que está além da linguagem.
Existem profissionais ruins no mundo do ruby e rails também.
11 Shairon Toledo // Apr 10, 2009 at 8:13 am
Homens de gravata não preocupam com código, isso é um fato lamentável. Para eles $ó o dinheiro é importante. São todos viados esses caras.
12 Diego Carrion // Apr 10, 2009 at 3:06 pm
@Daniel não conheço os detalhes do contrato porque eu não fui contatado diretamente pelo cliente, mas o sistema vai ser feito de novo, o código foi mostrado para o cliente e ele concordou que era a melhor opção.
@William acredito que alguem tem que realizar sempre o melhor trabalho possível independente do dinheiro. Ja peguei trabalhos onde me pagaram menos do que eu queria mas de qualquer jeito tentei realizar um excelente trabalho, entre outras coisas para ganhar o cliente.
@Lucas não coloquei o nome porque sinceramente fiquei com um pouco de medo de algum processo e também não tinha certeza que a comunidade ia concordar comigo, talvez era um tiro no pé. Muita gente tem me perguntado o nome por email ou msn/gtalk/skype e ai sim eu tenho dito o nome da empresa.
13 Pastel // Apr 10, 2009 at 3:21 pm
Creio que vc está certo em amar sua profissão e seu país. Mas creio que vc tb deveria ter um pouco mais de consideração com aqueles que lhe consideram/consideravam como “amigo” e em todas as consequências que seus atos podem trazer para eles.
14 Ricardo Silva // Apr 11, 2009 at 12:48 am
Diego, com essa sua atitude você apenas demonstra que não possui a maturidade ou postura profissional que se espera de alguém da sua idade.
Você prometeu que não diria o nome “se” a empresa melhorasse o código ? Bom, pelo que você mesmo disse já faltou com a sua palavra. E acho bem curiosa a sua postura, se não de uma ingenuidade pueril. Você realmente acredita que com ameaças você consegue resolver algum problema ? Será que tem consciência da repercurssão dos seus atos ?
Acredito que você não tenha feito isso por maldade, apenas por ingenuidade, mas acho que sua ficha ainda não caiu.
O caminho para melhorar a qualidade no nosso meio passa longe de reclamações vazias e de auto-promoção.
15 Diego Carrion // Apr 11, 2009 at 5:17 am
@Ricardo, eu prometi que não ia mencionar o nome da empresa se ela prometesse que ia melhorar a qualidade dos produtos. A empresa não me prometeu nada, nem me respondeu, por outra pessoa me enterei que ela não tava nem ali para a qualidade e ainda ameaçou de me processar. Dado que não se cumpriu a negociação, não faltei com minha palavra, algo que eu valoro muito.
16 William // Apr 13, 2009 at 11:08 pm
Bem, vou tentar me expressar novamente..
Não estou dizendo que EU desenvolvedor, irei fazer nas “cochas”, pois o orçamento foi baixo e sim que provavelmente a consultoria, afim de economizar dinheiro, colocou pessoas não qualificadas para fazer esse tipo de trabalho..
As vezes a culpa não é do desenvolvedor, e sim da consultoria.
Não estou falando que a consultoria está certa em fazer isso, mas o problema está em quem está “na frente” da consultoria..
O pensamento de apenas entrar dinheiro e f*da-se o resto de algumas pessoas levam a este tipo de coisa.
Acredito que o correto seria a consultoria recusar o projeto se o dinheiro/tempo for insuficiente, mas nem todos pensam assim (infelizmente).
17 1up4Developers » Blog Archive » Agilidade é a buzzword do momento // Apr 23, 2009 at 7:53 am
[…] “Estou aprendendo Ruby on Rails por que o mercado está pagando bem“. do dia para a noite surgiram milhares de especialistas ágeis. O cara que programava em .NET ou Java no modelo tradicional (digitador de código), faz um cursinho rápido e de repente começa a desenvolver aplicações numa tecnologia que exige uma enorme bagagem conceitual. Faz tudo errado, pois não sabe realmente o que está fazendo, o projeto fracassa e ainda deixa a tecnologia com má fama. Isso aconteceu com PHP, ASP e está acontecendo com Rails. […]
18 Flávio Furlan // May 8, 2009 at 10:29 am
Olá Diego,
A conclusão é única e óbvia: mal profissional tem em todos os lugares.
Por isso ninguém dá valor par ao nosso trabalho, que é visto por algúns como coisa de moleque de faculdade e que por isso não precisa ser remunerado como gente-grande.
Como eu comentei no meu blog, nesse ponto a Cultura Rails tem feito um ótimo trabalho, nos devolvendo o prazer de programar.
Abraços,
Flávio
19 Diego Carrion // May 8, 2009 at 10:54 am
Gostei do “é visto por alguns como coisa de moleque”, porque é verdade. Ja me falaram no processo de evangelização de Rails numa empresa que eu somente queria brincar, chega até ser engraçado.
Deixar um comentário