Patologicamente eclético

[Comecei este post várias semanas atrás. Entre revisar, acentuar (escrevi originalmente sem acentos) e enrolar, acabou demorando mais do que eu imaginava. Resolvi, então, postar de uma vez. Quaisquer inconsistências são culpa da pressa e de medicação forte :)]

Uma das minhas primeiras linguagens de programação foi Perl. A primeira, descontando Logo (que aprendi por volta dos 10 anos, acho, e que, no final das contas, só fazia você mover uma tartaruguinha pra lá e pra cá), foi C, que aprendi com um livro emprestado de um amigo da minha mãe. Aliás, me arrependo até hoje de não ter ido atrás de aprender Basic, quando eu devia ter uns 8 ou 9 anos e meu pai sugeriu, vendo meu interesse no TK3000 que ele tinha. Não pela linguagem em si, mas eu teria começado a programar mais cedo, e provavelmente já iria direto pra Ciência da Computação. Por outro lado, por mais que tenha havido percalços, aprendi muito no meu tempo da Física. Mas isso é assunto pra outro post (que provavelmente nunca será escrito - mas isto também é assunto pra outro post!).

Mas estou divagando. Aprendi C por gosto, no comecinho do meu curso de Física, antes de ter uma matéria a respeito na faculdade (e aprendi bem o bastante para fazer o que eu achava, na época, que eram excelentes EPs, ou exercícios-programa). Eu programava pra me divertir, ficava ansioso pra ver se o programa realmente fazia o que eu achava que ele fazia, e perdia muitas noites de sono tentando encontrar e solucionar bugs (em certa época, esse número de noites passou a ser tão grande que marcou o começo do meu abandono da Física).

Flertei rapidamente com Delphi, quando comecei uma iniciação científica no final do primeiro ano de faculdade. A iniciação era na Física, mas meu projeto era relacionado a computação (um sistema de armazenamento de dados), e, na prática, eu era orientado por um mestrando da professora que era, oficialmente, minha orientadora. Ele tambem era programador e programava muito bem em Delphi. Aprendi bastante com ele, mas a verdade é que Delphi nunca me cativou. Sendo já um adepto de C (até hoje tenho saudade e vontade de usá-la em algum projeto), eu não gostava da sintaxe derivada do Pascal, e nunca gostei de ter a interface gráfica acoplada à linguagem (o que, curiosamente, é difícil de explicar pra quem nunca programou). Aprendi muito sobre conceitos de programação, nesta epoca, mas acabei não retendo praticamente nada da linguagem.

Em seguida, aprendi Perl. Junto com a iniciação científica eu havia dado um grande salto no meu aprendizado de Linux, e a distribuição que eu passei a usar (e continuo usando, até hoje) era (e continua sendo, até hoje) fortemente baseada em Perl, e a linguagem comecou a me chamar a atenção. Lá pelo meio de 1997 fui fazer um estágio no CCE da USP, programando Perl, onde tive acesso à primeira edição do “Camel Book“, livro do Larry Wall (criador da linguagem). Este livro mudou completamente minha noção de programação, e mesmo de computação. Ou melhor, o Larry Wall mudou, neste livro e pelo que li e ouvi dele desde entao. Mas o livro, em particular, já provocou uma revolução na minha cabeca. O prefácio dizia (tradução minha): “Para aqueles que meramente gostam de Perl, ela é a Linguagem Prática Para Extração e Relatórios (’Practical Extraction and Report Language’). Para aqueles que a amam, é a Listadora [sic] de Bobagens Patologicamente Eclética (’Pathologically Ecletic Rubish Lister’)”. E, algumas páginas adiante, pela primeira vez eu lia “Há Mais de Um Jeito de Fazer (’There’s More Than Onde Way To Do It’, ou TIMTOWTDI)”, o slogan do Perl. Perfeito. Uma linguagem de programação bem-humorada, que se esforça pra entender o que você quer dizer. Que se adapta, de acordo com o contexto, ao que faz mais sentido, ali. Em que se pode escrever poesia, inclusive poesia concreta. Enfim, uma linguagem que trata programação não como um ofício, ou como engenharia, mas como uma forma de expressão. Até hoje digo que, pra mim, programar é um processo criativo semelhante a escrever um texto (mas suspeito que dou menos sono aos leitores dos meus programas), e Perl incorporava exatamente isto.

Bom, daí em diante programei Perl por muito tempo. No estágio do CCE, no estágio seguinte (no provedor de acesso de um amigo meu), no meu primeiro emprego de verdade (montar a infra-estrutura do que viria a ser um provedor de acesso
de banda-larga) e em uma série de “frilas”. Nesse meio tempo, aprendi PHP, cheguei a usá-la para alguns projetos, mas nunca gostei da linguagem. A premissa de embutir programação no HTML (ou vice-versa) já me parecia ruim na época, e hoje considero quase uma heresia. Funciona pra meia dúzia de páginas, mas para mais do que isso vira um pesadelo. É claro, você sempre pode usar templates, fazer os programas separados, mas para isso você não precisa de PHP, use uma linguagem que já parte deste pressuposto. Aprendi também, na faculdade, um pouquinho de C++ (mas nunca fui mais a fundo, ainda quero aprender direito) e até Fortran, uma linguagem que, a saber, atualmente só é usada na própria Fisica (e, por conseqüência, na Engenharia). Aliás, Fortran tinha algumas características meio bizarras, para o meu entendimento àquela altura, como passar dados por referências, ou dar importância a indentação. Irônico estranhar isto, na época, e programar hoje em uma linguagem com características semelhantes (estou sendo obviamente sarcástico, Python não tem semelhança alguma com Fortran).

Em 2000 fui para a Conectiva e, apesar do que eles constantemente me prometiam, nunca pude oficialmente programar, lá, mas continuei usando Perl fortemente para projetos pessoais, e mesmo programando informalmente dentro da empresa. Na época tive meu primeiro contato com Python, mas me pareceu uma linguagem esquisita, restritiva, quando o que me atraia à programação era justamente a liberdade. Por volta dessa época tive meu contato mais sério com Java, que foi utilizada numa matéria que cursei no IME (enquanto eu ainda tentava conciliar a Conectiva, a faculdade e minha falta de organização e de maturidade). Não achei Java de todo ruim, mas parecia meio burocrática demais, meio “trambolhosa”, assim por dizer. Ao contrário do que possa parecer, já que brinco sobre isso com freqüência, não odeio Java, só não vejo muitas vantagens nela. No Senac há um viés forte de Java, então recentemente aproveitei pra conhecer melhor, mas “Quanto más conozco al Java, más quiero a mi Python”.

Saindo da Conectiva, no meio de 2002, minha vida ficou em um limbo, com problemas particulares tomando boa parte de, digamos, o ano seguinte, e isso se extendeu à programação. Não consigo pensar em nada que tenha feito, na área, durante este período (e consigo pensar em várias coisas ruins que fiz, fora da área). Mas, se eu fiz algo, muito provavelmente foi em Perl :)

E, finalmente, chegamos ao final de 2003, começo de 2004, quando, após muita insistência do Leo (e muita implicência minha em retribuição), comecei a aprender Python. Eu já havia ensaiado dar uma olhada na linguagem uma ou duas vezes, além da que citei aqui, mas nunca havia parado pra prestar atenção. Inventei um projeto (o zzbot) e fui programar. Muitas das críticas que eu tinha deixaram de ser problemas logo nos primeiros dias de programação. Algumas persistem até hoje. Mas o fato é que Python facilita muito a organização de idéias. É uma linguagem orientada ao problema, não à própria linguagem (como, por exemplo, C ou Java, em que você passa boa parte do tempo tentando descobrir “como esta linguagem faz isto?”, ao invés de “como eu resolvo o problema que tenho em mãos?”). É realmente uma linguagem de fácil leitura, e qualquer programador previamente organizado não tem maiores problemas com a indentação forçada, já que deveria ser uma atitude natural pra começo de conversa. E, na minha opinião, é sem dúvida a melhor linguagem para ensino de programação que conheço. Acabei fazendo também em Python um projeto pra faculdade que eu havia originalmente pensado fazer em Perl, sob a racionalização (correta, acho) de que o professor, não conhecendo nenhuma das duas, teria mais facilidade de entender Python. Deste projeto surgiu meu trabalho de conclusão de curso, que, portanto, também vai herdar a linguagem. Hoje em dia, sou oficialmente um programador Python profissional. Adotei a linguagem, e quando penso em um problema já comeco a pensar nela para a solução, inclusive para soluções que eu já havia parcialmente desenvolvido em Perl.

Agora, até hoje não consegui superar a sensação de que Python é uma linguagem muito “certinha”. O que é ótimo para soluções “limpas”, corporativas ou científicas. Mas não necessariamente para expressões artísticas. Bom, muita gente argumentaria que linguagens de programação *não* são para expressão artística, são para *programar*, e programas deve ser eficientes, legíveis e corretos (não necessariamente nesta ordem de importância). Não discuto, devem mesmo. Mas acho que isto eh só uma faceta de programação. É a faceta “desenvolvimento de software”. Uma coisa séria, com teorias, estudos, Ciência da Computação. Mas, além de cientista da computação (que só serei, na verdade, no ano que vem), sou também programador, hacker, fuçador. E, nesta persona, eu gosto de me expressar escrevendo programas. Gosto de ter mais de uma forma de fazer as coisas (contra o mantra de Python que diz só haver uma forma óbvia de fazer). Acho que explícito é melhor que implícito, mas acho que há beleza no implícito. Acho fantástico que haja concursos de poesia em Perl. E acho sintomático que uma comunidade tenha uma lista de discussão chamada “Fun With Perl” enquanto a outra tenha um site chamado “Python Challenge“.

Já faz algum tempo que não programo em Perl. Minha última tentativa foi um programinha que fiz às pressas, ficou feio, remendado, certamente cheio de bugs. Já me peguei dezenas de vezes pensando em reescrevê-lo em Python (ou, mais ainda, em Plone, já que o programa é para acesso via web). E leio cada vez menos a lista de discussão de Perl, enquanto participo mais e mais ativamente da lista, do canal de irc e da comunidade Python de modo geral (eu ia inclusive fazer uma palestra sobre Python e Aprendizado Computacional, no Conisli, mas precisei cancelar de última hora por imprevistos no trabalho). Mas ninguém ainda na comunidade Python conseguiu (nem vai conseguir) desbancar o Larry Wall, que consegue fazer uma palestra sobre o estado do Perl falando de agentes secretos, que sutilmente encaixou um “All Your Code Are Belong To Us” em uma palestra para um público mal selecionado, no FISL de uns anos atrás, que coloca “P+++++(–)$” em seu Geek Code, e que me ensinou que programadores devem ser preguiçosos, impacientes, orgulhosos e criativos.

14 Responses to “Patologicamente eclético”

  1. Aline Says:

    Chou, que lindo! :)

    Comecei achando que era a sua nova versao de curriculum online, mas no final, quase chorei!

    Que linda historia de amor… mais bonita que a nossa ateh ;)

  2. daniduc Says:

    creeeeeeeeeeeeeedo, Aline…. :)

  3. Aline Says:

    Ops.. desculpe, Dani! Falei algo de errado???

  4. Erre Says:

    Mais bonita, eu nao diria. Mais longa :)

  5. Aline Says:

    Aieee.. fofolento :)

  6. daniduc Says:

    Não falou nada de errado não Aline!!

  7. Sanhux Says:

    Legal!!

    Eu não entendo (quase) nada de programação, mas quando comecei a fazer sites, o PERL dominava em termos de scripts. Depois surgiu o PHP e o ASP da M$, eu experimentei algo de PHP e não gostei, achei bem menos “flexível” que o Perl e também muito focado na interação com o Mysql. Mas hoje eu diria que o PERL está bem fora de moda para a WEB e o PHP está dominando em termos de desenvolvedores, scripts etc, tá virando um quase padrão. De forma que tive de reavaliar meu uso do php…

  8. Erre Says:

    Sanhux, o PHP tem um grande apelo para desenvolvimento web, por poder ser “embebido” na propria pagina HTML (ou, olhando pelo angulo oposto, por voce poder embeber HTML no codigo PHP). Mas isso acaba gerando alguns problema serios, em termos de qualidade do produto final: com o HTML e a programacao em si misturados, a manutencao da pagina fica complicada (jah que, em principio, programador e designer tem de mexer no mesmo arquivo sem estragar o trabalho do outro); se o HTML fica a cargo do programador, voce acaba com uma pagina feia e de utilizacao complicada pelo usuario final, jah que o programador nao eh designer; se o PHP fica a cargo do designer, voce acaba com programas falhos, ou, na maioria dos casos, com problemas serios de seguranca, jah que o designer nao eh programador (ter uma nocao superficial de design nao faz com que o programador saba fazer uma pagina bonita e estruturalmente funcional, e ter uma nocao superficial de programacao nao habilita o designer a saber encontrar (ou evitar) pontos de falha no programa).

    Ou seja, PHP acaba sendo pratico pra pequenos sites, ou pra problemas bem simples, mas pra qualquer coisa alem disso eh uma arma que jah vem apontada pro seu peh. Ela ganhou fama justamente pela caracteristica que a torna confusa e insegura. Alem disso, com um modulo adequado ele pode ser interpretado pelo proprio servidor Web, sem precisar estar em uma area separada que permita execucao (como acontece normalmente com CGI escrito em Perl ou em outras linguagens); isto eh pratico para os provedores, como uma forma de dar alguma autonomia ao cliente sem ter de ficar revisando seu codigo. Mas veja o PHPNuke, que eh um produto relativamente antigo, popular, muito utilizado, mas semanalmente tem um problema serio de seguranca, que compromete servidores que o utilizem.

    Existem programas bem escritos em PHP (tenho a impressao de que o Horde, base pro webmail IMP, eh um deles), mas eles sao estruturados de uma forma que nao “necessita” de PHP, poderiam ser escritos em uma serie de outras linguagens (como Perl ou Python), e provavelmente seriam melhor escritos em uma delas.

  9. Sanhux Says:

    Hum, entendo o que você diz, mas como está no post, nas empresas agora se usa muito templates, o webdesigner faz a arte normalmente embutindo váriaveis no meio do código HTML. Existe também programas em PHP onde a pessoa entra para fazer o design na área administrativa, assim como essa do blog ou então a do blogger.com. Os templates estão dominando. No sistema de links que eu implantei no consciencia, por ex, mudei bastante a aparência padrão do script sem mexer em uma única linha do código.

    Mas sobre ser viável só para pequenos sites, eu não sei se isso se configura, o número de sites usando php é enorme,e deve ter vários sites grandes entre eles. Sobre o PhpNuke, ele conseguiu inovar quando foi lançado, mas ficou meio mecanizado (todo o site em php nuke se parece mais ou menos a menos que você empreenda grande customização). Eu já estava a par desse problema de segurança do PhpNuke por isso quando fui implantar um CMS no site do Nei coloquei o PostNuke, que surgiu baseado no Php mas tomou um rumo completamente diferente, sendo mais cuidadoso especialmente nesse quesito da segurança. O que deu um problema aquela vez foi um módulo externo para PostNuke que incorporava uma versão defasada do PhpBB.

    Concodo com o que você diz, mas isso não invalida o que eu falei. Antes num site como por exemplo o http://www.hotscripts.com que é o maior portal de scripts prontos, o perl levava larga vantagem em termos de número de recursos.Hoje você repara que ele tem o triplo do Perl, um com 4000 outro com 12 000. Da mesma maneira em servidores de IRC os canais de PHP como o do freenode são muito mais ativos e lotados dos que o de perl.

    Eu tive pouco contato com scripts prontos em python, um amigo meu que é prof. de informática da puc-mg me disse que é realmente uma linguagem promissora, que ele estava escolhendo para começar a montar o site dele do scratch.

    Nessas questões surge também aquele debate pro webmaster: convém ele mesmo programar suas soluções (busca interna, comentários etc) de forma integrada ao site ou aplicar soluções prontas? Eu sou favorável a programar quando possivel mas usar soluções prontas quando favorável, uma vez que um programa avançado digamos de galeria de imagens, pode demorar anos para ficar bom a partir do 0, mas você pode se juntar à equipe de desenvolvedores que já existe, num projeto GPL com CVS.

  10. Erre Says:

    Qualquer site minimamente estruturado vai acabar usando templates, deixar o HTML junto com o codigo PHP torna a manutencao impraticavel. Meu ponto eh justamente que para templates PHP deixa de ser “necessario”, e, dadas as alternativas, acho que deixa de ser interessante. O que normalmente acontece eh que o administrador do site inicialmente usa (ou permite) PHP, as paginas vao virando aquela “salada”, ateh que finalmente resolve usar templates. Nesse ponto, ele continua usando PHP simplesmente porque jah estava lah. Se tivesse usado templates desde o comeco, e conhecesse as alternativas, provavelmente nao teria usado PHP.

    Sem duvida o numero de sites (inclusive grandes) que utilizam PHP eh acentuado, mas isso nao significa que PHP seja “viavel”. Tah bom, no sentido estrito da palavra significa, mas eu quis dizer “pratico”, “uma boa solucao” (e nao soh “uma solucao”). Os administradores acabam tendo de fazer malabarismos, como exemplifiquei acima.

    E ser muito utilizado nao quer necessariamente dizer que seja bom. Ha exemplos ateh nao poder mais (eu poderia citar o Windows, mas eh melhor nao entrarmos nessa discussao agora, haja comentario! ;). PHP eh bastante comodo, mas jah ficou claro que seu nicho original (HTML junto com codigo) eh insustentavel (como voce mesmo tem notado, pela proliferacao do uso de templates) e, pro nicho atual (programacao com templates), ele eh desnecessario, ha alternativas melhores. Ele acabou se popularizando no nicho original, daih as pessoas foram notando que era inviavel, mudaram de paradigma e acabaram mantendo a linguagem “porque jah estava lah”.

    Quanto ao seu ultimo ponto, independente de linguagem, sou um grande defensor da reutilizacao e adaptacao de codigo (que anda de maos dadas com software livre). Eh soh tomar o devido cuidado de nao reutilizar cegamente, pois voce pode introduzir problemas serios no seu site. Mas software livre estah aih justamente pra incentivar compartilhamento de codigo :)

  11. Sergio Luiz Araujo Silva Says:

    Para obter o zen do python basta fazer
    >>> import this

    The Zen of Python, by Tim Peters

    Beautiful is better than ugly.
    Explicit is better than implicit.
    Simple is better than complex.
    Complex is better than complicated.
    Flat is better than nested.
    Sparse is better than dense.
    Readability counts.
    Special cases aren’t special enough to break the rules.
    Although practicality beats purity.
    Errors should never pass silently.
    Unless explicitly silenced.
    In the face of ambiguity, refuse the temptation to guess.
    There should be one– and preferably only one –obvious way to do it.
    Although that way may not be obvious at first unless you’re Dutch.
    Now is better than never.
    Although never is often better than *right* now.
    If the implementation is hard to explain, it’s a bad idea.
    If the implementation is easy to explain, it may be a good idea.
    Namespaces are one honking great idea — let’s do more of those!

  12. rbp Says:

    Pô, tem de digitar tudo isso??

  13. Eduardo Rolim Says:

    Rapaiz, tu têm uma história de vida bem interessante, e compartilho com você alguns conceitos interessantes …

    O principal deles é o “porque das pessoas acharem que linguagem de programação serve só para programar (e eficientemente)”.

    Eu já escrevi tantos códigos que de tão belos que ficavam, eu os imprimia e colocava no meu mural com o nome de “arte computacional”.

    Eu comecei um pouco ao contrário de você. Primeiro comecei com Pascal, depois na faculdade eu mexi com Delphi (e como profissional, trabalhei com Delphi até 2006) e depois que migrei pro Linux, fiquei meio órfão de linguagem. Tentei C, Perl, Java mas nenhuma das três linguagens me atraiu tanto quando Python …

    Hoje eu não trabalho comercialmente com programação. Mas, continuo programando e escrevendo “peças únicas de código”.

    Bom, vou nessa. Até queria lhe perguntar se vc tb tem a mania de depois de escrever um código-arte, vc ficar admirando ele …

    Fui !!

  14. rbp Says:

    Oi Eduardo!

    Legal, fico feliz de encontrar mais gente que tenha esse tipo de experiência!

    Vou responder sua pergunta meio ao contrário: fico muito frustrado quando passo por longos períodos na vida em que não tenho oportunidade de escrever código de que tenha orgulho.

    Obrigado pelo comentário!

Leave a Reply