.. -*- coding: UTF-8 -*- ============================ Aprendendo a aprender Python ============================ :Author: Adam Victor Nazareth Brandizzi .. contents:: 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. .. _IDLE: http://www.python.org/idle/ 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. .. image:: 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`_. .. _`PEP 8`: http://www.python.org/dev/peps/pep-0008/ .. image:: 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: http://www.sqlite.org/ ``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`__. __ http://docs.python.org/lib/module-sqlite3.html 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. .. _Docutis: http://docutils.sourceforge.net/ .. _`reStructured Text`: http://docutils.sourceforge.net/rst.html .. _aqui: aprendendo-a-aprender-python.txt 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. .. _Doxygen: http://www.doxygen.org/ 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 [#docstrings]_. Eu ainda espero uma ferramenta semelhante vir do pessoal das ``docutils``, mas, enquanto isto, recomendo o ``epydoc``. Recomendadíssimo! .. _epydoc: http://epydoc.sourceforge.net/ Para maiores informações sobre ``epydoc``, vá à `site do projeto`_. .. _`site do projeto`: http://epydoc.sourceforge.net/ 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: http://docs.python.org/lib/module-Tkinter.html ``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. .. _Glade: http://glade.gnome.org/ .. _PyGTK: http://www.pygtk.org/ .. _`Boa Constructor`: http://boa-constructor.sourceforge.net/ .. _wxPython: http://www.wxpython.org/ .. _`Qt Designer`: http://www.trolltech.com/products/qt/features/designer .. _PyQt: http://www.riverbankcomputing.co.uk/pyqt .. image:: 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. .. _Zope: http://www.zope.org/ .. _Django: http://www.djangoproject.org/ .. _TurboGears: http://www.turbogears.org/ 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: http://www.cherrypy.org/ .. image:: 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 [#xml]_ mas sim numa notação muito semelhante a Python. Experimente! .. _`Cheetah Template`: http://www.cheetahtemplate.org/ 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! .. _doctest: http://docs.python.org/lib/module-doctest.html 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. .. _ElementTree: http://docs.python.org/dev/lib/module-xml.etree.ElementTree.html 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 ;) ----- .. [#docstrings] *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. .. [#xml] 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. .. _Kid: http://kid-templating.org/ .. _XSLT: http://www.w3.org/TR/xslt