Segue para o conteúdo

Archive for março, 2005

27
mar

Se esse Python fosse meu…

Sou um cara apaixonado por Python.

Apesar da aparente redundância dessa afirmação em um blog que se chama “Pythonologia” e escrito por um cara que faz propaganda de Python até pra sorveteiro. Mas eu prefiro ser redundante à não ser compreendido.

O post de hoje tem relação com algumas opiniões pessoais sobre coisas que eu gostaria que fossem diferentes em Python. Evidentemente que considero o GvR muito mais competente para definir uma linguagem de programação do que o Osvaldo Santana Neto (eu). E se algum dia eu tivesse competência tão grande e fosse criar a minha “linguagem de programação ideal” ao final do trabalho eu teria algo muito parecido com Python (ou Boo).

Existem também aquelas características ‘polêmicas’ em Python que a tornam tão especial.

Indentação (ou endentação? (ou identação? (ou edentação?)))

Essa é uma das características polêmicas de Python. Adicionar função sintática à indentação em Python foi uma sacada de gênio do GvR. Os benefícios proporcionados por essa prática são fantásticos. Particularmente o que mais gosto é o de que você fica ‘desestimulado’ a construir blocos de códigos muito longos porque com eles você se ‘perderia’ no código facilmente, já que é comum um editor de textos não exibir mais do que 50 linhas de textos na tela.

Mas com o bônus vem o ônus: configure seu editor de textos para trabalhar com identação com “<tab>” e abra um código de terceiro cuja indentação é feita com “espaços” e dê manutenção nesse código. Você vai tomar uma semana de “Syntax error” na tela.

Não gosto de linguagens que acrescente dependências de ferramentas externas para se extrair todo o seu potencial. Por sorte até os mais antigos editores de textos costumam permitir uma boa configuração de “Tabs / Espaços / Indentação”.

Esse é o ônus da função sintática da indentação em Python. Mas na minha linguagem eu pagaria esse preço sem pensar 2 vezes.

self…

Qual programador OO que nunca torceu o nariz quando teve que declarar o “self” na definição do método? Eu torci (pra falar a verdade ainda torço… sou péssimo digitador e vivo escrevendo “selg” no lugar).

A inclusão do self na definição de um método foi uma ‘decisão de projeto’ do GvR(?). Assim como outras decisões em outros projetos no mundo nem todas elas possuem fundamentos fortes e sólidos. O parâmetro “self” existe “porque sim”.

Alguns afirmam que é por causa do “The Zen of Python” (tente “import this” no prompt do Python) que diz em um de seus ‘versos’: “Explicit is better than implicit” (Explícito é melhor que implícito). Dessa forma dizer explicitamente que ‘self’ vem por parâmetro seria algo justificável.

Eu acho esse argumento questionável. Mas ele existe.

Se eu fosse dono da minha linguagem ela não receberia “self” como parâmetro do método. Mas receber “self” como parâmetro também não torna uma linguagem de programação ruim.

Em Boo o “self” não é necessário.

Tipagem Dinâmica

Prestem atenção quando falarem sobre a tipagem de Python para que não surjam equívocos. Python é uma linguagem de “tipagem forte e dinâmica” (oposto de fraca e estática).

Minha linguagem de programação seria exatamente igual à Python hoje. E ainda não tenho opinião formada sobre as idéias de tipagem opcional que estão circulando por aí com as discussões para o Python3000 que é algo diferente dos conceitos de tipagem por inferência existentes em Boo.

Mas devo admitir que tenho simpatia por conceitos como o Duck Typing, as Interfaces e os Protocols.

@decorators

Não gostei dessa sintaxe logo de cara. Fiquei horrorizado com essa “@” aí. Não gosto de linguagens que usem muitos símbolos (hint: Perl). Pra mim, quanto mais próximo à linguagem humana o código se parecer melhor.

Não gostei dessa sintaxe, mas ao usá-la eu fui obrigado à admitir que ela é superprática e meu voto que antes era “-1″ foi para “0″ para a sintaxe (sim, porque o conceito de decorator é legal e já existia na linguagem).

A minha sintaxe favorita era a:

def foo(bla) [dec1, dec2]:
   ...

mas ela não foi escolhida porque em casos (quase que inexistentes) de muitos decoradores na definição da função o código ficava muito poluído.

Em Boo a sintaxe escolhida foi:

[dec1, dec2]
def foo(bla):
  ...

Que também é boa mas é incompatível com uma construção Python válida como esta (Bamboo, se eu estiver errado me corrija):

[funcao_falsa, funcao_verdadeira][a==1]()

… e por esta razão ela não foi considerada.

Módulos e nomenclatura

Em uma conversa com o Luciano Ramalho ele me disse que os nomes de funções builtin, módulos e classes em Python deveriam seguir um padrão para facilitar o ensino e para facilitar a vida de pessoas que não tem memória para ficar armazenando nomes estranhos (como eu).

Eu concordo com ele principalmente se levarmos em consideração os módulos da biblioteca padrão do Python nas quais umas usam atributos com “nomesassim” e outras usam “nomesAssim” (existem também aquelas que usam “nomes_assim”).

Se não fosse o prompt interativo de Python com seu ‘autocompletion’ a vida de um desenvolvedor Python seria muito difícil por essa razão.

Portanto, em minha linguagem os nomes de métodos, módulos e classes da biblioteca padrão seguiriam normas ‘rígidas’ de nomenclatura.

Conclusão

Acho que vocês conseguiram ver que Python não é perfeita. Aliás, nunca deve dizer isso. Python é apenas uma excelente linguagem de programação (assim como Boo também é) e como tal merece ser divulgada e o seu uso também deve ser estimulado para que mais pessoas lutem para que ela melhore e, quem sabe um dia, essa tal de ‘perfeição’ não chega?

18
mar

Pausa para o trabalho

Vou ficar uns 3 dias sem postar no Blog para dedicar o meu tempo para dar uma adiantada em uns projetos onde estou trabalhando. Isso não significa que eu não tenha o que escrever, portanto, aguardem o que vem por aí:

  • Se este Python fosse meu…
  • Democracia não funciona

Esses serão os próximos 2 posts. Ficaram curiosos? :)

16
mar

Software Bom e Software Livre

Alguns de meus amigos conhecem bem a minha forma de pensar sobre o assunto “Software Livre”. Eles sabem que eu sou um defensor ferrenho do Software Livre e tenho total certeza que todos os tipos de software podem ser livres (muitos desses amigos não concordam com essa parte da minha opinião).

Mas é importante notar a sutileza da palavra “pode” no parágrafo anterior. Ela significa “pode” mesmo e não “deve” porque neste caso eu estaria destruindo a liberdade do autor do software. Sim, o autor do software tem que ter a liberdade de escolher a forma que ele irá oferecer sua obra aos seus usuários. A única coisa que eu posso fazer com relação a isso é tentar convencê-lo de que é melhor pra ele distribuir a sua obra como um software livre.

Neste ponto eu chego a uma outra parte da minha opinião pessoal sobre software: Eu gosto de software bom muito mais do que de software livre. Tá, e como eu defino um software bom? Com um conjunto de características com pesos diferentes.

A principal característica que procuro em um software é flexibilidade. Depois disso procuro por funcionalidade, seguido por usabilidade e finalmente: licença de uso. Eu considero a licença de uso porque considero que o uso de software em desacordo com a sua licença é um desrespeito à seu autor (seja ele pessoa ou empresa) e adquirir a licença de alguns tipos de software é algo que não é viável financeiramente.

Mas seguindo essa linha de raciocínio você vai conseguir entender porque que, mesmo eu sendo um ferrenho defensor de software livre, muitas vezes você irá me ver usando software proprietário. Mas poderá ver também que esse software proprietário que estou usando atende aos requisitos citados acima.

Um exemplo do que eu digo é o Mac OS X da Apple. Ele é um software proprietário construido sobre um software com licença open source (e não uma licença livre, que fique claro) cuja parte open source foi devolvida à comunidade mesmo não sendo necessária essa devolução.

O Mac OS X da Apple atualmente é o sistema operacional que mais agrada aos meus requisitos e certamente eu usaria ele mesmo sendo um software proprietário (na verdade só não uso ele porque não tenho dinheiro para adquirir um equipamento da Apple). O OS X é muito flexível (bate um coração Unix em seu interior), é totalmente funcional (tudo o que preciso do mundo Linux e tudo o que o mundo proprietário me oferece pode ser usado no OS X), a usabilidade dele é simplesmente animal e o único contra dele é: ele é um software com uma parte proprietária.

Porque eu estou dizendo tudo isso em um blog sobre Python? Para que as pessoas entendam as minhas opiniões sobre outras linguagens de programação.

Eu não tenho essa ‘birra’ com Java “porque ela não tem uma implementação 100% livre de VM”. Eu tenho ‘birra’ de Java porque ela é menos flexível que Python (menos até que PHP) onde a flexibilidade aqui é primariamente uma referência à tipagem dinâmica de Python (existem outras características além dessa); Java no entanto empata em funcionalidades com Python, já que tudo o que se faz em uma se faz na outra; a usabilidade do Java é o seu maior problema e é onde Python simplesmente destroça com a ‘concorrência’; quanto às licenças a coisa complica um pouco mais. Java tem especificação aberta controlada por um consórcio de empresas, tem como máquinas virtuais (homologadas) apenas software proprietário, tem uma biblioteca padrão aberta mas com algumas coisas nebulosas como patentes da Sun, partes proprietárias, e outras coisinhas no ‘limbo’ legal desta plataforma. Python tem uma licença aberta reconhecida pela OSI uma lista de discussões aberta onde a evolução da linguagem é discutida e tem um BDFL (Benevolent Dictator for Life) que é o criador da linguagem (Guido van Rossum)

Sendo assim, minha preferência vai pra Python, porque dos critérios que eu uso para eleger um software bom Python ganha em 3 e empata em 1.

Note que em nenhum dos meus critérios eu incluo coisas idiotas como o “Deus Mercado” porque esse argumento já nos fez usar Cobol e Clipper no passado distante e no passado recente o “Deus Mercado” também nos dizia que deveriamos usar Visual Basic ou Delphi. O “Deus Mercado” nunca faz as escolhas pela razão, faz pelo dinheiro porque o dinheiro cria o hype e (conforme meu post anterior) o hype destrói projetos.