Linguagens de Programação que oferecem mais poder e flexibilidade ultimamente foram ganhando força Johnatan Tang destaca, no entanto, a troca flexibilidade versus produtividade, entre outras coisas, devido ao fato de que a tradicional orientação a objetos torna mais fácil e direto organizar os programas.
Ele argumenta que as linguagens de despacho único, “dado um parâmetro ou outro valor, você sabe exatamente o que você pode fazer com ele”. Apesar de que código de linguagens estaticamente tipadas é mais revelador sobre os valores envolvidos, estruturalmente as linguagens tipadas são mais comuns, mas ainda dão uma idéia imediata de que operações estão disponíveis em determinado valor. E para ambos, linguagens estaticamente e estruturalmente tipadas, é muito claro o que deve ser feito se você quer executar uma operação que não é suportada por um determinado objeto:
Você escreve um método que realizada essa operação. Isso é problemático se não é você que controla essa classe, razão pelo qual o Ruby e o C# migraram para classes abertas. […]
E é geralmente obvio onde este método deveria ir: em uma classe que você precisa manipular.
Nas linguagens multi-dispatch, é muito menos evidente quando um método deve ser escrito e “qualparâmetro de um novo método poderia receber um [dado] valor”. Isto proporciona mais flexibilidade na organização do código, mas isso implica que mais decisões deverão ser tomadas sobre ele e mais esforço deve ser aplicado para manter estas decisões:
Então, cada vez que alguém usar esse método, eles devem relembrar quando foi definido e adicionar a declaração de importação apropriada. Se eles esquecerem, poderiam obter comportamento que não esperam, porque o método apropriado para a função genérica nem chegou a ser carregado.
Estabelecer convenções pode ser considera uma solução para esta questão. Contudo, Tang acredita que “convenções que não são impostas pela linguagem tendem de não serem seguidas”. Além disso, após tentar definir alguns padrões para disposição dos módulos, ele também afirma que“ isto é inerentemente ao domínio específico do problema: não há nenhum principio de organização correta que se aplique a todos os casos.”
Assim, segundo Johnatan Tang não há solução óbvia para esta troca entre flexibilidade versus produtividade ao organizar programas. E quanto à sua linguagem favorita? Que soluções você poderia encontrar? Dada sua experiência, há algum inconveniente entre os dois?