Posted by: Felipe Albrecht | 23 Março, 2007

Melhor linguagem para aprender

No post anterior, que publiquei a tradução do “Aprenda programar em 10 anos”, a maioria dos comentários foram sobre qual a melhor linguagem para aprender a programar. Norwin cita principalmente python e scheme.

Python é uma linguagem interessante, pois desde o começo obriga o programador a seguir um estrutura no seu arquivo, possui um sintaxe simples, direta e fácil e de brinde tem uma biblioteca enorme. No começo, pode ser utilizado para programação procedural, mas também permite o uso de classes e notação lambda. Mas questões simples, e importantes, para iniciantes, como criar tipos, variáveis e não ter preocupações explícitas com os tipos, são abstraídas pela linguagem.

Outra linguagem é o scheme, que a grande vantagem para o iniciante, é criar a lógica de uma linguagem funcional.

Outras pessoas citaram o pascal para iniciantes. Mas pascal tem uma sintaxe não muito interessante, imagine um iniciante criar um array bidimensional de inteiros! Aquela notação do “^”, para representar ponteiros. Aliás, o que um iniciante tem que se preucupar com ponteiros, ele é iniciante! Ah, pascal era interessante na época que o Delphi estava no seu auge. Agora que Delphi esta decaindo e perdendo espaço para Java, .Net e outros, pascal deve ser banido da computação!

Sobre C digo a mesma coisa, C é a minha linguagem favorita, uso Java também, Python, Lua, mas C é a linguagem pela qual sou apaixonado. Porém, tenho certeza que C para iniciantes é uma péssima idéia. Além dos problemas de alocação de memórias e ponteiros, um estudante vai queres ler uma simples string e terá que lidar com malloc, buffer… e o cara é iniciante, mal e mal sabe o que é uma variável!

Então, para iniciantes, recomendo uma simples coisa: exercícios com livros de algoritmo e pseudo linguagem. Sim, é chato, muito chato não usar computador. Mas o cara estudando 6 meses o que são variáveis, funções/procedimentos, o que é um inteiro, uma string, poderá tranquilamente escolher a sua linguagem.

Mas, “cara, já aprendi essas estruturas básicas, o que eu faço”. Tenho dois pontos de vista agora, primeiro e penso que o melhor, faça como Norwin disse, escolha a linguagem que seus amigos usam. Se usam C, aprenda C, se usam Java, aprenda Java, se usam Python, aprenda Python, se usam Pascal, por favor, vá aprender outra coisa :-) .
Outra idéia é ver, o que tu queres fazer? E escolha a linguagem “feita para isso”, se queres fazer sistemas comerciais com interfaces gráficas, acesso a banco, Java e Python são boas idéias, mas C seria uma péssima. Porém, se queres trabalhar mais “low-level”, aprenda C. Alias, C sempre é útil aprender!

Todas as opiniões são do autor que não tem a menor vergonha em dizer que é usuário de C, que não suporta Pascal, porém também gosta de Java.

Responses

Bom encontrar outro Pascal-hater! hehe
Acho que deveria ser cirada uma campanha para banirem Pascal de vez hehehe
Concordo plenamente com o teu post, apesar de não programar em Python por ser preguiçoso.. mas tenho vontade de aprender mais. :D
Parabéns pelo blog

Qual o problema do Pascal?

É uma linguagem estruturada - Tem todas as estruturas de controle e procedimentos e funções que são o básico da programação estruturada.

É fortemente tipada - Nada de sair atribuindo strings a inteiros e pra quem está começando isso ajuda a evitar erros muito difíceis de descobrir além de respeitar a idéia matemática de variável e domínio.

Arrays bidimensionais - ué não precisa de ponteiro pra isso não! é assim: meuVetorPascal : array [1..5,1..2] of integer; Pronto um array de 5 X 2 facim :D

É só traduzir - O pascal foi criada para ser uma linguagem de fácil aprendizado assim de um portugol aí pra Pascal é só trocar palavras, ou seja ótimo para quem está começando conseguir ver resultados.

Programo em uma carrada de outras linguagens hoje mas que bom que eu comecei com o Pascal.

É eu sou fãzão do Pascal sim! hihihhi

Eu fui um iniciante em C a mais de dez anos, como primeira linguagem. Eu não diria que é ruim, eu diria que é como um treinamento em Dagobah, é exaustivo, sem sentido e fede mas você sai de lá um Jedi.

Hoje, se eu fosse ensinar alguém começaria com Lua, ao momento que eu necessitasse de bindings de bibliotecas seria um ótimo gancho para o aluno ir para C, pois já teria adquirido maturidade suficiente.

No caso de iniciação a orientação a objeto, a escolha seria C# e Java. Ambas. Existem algumas features em Java, como “syncronized” que eu gosto muito, além de ser o nome mais legal de linguagem que eu já vi e suportar praticamente tudo o que há de orientação a objeto. No entanto existem alguns detalhes em C# que Java não tem e são muito interessantes: Properties, Delegates, Attributes, Métodos Anônimos e Indexers. Eu gosto também mais da organização dos assemblies do que uma coleção de jars, mas isso é um fato que é devido a CIL/CLR (ótima idéia por sinal).

Finalizando, Python também é um ótima opção, e a sua identação forçada estruturada é algo que deveria existir em toda linguagem.

Em resumo existem ótimas linguagens, mas existe apenas um fator que não me agrada na maioria delas: a biblioteca padrão. A falta de, a má organização de, ou a “feiura” de uma biblioteca padrão, e isso inclui C, Lua, Java, C# e Python.

PS: Para os anti-microsoft o compilador de C# mono está já em ótimo estado de maturidade.

Não entrando em meritos de qual linguagem, mas apenas corrigindo, java possui funções anônimas [e são muito utilizadas!]:

Closure - wikipedia

As outras features não sei se tem com os nomes citados, mas acho que estes nomes são apenas aliases diferentes para as mesmas coisas ou syntax sugars.

Não, Java não possui funções anônimas. Ela possui classes anônimas, o que C# não possui e também seria interessante se possuisse.

Os outros nomes não são aliases para outros coisas e não são sintatic sugars. Properties são métodos especiais para get/set de propriedades. Java tu só acessa uma variável se declarar ela público, ou se fizer funções de get/set.

Java também não possui delegates. Delegates é que nem a first-class value function do Lua. Você declarar um “tipo” de função e ai você pode declarar uma variável com esse tipo, e associar a ela qualquer função desde que bata com o tipo.

Java também não possui attributes, não dentro da linguagem, isso é por causa da CIL. Não duvido que as classes de reflection consigam fazer algo parecido, mas nesse caso não é o compilador que tem a feature, ele não esta na definição da linguagem.

Java também não possui indexers, que é uma forma de fazer o overloading do operador [] mas que você pode usar qualquer tipo de objeto como index.

Eu acabei por descobrir lendo que C# tem uma equivalente a “syncronized” de Java, chama-se lock, mas não pode ser aplicado a um método como em Java, no caso de C# se usa uma attribute para isso.

Complementado, Java continua sendo o nome mais legal de linguagem que eu já vi! A verdade é que o que vai determinar sobre a aceitação destas duas linguagens (C# e Java) será a organização da biblioteca padrão e a implementação da máquina virtual.

Ambas já são standard, isso quer dizer, sairam das mãos de suas criadoras. Para quem reclamava que C# era muito próxima a Microsoft deve se lembrar que a Sun só liberou o código da JVM a pouco tempo, existiam compiladores sim mas eram bravos esforços de terceiros, como no caso do Mono para C#.

Ambas, Microsoft e Sun “amarram” o desenvolvimento da linguagem em pró de seus próprios beneficios, o que não há nada de muito errado já que o intuito de ambas são gerar lucro para os acionistas e não salvar o mundo. Mas a Sun já deu um passo a frente, liberando o código da JVM. Vamos ver agora onde isso vai parar.

Falando sério, o assunto que o Felipe colocou a tona, sobre “closures”, que na verdade são funções anônimas com acesso aos valores da função declaradora, no caso de Java, classes, é um dois conceitos mais poderosos de uma linguagem de programação mas que é muito pouco explorado. Merecia um post só sobre isso, inclusive sobre a utilidade de fazer “caching” para determinadas funções. Nos exemplos da distribuição de Lua tem uma implementação da função fatorial com cache, devido a esse recurso.

O problema todo do Pascal é ser muito diferente das outras linguagens e por isso acho que não é muito didático.

Toda vez que professores meus usavam Pascal todo mundo esbarrava em uma dúvida de sintaxe, mas como todo mundo já sabia programar não era tanto problema.

Mas pra um iniciante não vai ser legal. É bom começar com Java ou C++, mas acho que Java de preferência pois é parecida com C++, sem complicar em alguns pontos.

“Ambas, Microsoft e Sun “amarram” o desenvolvimento da linguagem em pró de seus próprios beneficios, o que não há nada de muito errado já que o intuito de ambas são gerar lucro para os acionistas e não salvar o mundo. Mas a Sun já deu um passo a frente, liberando o código da JVM. Vamos ver agora onde isso vai parar.”

A sun já liberou o código da SE, vai liberar da ME e EE, ou seja de tudo. Já é de um bom tempo que todos opinam em cima do Java, acho que ele sempre prezou pelo usuário e para ser multi-plataforma.

Agora, tudo da MS é sempre bem do jeito da MS e nunca se sabe muito bem como funciona, só o que se faz.

Uma bem simples, já que é para iniciantes, vamos associar ao início do software, que tal assembly?

:P

Muito legal esses artigos,
Parabéns!

Leave a response

Your response:

Categories