Salve Maurício, tudo jóia?
A questão da escolha de uma linguagem de programação é um assunto
delicado e vários fatores tem que ser levados em consideração. Um deles
é o uso comercial da linguagem mas, a meu ver, este é um fator menor em
comparação com outras coisas.
Acredito que existe uma diferença fundamental entre "aprender a
programar linguagem X" e "aprender a programar". Ao que aprende o
segundo, pode-se programar em qualquer linguagem. Ao dar-se prioridade
muito alta à importância comercial da linguagem pode-se fazer péssimas
escolhas, como a escolha de Java. Creio que alguns professores (não sei
se na UFABC) defenderiam até o ensino de .NET em M$ Visual Studio
(!argh), porque tem uma importância comercial bastante grande. Quem
"aprender a programar", independentemente da linguagem, pode utilizar
qualquer uma delas, até pseudo-código.
Por quê Java? Acho que o principal argumento dos professores, além da
importância comercial, é o fato de java ser OO. Mas não há outras
linguagens OO? Não poderíamos utilizar, como você recomendou, Ruby ou
Python, ou uma variação de algum deles com tipagem estática (outra
discussão interessante: linguagens de tipagem dinâmica vs. linguagens de
tipagem estática no ensino...)? Python é incrivelmente intuitiva e não é
necessário aquela burocracia para se rodar um programinha: chame o
interpretador e pronto. Em Java, deve-se criar uma classe principal com
o método main()... bla bla bla... é uma burocracia que espanta o aluno
iniciante.
Bom, aí acho que temos uma discordância a respeito do paradigma
utilizado como curso inicial. Acho que a escolha de OO não é saudável e
defendo que o paradigma imperativo (procedural) deva ser priorizado. Por
quê? Minhas razões:
1. O paradigma imperativo é mais intuitivo, como uma receita de
bolo.
2. Resolve com elegância a maioria dos problemas que encontramos no
dia-a-dia acadêmico (algoritmos de cálculo numérico, problemas de
física, etc.): não é a toa que o povo do meio científico adora
Fortran, que até pouco tempo atrás não suportava OO (me corrijam
se eu estiver errado, pois não conheço em detalhes a linguagem).
Uma outra possibilidade seria focar no paradigma funcional, pelo seu
rigor matemático e pelas mesmas vantagens que citei acima para o
paradigma imperativo.
Quanto ao ensino de OO, seus defensores de OO justificam que é mais
próximo do mundo real, composto de classes de coisas e suas instâncias,
e por isso seria mais natural o aprendizado. Ledo engano. Quando quis
aprender OO pela primeira vez, lia tutoriais que tentavam fazer este
ingênuo paralelo:
"Um projeto de uma bicicleta é uma classe, as bicicletas são suas
instâncias. Uma bicicleta pode ter propriedades como cor, tamanho e
métodos como pedalar(), subir(), descer()."
Péssimo. Só fui entender de fato pra o que servia OO quando fui ver uma
aplicação computacional prática, sem tentar "concretizar" os aspectos
"abstratos" da OO. Infelizmente na UFABC ainda estamos caminhando nos
mau exemplos (quem teve aula de LP, MAC e POO talvez concorde comigo).
Uma última consideração: a programação tem um papel muito forte de
aproximar as pessoas para a computação e a matemática, quando bem
ensinada. Infelizmente na UFABC esta parece espantar as pessoas dessas
duas (em especial da primeira).
Um abraço a todos.
--
Silas Silva