24 de outubro de 2008

Aprendendo a aprender Python

Esse texto é tão bom que resolvi transcrevê-lo aqui na íntegra.
O original está em http://brandizzi.googlepages.com/aprendendo-a-aprender-python.html


Author: Adam Victor Nazareth Brandizzi <brandizzi+python@gmail.com>

Preâmbulo

Python vem crescendo em popularidade, e mais e mais programadores de outras plataformas têm começado a estudar esta interessante linguagem. Entretanto, a plataforma de Python é bem sofisticada e ampla, cheia de nuances e escolhas, o que acaba por assustar desenvolvedores treinados em tecnologias mais limitadas e fechadas.

Atendendo a pedidos, eu resolvi apresentar uma breve iniciação à arte de iniciação em Python. Este texto não pretende ensinar Python, mas sim apresentar guidelines para estudo baseadas em meu gosto pessoal.

Por fim, uma sugestão: não se prenda a este guia. Python é uma plataforma fascinantemente diversificada, e o melhor a fazer é explorar o campo aberto. É assustador? Talvez, mas se nossos ancestrais conseguiram descer das árvores para as savanas cheias de leões, nós também temos os genes da coragem ;)

Ferramentas

Editor

A fatídica pergunta iniciante é: que editor usar?

Se alguém conseguir a resposta unânime para esta pergunta também terá talento para conseguir a paz mundial. Entretanto, há uma opção suficientemente boa e de fácil acesso, escrita com e para Python, utilizando a biblioteca de GUI padrão da linguagem. Esta opção é o IDLE. Ele já vem com os pacotes completos de instalação de Python, e se seu sistema operacional é modular, basta instalá-lo pelo sistema de pacotes.

Ao abrir o IDLE, você dará de cara com um shell para Python, análogo ao utilizado no terminal. Você pode usá-lo como o shell padrão de Python, com a única limitação de não utilizá-lo para brincar com Tkinter, pois IDLE utiliza o framework e as coisas podem ficar estranhas.

idle-shell.png

O editor de IDLE é simples e suficiente. Possui os clássicos recursos de realce de sintaxe e auto-indentação, e segue os padrões apresentados na PEP 8.

idle-editor.png

Mais informações sobre o IDLE (como usar, tutoriais etc.) podem ser encontradas em http://www.python.org/idle/

Banco de dados

Outra dúvida comum entre iniciantes é: que banco de dados utilizar para aprender Python?

Para esta pergunta, tenho uma resposta um pouco menos polêmica: comece com SQLite.

SQLite não é um SGBD full-fledged, como PostgreSQL, MySQL, MS SQL Server etc. E esta é só uma de suas vantagens! Como SQLite é baseado em aquivos, você pode levar seu banco de dados no e-mail, não precisa se preocupar com configurações e poderá se concentrar em aprender Python, não em configurar o seu SGBD overkill.

Além disto, há outra vantagem incomensuravelmente grande a favor de SQLite: Python 2.5 já vem com o pacote sqlite3 por padrão. Em outras palavras, seu pacote de instalação de Python já possui a biblioteca para lidar com SQLite. Se você sente falta do terminal do SQLite para acesso direto, não tem problema! É um programinha pequenino e muito fácil de instalar - se é que é necessário instalar -, independentemente do seu sistema operacional.

Para aprender a mexer com SQLite em Python, veja a página de documentação do pacote.

Ferramenta de documentação

Esta pergunta ninguém faz, porque documentar, que é bom, ninguém quer. Entretanto, aproveito o ensejo para recomentar as ferramentas Docutis, especialmente o formato reStructured Text. Este é um formato em texto puro altamente legível como fonte mas também conversível para outros formatos. Este documento, por exemplo, foi escrito em reStructured Text (original aqui). Além disto, reStructured Text combina muito bem com doctest, conforme veremos.

Você não precisa mudar seu formato de documentação. Notoriamente, reStructured Text é meio limitado -- mas não para documentação de programas, vale notar. Entretanto, se não possui nenhum formato de documentação, experimente reStructured Text. É o padrão mais ou menos oficial de Python, e é muito divertido!

Nota: Eu já havia feito uma introdução a reStructured Text em http://brandizzi.googlepages.com/rst.html Permitam-me vender meu peixe e sugerir uma visita lá!

Gerador de Documentação

reStructured Text é, em verdade, um formato de processamento de texto. Use-o para gerar documentação de alto nível, ou em testes.

Por outro lado, muitos programadores (especialmente os já experientes em Java) sentem falta de uma ferramenta para geração de documentação automática, como Doxygen, cweb ou JavaDoc.

Por que sentem falta? Não sei, uma vez que temos o ótimo epydoc. epydoc possui uma notação bem semelhante a das ferramentas citadas acima, e geralmente é posto nas docstrings de Python [1]. Eu ainda espero uma ferramenta semelhante vir do pessoal das docutils, mas, enquanto isto, recomendo o epydoc. Recomendadíssimo!

Para maiores informações sobre epydoc, vá à site do projeto.

Bibliotecas e Frameworks

Graphical User Interfaces

Poucos temas, em Python, são tão polêmicos quanto qual framework para GUI utilizar. É uma questão complicada, dada a riqueza de opções. Entretanto, como meu objetivo aqui é abafar um pouco esta riqueza, vou sugerir o mais agnóstico dos frameworks: Tkinter.

Tkinter é simples e limitado, mas as vantagens, para o iniciante, são evidentes. Roda em praticamente qualquer plataforma, é muito fácil de aprender e é o framework padrão de desenvolvimento para GUI em Python. O editor IDLE recomendado acima é escrito em Tkinter. Tkinter não possui uma ferramenta de desenho de interfaces, como o Glade para PyGTK, o Boa Constructor para wxPython ou o Qt Designer para PyQt, mas pois! você está apenas começando! Com Tkinter, você nem vai sentir falta. Ao menos não disto.

tkinter-exemplo.png

Mais sobre Tkinter pode ser encontrado em http://docs.python.org/lib/module-Tkinter.html

Framework Web

Pode até existir, mas não me lembro de nada que gere mais discussão entre iniciantes, em Python, que frameworks Web. Cada um vai sugerir o seu preferido, como Zope, Django, TurboGears etc. etc. etc. Quase sempre aparece alguém reclamando de que existem opções demais, que deveria ser como Ruby que só tem uma grande opção, ou como PHP etc. etc. No final das contas, agradeça pela variedade! São todos ótimos, e recomendo que experimente todos.

Mas opa! este documento quer justamente restringir o número de escolhas . Neste caso, minha sugestão é que se use o ótimo framework CherryPy. É simples, orientado a objetos e bem claro. A documentação é meio misturada entre versões, mas nada que um pouco de atenção não resolva.

cherrypy-anunciador.png

Você pode aprender mais sobre CherryPy em http://www.cherrypy.org/

Engine de Template

Opa! Eis aí outra coisa que ninguém quer... mas se é para trabalhar em Python, vamos fazer a coisa direito!

Muitas pessoas não sabem ainda o que são sistemas de templates, o que é uma pena. Se você vai desenvolver para Web, ou mesmo processar texto em Python, precisa aprender a lidar com eles!

Minha sugestão é o Cheetah Template. É extremamente pythônico e simples. Não é baseado em nenhuma linguagem XML [2] mas sim numa notação muito semelhante a Python. Experimente!

Módulo de Testes

Discutir qual framework Web todo mundo quer, mas testar os módulos ninguém está afim de. De qualquer forma, testes são parte importatíssima do desenvolvimento e, sendo Python uma linguagem poderosa como é, é sempre bom garantir que seus módulos funcionam como deve.

Em minha opinião, o melhor framework de testes em Python é o já oficial doctest. Para iniciante então, é perfeito!

A maneira como ele funciona é simplesmente assustadora, de tão simples: você escreve, primeiro, o comando que deve ser usado, como se fosse no shell da linguagem. Abaixo, escreve a saída - como se fosse no shell da linguagem! As linhas testadas são apenas aquelas que começam com o prompt do shell (>>>), então você pode inserir documentação em texto plano onde quiser. doctest com reStructured Text ou epydoc formam um dos conjuntos de ferramentas mais impressionantemente poderosos de Python.

Experimente! Mais informações sobre doctest podem ser encontradas em http://docs.python.org/lib/module-doctest.html

Biblioteca de Processamento de XML

XML é o formato mais utilizado, atualmente, para armazenar e transportar dados hierarquicamente estruturados. Python possui diversas bibliotecas e bindings para lidar com XML. Qual usar?

Este ponto é bem menos polêmico: quase todos os programadores preferem ElementTree. É muito mais simples e fácil de aprender que alternativas (mesmo DOM!), além de ser módulo padrão em Python 2.5 -- isto é, além de ser um módulo que vem com o pacote de instalação de Python por padrão.

Se tiver de processar XML, lembre-se de ElementTree.

Conclusão

O ecossistema pythônico é muito, muito amplo. O número de ferramentas é impressionante, e você deve experimentar cada uma para saber qual se adapta melhor à sua habilidade e à sua história. Entretanto, depois de tanto pedirem, resolvi fazer esta lista de sugestões de por onde começar. Se você realmente quer uma lista de sugestões, acho que pode começar pelo que apresento.

Note que esta lista é extremamente viesada. É apenas um conjunto de opiniões pessoais. Muitas pessoas apresentarão argumentos (corretos) contra um ou outro ponto da lista. Este texto é um resumo de minha caminhada, no final das contas, e eu nem sou tão bom em programar em Python assim...

Vale notar que não existe um padrão por onde começar -- e provavelmente nunca vai existir. Para o bem e para o mal, a comunidade Python prefere a variedade à especificidade. Este texto definitivamente não é uma guideline da comunidade, mas sim um punhado de sugestões pessoais. Com alguma sorte, outras pessoas -- ainda mais experientes que eu -- produzirão outros textos como este, e os iniciantes terão ainda mais escolhas de como não ter escolhas ;)

Se quiser, guie-se por este texto. Eu recomendo, porém, que você se guie por você mesmo ;)


[1]Docstrings são strings que iniciam funções, métodos, classes etc. em Python. Nunca usou? Então aprenda! Quando você apreender todo o potencial das docstrings, vai ficar realmente fascinado.
[2]

Não me interpretem mal. Templates baseados em XML (Kid, XSLT etc.) são ótimos, mas, ao menos para mim, quando eu era iniciante, eram demasiamente complicados.

Eu sou Vinicius Assef, um programador do século passado que gosta de Python, pratica Lean Development e acredita em Deus. Você pode me contactar por email ou twitter.

Nenhum comentário:

Postar um comentário

Marcadores