Blog da Improve It

Não existe canivete suíço em computação !

Publicado por Marcos Tapajós há aproximadamente 1 ano.

Canivete Suíço

Acho que não é novidade para ninguém que a Improve it está apostando em Ruby, mas especificamente no Ruby on Rails, e que eu abracei essa aposta e cada dia estou mais feliz de trabalhar nessa linguagem e com esse framework. Cada vez que comento sobre o Rails com meus amigos, ou qualquer outra pessoa, sempre escuto a mesma pergunta, "É tão poderosa quanto o Java?". Engraçado que depois que eu discuto por alguns minutos sobre essa pergunta sempre vem a mesma pergunta, "dá para usar para tudo ?".

Eu sempre explico que não acredito que em computação exista um canivete suíço e que faz parte de um bom profissional saber diferenciar onde se aplicar uma linguagem (ou uma tecnologia) em detrimento a outra. Posso estar enganado, mas o que eu vejo pelo mercado é que as pessoas procuram se enraizar em alguma linguagem achando que todos os seus problemas estão resolvidos e se esquecem que as vezes podem estar resolvendo um problema mas passando por vários outros, ou gastando demais com excesso de complexidade.

Hoje eu li um post do Thiago Arrais e pelo visto não sou o único que acha que cada linguagem tem um objetivo e uma aplicabilidade. Gostei muito desse post pois além dele tratar essa forma de pensar ele discute sobre Design Patterns com uma abordagem super interessante mostrando o quê realmente são os padrões de projeto e como eles acabam se incorporando as novas linguagens.

A forma como a maioria das pessoas encaram os Design Patterns é uma coisa que me incomoda profundamente. Frequentemente eu vejo as pessoas escreverem códigos para usar os Design Patterns ao invés de identificarem no seu código semelhanças com os padrões conhecidos e então aplica-los. Pela minha experiência essa pratica, na maioria dos casos, introduz uma complexidade desnecessária ao software e tenho certeza que toda complexidade desnecessária além de ser um desperdício é mais código e que mais código implica em mais chances de bugs.

Não estou querendo dizer que os padrões são ruins, apenas que devemos usa-los da forma correta e quando forem necessários. Participo de várias listas e sempre que vejo alguém perguntar sobre material para aprender uma linguagem várias pessoas indicam livros, artigos e sites sobre Design Patterns e me questiono se a pessoa precisa saber padrões para poder usar uma linguagem. Será que não seria mais proveitoso ela descobrir um problema, entender as limitações da linguagem e só então começar a aplicar essas gambiarras ?

Sim, padrões são gambiarras ! Gambiarras com nomes bonitos !

Comecei a tentar explicar essas minhas afirmações e vi que não consegui falar nada diferente do que o Thiago Arrais falou em seu post e por isso mesmo vou citar um paragrafo desse post dele.

"Um padrão não é nada mais que uma gambiarra para contornar fraquezas de algumas linguagens. Estas fraquezas são completamente naturais. Não se espera que toda linguagem consiga dar suporte a todo tipo de construção, mas que seja boa naquilo a que se propõe. Já que não há como ter suporte direto a tudo que se possa pensar, as pessoas começam a criar construções padronizadas para cada tipo de trabalho. Estas construções são os padrões."

O que eu quero explicar para todos que se questionam sobre qual linguagem é melhor do que a outra é que isso não existe e que cada linguagem tem seu objetivo e provavelmente surgiu dentro de um contexto diferente das outras. Indo um pouco além, que não existe linguagem perfeita, isto é, um canivete suíço.

Tags , ,  | 3 comentários

O que você achou? Coloque seus comentários e sugestões abaixo!

Acompanhe o RSS dessa página.

Comentários (3 até o momento)

  1. Walter Cruz disse 4 dias atrás:

    Esse texto do Thiago anda dando o que falar :)

    O fato é que dar nome a uma coisa tem um poder imenso sobre o inconsciente do homem. Comecei a aprender os Design Patterns a pouco tempo, mas estou procurando inverter essa corrida de começar pelo design pattern e acabar com ele no meu projeto para começar pelo meu projeto, e SE aplicável, usar um pattern.

    Aliás, o próprio nome pattern já dá uma idéia de 'padrão', e que se você não utilizá-lo estará, digamos fora do padrão. Praticamente o mesmo estratagema da Microfost de nomear seu banco de dados de 'SQL Server' (hã, existe outro além desse.. eu não sabia!) ou 'Office' (Open o quê?). A mente nos trapaceia quando menos esperamos, e nos vemos presos em emaranhados de palavras !

  2. Marcelo Alvim disse 4 dias atrás:

    Concordo plenamente com o que você disse sobre o efeito dos nomes no inconsciente.

    E no caso dos design patterns, isso é um problema ainda maior em português. Em inglês, "pattern" e "standard" são duas palavras completamente diferentes e dissociadas, enquanto em português as duas são traduzidas para "padrão"!

    Na minha opinião, isso é mais um dos fatores que contribuíram para o uso errado deles na nossa indústria. Não que eles não sejam usados erradamente nos países de língua inglesa, claro...

    Eu sempre fui a favor de usar os termos em português quando eles existem e comunicam a mesma coisa. Porém, neste caso, acho que a tradução mais atrapalhou do que ajudou.

  3. Eleudson Queiroz disse aproximadamente 1 ano atrás:

    Acho que o principal é não confundir padrão com um modelo imutável. Estou lendo o Padrões de Arquitetura... onde o próprio Fowler insiste que padrões são para serem adaptados à realidade de cada um e, claro, à sua ferramenta de trabalho, além de ter como característica a origem em casos práticos. Fico feliz em ver no livro algo que utilizamos em sistemas desde 1991, com o velho e bom Clipper.

    Conhecer os padrões é bom para ser DRY com a lógica de programação, de modo que não fiquemos reinventando a roda, construindo algorítimos ou modelagens que já estão validadas, e também, como enfoca muito o Fowler e o GoF, melhorar a comunicação na equipe.