Como transformar um código de nove linhas em um código de duas linhas... E por que não aprendemos isso em lógica de programação?
Se eu te pedisse para codar uma função que converte graus Celsius em Fahrenheit, como você faria?
Você deve ter aprendido uma abordagem parecida com essa à partir das aulas de lógica de programação:
declara função converterCelsiusParaFahrenheit (recebe valor)
retorna valor * 1.8 + 32
fim da função
declara array celsius, fahrenheit
preenche celsius com valores w, x, y, z
para cada dado em celsius faça
dado = converterCelsiusParaFahrenheit (dado)
fahrenheit = dado
fim para
Vale dizer que não há nada de errado aqui. Esse código de nove linhas poderia ser implementado em quase qualquer linguagem de programação que existe, sem nenhum problema.
Mas, será que essa é a abordagem que realmente utilizamos no nosso dia a dia? Olha só uma possível solução com uma linguagem mais moderna*, como Python:
celsius = [10,20,30,40]
fahrenheit = list(map(lambda t: t * 1.8 + 32, celsius))
Se a linguagem com a qual você trabalha tem suporte a funções anônimas e funções de mapeamento, seu código de nove linhas pode virar um código de duas linhas, como se você estivesse encadeando funções na sua planilha no Excel.
E abordar o problema desta forma nem chega a ser uma heresia no que diz respeito a legibilidade. A segunda linha do código deixa bem claro que "fahrenheit" é uma lista resultante do mapeamento e conversão dos dados contidos na lista "celsius"
Sem polêmicas aqui. Somos felizes por sabermos que existem duas formas de atacarmos o problema e somos felizes por saber que, dependendo da situação, podemos escolher o código de nove linhas ou o de duas.
A questão é: nossas aulas de lógica de programação não nos ensinam a pensar da segunda maneira. Aprendemos o que são laços, decisão condicional, procedimentos (funções), variáveis... Mas, será que não devera haver um capítulo a mais nessas aulas para ensinar o que é uma função anônima, uma função de mapeamento, de redução, um decorador?
Porque, de tanto estudar laços e condicionais nas aulas iniciais de lógica de programação, costumamos ficar realmente bons no assunto. Enxergamos laços e condições até mesmo na nossa rotina diária. Quando precisamos aplicar isso na linguagem que estamos aprendendo, não temos tanta dificuldade. Mas quando saímos do básico e precisamos lidar com essas abordagens mais "modernas", isso dá um nó na cabeça de muitos.
Tenho pra mim que o ensino de lógica de programação é bem deficitário. As linguagens mais modernas já adotam essas soluções emprestadas do paradigma funcional há pelo menos cinco ou dez anos, mas o nosso velho livro de lógica de programação continua o mesmo.
O que vocês acham a respeito? Conhecem algum livro, curso ou faculdade onde lógica de programação é abordada nesses termos?
*Por "linguagem moderna", me refiro a linguagens que mesmo tendo suas muitas décadas de existência, continuam sendo atualizadas e incorporando novas abordagens