August 23, 2007 | In: Pense nisso!, Ruby
Ruby como primeira linguagem de programação!
Pois é, para alguns pode soar um pouco estranho, principalmente para os mais tradicionais, mas é o que estou propondo nesse post.
A minha experiência com primeira linguagem foi em 1997 com Pascal que foi uma linguagem criada em 1970 por Niklaus With com o objetivo principal de encorajar o uso do código estruturado (principalmente para o ensino).
Vamos ver um pequeno exemplo de teste lógico em Pascal:
program Testelogico;
var a,b:integer;
uses crt;
begin
clrscr;
writeln ('Digite um número para A');
readln (a);
writeln ('Digite o número para B');
readln (b);
if (a = b) then
writeln ('A é igual a B')
else
if (a < b) then
writeln ('B é maior que A')
else
writeln ('A é maior que B');
end.
Podemos perceber nesse código a necessidade de aprendizado de vários conceitos voltados para a própria estrutura da linguagem ao invés de se focar no problema. Como exemplo temos a exigência dos parênteses e o ponto e vírgula no final de bloco, além da regra clássica: antes de else não se usa ponto e vírgula, pois o ponto e vírgula é utilizado para finalizar blocos de programação.
Ruby é uma linguagem criada por Yukihiro Matsumoto, projetada para programação em grande escala unido de codificação rápida. Vamos ver o mesmo exemplo anterior feito em Ruby:
print "Entre com o valor de A:"
a = gets
print "Entre com o valor de B:"
b = gets
if a == b
print "A é igual a B"
elsif a < B
print "B é maior que A"
else
print "A é maior que B"
end
Além da quantidade de código diminuir tornando-o mais simples, a curva de aprendizado também tende a ser menor, pois agora não temos mais que garantir regras voltadas para a estrutura da linguagem. o bloco if-else faz o que tem que ser feito sem precisar está se preocupando se está faltando ou não ponto e vírgula.
Podemos ver um exemplo ainda mais convincente com estruturas de repetição com final conhecido. Vejam um exemplo em Pascal que mostra 10 vezes na tela a palavra “teste”:
Program repeticao
var
i : integer;
begin
for i:= 1 to 10 do
writeln("teste");
end
Para fazer esse exemplo simples precisei seguir a burocracia de criar o nome do programa criar a variável e só depois criar a rotina. Vamos ver no Ruby o mesmo exemplo:
10.times do puts "teste" end
Ou ainda:
10.times { puts “teste” }
Deu para perceber a simplificação absurda do código no Ruby? Em algumas rotinas assemelha-se a criação de um texto em inglês (linguagem humana). Ao invés de precisar saber que a repetição será a variação do valor de uma variável i de 1 a 10, simplesmente peço para imprimir 10 vezes a palavra “teste”.
Aliando essa simplicidade à característica de ser totalmente orientada a objetos. Além de, junto com o framework rails permitir a utilização profissional no desenvolvimento de sistemas web. Já acho que são argumentos suficientes para aposentar de vez o Pascal (ainda bastante utilizado no ambiente acadêmico e em cursos técnicos como primeira linguagem de programação complementando a disciplina de algoritmos) e seguir com uma linguagem simples, produtiva, de utilização geral e até divertida como o Ruby.
Lembrando que estou sugerindo como primeira linguagem, para depois continuar com ela ou não. Sempre que possível é muito importante aprender outras linguagens para obter outros pontos de vista.
Um grande abraço e até o próximo Pense nisso!
7 Responses to Ruby como primeira linguagem de programação!
Dimas Jr.
November 22nd, 2007 at 11:49 pm
1) Sacanagem com o Pascal (amava ele!), o *uses crt;* e o *clrscr;* não deveriam estar no exemplo! Afinal, limpar a tela não entra na questão.
2) Acho interessante que uma pessoa que trabalhe com linguagens de programação conheça diversas linguagens. É como um lingüísta.
Linguagens diferentes, abordagens diferentes para um mesmo problema.
3) Os mais tradicionais por algum motivo deixaram de acompanhar a evolução do objeto de estudo. É humano resistir as mudanças [e desumano programar em VB]… vejam as pessoas casadas! =)
Acho que Platão seria um ótimo desenvolvedor…
Como a Linguagem Ruby pode ajudar o Capitão Morrimento « Mundo web
November 29th, 2007 at 6:42 am
[...] a Linguagem Ruby pode ajudar o Capitão Morrimento Tudo bem Pessoal, já tinha feito uma comparação do ruby com o Pascal anteriormente e agora recebi um pedido para ajudar o Capitão Morrimento a selecionar seus [...]
Scratch - A Linguagem de Programação mais simples que já vi! « Mundo web
January 28th, 2008 at 3:53 am
[...] de ensinar programação para crianças ou para quem nunca programou na vida. Fiz recentemente um post mostrando o ruby como uma candidata forte pela sua simplicidade e apontei como uma possibilidade em cursos de [...]
Luís
September 12th, 2008 at 9:28 pm
O Pascal é importante em termos pedagógicos, especialmente quando alguem está a tomar contacto com linguagens de programação pela primeira vez. Isto porque “obriga” o progamador a efectuar declarações e a ter “regras”.
Sebastião Alves
February 16th, 2009 at 8:10 pm
Também já vi o mesmo comentário para python e acho realmente interessante, infelizmente ainda não consegui enxergar onde ela pode ser encaixada. Em algum momento o aluno terá que se deparar com linguagens mais complicadas e talvez seja mais complicado ensinar uma coisa mais complexa quando você se acostuma com uma coisa simples do que o contrário. Também existem opiniões mais extremistas como: não ensinar linguagem alguma, para que se prendam na lógica; ou ensinar diretamente a orientação a objetos e ignorar a programação estruturada(daqui a pouco vão querer ignorar a orientação a objetos e só querer ensinar orientação a aspectos). Somente experiências e o tempo mostrarão quem está certo.
Sebastião Alves
February 16th, 2009 at 8:16 pm
Também já vi o mesmo comentário para python e acho realmente interessante, infelizmente ainda não consegui enxergar onde ela pode ser encaixada. Em algum momento o aluno terá que se deparar com linguagens mais cheia de regras e talvez seja mais complicado ensinar uma coisa mais complexa quando você se acostuma com uma coisa simples do que o contrário. Também existem opiniões mais extremistas como: não ensinar linguagem alguma, para que se prendam na lógica; ou ensinar diretamente a orientação a objetos e ignorar a programação estruturada(daqui a pouco vão querer ignorar a orientação a objetos e só querer ensinar orientação a aspectos). Somente experiências e o tempo mostrarão quem está certo.
Valério Farias
February 18th, 2009 at 2:37 pm
Tudo bem Sebastião.
Sua opinião é muito pertinente. Quando um motorista se acostuma com uma direção hidráulica, dificilmente quer voltar para o modelo anterior e como você falou pode acontecer o mesmo com o programador iniciante.
Nesse contexto do aprendizado eu particularmente prefiro começar com a visão top-down do que a bottom-up. Coisas gerais e mais simples primeiro, depois ir detalhando mais o problema. Mas isso é também muito relativo.
Mas eu acho que encontrei um parâmetro interessante para diminuir um pouco a relatividade:
Dividir o aprendizado em 2 momentos:
1 – lazer e experimentação
2 – desenvolvimento de produtos reais (softwares para pessoas usarem)
Nesse momento 1 de lazer e experimentação, o princípio é que se aprenda brincando. Atualmente com o Scratch já é possível aprender um pouco de lógica estruturada, programação orientada a objetos, passagem de mensagem a objetos sem precisar detalhar esses conceitos formalmente. Além de poder compartilhar o programa e olhar o código feitos por centenas de pessoas ao redor do mundo. Um objeto no Scratch é simplesmente uma figura, que vai executar ações(métodos) como “mova 2 passos”. Cada figura também tem suas características (propriedades). Nesse momento não é necessário conceituar, só é necessário arrastar o mouse e modificar os valores, variáveis, mudar posições dos comandos, enfim experimentar e aprender a lógica literalmente brincando. Nada de falar sobre a programação, simplesmente programar. “Deixe eu puxar esse comando aqui pra ver o que acontece! Legal!” A lógica vai sendo assimilada indiretamente.
No momento 2 é preciso partir de problemas reais: criar softwares que serão utilizados por pessoas. Criar software que funcione é a prioridade, é o mais importante. Não confudir com criar relatórios, artigos, ou outro documento descritivo que tem sua importância para a área científica, mas para o aprendizado de resolução de problemas reais de software isso pode prejudicar bastante. São realidades diferentes, velocidades diferentes ao ponto de ser quase impossível uma só pessoa ser incrivelmente bom desenvolvedor, gerente de produtos reais e ao mesmo tempo um renome na pesquisa científica. Nesse momento é preciso esclarecer isso para o aluno decidir que carreira seguir ou pelo menos compreender a complexidade de cada uma.
Voltando a focar somente no desenvolvedor. Os problemas reais tem diversos níveis de complexidade e portanto é importante que os problemas cheguem do mais simples e a complexidade vá aumentando aos poucos. Ao invés de se preocupar com um sistema inteiro o aluno pode se preocupar somente com uma tela, ou ainda começar com um sistema menor.
Na sequência dos problemas as serem resolvidos, o aluno vai lidando com ambientes e realidades diferentes. Quando tiver que lidar com situações de rede, aí sim poderá receber informações mais detalhadas sobre protocolos de comunicação e outras variáveis envolvidas, segurança, etc. Ele vai sentir necessidade de automatizar algumas tarefas, é aí onde entra os arquivos batch do windows e o shell script do linux. Vai lidar também com algumas telas para desktop e outras para Web. Com essa vivência o desenvolvedor iniciante vai captando o ponto chave da sua área: Existem vários contextos e o essencial é utilizar a linguagem adequada ao contexto que se está trabalhando. Se isso for bem assimilado ele vai compreender a importância de aprender várias linguagens e de ler códigos de qualidade. Eu já passei por Pascal, C e Java(não domino para projetos reais) na graduação. PHP, ASP, Javascript, Visual Fox Pro, além da linguagem de formatação CSS e agora estou experimentando Scratch, Ruby, o framework para web Ruby on Rails e a biblioteca javascript Jquery nas horas vagas.
Mas vocês podem perguntar e onde fica os problemas de IA, otimização, mineração. É como eu falei a medida que o problema for colocado, cria-se um universo propício para detalhar mais sobre ele, seja por livros, artigos, aulas com expecialistas, etc. Permitindo dessa forma que ele seja solucionado. Mas isso requer que o aluno já tenha a base anterior de resolver os problemas menos complexos. O princípio é partir sempre de um problema e a medida que for aparecendo as dificuldades, é sinal que é preciso fazer uma pausa para pesquisar fontes externas.
Isso são só princípios, gostaria de saber a opinião de vocês. E continuar essa discussão interessante.