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.

17 thoughts on “Melhor linguagem para aprender

  1. 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

  2. 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

  3. 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.

  4. 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.

  5. 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.

  6. 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.

  7. 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.

  8. “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.

  9. ei… a melhor linguagem é aquela que o programador domina… existe gente ganhando muito – e eu digo muiiiito – dinheiro desenvolvendo planilhas no excel para financeiras.

  10. Pascal usado no ambiente Delphi é a melhor línguagem para iniciantes, para se aprender programação.
    Estão tentando enterrar o Delphi, mas a gente não deixa ele morrer, porque o que é bom, não morre nunca.
    Estão tentando vender a idéia, de que estas sopas de letrinhas dessas línguagens da nova era, é o melhor pra todo mundo, estão esquecendo que o Delphi tem muita estrada, muito conhecimento adquirido, que a cada nova versão o seu ambiente de programação vem melhorado mais e mais.
    Por favor, não tentem vender uma idéias errônea que de o Delphi é ruim e está morto !

  11. Não existe linguagem ruim! Se a pessoa for boa em delphi, ela fará qualquer coisa que ela quiser. Se for em java, também. Porém, java está tomando conta do mercado, tanto por ser uma linguagem segura, quanto por ser uma linguagem realmente multiplataforma.
    Para quem criticou pascal, bem, embora não seja uma super linguagem, ela é sim, boa para quem esta iniciando.
    Aprender programação não é uma coisa que qualquer um consegue, porém, pascal é tão fácil, que até mesmo crianças podem aprender a programar em poucas semanas, isto é o que vai motivar o futuro programador a se aperfeiçoar. Além do mais, pascal vai dar ideias ao iniciante sobre o que realmente significa uma variável, um bloco de funções, e outras características das linguagem atuais.
    O ponto final na questão é: NÃO EXISTE LINGUAGEM RUIM, O QUE EXISTE É PESSOAS INCAPAZES DE FAZEREM BONS PROGRAMAS COM LINGUAGENS SIMPLES!!!
    Como conselho, comecem com pascal ou python, são ótimas linguagens, simples e que vai te motivar a se aperfeiçoar cada vez mais. Depois que ja tiver uma base de pascal ou python, procure aprender o C, embora, digo desde ja que, não é tão simples quanto dizem, porem, aprendendo a linguagem C, você será capaz de programar em qualquer outra linguagem!
    Abraços e bos sorte nessa incrível caminhada pelo maravilhoso mundo da programação!!!

  12. Olá, estou meio atrasado, mas gostaria muito de comentar aqui :)
    Apesar do preconceito da comunidade em geral, acredito que VB.Net seria uma linguagem boa para início. Tem a sintaxe muito próxima do Portugol, acho que a mais próxima de todas, e não tem os problemas que possuem o Pascal, citados pelo autor. Claro que, posteriormente, para criação de sistemas comerciais, não recomendaria…;)

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s