Ordem dos membros de comunidades do Orkut

(Interrompendo brevemente a série “Sonic + Linguagens de programação”…)

Não sei se foi anunciado, não sei se todo mundo sabia menos eu. Mas notei que o Orkut mudou o algoritmo pra mostrar os membros de comunidades. Em vez de mostrar os que se logaram mais recentemente no Orkut, agora ele dá preferência pra mostrar as pessoas da mesma cidade!

Bem que eu  vi que “certas figurinhas” estavam se repetindo com muita freqüência! :-)

Estava faltando esse tipo de pesquisa no Orkut, achei bem legal ver as pessoas da minha cidade que estão nas mesmas comunidades que eu. Muita gente não preenche a cidade, mas mesmo assim  é legal.

Linguagens… (3) Boo!

Então, depois do meu último post sobre linguagens de programação, o Vitor apareceu sugerindo a linguagem Boo. Resolvi dar uma olhada sobre o que ele tinha escrito sobre a linguagem, e também no site oficial dela.

Eu já tinha ouvido falar, mas não tinha dado a devida atenção, nem sabia que ela é feita por um brasileiro :-) ! Provavelmente me distraí por causa da avalanche de linguagens pra .NET e Java VM, ela acabou se misturando com as outras na minha cabeça. Nem sabia qual era a diferença entre Boo e Groovy, por exemplo.

Encontrei no Boo algumas coisas bem legais. Primeiro, inspirada em Python. Boas idéias têm mesmo é que ser aproveitadas. Segundo, das modificações feitas na linguagem, a maioria eu gostei. Tipagem estática sem perder a possibilidade de duck typing (dinâmica) também. Macros! Dizem que quem programa em Lisp fica viciado nisso. Se em C e C++ eu já gosto de usar macros (menos poderosas que as do Lisp) pra evitar Ctrl+C, Ctrl+V, é bom ver aumentar o número de linguagems com esse recurso. Cada uma com macros ao seu jeito, mas OK. Boo tem também funções anônimas, especificadores public/private/etc., uso mais fácil de “super” do que em Python (esses 2 últimos itens devem facilitar bastante a orientação a objetos em Python, que era boa mas tinhas essas peculiaridades que incomodavam e se espalhavam pelo código) e outras coisas. Perdeu parâmetros nomeados que eu gosto, mas no meio de outras melhorias nem é tanto.

A impressão geral que dá é: “Finalmente uma linguagem pensada nos problemas enfrentados na prática pelos programadores”. Aliás, todas as linguagens que eu gosto têm em maior ou menor grau essa característica: recursos bem pensados, bem fundamentados, mas também objetivando usos práticos que ocorrem no dia-a-dia. Nisso eu incluo C++, D, Python, Lua e agora Boo. Não incluo C, mas o C eu desculpo por causa da idade da linguagem. Notáveis linguagens com filosofia oposta são: Java e Pascal/Delphi. Essas linguagens (isto, é tanto os criadores e quanto a comunidade) têm o costume de dizer: “Pra que você precisaria desse recurso? Ele é desnecessário”. Ainda bem que a concorrência (por exemplo, C# e Java) faz as linguagens evoluírem…

E com base nessa lógica furada, Java [não tinha* | não tem**] sobrecarga de operadores**; enums*; for-each*; switch em strings**; facilidades léxicas pra incluir strings grandes** no código; nenhum tipo de duck typing** (até C++ tem um isso com templates); ponteiros pra função**; geradores de getters e setters**; passagem de parâmetros por referência** e por aí vai. Pelo menos eu gerava os meus getters e setters em C++ com macros. Já o Pascal tem vários dialetos, mas de uma maneira geral os problemas que mais me incomodavam eram: precedência visivelmente errada de “and” e “or”; ponto-e-vírgula proibido antes do else (a dança dos ponto-e-vírgulas); impossibilidade de declarar variáveis perto do uso (provavelmente sob alegação de deixar o código mais “organizado”) e impossibilidade de inicializar variáveis na declaração; poucas ou nenhuma estrutura que crescesse dinamicamente; extensões incoerentes feitas na linguagem (muita coisa pra explicar aqui); ausência de literais de array (mas presença de literais de sets ¬¬’) e várias outras coisas…

Estou me perdendo nos assuntos, já acabei indo parar em Java e Pascal. É que essa tirania de certas linguagens me incomoda mesmo, hehehe, por ex.: “Você não precisa desse recurso, ele incentiva maus hábitos de programação!”; “Quanto mais verbosa a linguagem, mais clara ela é” ¬¬’

Falando nisso, encontrei isto no manifesto do Boo:
“””The guys who came up with “public static void main” were probably kidding, the problem is that most people didn’t get it was a joke.”””

Bah, muito boa frase! Expressou o que eu sempre pensei de um jeito muito engraçado! :-)

O que falta dizer, pra concluir o texto, é que Boo é uma linguagem que eu consideraria fortemente usar no futuro, é uma pena que ela esteja ligada a esses ambientes gerenciados (.NET e Java VM – o lado bom é a quantidade de bibliotecas). Mas se eu for usar um ambiente desses, Boo parece ser uma opção muito boa.

Linguagens de programação aprendidas e por aprender (2)

(continuando…)

Depois de Python, sempre simpatizei com a linguagem D. Gosto dela porque foi projetada pra corrigir os defeitos do C++, melhorar seus bons recursos (como templates, execução em tempo de compilação) e ao mesmo tempo se mantendo como uma linguagem de relativo baixo nível, compilada diretamente pra código de máquina e acessando funções da biblioteca C sem nenhuma dificuldade. E o D vem com várias facilidades, como constantes binárias, caractere “_” como separador de números pra facilitar a leitura de números grandes, raw strings (strings que não interpretam “\”), static asserts, bons recursos pra exceções e exception safety (muito melhor que finally!), gerenciamento de memória relativamente fácil, etc.

A maior parte das linguagens famosas atualmente roda numa máquina virtual, e eu não vejo por que essa preferência… No caso de linguagens muito dinâmicas, como Python, é uma implementação muito interessante, pois facilita a implementação de recursos como um interpretador interativo, desenvolvimento rápido sem etapa de compilação, reflexão, e avaliação de código dinamicamente (eval). Agora, em linguagens como Java e C#, acabamos ganhando o incômodo de recompilar o código a cada mudança; ter que instalar o run-time environment da linguagem nos computadores que usarão o programa; e ainda tem o custo de processamento e memória da interpretação ou compilação just-in-time (que é interessante em alguns casos, mas deveria ser opcional). Tudo isso em linguagens rígidas, inflexíveis e verbosas (Java mais do que C#)…

Então, por isso eu agora estou mais interessado em linguagens que são normalmente compiladas pra código nativo, como D, pelo desempenho e menor uso de memória. Em termos de expressividade, D tem praticamente tudo o que eu preciso (talvez dê pra sentir falta de reflexão… nesse caso, sim, eu usaria outra linguagem). Só tenho que conferir as bibliotecas disponíveis. Tendo isso, quem é que precisa de máquina virtual? :-)

Mas então, tenho ouvido falar de outra linguagem, que também vem com compilador pra código nativo e parece ter um ótimo desempenho: OCaml. Mas isso é assunto pra outro post, falando mais sobre linguagens funcionais…

Linguagens de programação aprendidas e por aprender (1)

Eu curto bastante aprender linguagens de programação diferentes. Os principais motivos pra estudar linguagens de programação são:

  1. Aprender novas maneiras de pensar (este é o motivo mais importante), novas construções e ocasionalmente bibliotecas interesssantes.
  2. Já ir conhecendo algo que eu possa usar no futuro, sem ficar naquela história de usar sempre as mesmas ferramentas ainda que elas sejam pouco adequadas.

Eu já tenho uma lista de linguagens na minha fila: D, OCaml, Haskell, Ruby, e por que não PHP, C#, PL/SQL e mais sobre Java (mas não estou tão empolgado sobre estas últimas duas)…

O difícil é arranjar algo pra fazer com a linguagem aprendida. Porque sem programar, não dá pra aprender direito. Tem que ser um (ou mais) programa(s) interessante(s), porque traduzir de outra linguagem não tem tanta graça. Da última vez que eu estava à procura de uma linguagem pra aprender, acabei me decidindo por Python.

Bah, com isso virei fã da linguagem Python. Aprendi um monte sobre ela e também aprendi sobre a biblioteca wxWidgets (na época wxWindows). Gostei da grande quantidade de bibliotecas (tanto as incluídas e as adicionais), da portabilidade, do resultado final do programa (o wxWidgets cria programas com aparência nativa do sistema, e o py2exe cria executáveis pra Windows). É curioso que, com tantas linguagens criadas por aí, tão poucas tenham sintaxe tão simples, quase um pseudo-código. Das que eu conheço, apenas Lua (que eu já conhecia antes) e Python têm sintaxes tão limpas. Ruby também é legal, mas tem algumas coisas que lembram Perl… Por que será que os criadores de linguagens, com essas raras exceções, acabam adicionando coisas “feias” ou “malucas” nas suas linguagens?

Sonic chegando!

Anunciando nova série de posts idiotas:

Fotos do Sonic na mesa lá do trabalho!

Na primeira foto, ele veio com megafone anunciar sua chegada no meu blog. :-P

Reparem no bloco quadriculado estilo Green Hill. :-)

SonicMegafone

O Sonic, o bloco quadriculado e a mão em cima do mouse são do Fausto.