Avançar para o conteúdo principal

Ultimate Programming Language

Há já alguns anos que programo e tenho notado que há uma discussão que é sempre actual.

Qual a linguagem de programação definitiva. A melhor que as outras todas? Aquela que toda a gente deve de aprender, porque é sem sombra de dúvida melhor.

Será o Java? Será o .Net? O Perl? O Ruby? O C/C++? o Cobol? o Smaltalk? o LISP? o PHP? o ASP? o J2EE? ETC ...

Encontro um paralelo na discussão de qual melhor a Arte Marcial de todas. Será o Karaté, o Judo, o Jiu Jitsu, o Kempo, o Kung Fu o Taekwondo, o Tai chi Chuan, etc.

Penso que a resposta acaba por ser idêntica! Nos vários Campeonatos organizados para avaliar qual das artes é melhor, numas vezes ganhava uma, noutras ganhava outra. É impossível alguém assegurar que a arte A é sem dúvida melhor que a arte B. Até porque de vez em quando aparece alguém excepcional numa arte que é capaz de surpreender tudo e todos. Mais tarde aparece outro que ganha destaque noutra arte, etc. O que conta é a eficácia que cada um tem na arte que domina. Sempre levei em consideração a máxima do meu Sensei:
"A estrada tem duas bermas. Estar numa é seguro, estar noutra é seguro, estar no meio é perigoso, podes ser atropelado."

Será que quando uma empresa contrata seguranças está preocupada com as artes marciais que os seus seguranças dominam? Ou apenas exige que sejam eficazes a garantir a segurança contratada?

Transpondo isso para as tecnologias de informação. Das imensas tecnologias(linguagens) disponíveis, há algumas que são mais iguais, isto é, que disponibilizam as mesmas potencialidades. Entre Actualização de bases de dados, páginas html dinâmicas, webservices, ligação a sockets, multiprocessamento, processamento de lotes (batch), etc. Entre essas não posso dizer que uma é melhor do que outra. Talvez para mim, tendo em conta a minha experiência, uma seja mais fácil, do que outra. Mas outro terá uma opinião diferente. Será que isso faz com que eu seja melhor do que o outro? Será que o devo convencer a seguir o meu caminho de aprendizagem? O melhor que lhe posso dizer é:

"Sai debaixo das pedras
E vai
Vai

Vai mais longe mais fundo
Não mudes de assunto
Só porque é mais fácil

Vai
Vai mais longe vai
Vai ao fundo do fundo
Não mudes de assunto
Há sempre um perigo"

Esta pérola da cultura portuguesa, ilustra o meu pensamento.

Muitas vezes no percurso do nosso caminho somos confrontados com pretensas facilidades que nos afastam do nosso caminho inicialmente traçado. No entanto o problema é que logo a seguir aparece outra novidade qualquer que também ela é mais fácil, melhor, mais eficiente. Tentam sempre nos fazer passar por tolos por não estarmos na berra da tecnologia. Se seguirmos o impulso de saltar de novidade em novidade, corremos o perigo de não conhecermos uma tecnologia o suficiente para fazermos algo de útil com ela. O que compromete a realização de um processo de fio a pavio. Normalmente no fim ficamos sempre com a sensação que afinal o que aparentemente era difícil é na realidade muito fácil.

Se queres realmente fazer a diferença como programador, escolhe a tecnologia que é mais simpática para ti e para a industria em que queres trabalhar e procura aprender o máximo que puderes, para seres eficáz na realização de qualquer projecto que te proponham. Porque o que avaliam realmente é a tua eficácia no processamento da informação e não a tecnologia por ti escolhida.

A prova disso é questionas-te acerca de qual a linguagem de programação usada no Google? Ou basta-te saber que as tuas pesquisas são praticamente instantâneas? Ao utilizador final, o que conta é a eficácia com que acede à informação e não a tecnologia que a veícula.

Já agora valia pensar nisso!

Comentários

  1. Concordo com todos os pontos.

    Todas as linguagens ou ambientes de desenvolvimento têm os seus pontos fortes. Alguém que seja adepto exímio de uma linguagem consegue fazer qualquer coisa nela (até porque costumam ser todas equivalentes a uma máquina universal de Turing).

    Até vou dar exemplos:

    Quando fomos fazer o nosso trabalho de fim de curso, de computação gráfica, o meu colega e eu escolhemos fazer o código em C++ ao invés de Java, como proposto pelo nosso professor, porque já a conheciamos à muitos anos e sabíamos como espremer desempenho dela se necessário. Já tinhamos um desafio suficiente a implementar algoritmos bleeding edge sem termos de nos preocupar a dominar uma linguagem que na altura ainda era nova e não tinha muito suporte para este tipo de tarefa. Acabamos por ter nota máxima, 20, por isso acho que não nos safamos mal com a escolha. ;-)

    Noutro projecto em que participo, o Freeciv, utilizamos C porque existe imenso código pré-existente em C e demorávamos mais tempo a reescrevê-lo noutra linguagem do que a adicionar as novas funcionalidades que os utilizadores pedem.

    Mas também vou dar um contra-exemplo:

    Recentemente tive de fazer web scraping (i.e. extrair informações de um site web). Para isso utilizei Perl com os módulos HTML::TokeParser e WWW::Mechanize. Porquê? Porque queria fazer parsing de HTML com uma sintaxe bastante doente. Fiz isso em Perl numas 3-4 horas. Penso que se o fosse fazer em C a reutilizar uma biblioteca de expressões regulares ou um parser (e.g. libxml) + o tidy demorava uma semana. No entanto eu programo em C há mais de 7 anos. Este foi o meu primeiro programa a sério em Perl (o outro foi um "Hello World").

    Com isto quero dizer, penso que não se deve cair na tentação de usar todos os últimos buzzwords só porque alguém acha que é melhor. No entanto, também convém olhar um pouco para além do nosso quintal. Caso contrário pode-se ficar com uma visão demasiado redutora.

    ResponderEliminar
  2. Ah e já agora quanto ao Google. Ouvi falar que no Google normalmente fazem o primeiro protótipo em Python e depois reimplementam as partes críticas para o bom desempenho em C++. Se repararem, eles até contractaram o Guido van Rossum à uns tempos.

    Ouvi falar também que o concorrente #1 do Google, o Yahoo, programa o primeiro protótipo em PHP e depois reimplementa as partes críticas para o bom desempenho em C++.

    No entanto isto não é uma regra cega. Pelo que ouço falar no Google são bastante agnósticos quanto às tecnologias de software utilizadas. Já ouvi falar de programadores de Java, Perl e PHP que vão para lá trabalhar. Desde que funcione...

    ResponderEliminar
  3. Ultimate Programming Language .. pura
    e simplemente não existe, já trabalhei em mais linguagem que posso
    contar pelos dedos das minhas mãos.

    Não existe .. existe ferramentas que te ajudam a resolver determinados problemas ...não existe um canivete suiço ....

    Como disse o vasco ... cada uma tem o
    seu ponto forte, eu acrescento "e muitos pontos fraços" quanto mais generalista a linguagem pior é a sua eficácia o java é um belo exemplo disso na sua vertente j2EE
    e os EJBs.
    Eu pessoalmente nunca vesti a camisola de nenhum "fabricante" não tenho qualquer tipo de preconceito em relação a qualquer tipo de liguagem.

    se sabes ... se és um "PROGRAMADOR" ...e não um "copy/paster" ...consegues ... mais
    rapido ou mais lento , com mais 1000 linhas de codigo ou menos 1000
    linhas

    Antonio Roque

    ResponderEliminar

Enviar um comentário

Mensagens populares deste blogue

[Off-topic] "Novas" tendências de gestão

Afinal as novas tendências de gestão não são de agora. E as suas consequências também já são conhecidas há muito. Vejam esta carta do Senhor Vauban , Engenheiro Militar e Marechal de França, dirigida ao Senhor Losvois, Ministro da Guerra de Luís XIV, datada de 17 de Julho de 1683. "Monsenhor: ... Há alguns trabalhos nos últimos anos que não acabaram e não acabarão nunca, e tudo isso, Monsenhor, porque a confusão que causam as frequentes baixas de preços que surgem nas suas obras só servem para atrair como empreiteiros os miseráveis, malandros ou ignorantes e afugentar aqueles que são capazes de conduzir uma empresa. Digo mais, deste modo eles só atrasam e encarecem as obras consideravelmente porque essas baixas de preços e economias tão procuradas são imaginárias, dado que um empreiteiro que perde, faz o mesmo que um náufrago que se afoga, agarra-se a tudo o que pode; e agarrar-se a tudo, no ofício de empreiteiro, é não pagar aos fornecedores, pagar baixos salários, ter os piores

Conferência Europeia da Comunidade Alfresco

Já foi há quase quinze dias, mas julgo que ainda será relevante abordar a Conferência Europeia da Comunidade Alfresco, que decorreu em Barcelona no dia 22 de Abril. Com uma audiência de mais de 200 pessoas (a sala reservada estava cheia) vindas de vários pontos da Europa, este evento serviu para que muita gente desta comunidade se encontrasse pela primeira vez face a face. A Alfresco Inc. é uma empresa recente, que apostou em criar uma solução de gestão documental de topo de gama usando o modelo open-source . Considerando que a empresa, no seu terceiro ano de actividade, já atingiu o break-even , parece ter sido uma boa aposta. No arranque da conferência esteve John Powell, CEO da empresa, que falou um bocado sobre a excelente evolução da empresa e abordou a "guerra" entre o modelo de negócios proprietário e o modelo de código aberto. Exemplificou este conflito com o Microsoft SharePoint, que ele designou como "a morte da escolha", justificando o epíteto pelo facto

O que é uma POOL ?

Tenho andado a fazer implementações de mecanismos de pooling em Java 2 Enterprise Edition. Como me parece um conceito algo lato tentei a abordagem do dicionário. Alguns mostram que de facto a palavra é usada para muita coisa. A definição mais comum é "piscina". A que mais me agradou foi o que descobri na wikipedia , onde pooling é apresentada como uma técnica para guardar qualquer coisa que já não é necessária em determinado sitio (a que se chama pool ) com o objectivo de a usar quando necessário optimizando assim a utilização de recursos disponíveis. Partindo para a computação, existem vários tipos de pools: Thread Pool - Conjunto de threads livres que se vão adicionando a um fifo quando não necessárias e retirando quando se quiserem usar. Memory Pool - Conjunto de blocos de memória, todos da mesma dimensão, que se alocam inicialmente e usam à medida que necessário garantindo que o tempo de alocação de memória é constante e a fragmentação minima. Connect