Category Archives: Engenharia de Software

Especificação ou implementação?

A primeira recomendação em qualquer ramo é sempre seguir a especificação, isso é válido para não cairmos em um dos piores anti-patterns que existe, o “Vendor Lock-in“. Na indústria do Software passamos por isso frequentemente e a estratégia de Embrace-Extend-Extinguish esteve bastante presente na história dos bancos de dados como exemplo disso.

Features proprietárias são sedutoras, antigamente usávamos grids com paginação no HTML com a propriedade datasrc na tag table, podíamos ler inclusive de arquivos XML. Isso muito antes de Ajax ou até do Firefox. Evidente que só funcionava no IE.




	
	



Com a popularização do Firefox e a necessidade das aplicações serem CrossBrowser, tivemos que nos adaptar às specs da W3C. Praticamente todas as aplicações WEB precisaram serem reescritas -algumas até hoje ainda só “rodam” no IE.

Usar uma Feature proprietária facilita, mas no final você pagará o preço da não interoperabilidade. Agora precisamos usar um Framework Ajax para fazermos coisas que antes era nativo. No IE tínhamos até DnD.

Especificação muito mais frágil do que as implementações nos força a criar uma “Isolation Layer” como solução de refactoring sem comprometer o sistema. Podemos então usar as features nos beneficiando do que a implementação tem a oferecer sem comprometermos o resultado final, o uso fica encapsulado na solução.

Especificação mal feita

O problema é quando a definição de uma especificação fica frágil o suficiente – por problemas políticos – para forçar um refactoring profundo na mudança entre implementações.

No CEJUG, ocorreu uma thread sobre problema com data na JPA, onde eu recomendei retirar a anotação @Temporal – que já tinha me dado trabalho anteriormente – e por “feeling” eu sabia que o problema era nessa anotação, mas nunca tinha pesquisado para saber o real porquê. Como quem ganhou dinheiro com Feeling no Brasil foi apenas Morris Albert – by Cardoso – eu dei uma pesquisada sobre isso e descobri que [como escrevei no email]:

From CMilfont
to discussao@cejug.dev.java.net
date Mon, Oct 27, 2008 at 9:54 AM
subject Re: [cejug-discussao] problema com data

Dei uma pesquisada e a conclusão que cheguei é:
A spec determina que propriedades do tipo Date e Calendar [util java] devem ter a anotação @Temporal.
TopLink obriga, se não tiver lança uma exceção ValidationException [pelo menos foi o que vi na documentação dele, não cheguei a testar].
Hibernate é opcional, mas se você colocar ele devolve uma instância de Calendar, porque entende que a data é completa [como Timestamp] mesmo dizendo que o tipo é Date – aqui entendo como uma falha e vi que as issues sobre isso no projeto já foram fechadas, os últimos builds devem ter consertado, ou não.
A spec não diz que deve lançar exception mesmo dizendo “must be” então o Oracle TopLink assumiu essa responsabilidade.
Claro que essas funcionalidades devem também mudar de build para build então podem ter diferenças nas versões de builds entre os próprios implementadores, como Hibernate e TopLink mudarem da versão x.x.1 para x.x.3 por exemplo.
Coisas de spec mal escrita, JPA tem que ser urgente revista, os capítulos ficam muito ambiguos, tem trechos que você fica bastante confuso, diferente de specs como da JSE que é bastante clara.

O problema disso é que não dá para encapsular a diferença entre as implementações porque o uso dessa anotação é incompatível entre dois desses implementadores.

Outro problema da JPA é a falta de elementos básicos que um ORM deve implementar – como a Criteria – impossibilitando a troca de implementações com um simples refactoring. Tudo bem que em um Domain Model você tem como – e deve – isolar essa diferença entre Engines ORM mas em termos de Refactoring da aplicação no geral, ter que reescrever todas as buscas de uma aplicação porque a Engine não suporta Criteria pode não afetar o modelo mais trará um prejuízo enorme.

Como o Hibernate é OpenSource, maduro e anos-luz à frente até da nova especificação de JPA 2.0, a escolha dele pelos profissionais experientes é a mais adequada. Spring, é outra solução ao JEE sem EJB que permanece como indicação desde o livro do Rod Johson de 2004 que era ainda sobre EJB2, recomendava o uso de JEE sem EJB e apresentou o Spring oficialmente ao mundo. Apesar de que Spring e EJB3 estarem bem nivelados hoje em dia, Spring ainda leva uma certa vantagem, ainda mais pela maturidade e semrpe estar nos trilhos corretos, coisa que o EJB está se ajustando aos trancos e barrancos.

Em regra eu sempre recomendo o uso de especificações, mas em determinados pontos a especificação é desaconselhada e o uso direto da implementação tem suporte mais adequado. Não temos o poder de sempre escolhermos as ferramentas mais adequadas, muitas vezes a política impera – como nos órgãos públicos que são obrigados a usarem Oracle ou IBM por imposição governamental feita em um escritório na Casa Civil.

Typically chemist’s shop can sale to you with discreet treatments for various soundness problems. There are numerous of safe online pharmacies that will deliver medications to your address. There are divers medicines for each afflictions. Learn more about “viagra manufacturer coupon“. Maybe “viagra discount coupons” is a extremely complicated problem. Matters, like “coupons for viagra“, are united numerous types of soundness problems. If you need to take prescription medications, ask your dispenser to check your testosterone levels before. Sometimes the treatment options may include erectile disfunction remedies or a suction device that helps get an erection. Keep in mind web-site which is ready to sell erectile dysfunction drugs like Viagra without a recipe is fraudulent. When you purchase from an unknown web-site, you run the risk of getting counterfeit remedies.

Gerentes de projetos não são técnicos

Há uma grande confusão sobre o papel correto de um gerente de projetos, eu mesmo até pouco tempo exigia dos gerentes um papel diferente da sua real função dentro de uma empresa de desenvolvimento de softwares.

Teoricamente o PMI não criou uma metodologia para gerência de projetos de desenvolvimento de softwares, criou algo mais abstrato, que teoricamente deveria ser apropriado para quaisquer projetos. A cultura PMBOK aliado a cultura CMMi pode produzir algo profundamente pior se exigida como “metodologia para gerencia de projetos de software”.

Em discussão recente nas listas de discussões eu respondi o seguinte:

from CMilfont
to pbjug@googlegroups.com
date Wed, Sep 24, 2008 at 3:49 PM
subject Re: [PBJUG] Re: [MEIO-OT] – Referencia de leitura do mês sobre nossa realidade no NE
mailed-by gmail.com

hide details 3:49 PM (20 hours ago)

Reply

Um gerente de projeto não tem nada a ver com desenvolvimento de software. O papel dele no time é de observador. lado a lado com o cliente.
O papel de um gerente em um processo de desenvolvimento cabe a grosso modo acompanhar e providenciar ações para minimizar os riscos passados pelo líder técnico da equipe.
Como: providenciar mais recursos financeiros, contratar mais pessoas, gerenciar tempo do projeto, e principalmente cuidar para que o café não esteja mais ou menos frio, que é o que mais impacta no bom desenvolvimento de software.
Se é para ter um script, uma boa empresa deveria distribuir seus cargos onde o lider e os desenvolvedores devem ser os mais bem pagos, seguidos do gerente e do sobrinho do dono, acabar com cargos de programador e analista.
Em primeiro lugar na folha de pagamento a copeira que faz o capuccino perfeito e o boy que compra aquela coxinha + coca de 600 do outro lado da rua.

Sobre a brincadeira da coxinha, o que quero dizer é que dinheiro e evolução na carreira não passa em se tornar um gerente de projetos, papéis em uma equipe tem a ver com “skills” diferentes, não com salário ou evolução. Um líder técnico pode ganhar mais que um gerente de projetos.

Limitando-me apenas ao contexto desse post, o papel do gerente tem que ser o mais abstrato possível, sei que a realidade é diferente no nosso mercado, mas essa história de que o caminho natural de um bom desenvolvedor é evoluir para um gerente é errado.

Não necessariamente o gerente é o técnico mais experiente, são papéis distintos na equipe, ele não vai se preocupar com aspectos técnicos. Até a métrica não é feita por ele, a equipe que especifica, mas controlada e acompanhada. Com base nisso um gerente pode ser tranquilamente um não-técnico naquilo que gerencia desde que não assuma responsabilidades que interfiram no processo de desenvolvimento do software.

Claro que em ambientes burrocráticos onde o gerente não lide com auto-gerenciamento ou não saiba como trabalhar adequadamente, acaba involuntariamente em um processo monolítico e prolixo que por mais que se tenha boa vontade, nada de substancial consiga ser produzido.

Tive uma experiência traumática quando fui coordenador de projetos de uma “fábrica de software”, assumi o papel de coordenador/gerente quando na verdade era um líder técnico, todos os projetos evidentemente fracassaram, porque os projetos que conseguimos entregar foram projetos fora do prazo.

Riscos como falta de pessoal, recursos financeiros e de equipamentos foram orçados e medidos de forma errada porque estava assumindo skills técnicos como programar e arquiteturar em todos os projetos envolvidos, acabei não realizando uma coisa nem outra. Cheguei ao ponto de me auto-alocar no cliente desenvolvendo porque assumi os riscos de forma inapropriada.

Não assumo todos os deméritos pelo fracasso, mas com a experiência que tenho hoje eu deveria saber que ser gerente assumindo funções técnicas é prejudicial para a equipe.

Hoje não quero ser gerente de projetos, sou programador, gosto de ser técnico, sou mais feliz assim. Poderia ser um gerente de projetos hoje? Poderia e tenho mais experiência de quando eu fui, mas não quero.

Cada um tem que assumir os papéis dos quais tem melhor aptidão. Não necessariamente ganhar melhor.

Fazer o que sabe melhor e o que gosta é o caminho mais natural para ser feliz ou no mínimo não ferrar com a vida dos outros.

Typically chemist’s shop can sale to you with discreet treatments for various soundness problems. There are numerous of safe online pharmacies that will deliver medications to your address. There are divers medicines for each afflictions. Learn more about “viagra manufacturer coupon“. Maybe “viagra discount coupons” is a so complicated question. Matters, like “coupons for viagra“, are coupled numerous types of soundness problems. If you need to take prescription medications, ask your dispenser to check your testosterone levels before. Sometimes the treatment options may include erectile malfunction remedies or a suction device that helps get an erection. Keep in mind web-site which is ready to sell erectile dysfunction drugs like Viagra without a prescription is fraudulent. When you purchase from an unknown web-site, you run the risk of getting counterfeit remedies.

Para encerrar a discussão

Meus 5 leitores devem ler o blog do Shoes, mas se alguém não o acompanha, vá nesse link e veja os argumentos definitivos nessa história toda sobre código e modelagem em esqueletinhos.

Ressalto a seguinte observação:

“A conclusão que nós chegamos é que engenheiros de software possuem o poder que falta para engenheiros civis/arquitetos e ainda assim usam as ferramentas de quem não tem este poder.”

Se alguém não entender essa frase eu posso desenhar, mas está claro e perfeito. Discussão encerrada.

Mas como sou um pessimista, sei que muitos [os de sempre] vão contestar com as mesmas falácias e sofismos.

Mas vá lá, leia o post inteiro e tire suas próprias discussões.

Typically chemist’s shop can sale to you with discreet treatments for various health problems. There are numerous of safe online pharmacies that will deliver medications to your address. There are divers medicines for each afflictions. Learn more about “viagra manufacturer coupon“. Maybe “viagra discount coupons” is a so complicated question. Matters, like “coupons for viagra“, are connected numerous types of soundness problems. If you need to take prescription medications, ask your pharmacist to check your testosterone levels before. Sometimes the treatment options may include erectile disfunction remedies or a suction device that helps get an erection. Keep in mind web-site which is ready to sell erectile disfunction drugs like Viagra without a recipe is fraudulent. When you purchase from an unknown web-site, you run the risk of getting counterfeit remedies.