Enojado

Sem muito tempo para escrever, rabiscarei algumas considerações sobre a "Engenharia de Software" no ano da graça de 2007 que me deixam profundamente enojado.

Tivemos avanços significativos no modo como fazemos software nos últimos anos, deixamos de lado analogias com a construção civil e focamos nas características mutáveis do software para tentar entendê-lo. Tudo vai bem a não ser o temor que tenho de que os abutres do charlatanismo virão agora atrás da carne fresca, não deixarão sequer o animal morrer para estraçalhá-lo.

Hoje mesmo comentei nesse post do Rafael Carneiro sobre o problema estar nas pessoas por não entenderem a metodologia do que propriamente na metodologia. Comentei que daqui a pouco essas empresas todas correrão atrás dos métodos ágeis para enfeitarem seus portfolios e não serão nada ágeis, assim como não sabem aplicar o RUP. O problema não está na metodologia, eu me enganei quando pensei que o RUP que era errado, as pessoas é que não entendem como usar.

Pois bem, colaram no meu gtalk o link de uma discussão no GUJ sobre uma matéria da revista EXAME com o título "Fábricas de informação". Eu li a discussão sobre trechos da reportagem após o almoço, ou seja, vomitei a parte mais gostosa da feijoada, toda aquela gordurinha dos nossos amigos suínos que não havia sido digerida ainda. Não que o problema seja da revista ou do autor da matéria, pelo contrário, a matéria não se inclui na categoria de não ser especializada porque as maiores empresas de consultoria (como TCS, EDS, BRQ, IBM, Accenture, Stefanini) colaboraram com a reportagem e concordam 100% como tudo que foi escrito.

Essas empresas daqui a aproximadamente 12 meses estarão contratando profissionais especializados em metodologias ágeis que possuam certificação Scrum e afirmarão que apenas os possuidores de CMMi nível 5 serão capazes de desenvolverem softwares adaptáveis. Um mercado editorial se alargará com obras como "Seja ágil em 24hrs" e "Como se tornar um ScrumMaster". O ciclo recomeça, e tome palestras organizadas pela VOCE S/A para explicar aos acionistas o que os CIOs querem fazer com aquele aumento de 2% no orçamento trimestral, isso tudo aliado a buzzwords lindas e emotivas que fazem a gente se orgulhar de ter um diploma de Bacharel em Ciência da Computação na sala da avó materna.

Como hoje meditei, fiz Yoga, acendi um incenso e tomei um chazinho, não vou me alongar nesse assunto.

Fiquem com um pouco de sabedoria chinesa que escreveram na revista, daquelas de 1,99:

"A produção é organizada como numa linha de montagem. É comum que estes profissionais nem saibam exatamente para que serve o software que estão criando."

Já que gostam tanto de analogia, imagina agora um padeiro recebendo parte da receita e tentanto imaginar o que está "programando", será que é assim que funciona uma padaria? Essas empresas nem para budega servem, mas tem CMMi5.

Porque usamos Frameworks?

Porque usamos Frameworks?

Vamos contextualizar o que são Frameworks. Segundo a Wikipedia:

"No desenvolvimento do software, um framework ou arcabouço é uma estrutura de suporte definida em que um outro projeto de software pode ser organizado e desenvolvido. Um framework pode incluir programas de suporte, bibliotecas de código, linguagens de script e outros softwares para ajudar a desenvolver e juntar diferentes componentes de um projeto de software."

Segundo essa definição, o Framework deveria nos auxiliar como construir nossa aplicação sem nos preocuparmos em definirmos a estrutura dos paradigmas ou teorias escolhidos, em outras palavras: "Extendemos um framework e implementamos apenas os processos levantados em cima do fluxo que ele organiza". Alguns Frameworks, como o Hibernate, vão mais além, são Engines, motores de software prontos para uso.

Vamos exemplificar em alguns contextos. Os conceitos são importantes para a escolha dos frameworks necessários, quando voce desconhece ou relega isso fica muito mais difícil ter o feeling necessário para avaliar uma situação como essas.

Uma das formas clássicas de desacoplamento de um serviço para diferenciar o tratamento adequado à requisição é na implementação de fábricas de classes concretas das interfaces sugeridas. A implementação de DAOs é clássica como exemplo disso, voce cria uma interface para manipulação dos dados e classes concretas para cada mecanismo de persistência diferente. A inversão de controle a injeção de dependências foi uma evolução desse modelo, auxiliando até na camada de modelo caso necessite desse desacoplamento, como por exemplo uma interface de Nota Fiscal para encapsular entre o sistema de contabilidade e faturamento, o "quando" injetar fica a cargo do framework que conhece o mapeamento adequado. Voce não vai desenvolver injeção porque existe o melhor Framework para isso e ele se chama Spring.

Após a popularização dos bancos de dados para o desenvolvimento de software, dificilmente voce divergirá (por pressão do mercado) nesse segmento em prol de outra solução, ainda mais se a persistência requer cuidados capciosos e de dificil manipulação e manutenção como controle de concorrência. Ainda hoje existem sistemas que fazem seu próprio mecanismo de persistência, e não estou falando em salvar dados em xml, falo ainda em arquivos comuns, sem padronização reconhecida pelo mercado, geralmente sistema legado com seus bons 15 ou até 20 anos de existência. Mas o uso de SGBDs se chocam com o desenvolvimento Orientado a Objetos e o mapeamento objeto-relacional corresponde pela parte mais significativa do tempo de desenvolvimento medida em horas. O uso de um framework para minimizar esse desenvolvimento é significativo no sucesso do projeto. O problema reside quando voce abdica do uso de um produto reconhecido e amplamente suportado por uma solução In House.

Frameworks caseiros

A comunidade JAVA é pejoramente reconhecida pela utilização desenfreada de padrões e Frameworks, o que acarreta em complexidades enormes e geralmente evitáveis. Como a plataforma JAVA é robusta e dominou o modelo Enterprisey (usada como principal plataforma pelos maiores Players no fornecimento de soluções como IBM, Sun, Oracle, Borland, etc), unificando de forma inédita o marcado e o mundo acadêmico, acarretou na proliferação de Frameworks que solucionam um mesmo contexto. Nenhuma plataforma é tão rica em soluções diferentes para o mesmo problema. Solução para uns, problemas para outros. É comum desenvolvedores menos experientes sofrerem crises existenciais sobre qual solução adotar, vide o modelo MVC Model 2 que possui meio milhão de frameworks que fazem a mesma coisa (vale ressaltar a sanidade mental do pessoal do Struts e Webwork que resolveram unificar suas soluções e fazer algo melhor juntos).

Tenho e tive problemas sérios com equipes que acham que podem criar uma solução melhor que o mundo inteiro. Explico, na empresa que trabalho existe uma ferramenta que se propõe a competir com o Hibernate com a diferença que só quem conhece são as pessoas que trabalharam na sua concepção e por sinal nem fazem parte da empresa em questão. Será que elas pensaram em todos os problemas do mapeamento objeto-relacional que grandes especialistas no mundo inteiro pensaram e ajudaram a solucionar ou mesmo minimizar no Hibernate? Evidente que não tiveram recursos suficientes.

E aqueles Frameworks que suspostamente são Open Source mas que o controle é rigidamente orquestrado por uma empresa apenas? Eles conseguem a eficiência na resolução de problemas com tamanha agilidade e precisão que projetos abertos e suportados por uma grande comunidade?

A diversidade é interessante, a concorrência ajudou ao JAVA ser o que é, mas o ego e os sentimentos humanos de discórdia por ciumes ou vícios semelhantes proliferam ferramentas desnecessárias. Você teve uma idéia excelente que melhora um conceito? O que está esperando para criar um projeto? Mas será que não é melhor contribuir com um projeto existente e ajudá-lo a melhorar? Essas são questões que só dependem das pessoas envolvidas, não está certo ou errado criar mais uma ferramenta, mas é saudável saber escolher, antes de tudo é preferível levar em conta o pós-desenvolvimento, esse é o mais importante nos custos finais de um produto.

A escolha precipitada principalmente empolgada por apresentações e promessas mágicas de solucionar o que o mercado tenta a 30 anos ou mais é a mais nociva à saúde financeira dos negócios. Assim como existem pessoas que não saem sem consultar o horóscopo do dia ou levam a sério charlatanismo de búzios e bacias com água, existem arquitetos e gerentes que acreditam que alguém solucionou um problema do mercado e está cobrando somente U$ 20,000 dólares por isso. Pior, acreditam que sua equipe conseguirá desenvolver uma ferramenta melhor do que o mundo inteiro. Isso que não entendo, geralmente as empresas já trabalham no limite de seus recursos, o que diabos levam a crer que desenvolvendo algo que já existe é melhor do que ajudar a melhorá-lo?

Quem se enganou com Egen e coisas similares se enganou não por falta de aviso, isso é comum na engenharia de softwares, ninguém pode substituir o ser humano na criação, não existe inteligência artificial ainda que consiga pensar, e o software é uma criação, é como uma obra de arte precisa de um artista. Porque modelos de desenvolvimento falharam por associar o desenvolvimento de software com construção civil? Porque depois que se levanta um prédio, ninguem o move para a direita ou muda um andar de lugar, já no software você pode iniciar a construção pelo telhado. O que eu quero dizer com isso é que um framework é apenas um arcabouço como diz a definição do Wikipedia, ele não vai implementar seus processos, somente o programador.

Usar ou não usar.

Quanta complexidade você gosta? Eu gosto do simples, quanto mais simples melhor.

Se eu sou contratado para desenvolver um software web, eu não chego com Spring, Struts, Hibernate, JSF, KYZ debaixo do braço e digo: quando começamos e qual é o prazo?

Quando falamos em desenvolvimento WEB (um exemplo para contextualizarmos) de forma tradicional só vem na minha mente inicialmente que tratarei de trabalhar com o protocolo HTTP, tecnologias das especificações W3C (como CSS, XHTMl) e JEE no lado servidor (mas ainda num sentido macro, nem sei se precisarei de EJBs, talvês apenas JSP e Servlet).

Vamos voltar um pouco no passado, a Sun criou os EJBs imaginando um modelo distribuído que estava em moda no início desse milênio. O cotidiano das empresas mostrou que esse modelo não era realidade, poucos são os casos que sistemas precisam rodar em servidores de aplicações distintos. Imaginavam a contabilidade no Brasil e o Financeiro na Europa por exemplo. Qual a realidade disso nas empresas? Até nas grandes isso é incomum quando se parte para a prática, inviável pelos custos logísticos associados em todos os fatores que impactam nos negócios como comunicação entre os manipuladores dos dados. Porque eu vou usar EJB se meu sistema sequer é distribuído? Existem outros fatores, mas compensa o custo? Engraçado como a nova especificação deixou o Criteria do Hibernate de fora do JPA e ainda disseram que Criteria era extranho, extranho é essa insanidade de deixar de fora o principal componente do Framework que deu vida ao troço.

Como alguém pode antes de sequer conhecer os processos do negócio já saber que vai usar Spring? e para que?

Não quero tirar o mérito de nenhum framework aqui, apenas saber se o uso está sendo razoável.

Recentemente foi selecionado para ser o arquiteto de um projeto novo aqui na secretaria que trabalho, selecionei como arquitetura da aplicação apenas JSP, Servlet e DWR (como controlador da aplicação) além dos POJOS no modelo da aplicação usando Hibernate3 como engine de persistencia, ponderei sobre o que precisava e cheguei a conclusão que isso era o suficiente. Deu uma confusão dos diabos com o desenvolvedor porque segundo ele, não sabia trabalhar com servlet, nunca desenvolveu na vida sem o Struts, deu piti, sustentei minha argumentação, dei piti, discutimos, ele me xingou, eu pedi para sair do projeto, no final a gerência do projeto SABIAMENTE me deu ganho de causa (óbvio que se eu tivesse perdido a queda de braços eu estaria chamando de não sabios). Tirei dessa experiência que os princípios são mais importantes que as práticas, que os valores são ainda mais importantes ainda. Fui precipitado e confesso que não soube levar a situação da devida forma. Resumo da história, o único servlet que existe até o momento na aplicação é o do DWR que nem foi nós que desenvolvemos, criamos os dois casos de uso principais (que são o coração da aplicação) e agora que virão aqueles cadastros e operações CRUD que correspondem aos resto da aplicação mas é a parte mais simples. Pode até ser que daqui por diante venha a precisar de Struts ou outro Framework, mas até agora não precisei, o custo de adicionar na aplicação é irrisório, mas construir sobre algo que não havia necessidade era altíssimo.

Quando alguém me pergunta o que acho de usar um determinado Framework, eu faço como Platão, respondo com perguntas para saber se há a necessidade.

O que acham do nível superior?

Seguindo a série sobre meu dilema pessoal, eis minha resposta em uma lista de discussão sobre uma thread aleatória sobre isso no início desse ano.

Escreveram isso: "Ou seja, podemos ver que o termo analista é usado apenas para separar o
profissional de nível superior do cara de nível técnico (2° grau)"

Respondi isso:

Considero que não tem diferença alguma entre uma pessoa apenas com 2º grau e uma que cursou uma faculdade, se a pessoa que tiver apenas 2º grau estudou o mesmo conteúdo que é ensinado na faculdade. Conheço várias pessoas que se enquadram nesse contexto mas por pressão mercadológica que espera que eles tenham um diploma estampado na sala as fizeram ir cursar uma faculdade.

Conheco mestres que o diploma vale tanto que um papel higiênico usado!

Antes de tudo eu sou programador
http://www.milfont.org/blog/archives/114

A maioria daqueles que querem ser  analistas e gerentes de projeto que conheci não estavam atras simplesmente de dinheiro, mas porque não são programadores. http://www.milfont.org/blog/archives/121

Diploma não garante conhecimento, tem muitos que possuem diploma e não conseguem distinguir o básico.
http://www.milfont.org/blog/archives/111

Como vivemos em um país que usa a carta del lavoro  de Mussoline, temos que nos sujeitar à informalidade http://www.milfont.org/blog/archives/105

Essas pessoas adoram uma guilda e gostam mesmo é de viver do suor dos outros
http://www.milfont.org/blog/archives/101

Para mim o que vale antes de tudo é  a experiência do sujeito
http://www.milfont.org/blog/archives/97

Existem ainda aqueles que falam e fazem bastante ruído, se jactam de certificados e diplomas e na hora do vamos ver O.o
http://www.milfont.org/blog/archives/124

Para aliviar o stress do cotidiano temos que mandar essa gente toda se fu@#$
http://www.milfont.org/blog/archives/104

Penitência, voltar para a faculdade

Todo início de semestre tenho a mesma dúvida: "voltar ou não para a faculdade por mais este semestre", parece até coisa do A.A. que tem aquela frase legal (só por hoje não beberei, ou algo assim) .

Entrei na faculdade de Ciências da Computação em 1999.1, larguei no final de 2002 e voltei no início de 2006. Parei novamente nesse primeiro semestre de 2007 e cá estou com a mesma dúvida para esse semestre.

Não, eu não sei quantas cadeiras faltam, deixei de contar faz tempo já, mas sei que ainda faltam alguns semestres… acho que 3 semestres… acho.

Desmotivação

O que sempre me desmotivou a cursar uma faculdade é a displicência que existe hoje em relação ao nível de avaliação dos candidatos por toda a vida acadêmica, qualquer pessoa que consiga escrever seu próprio nome e sabe as 4 operações matemáticas básicas consegue obter um nível superior. Qual a diferença significativa que um curso superior me acrescenta? Aliás qual a necessidade de se fazer um curso superior e não um técnico?

O mercado banalizou os cursos superiores, essa exigência comum a qualquer cargo e a qualquer necessidade de mão-de-obra recurso humano descaracterizou a real necessidade de se possuir um nível superior. Quando digo mercado eu não me refiro apenas aos colégios privados, mas aos públicos também.

As escolas privadas no Brazil não precisaram buscar o aperfeiçoamento das públicas, essas caíram aos níveis baixos daquelas. Hoje estudar em uma universidade pública não garante que você está balizado com um bom ensino, se um professor PhD é capaz de fazer isso, imagina os alunos.

Já contei aqui nesse blog que tem gente na minha faculdade se formando sem saber para que serve um banco de dados, para você que não é da área, imagina que é a mesma coisa de um médico está se formando sem saber onde ficam os pulmões ou para que serve um coração. Imagina um formando em Letras sem saber o que é uma oração subordinada… é essa pessoa que não sabe para que serve um banco de dados, voce não precisa nem ser da área, isso choca qualquer pessoa familiarizada com internet por exemplo.

O pior de isso tudo é que esse tipo de pessoa vai ser gerente, como não tem capacidade de ser programador, vai dar prejuízo nas empresas e quem leva a má fama é a miserável da Engenharia de softwares ou a Tecnologia da Informação ou [cole aqui o seu rótulo Enterprisey para informática].

Faculdade custa tempo (que eu poderia usar para estudar) e dinheiro (que não tenho sobrando para desperdiçar em algo que não fará diferença alguma), você tem que assistir aquelas aulas enfadonhas sobre tecnologias que ninguém usa mais (impressionante como a universidade não consegue acompanhar o mercado) e aulas de professores doutores ou mestres que nunca participaram de um projeto real na vida.

Tenho até um causo da faculdade, um certo professor(a) em meio a uma aula respondeu a um aluno que Orientação a Objetos é a mesma coisa do Modelo ER, mudava só algumas "besteiras", mas o conceito era o mesmo. Essa situação é tão surreal que se eu não tivesse presenciado eu acharia que era exagero de quem conta. É a mesma coisa de dizer que Liberalismo é a mesma coisa de Comunismo, talvez em um país que considera partidos sociais-democratas de neoliberais seja mesmo, mas na realidade fora da caverna não é. Eu tivesse poder, cancelaria todos os títulos de um professor desses, sorte de vocês eu não ser poderoso, guilhotina seria pouco.

Vou tentar trocar a mensalidade por cursos ministrados, pobre é fogo e ainda mais latino americano sem dinheiro no banco, sem amigos importantes e vindo do interior, vira até música do Belchior. Existe algo mais fim de carreira que música do Belchior?

Vote no Cristo?

Eu ia fazer um daqueles Posts que consumiria a manha toda para falar sobre essa extranha campanha para eleger a estátua do Cristo no Rio de Janeiro em um concurso obscuro como uma das novas sete maravilhas.

O Janer Cristaldo escreveu tudo que se poderia dizer sobre isso. Vá lá e leia um artigo sóbrio sobre o assunto de alguém que conheceu meio mundo e pode opinar com sabedoria.