(Traduzido e adaptado de What is TeachScheme!)
Muitos têm perguntado aos autores da abordagem de design sistemático de programas e a linguagem Racket/Scheme para ensino de programação. A seguir os autores colocam alguns dos principais questionamentos sobre a abordagem e suas respostas:
Q: Essa disciplina é sobre programação em Racket?
- A: Não, essa disciplina é sobre o design sistemático de programas para iniciantes, começando do “be-a-bá”, e independente da linguagem de programação. Inclusive o currículo completo inclui a linguagem Java como continuação natural.
Q: Então porque usar o Racket?
- A: Na verdade não usamos “o Racket”. Usamos uma série de linguagens de ensino, sendo cada sucessora um pouco mais expressiva que a anterior. Tais linguagens emprestam elementos do Racket, que é um membro da família de linguagens do LISP.
Q: A ideia do design sistemático é realmente útil em todos os tipos de linguagens de programação?
- A: Sim. Muitos estudantes que passaram por esse curso aplicam as receitas de projeto em todos os tipos de linguagem: assembly, Python, Perl, Ruby, Java, etc. De fato, existem professores que adotam linguagens diferentes para ensinar a mesma ideia.
Q: Então o curso não é sobre programação funcional?
- A: Não, o curso é sobre design sistemático de todos os tipos de programas, o que inclui programas imperativos e orientados a objeto.
Q: Por que então estamos aprendendo a fazer programas em estilo funcional?
- A: Consideramos o estilo funcional de programação o melhor ponto de partida por duas razões. Primeiro, a decisão parte de anos de experiência projetando sistemas grandes em assembly, Pascal, C, e ensinando com essas mesmas linguagens. No entanto, mais importante que isso, é que a programação funcional foca os programadores nos valores, no fato de que cada função deve produzir um valor, e que esse valor pode ser testado.
A segunda razão é que consideramos o estilo funcional o ponto de partida apropriado até mesmo para alunos do ensino médio e básico. No ensino básico, programação funcional reforça álgebra e deixa claro que você pode criar animações, jogos, e todo tipo de coisas divertidas com álgebra. No ensino médio, programação funcional combina com trigonometria e geometria, com cálculo e lógica, e até mesmo com ciências que usam modelos matemáticos (física, economia, etc).
Q: Então todo mundo deveria usar linguagem funcional para todos os projetos?
- A: De jeito nenhum! Não somos fanáticos por funcional; o próprio Racket – a linguagem que escolhemos – não é puramente funcional, pois suporta atribuição de variáveis, estruturas e objetos mutáveis, construções iterativas, etc. Todo programador deveria pensar funcionalmente e começar funcionalmente, mas é crítico que se conheça quando atribuições de variável e mutação são necessários. Isto garante que são usados de forma correta.
Q: Mas o estilo imperativo e iterativo é tão comum. Por que não mostrar aos novatos o estilo mais comum?
- A: Experiências mostram que um entendimento inicial do estilo funcional produz programadores significantemente mais fortes do que uma imersão imediata na monocultura da programação orientada a objetos (POO).
Q: Isso não quer simplesmente dizer que um bom programador deve ter estudado várias linguagens diferentes?
- A: É exatamente o que significa. Algumas universidades, e.g. CMU e Harvard, trocam a ordem. Eles ensinam programação convencional primeiro e usam uma abordagem similar à deste curso em uma segunda disciplina. A chave é, no entanto, que os estudantes produzam programas interessantes em qualquer estilo.
Q: Mas os alunos não ficam despreparados quando vão fazer estágio?
- A: Sim e não. Sim, porque consideramos ruim mandar alunos para o mundo real com apenas um curso de programação realizado. O que você diria se seu farmacêutico contratasse um estudante após um único semestre de química?
E não, porque experiências em várias universidades sugerem o contrário. Após terem passado por este curso, muitos estudantes conseguiram mais estágios e os empregadores demonstraram muita satisfação. Muitos desses empregadores constataram que formandos que não passaram pelo curso são piores projetistas (designers) do que os estagiários do início da graduação que tiveram o curso.