quarta-feira, 9 de setembro de 2009

Que idioma devemos utilizar em nosso código inglês ou português. Como devo tratar a expressividade do código e a ubiquitous-language.

Já faz algum tempo que discutimos em meu trabalho sobre que idioma utilizar no código, português ou inglês. Entretanto, meu novo brinquedo me motivou a escrever este post sobre Ubiquitous Language e legibilidade de código. Espero que realmente seja útil para alguem, e que gere alguns bons comentários (Ninguém nunca comentou no meu blog)-: então vamos lá...

Para desenvolver software, necessitamos de um conhecimento sobre o domínio do problema. Como desenvolvedores de software, normalmente, não são especialistas no negócio do cliente, logo se faz necessário a formação de uma equipe multidiciplinar contentendo analistas de negócio, clientes, gerentes de projeto e etc. Além das habilidades, ferramentas e técnicas, as pessoas envolvidas de algum modo no desenvolvimento do software devem estar preparadas para trabalhar em equipe e lidar com os diferentes aspectos e pontos de vista. Há de se buscar sinergia, comunicação e muita disciplina, sem prejudicar o nível de participação e envolvimento das pessoas com a missão recebida.

Para solucionar o problema de comunicação entre esta equipe multidiciplinar e melhorar a qualidade interna do código desenvolvido, Eric Evans em seu livro Domain-Driven Design: Tackling Complexity in the Heart of Software (Hardcover) propõem uma solução denominada Ubiquitous Language.
Basicamente é um dos conceitos que o DDD utiliza, que tem como finalidade: “falar” a língua do usuário/cliente. Manter uma única linguagem de domínio que seja entendível tanto para os desenvolvedores quanto para o cliente. Ubiquitous Language não é uma linguagem utilizada apenas no código, porém em qualquer atividade (documentação, reunião, especificação, testes, código, conversas entre a equipe e especialistas etc) durante todo o desenvolvimento do software. Seu modelo tem que possuir as palavras chaves do domínio do cliente, isto facilita o entendimento de todos os envolvidos do software.

Para conhecer mais sobre ubiquitous language ou DDD sugiro ler o livro. Eu não li, mas minha filha número 4 leu e falou que é muito bom.
Como o ubiquitous language, DDD e juntamente com DSL (Domain Specific Languages) em voga a legibilidade e expressividade do código e ainda prometem dar muito o que falar, parece que a gente fica cada dia mais influenciado pela tendência de deixar o código o mais próximo possível da linguagem de negócio. O código deve estar o mais claro possível, isto é, sem interferências geradas pela sintaxe da linguagem.

Assim, para nós utilizarmos a linguagem do cliente (como estamos no Brasil), deveríamos utilizar o português em nosso código. No entanto, quando falamos em linguagem de programação, somente temos opções em inglês, transformando nosso código em uma tremenda salada de fruta.

Entretanto, ontem descobri que em python poderia traduzir suas palavras reservadas (magia negra) e escrevi um modulo para que acrescenta as palavras chave da linguagem em português, colocando todo meu código em português. Para utilizar o módulo, basta acrescentar o cabeçalho "#encode: pt-br" o inicio do arquivo python. Com isto podemos escrever:


#encode: pt-br

imprima "numeros pares:"
para cada numero na faixa(1, 10):
    se nao numero % 2:
        imprima numero,





Para minha surpresa (minto, sabia que iriam falar isso) meus colegas perguntaram para que vou escrever código python em português?
Mas vamos a resposta... como jah descrito no texto, legibilidade de código faz toda a diferença. As palavras que vc utiliza para se expressar, muda toda sua forma de pensar. Quando vc traduz seu modelo para o inglês, sua interpretação raramente será exatamente a mesma de outra pessoa, logo vc deveria em seu código, utilizar os mesmos conceitos do usuário/cliente e envolvidos no projeto (normalmente, porem nem sempre o pt-br). A tradução das palavra reservadas do python, somente evita o tutifrute de idiomas. Para resolver a bateria de módulos inclusos no python, simplesmente traduza em seu importe. Por exemplo:
#encode: pt-br
de os importe path como caminho


Para entender melhor o que eu estou falando e testar o inglês dos leitores, vejamos alguns exemplos:

Qual das duas palavras em inglês quer dizer faculdade, college ou Faculty?
A grande maioria das pessoas deve ter respondido college, o que esta correto. Entretanto, faculty tambem esta correto, onde este significa faculdade de faculdade mental.
A tradução sempre é um problema, vejamos a palavra "free", qual das palavras abaixo poderia ser uma tradução?
gratuitamente, aforrar, grátis, libertar, desembaraçado, livrar, espontâneo, soltar, desembaraçar, desobstruir, emancipado, desentupir, franquear, eximir, emancipar, desobrigar, abrir, aliviado, livre, liberto, desprendido, gratuito, absolvido, autônomo, desobstruído, independente, isento.
Para a surpresa de alguns, todas estas palavras poderiam ser possíveis traduções para free.
Qual destas palavras quer dizer fisico: physic, psychic, physics, physicist, physician, physique?
Físico em português possui dois sentidos, o profissional de física e relacionado a aparência. Nas opções, a primeira palavra quer dizer lachante, a segunda quer dizer vidente, a terceira quer dizer a fisica a ciência, physicist significa fisico, physician é médico e physique quer dizer fisico de aparência.
Continuando com a brincadeira, qual destas palavras não quer dizer tempo: time, weather, tempo, tense:
A palavra “tempo” pode ser vertida para a língua inglesa de três maneiras diferentes: quando quiser se referir à medida cronológica, use “TIME” Ao se referir às condições climáticas, a opção correta é “WEATHER” Para descrever um tempo verbal, use “TENSE”. Em inglês, a palavra “TEMPO”, de origem italiana, é usada em música e significa andamento, no sentido de rítimo, o tempo da música.

Nem sempre vou utilizar o português para programar em python. Entretanto, como a maioria de meus software tem âmbito nacional, este novo módulo será muito utilizado.

4 comentários:

  1. brinquedinho novo? eu já sabia!
    ;D bom post, o próximo deveria ser explicando como isso funciona; talvez sua filha de número 3 poderia te ajudar nisso.

    abraços.

    ResponderExcluir
  2. Sinceramente? acho isso um pouco sem nexo. Você praticamente estaria perdendo horas pra escrever o codigo em python em portugues. É como parar pra pensar numa nova syntax. Não vejo isso como um aritifcio para o CLIENTE gostar, afinal o cliente não visualiza codigo-fonte.

    Não estou defendendo o ingles, se voce quiser utilizar portugues, utilize, mas tenha um padrao entre sua equipe. Novamente: O cliente não vai ler seu codigo. Cabe a voce faze-lo da maneira mais honesta e profissional possivel, independente de ser ingles ou nao. Documente! E pense sempre nos outros que mexerao no seu codigo futuramente.

    ResponderExcluir
  3. encoding vai quebrar o código, é na verdade um brinquedo só. Use um pouco mais e tu vai ver onde esta o problema, ou melhor, escreva uma string assim ' imprima ' e ve se ela não vira ' print '. A única coisa para resolver isso é fazer um parser de código e ai transformar, o que é bem complexo.

    ResponderExcluir
  4. Nossa! Me lembrou do meu intercambio no Brasil, muitos dos estudantes usaram Portugues para implementar algoritmos em C. Foi bem dificil de entender.. sou da Bulgaria.

    Abracoss

    ResponderExcluir