Dev (Back & Front)ARTIGO

Tecnologia, para que te quero?

Olá, Pessoal! Este artigo representa minha opinião sobre uma coisa que acredito ser um dos principais problemas do nosso mercado: a dependência de tecnologias.
Não quero definir a forma certa ou errada de desenvolver software (e
nem poderia), mas, através da apresentação de algumas ideias, espero
causar algumas reflexões sobre esse tema.

Há pouco tempo, participei do MSDev-ES Arena : EF4 X NHibernate.
O evento consistia em apresentar os dois ORMs, e minha missão era
apresentar o Entity Framework 4. O evento foi ótimo. Só recebemos
feedbacks positivos. A questão é que quem vai a um evento chamado Arena espera ver os dois palestrantes se digladiando, o que não aconteceu.

Definir qual ORM (ou qualquer tecnologia) é melhor é uma das piores coisas que um desenvolvedor pode fazer. Sabe por quê? Porque depende de várias coisas, inclusive da pessoa que está respondendo essa pergunta infeliz.

Não quero que ninguém diga: “O @denisferrari disse que o ORM X era o melhor e ele não funcionou no meu projeto!”. Não ganho nada da Microsoft ou do Ayende
para defender um ORM ou outro. O que posso fazer é apresentar as
características de cada um e analisar, caso a caso, qual tecnologia irá
ajudar mais o Projeto em questão, independentemente da minha opinião particular ou da visão do mercado de qual é a melhor tecnologia de todas.

Comparar tecnologias dentro da mesma plataforma ainda faz algum
sentido, mas comparar plataformas na tentativa de definir qual a melhor
é, no mínimo, falta de maturidade profissional. As plataformas que temos
disponíveis são capazes de dar suporte à construção de qualquer
projeto, com diferenças, é claro, mas todas possuem a capacidade de
deixar o cliente satisfeito no final. Há seis anos, escolhi
trabalhar com .NET, e hoje ainda acho que fiz a escolha certa por uma
série de questões.

O meu ponto é que o que define a qualidade do
projeto NÃO é a plataforma de desenvolvimento, mas
sim uma junção do processo de desenvolvimento, das soluções
desenvolvidas, dos conceitos aplicados e da aplicação correta das
tecnologias da plataforma escolhida. No início deste ano, participei de
um treinamento em Java e não tive dificuldades. As necessidades em
projetos são quase sempre as mesmas – se você entender os conceitos
(leia POO, Design Patterns, Arquitetura em camadas, etc), a tecnologia
se torna quase irrelevante.

Na minha visão, um bom projeto de software não pode ser tão
dependente de tecnologia. Sei do peso dessa afirmação, mas acredito que
muitos dos problemas que temos hoje são devido a essa mistura da
essência do software (leia camada de domínio e rns) com as tecnologias
que a resolvem. Já peguei projetos em que todas as rns (regras de
negócio) estavam no banco de dados, apesar de não ser o mérito da
questão onde colocar as rns, nem mesmo @OCriador
teria coragem de atualizar ou trocar o banco que foi utilizado, afinal
de contas, o projeto depende dele.

Continuando o raciocínio, um bom
projeto de software também deveria ser independente da camada de
apresentação, ou seja, se jogarmos fora nossa aplicação ASP.NET, MVC,
Silverlight, WPF ou WinForms, a essência do software deveria ser
preservada, e bastaria somente a construção de uma outra interface para
o sistema renascer. Saber separar a Tecnologia da Essência do software
é crucial até mesmo para preservar o investimento feito pelo cliente.
Tecnologias morrem ou evoluem muito rapidamente. Um projeto de software
não poderia ser jogado no lixo só porque usou WinForms na sua
concepção, certo?

Acredito que essa dependência dos projetos às suas tecnologias só
reflete a dependência que os desenvolvedores tinham das mesmas. Por
várias vezes, me deparei com a seguinte frase: “O projeto foi feito
assim porque era o que
fulano de tal dominava na época, e como fulano de tal
é MCPD Boladão da Microsoft ninguém discutiu!”
.

Certificações técnicas
não garantem boas soluções (e não garantem uma série de outras coisas).
Na situação apresentada, o erro foi que fulano de tal
escolheu a melhor tecnologia para ele, e não para o projeto. Afinal de
contas, correr atrás do que atende melhor ao projeto dá trabalho, e é
bem mais cômodo usar o que já sabemos, mesmo que isso reduza
extremamente a vida útil do software.

Separar a tecnologia da essência do software não é puritanismo, é lógica.
Cada coisa em um projeto tem o seu lugar e sua razão de estar ali. As
tecnologias facilitam muito a nossa vida, mas como tudo que é usado em
demasia, ela pode causar sérios danos em longo prazo. Existem várias
formas de fazer seu software ser menos dependente de tecnologia, apresentei algumas na minha última palestra,
o que importa é que em pleno 2010 não temos desculpas para cometer os
mesmos erros que o mercado vem cometendo nos últimos anos.

Ser “O Cara” do .NET não garante qualidade em seus projetos.
Tecnologia é importante, e tão importante quanto dominar determinada
tecnologia é saber como e onde aplicá-la.

Abraços!

Outro cara que um dia vai mudar o mundo.

Ver perfil