Executando verificação de segurança...
5

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

Carregando publicação patrocinada...
4

Eu acredito que depende muito do propósito do curso. Em cursos mais formais, como ciência da computação, faz sentido ensinar como as coisas realmente funcionam. Pois sabendo bem como laços e outras coisas básicas funcionam, o aluno é capaz de produzir uma função que tenha o comportamento de map.

Dito isso, é importante lembrar que o laço continua alí, ele apenas foi implementado por outra pessoa.

Então, sabendo o que você precisa e sabendo como quer que funcione, é muito mais fácil de entender quando usar map, filter, forEach, etc.

1

É sempre bom entender tanto a parte mais "trabalhosa" quando a mais rápida de escrever um código, como você disse, é bom conhecer o processo por trás das funcionalidades.

Aprendendo direto como realizar da forma mais fácil você pode começar a chamar funções sem saber como elas trabalham.

4

Por mais que eu acredite que o ensino superior esteja cada vez mais raso, nesse caso apresentado aí acredito ser mais uma abordagem de implementação do que lógica. E dessa forma, não acredito que deve estar dentro dos assuntos da matéria de lógica de programação básica, que é o que as faculdades normalmente entregam.

Acho que quando se trata de uma instituição com muitos alunos, o ensino funciona como uma bússola e não como waze/gps. Ou seja, ela te mostra o caminho, te dá as bases para se chegar em um raciocínio e cabe ao aluno evoluir a partir disso.

1

Isso é apenas uma 'syntax sugar'. Pra fazer isso você precisa entender o que é uma lista, um lambda, e o que map faz por trás dos panos.

A função map do python é implementado em C. E o map nada mais é que uma transformação de um array em outro por uma função.

Um for, passando por um array, aplicando a função e criando um novo array. EXATAMENTE IGUAL O SEU PSEUDO-CÓDIGO.

Afirmar que o ensino é deficitário ignorância e maldade. Muitas faculdades tem o ensino de linguagens funcionais, nem que seja como uma matéria opcional. E esses conceitos são muito fortes lá.

Pela minha experiencia, uma pessoa que aprendeu bem a base pega essas abordagens modernas muuuito mais fácil. E é nítido a diferença entre pessoas com boa base e outras de base não tão boa.