Sequência ideal de aprendizado de linguagem de programação? [fechadas]


17

O que você acha? Qual é a sequência ideal de aprendizado de linguagem de programação que abrangerá a maioria das linguagens e paradigmas mais usados ​​atualmente, além de ajudar a compreender conceitos, idéias e práticas comuns de programação? Você pode até sugerir sequência de aprendizado para paradigmas, e não para idiomas.

NB: Essa é a porta da pergunta que fiz no stackoverflow e foi fechada por ser subjetiva e argumentativa.


Ótima pergunta. Quais teriam sido as respostas se essa pergunta fosse orientada para o desempenho? Estou curioso: programmers.stackexchange.com/questions/16323/… : D
JoeBilly

4
Estou profundamente surpreso e satisfeito por Lisp aparecer normalmente nas questões de alto escalão.
Inaimathi 4/11/10

1
Esta pergunta também foi feita aqui (embora eu ache que essa tenha sido a primeira): programmers.stackexchange.com/questions/41720/…
oosterwal

Respostas:


26

Python, Lisp, C, Haskell

Assumindo que a pergunta era sobre uma sequência de aprendizado ideal para iniciantes em programação (como os veteranos da programação terão sua própria sequência de aprendizado (provavelmente acidental)), sugiro ler o ensaio de Norvig sobre como aprender programação em 10 anos ;

  1. Python : comece com uma linguagem dinâmica, de alto nível, OO e funcional. Porque é realmente importante que os iniciantes se sintam produtivos o mais rápido possível, e não deve ser desativado por sintaxe estrangeira, falta de bibliotecas, falta de multiplataforma, falta de recursos de aprendizado e falta de comunidade. O Python é altamente legível, possui inúmeras boas bibliotecas (especialmente bibliotecas científicas - um cientista / engenheiro moderno deve saber programar), é facilmente executado na maioria dos sistemas operacionais, possui vários tutoriais e livros gratuitos inteiros e geralmente é fácil de usar - enquanto continua sendo poderoso o suficiente para crescer com você, à medida que se torna um programador avançado trabalhando em grandes problemas. Também é importante reforçar convenções importantes + úteis para um iniciante: a legibilidade do código conta MUITO, e você deve escrever código para você e outras pessoas entenderem prontamente.

  2. Lisp: Em particular, pelo menos vasculhe The Structure and Interpretation of Computer Programs ou assista aos vídeos do SICP , e tenha os olhos bem abertos ao ver os fundamentos e o poder expressivo da programação - é possível fazer muito com tão pouco. Aprenda como o Lisp pode expressar não apenas o paradigma funcional, mas OO, lógico / declarativo e muito mais - como a criação de novas linguagens específicas de domínio. Leia o PAIP de Norvig para testemunhar o que um mestre pode fazer com o idioma. Então confira Clojure , um dialeto Lisp moderno que pode ser uma das Próximas Grandes Coisas.

  3. C: Somente porque é a língua-franca da computação. :) Possivelmente opcional nos dias de hoje, se alguém é principalmente um programador em um domínio específico que não é de software. Acho feio, mas vale a pena conhecer para apreciar o hardware subjacente. Vá com K&R , é claro.

  4. Haskell : Poder funcional puro. Onde atual Com.Sci. teoria e poder expressivo prático se encontram. Veja o mundo real Haskell .

Após o tour acima, seria muito hábil em resolver problemas e expressar soluções em código, e ficar totalmente à vontade com os paradigmas aqui :

texto alternativo


Eu (naturalmente) substituiria o Smalltalk por Python como # 1, mas digo que saber que o Python (a) é muito mais popular que o Smalltalk e que (b) fazer o Smalltalk falar com outras linguagens é tão difícil quanto em Java , o que é difícil o suficiente para frustrar um novato. O "scriptiness" do Python parece uma grande vantagem.
Frank Shearar

Eu concordo com sua declaração de produtividade. Eu acho que aprender C como a primeira língua absoluta é uma carga de besteiras. Mas definitivamente deveria estar na pilha em algum lugar.
21810 Mark Canlas #

+1 Não tenho certeza se Haskell deve estar no topo, mas, para ser justo, ainda não o conheço e é o próximo da minha lista, por isso ainda pode acabar sendo o último idioma que aprendi.
Inaimathi 4/11/10

2
1-clique para diagrama de tamanho completo @ i54.tinypic.com/168ity1.jpg
Mike Clark

Eu +1 isso se C não estava na lista
Balog Pal

28

É assim que eu faria:

  1. Python (ou Ruby ou Lua): uma linguagem interpretada, sem tipos, você pode fazer coisas em poucas linhas. Biblioteca enorme (Python é o melhor para isso, eu acho). Você pode se aprofundar em algoritmos porque não há distrações. Nenhuma compilação necessária, basta executar. Além disso, no Python, você ensina implicitamente bom estilo, já que o recuo no Python é obrigatório. Você também pode ensinar orientação a objetos (em Lua é mais um problema). O objetivo aqui é se divertir muito e mostrar ao aluno o que pode ser feito.

  2. C ++ (ou talvez Java): uma linguagem rápida e digitada. Se você precisar de Orientação a Objetos, já conhece alguns conceitos. A idéia principal é "traduzir" o que você fez em Python e fazê-lo com as novas restrições (principalmente tipos). Agora, se você tiver os conceitos corretos, adicionar tipos não é um problema. O próximo passo é pensar em um nível mais baixo (Java não ajuda aqui) e ensinar bem os ponteiros . Com isso, quero dizer explicar um pouco sobre o espaço de endereço, a CPU, o SO, para que você possa começar a ver o programa. Uma linguagem compilada introduz a distinção entre interpretação e compilação, muito útil para explicar o que é linguagem de máquina etc.

  3. Montagem : Finalmente, não há mágica, você apenas fala com a máquina. Há um debate sobre a sintaxe da Intel e GAS, não é importante. Se você possui MIPS, acredito que seja melhor para o ensino, mas suponho que o x86 seja mais conveniente, pois é mais difundido (x86_64 é melhor, pois possui mais registros e detalhes). Você apenas precisa remover parte da complexidade e permitir que os alunos investiguem mais, se quiserem.

(Esses três primeiros são a "profundidade". Até agora, descemos até você tocar o fundo, que é "próximo ao metal", como eles dizem. Acho que isso é muito importante, muitas questões na programação são resolvido quando você tem uma idéia clara do que está acontecendo. Quando você sabe disso, pode adquirir mais conhecimentos com confiança.)

  1. Esquema (ou Common Lisp ou Clojure): Como o @dukeofgaming disse, as linguagens Lisp permitem que você ensine bem a recursão (para esse esquema é melhor, pois não possui loops explícitos). Mas eu ensinaria duas outras coisas: fechamentos e macros. Macros são o que separa os idiomas Lisp dos outros. Pessoalmente, não gosto de macros do Scheme, mas isso não é muito importante. Eu acho que as macros do Clojure são boas, por exemplo (mas a recursão no Clojure não é tão limpa, pois a JVM não possui recursão de cauda). Os fechamentos são um conceito muito importante, depois que você os grava, "vê" o Javascript instantaneamente. Tendo estudado C ++, Python e Lisp, o Javascript se torna "trivial".

  2. Haskell : Para uma linguagem funcional, não acho que você possa vencer o Haskell. Lisp e Scheme são considerados funcionais, mas para enfatizar a programação funcional, você deve forçar os alunos a pensar sem estado. Haskell também tem outras coisas muito legais, como curry e correspondência de padrões para "desestruturar". Não conheço muito Haskell, mas a concisão do código que você pode escrever é simplesmente linda. Conhecer bem Haskell facilita muito o caminho para entender Erlang.

  3. Quarto : Uma linguagem de pilha. Isso interrompe totalmente sua lógica novamente (se Lisp e Haskell não foram suficientes). Eu iria até o ensino de Jones Forth, já que eles conhecem assembléia e então você pode entender totalmente o que está acontecendo. (Saber adiante abre o PostScript, por exemplo.)

(Portanto, esses três últimos são a amplitude que você estava dizendo. Para mim, essas línguas são estranhas o suficiente para mudar sua maneira de pensar. Elas fizeram por mim pelo menos. E eu acho que com essas, você entende paradigmas suficientes para aprender um novo idioma. muito rapidamente.)

Opcionalmente, você pode estudar estes:

  1. SmallTalk : uma linguagem puramente orientada a objetos. Para ver o que acontece quando você leva a sério a Orientação a Objetos, o idioma não precisa de "se", "para". Tudo é uma mensagem: grande realização novamente. (Isso facilitaria o Objective-C agora.)

  2. Ir : Um idioma (bonito) com ênfase na simultaneidade. Acho Go muito agradável e confortável para programar.

  3. Prolog : Outro paradigma de programação. Não escrevi nenhum prólogo, mas entendo que é mais uma linguagem alucinante.


6
Python e Ruby (eu não sei sobre Lua) são linguagens fortemente tipadas. Eu acho que você quer dizer que eles são dinamicamente, e não estaticamente digitados.
Daniel Roseman

13
Trate C e C ++ como dois idiomas separados.
David Thornley 31/01

1
Bjarne diz : "Não existe uma linguagem chamada" C / C ++ ". A frase é geralmente usada por pessoas que não têm idéia sobre programação (por exemplo, pessoal de RH e gerentes pobres). Como alternativa, é usada por pessoas que simplesmente não conhece C ++ (e geralmente também não C) ".
Fredoverflow 31/01

1
Eu gostaria que alguém argumentasse se o assembly deveria preceder o C ++. Nesse ponto, seria bastante fácil de se aproximar de montagem, devido aos conceitos simples e um pequeno conjunto de ferramentas fornecidas, ainda trabalhando com raw memória e matérias- referências de memória deve ser muito útil quando se aproxima C ++, onde o uso de referências nominais para tratar tanto arbitrária localizações e valores da memória confundem a merda da maioria das pessoas.
Filip Dupanović 31/01

1
Dei a meus dois alunos de CS um curso de uma semana em uma montadora inventada. basicamente inventei um computador com conjunto mínimo de instruções e um intérprete. Então eles poderiam escrever (e ver executar) algumas rotinas muito simples, completas com o tempo. Em seguida, adicionei itens como cache de dados e pré-busca para que eles pudessem ver como os recursos arquiteturais interagem com o desempenho. Suspeito que um montador artificial e um computador possam permitir mais flexibilidade e eficiência de aprendizado, se o objetivo for didático, e não a aquisição de algo que eles possam usar.
Omega Centauri

12
  • O que você precisa agora
  • O que você precisa a seguir
  • O que você precisa depois disso

Sério, eu posso ter aprendido BASIC, COBOL, Fortran, Forth, Pascal e Prolog no meu tempo, mas eu nunca precisei particularmente usá-los e não vejo realmente como eles influenciaram meu uso de outros idiomas, exceto talvez aplicando paradigmas um do outro. Levei anos para desaprender o BASIC o suficiente para realmente escrever Pascal estruturado, alguns anos para parar de escrever o código Pascal em C e outros dois para realmente entender OOP quando comecei a usar Objective-C e Java. Por outro lado, desde que eu trabalho (quase) exclusivamente em linguagens OO, consegui me concentrar em melhorar meu uso de linguagens OO, sem tentar fazê-las parecer com Scheme ou PostScript.


4
Você sabe, eu acho que há algum valor de aprender uma nova língua, mesmo se você não precisa dele ... porém eu concordo com o sentimento geral de que muitas vezes é melhor para aprender uma língua, porque você acha que você encontrá-lo útil , em vez porque é o que você acha que "deveria" aprender.
Tim Goodman #

8

É difícil afirmar que qualquer sequência é ideal, mas apresentarei um plano que posso justificar:

  1. C

    Aprender C exige paciência e diligência e apresentará as maneiras básicas pelas quais os computadores lidam com dados e mostra quase o conjunto mais amplo de responsabilidades que um programador pode aceitar para lidar com essa máquina.

  2. Perl

    Como um antídoto para o rigor exigido por C, tente o Perl inacreditavelmente perdoador. O que levou uma semana para escrever em C, você pode escrever em uma hora em Perl. Ele apresenta um tipo diferente de prazer encontrado na programação e mostra como a exclusão de certas preocupações e detalhes libera o programador para se concentrar em coisas diferentes.

  3. C ++ , ou talvez Java

    A seguir, veja como o foco da C nos aspectos primitivos e de baixo nível da programação serve como base para aumentar o nível de abstração, observando as negociações que se faz em eficiência ao subir na abstração. Explore como formar abstrações que ainda podem reter as eficiências importantes para o seu programa.

  4. Lisp comum

    Esta é a recompensa pelo trabalho anterior. Você encontrará ecos do que aprendeu em todas as linguagens anteriores e verá como são tolas tantas concessões anteriores ao programar no Lisp. O pré-processador de C e os modelos de C ++ preparam um para apreciar o sistema macro de Lisp. Você recuperará a facilidade de expressão do Perl, as oportunidades de otimização de baixo nível do C, os recursos de criação de abstração do C ++ ou Java e superará todos eles. Nenhum dos três anteriores - talvez, exceto o depurador de Perl - o tenha preparado para a experiência de programação interativa com um REPL capaz ("read, eval, print loop"). Trabalhando com uma imagemambiente baseado em código - que altera o relacionamento entre seu código-fonte e a idéia de um "programa executável" - mudará toda a sua idéia do que significa construir um programa.

Além desses quatro, explorar outros estilos de programação, como programação funcional em Haskell ou programação lógica em Prolog, possibilita uma compreensão mais abrangente da gama de programação - amplo conhecimento, se você desejar -, mas nesse momento seu tempo é melhor servido melhorando seu ofício - conhecimento profundo - com qualquer idioma que você conheça.

Tendo provado idiomas distintos o suficiente, sua visão aumentará para se concentrar nas idéias que transcendem qualquer uma delas. É uma espécie de como a diferença entre aprender a conduzir o carro do seu pai e saber como conduzir qualquer carro: Você pode não gostar de ter de conduzir a locação mini-van por alguns dias, sabendo muito bem os prazeres de dirigir um carro esporte favorito, mas você descobrirá como operá-lo e certamente obterá mais do pobre animal do que um amador.


4
+1 para C e Lisp comum, mas Perl como o segundo idioma ?? :) O Python serviria soberbamente como uma linguagem dinâmica, além de incentivar bons hábitos de programação - como o código sendo muito legível para você e outras pessoas, nas semanas, meses ou anos após a escrita inicial do programa.
limist

1
Em relação à recomendação do Perl: sou apenas eu que mostro minha idade. Certamente, hoje, Python ou Ruby seriam substitutos próximos, mas ambos são mais dogmáticos que Perl e mais orientados para a orientação a objetos no estilo classe como um saco de métodos que um novo programador saindo de C não. ainda não preciso. Lembro-me de que, quando aprendi Perl, fiquei assustadoramente produtivo imediatamente, e não foi por muito tempo depois que comecei a usar suas instalações orientadas a objetos. Com muita freqüência, todo esse foco de OO é apenas uma cerimônia distraída e desnecessária.
seh

Eu discordo da sua opinião sobre "os negócios que se faz com eficiência ao subir na abstração". Um dos pilares do C ++ é que um programa que usa as instalações do C ++ nunca é mais lento que um programa C equivalente . Por exemplo, utilizando funções virtuais de C ++ nunca é mais lenta do que a simulação funções virtuais em C.
fredoverflow

É verdade, Fred, e foi isso que eu quis dizer: tirar proveito dos recursos sem pensar em como eles funcionam pode gerar custos - custos que você pode ter evitado antes, evitando também a capacidade do recurso, porque isso seria proibitivamente complicado ou apenas insuficientemente idiomático implementar manualmente. Por exemplo, reclamar que o RTTI é "muito lento" imediatamente levanta a questão de como mais você resolverá o problema.
seh

6

1. Smalltalk

Projetado originalmente, pelo menos em parte, como uma maneira de as crianças usarem computadores para aprender. A sintaxe é simples o suficiente para descrever em um parágrafo. Como o LOGO, exemplifica o princípio "baixa barreira à entrada, teto alto".

Smalltalk é uma linguagem OO pura no sentido de que "tudo é um objeto".

Ele também ensina muitas técnicas funcionais, particularmente em sua API Collection: encadear mensagens, funções de ordem superior, mapear, reduzir e assim por diante.

A comunidade Squeak é vibrante e acolhedora. Você também verá muitas discussões sobre técnicas avançadas: assim como a comunidade lisp, há muitos Smalltalkers muito experientes na lista de e-mails dispostos a compartilhar seus conhecimentos. (Não faz mal que a comunidade Squeak tenha uma grande subpopulação de educadores profissionais.) Há também outra lista para iniciantes.

2. PROLOG

Uma linguagem de programação lógica que lhe dará uma visão muito diferente da computação em relação a qualquer outra linguagem. Prolog também é altamente declarativo (mas não completamente): o !operador ou cut pode ter um efeito semântico significativo em um predicado).

3. Lisp comum

Substitua o esquema aqui, se quiser. O Lisp comum suporta múltiplos paradigmas, especialmente OO e funcionais. Ele também tem uma longa história (o Lisp é a segunda linguagem ainda mais usada: apenas a mais antiga do FORTRAN).

4. Haskell

(Advertência: eu apenas comecei a aprender.) Provavelmente a linguagem funcional mais pura do planeta. Possui um sistema de tipo estático muito avançado. Existem livros de introdução úteis .

5. C ou Delphi

Você precisa saber como os computadores funcionam. Você precisa saber como a memória e a CPU realmente funcionam. Ambos são tradicionalmente "próximos do metal" e têm comunidades que incentivam o pensamento de como sua linguagem é compilada para montagem.

Por que essa ordem?

O Smalltalk é muito fácil de aprender, para que você possa começar a se concentrar rapidamente na solução de problemas, em vez de combater um compilador ("baixa barreira à entrada"). Depois de iniciar a programação, também não há limite artificial para o que você pode fazer - "teto alto".

Depois de ter uma idéia justa de como o OO funciona (e - com a condição de que MUITOS entendimentos diferentes do que "OO" significa - é justo dizer que o OO domina o mercado), migrar para o Prolog garante que você não comece pensando que OO é o único caminho. O prólogo é muito diferente da maioria dos idiomas e alonga seus músculos mentais para que você não comece a pensar que sabe tudo.

Lisp comum, por sua vez, é a linguagem de um adulto. Ele tem um padrão maduro, lidera o design de idiomas há décadas (junto com o Smalltalk) - todos esses novos recursos sofisticados que seu idioma favorito acabou de adquirir? As chances são as idéias incubadas no Lisp ou no Smalltalk. O Lisp comum também é um pouco complicado, e você encontrará verrugas em todos os lugares.

O quarto de Haskell está na lista porque (me disseram: eu apenas comecei a aprender) sua pureza significa que algumas coisas muito comuns (como E / S) são mais difíceis de fazer do que em linguagens menos puramente funcionais. O pessoal da Haskell também usa algumas terminologias bastante exóticas (palavras como "catamorfismo", por exemplo), e você provavelmente se sairia melhor com alguma experiência em programação antes de abordá-la. (Mas devo reiterar, eu apenas comecei a aprender! Tome essa opinião com uma pitada de sal!)

E por que C / Delphi durou? Porque, a menos que você trabalhe em sistemas embarcados, não precisará aprender programação, pensando que o gerenciamento manual de memória é tudo o que existe. A coleta de lixo funcionou bem o suficiente para uma máquina de nível dos anos 80. Seu telefone é tão poderoso!

Finalmente, eu não coloquei Erlang na lista acima, mesmo que eu realmente devesse.


2
Esta é uma sequência de aprendizado ?
precisa saber é o seguinte

É claramente uma sequência (de comprimento 1).
precisa saber é o seguinte

Com menos faceta: darei uma etapa na sequência e você fornecerá a outra, e a comunidade votará na ordem dessa sequência, está bem?
precisa saber é o seguinte

3
@ Frank, eu não quis dizer isso. Eu esperava sequências completas. E eu acho que a ordenação não pode ser feita votando.
Gulshan

Por favor pessoal: se você está indo para o voto negativo, explique o porquê .
Frank Shearar

5
  1. Pitão. Uma excelente introdução à programação. Isso também estará associado a qualquer exposição anterior à programação.

  2. Esquema. Também é uma excelente introdução à programação. Se você lida com novatos em programação, você pode ensinar isso primeiro e depois o Python. Uma alternativa seria Python primeiro e depois Common Lisp em vez de Scheme: mais trabalho, mas mais recompensa.

  3. C. Uma linguagem de baixo nível que fica próxima ao silício. É bom para aprender o que um computador pode fazer. Você pode substituir alguma forma de linguagem assembler, mas C é bem próximo do básico e muito mais fácil de trabalhar.

  4. Prolog. Como alternativa, substitua qualquer linguagem de uso geral de estilo declarativo, se você puder encontrar uma que mais goste.

  5. Haskell. Para o sistema de tipos e funcionalidade pura, se nada mais.

  6. Existem vários candidatos aqui, pois é impossível cobrir todos os conceitos com seis idiomas. Vale a pena aprender o Common Lisp, mesmo que seja apenas para o sistema macro e o sistema de objetos (que é diferente da maioria dos outros que já vi). Quarto, Tcl e APL são idiomas estranhos que tiveram algum sucesso, e um deles seria bom para impedir que o aluno se sentisse como se tivesse aprendido tudo. Erlang seria bom para simultaneidade.


"Se você lida com novatos em programação, você pode ensinar isso primeiro e depois o Python." Muito de acordo. É uma abordagem que minha antiga universidade agora adota e parece funcionar muito bem.
pyvi 31/01

Esta é uma lista muito boa, eu provavelmente reverteria a ordem em Haskell e Prolog. Se o aluno fosse particularmente mal-experiente, eu eliminaria seis, aumentaria a lista e começaria com algo mais simples.
Orbling

4

Muitas boas respostas foram fornecidas, mas eu não vi ninguém oferecendo SQL. É um animal completamente diferente do que a maioria dos outros listados e muito importante para qualquer programador que precise lidar com bancos de dados.

Você também pode considerar algumas 'linguagens' de script no nível do sistema operacional, como Batch, grep, awk, etc. 'Make' também pode se enquadrar nessa categoria.

Um outro idioma que você pode querer considerar (se ainda não estiver completamente morto) é o COBOL. É suficientemente diferente de outras linguagens processuais que merece alguma menção. Variações de C, Fortran, Basic etc. tornaram-se tão semelhantes que, quando você se familiariza com um, mudar para outro não é um grande problema, mas o COBOL carece de muitas das construções que são consideradas certas nos outros. (Faz mais de 20 anos que não faço nada com o COBOL, portanto, minhas observações podem não ser mais válidas em relação a esse idioma.)

Você pode mencionar o APL apenas do ponto de vista histórico - ou deixá-lo descansar em paz. Sua escolha.


1
O motivo de eu não sugerir o SQL é que não é uma linguagem de uso geral. Prefiro bater nos alunos com algo declarativo e mais geral, como o Prolog. As linguagens de script no nível do sistema operacional não oferecem nada que uma linguagem mais geral, como Python ou Perl, não ofereça. A última vez que toquei no COBOL, ele não ofereceu conceitos que você não pode melhorar em outros idiomas. Gosto da sugestão da APL, não tanto pelo valor histórico, como por ser uma linguagem muito diferente.
David Thornley

@ David Thornley: Concordo que o SQL não é uma linguagem de propósito geral. O SQL tem alguns conceitos lógicos e de teoria de conjuntos interessantes como operações básicas que não surgem em muitas outras linguagens, por exemplo. união, ingresso, agrupamento por etc. etc. que valem a pena notar para qualquer um que possa estar lidando com bancos de dados.
Oosterwal

Todas as coisas que eu gostaria de ver ensinadas a um aluno, embora algumas tenham uma sensação histórica. Aprender as linguagens de script é meio essencial, mas pode ser feito ao lado dos outros, o mesmo para SQL, é uma linguagem de serviço para as primárias. Se o aluno era muito forte em matemática, começar com o APL pode ser bom (ou talvez R, pois é muito mais fácil de ler, mas pode ser usado da mesma forma).
Orbling

2

Eu sugeriria a primeira leitura de Eric Raymonds "Como se tornar um hacker", pois ele tem alguns pontos muito interessantes sobre como começar, incluindo Lisp, que tem a noção "código é dados e dados são código".

Para programação, eu também sugeriria a linguagem Haskell, Prolog, SQL e assembly (apenas algumas).

Independentemente do que você deseja aprender, reserve um tempo para aprender adequadamente e escreva quantidades não triviais de código. É como andar de bicicleta - você não pode aprender com um livro.


2

Primeiro> O que você deseja fazer quando começar a programar? Aprender a ser um programador de jogos é diferente de aprender a ser um programador de banco de dados para uma empresa ... é diferente de um programador baseado na Web ...

Segundo> Depois de começar a aprender, você quer começar do alto e trabalhar o seu caminho? Ou comece baixo e suba. Aprender C # (nível alto) é muito diferente de aprender Assembly (nível baixo).

Uma enorme escolha dependerá do que você deseja fazer. A programação de um driver provavelmente incluirá C ou Assembly ... A programação de um site será PHP, C #, asp, etc ... Você não tocará em assembly para programação na Web ... etc ...

No que diz respeito ao básico ... depois de decidir o que você quer fazer, é mais fácil escolher um idioma. Eu, por exemplo, me tornei analista de dados em um hospital. Portanto, minha "escolha" de idiomas é SQL / TSQL / DB2 para acesso a dados, C # WPF para clientes Windows, Silverlight para clientes Web, alguns RPG / CL para lógica de back-end IBM ...

Pessoalmente, mantenho um bom livro + construo seu próprio programa para praticar o idioma. Eu gosto do APress e adorei ler o C # 2008 Illustrated ao aprender C #. Eles têm outros livros que abrangem conceitos básicos para os não instruídos e também para os especialistas.


2

Um iniciante precisa de apenas um idioma para começar. Depois de aprender o segundo idioma, ele já está progredindo além de muitos desenvolvedores concorrentes. Eu aprenderia na seguinte ordem:

  • Smalltalk - este é o melhor OO, e a exposição simples abrirá seus olhos para a maneira como as coisas devem ser feitas. Melhor aprender conceitos de OO.
  • Java ou C # - fornece uma abordagem mais arquitetônica e planejada para o OO, enquanto introduz tipos verificados estaticamente.
  • Ruby ou Python - você não pode apreciá-lo até sentir Java ou C #
  • Erlang - simultaneidade feita de uma maneira que faz parecer fácil. É muito melhor do que suas linguagens OO ou C podem fazer.
  • Lisp, Haskell ou outra linguagem funcional - é uma abordagem diferente para resolver problemas.
  • C - Criando extensões nativas para Java ou implementando algoritmos de nível inferior, isso é tão próximo do assembly quanto alguém precisa até que eles escrevam compiladores

Você pode perguntar "onde está o C ++?" e o X? Honestamente, o aprendizado de vários idiomas faz algumas coisas: enriquece sua experiência e fornece um impulso para aprender mais idiomas. A lista de linguagens que conheço bem (Java, C #, Ruby, C ++, Javascript) é toda orientada a objetos - mas é principalmente porque é isso que tenho que fazer no trabalho todos os dias. A lista de idiomas aos quais fui exposto (Smalltalk, Python, Erlang, JESS, C, Assembly [Motorola 6502/6510], Go) me ensinou lições valiosas. Eu posso pelo menos entender o que está acontecendo com esses idiomas. Há muita coisa que eu não explorei, mas muito bem pode no futuro. Também existem algumas linguagens de marcação: HTML, XSL: FO, XSLT, CSS, XML, SGML às quais as pessoas precisam de exposição, se quiserem trabalhar com a Web de qualquer forma.

Depois de aprender pelo menos duas línguas diferentes, acho que você não deve restringir o que alguém que deseja aprender decide aprender a seguir. O aprendizado deve ser uma experiência orgânica, e muita estrutura no processo cria um grupo de pessoas que pensam exatamente da mesma maneira. Uma monocultura, por assim dizer.


2

A maioria dessas respostas parece mais ou menos a mesma, então vou oferecer uma opinião diferente. Há muito tempo acredito que a melhor primeira língua é o Tcl.

Por quê? Por um lado, é muito fácil de aprender. Não há muita sintaxe na linguagem, portanto o aluno pode se concentrar mais nos conceitos de programação e menos nas peculiaridades sintáticas de uma linguagem específica. Até o momento em que este artigo foi escrito, o Tcl tinha exatamente 12 regras que governam o idioma inteiro (acima das onze nas duas últimas décadas).

Por outro lado, o Tcl vem com uma fantástica linguagem GUI integrada, para que você possa obter uma gratificação relativamente instantânea e aprender o básico da programação orientada a eventos.

Terceiro, é extensível. Quer ensinar sobre um loop de repetição? Você pode escrever um comando que executa um loop de repetição, para que não apenas possa aprender a usar o repeat ... até, como também pode ser diferente de um loop while, porque você mesmo o escreveu.

Além disso, como é extensível, é fácil seguir para C. Você pode aprender o básico de C e aprender como a) estender o Tcl com novos comandos escritos em outro idioma ou b) aprender como adicionar uma linguagem de script a um programa escrito em C.

Depois de aprender Tcl e C, a maioria dos outros idiomas fica entre esses dois extremos e deve ser relativamente fácil de entender. Minha lista completa, com as quatro que eu ensinaria depois de Tcl e C, são:

  1. Tcl
  2. C
  3. Python - para conceitos de OO, mais o comportamento de definir blocos por recuo para contrastar com outras linguagens.
  4. Ruby - para uma abordagem diferente do OO, além de trilhos para aprender sobre estruturas
  5. java - é usado em qualquer lugar, você precisa conhecê-lo e aprender sobre a JVM
  6. groovy - volta para idiomas dinâmicos

1

Linguagem Assembly, C, SQL, C #

Eu sei, chato e velho skool. E toda a questão ignora a parte realmente difícil da programação, que é a solução de problemas, modelagem de domínio e construção de algoritmos. Mas aqui está o porquê:

  1. você não pode fingir na linguagem assembly; você entende ou não. o compilador não salvará você, não há sobrecarga de estrutura ou biblioteca e você não pode se esconder da arquitetura da máquina; é pura programação (no nível iniciante, adicione dois números)

  2. depois de escrever alguns programas em linguagem assembly com mais de algumas centenas de linhas, os ponteiros e o gerenciamento de memória não são mais misteriosos e você deve ter começado a perceber padrões no código (if, switch, array, loops etc.) ) C traz esses padrões para a luz do sol e os deixa brilhar. A biblioteca padrão é útil sem ser imensa, mas não se preocupe com macros / templates / etc. nesta fase.

  3. agora pule para bancos de dados com SQL. Não exagere nos procedimentos armazenados, apenas obtenha o básico de tabelas e consultas.

  4. depois de escrever alguns programas em C com mais de algumas centenas de linhas, ponteiros, estruturas e gerenciamento de memória são uma segunda natureza e as construções processuais são velhas amigas. Você começará a notar padrões de ordem superior: essas funções sempre acompanham essa estrutura de dados, essa parte do código é exatamente igual à parte do código, exceto pelos métodos X, Y e Z, e assim por diante. Acrescente a isso sua compreensão de dados relacionais e agora você está pronto para uma linguagem orientada a objetos. Com uma estrutura massiva e documentação geralmente obtusa. Bem-vindo ao mundo real! Explore GUIs, escreva aplicativos de desktop, escreva sites, escreva serviços web, escreva o que quiser. Vá conseguir um emprego, se você é tão inclinado.

Você é agora um Jedi de programação? Um ninja de código? Não , agora você é meramente competente. Mas você tem uma base sólida para explorar as novas e divertidas coisas divertidas.


1

Você precisa dos fundamentos:

  1. Código da máquina
  2. Linguagem Assembly
  3. C
  4. Lisp

Depois disso, provavelmente não importa.


0

OK, este é o último dia da recompensa. E estou adicionando minha resposta. Minha sequência sugerida

C, C ++, JAVA / C #, Python / Ruby, Qualquer outra linguagem (Assembly / Lisp / Prolog etc)

  • Eu não acho que o primeiro idioma tenha que ser o mais fácil. Em vez disso, acho que deveria dar uma idéia geral de como o computador funciona, mantendo alguma abstração.
  • A transição de C para C ++ será mais fácil. Haverá POO, o paradigma mais usado nos dias de hoje.
  • A transição de C ++ para C # / Java será mais fácil. Eu prefiro o C # porque ele incorpora muitos paradigmas, como programação funcional.
  • Quando alguém agora usa linguagens dinâmicas como Python ou Ruby, haverá um " WoW ". Será mais fácil sentir a beleza da digitação dinâmica. Mas aprender primeiro linguagens dinâmicas e estáticas mais tarde causará: " Oh! Por que tenho que adicionar todas essas? "
  • Agora, os paradigmas e linguagens mais usados ​​estão quase prontos. Então, explore o que quiser. Da Assembléia a Lisp, Prolog ou Haskell. E descubra contextos mais recentes e recursos de várias linguagens de programação.

Aqui C é apenas para começar.
Gulshan

a preferência de c # sobre java depende de muitos fatores, eu diria que ambos são quase iguais.
Prasonscala 16/03

0

Esquema, C, C ++

Serei tendencioso e usarei o modelo que minha universidade atualmente usa em seu currículo principal de Ciência da Computação. Eu fui contra durante o meu primeiro ano, mas nos últimos anos sou grato por isso. O modelo baseia-se em não exigir nenhuma experiência em programação, mas exigir a capacidade de aprender.

  1. Esquema
    Nós somos que você está aprendendo a programar primeiro, quanto menos mágica, melhor. A linguagem de ensino do Scheme apresenta uma definição clara e razoável de uma língua, um conjunto realmente pequeno de axiomas (a "mágica") que você pode construir e expandir. Qualquer pessoa que entenda as funções da matemática pode rastrear e raciocinar com os programas do Scheme. Começando com o Scheme fornece uma maneira limpa e poderosa de pensar em computação sem se preocupar com os detalhes específicos do idioma.

  2. C A
    mudança de Scheme para C é drástica, mas permite que você aprenda sobre o mapeamento muito importante de idiomas de alto nível para idiomas de baixo nível. Aprender o modelo de memória (ponteiros, pilha, pilha etc.) e como os programas são compilados e executados, como ponteiros, pilha e pilha funcionam são habilidades essenciais. Através desse entendimento de baixo nível, você pode começar a analisar programas em um nível superior (Big O). Você pode começar a rolar seus próprios tipos de dados abstratos, jogando com diferentes implementações (por exemplo, uma tabela de hash simples versus uma árvore binária de um conjunto).

  3. C ++
    Ao aprender C e Scheme, começamos a ver diferentes paradigmas de linguagens de programação e como elas podem se aplicar a diferentes problemas. Agora você pode abordar os aspectos mais assustadores da programação: escolhas e trocas. A escolha da linguagem de programação pode afetar o desempenho, a legibilidade, a manutenção, a robustez etc. Para resolver problemas maiores do que aquilo que você pode ter em sua mente, essa escolha é ótima, mas também perigosa. O C ++ tenta fazer o menor número possível de opções para o programador. Ao aprender C ++, você aprenderá como fazer essas trocas e escolhas para resolver seus problemas.

Você pode não usar nenhum desses idiomas na indústria ou nunca tocá-los novamente, mas o processo de aprendê-los ajuda a entender outros idiomas que você usará. Outro aspecto é que você aprende as ferramentas em torno de um idioma específico. Executando o gcc na linha de comando, aprendendo o Vim, percorrendo um programa usando o GDB, criando arquivos Make, verificando código usando o SVN, escrevendo scripts de shell para automatizar testes etc.

Lembre-se de que o currículo principal também possui outros cursos (arquitetura de computadores, estruturas e algoritmos de dados, compiladores, sistemas operacionais etc.). Portanto, apenas o aprendizado dessas linguagens não é suficiente para ser proficiente em programação.


0

Indo de um idioma básico para um de alto nível é o caminho a percorrer. Dessa forma, você ainda tem uma idéia do que está acontecendo nas costas.

  • C - Ponteiros e gerenciamento de memória
  • Noções básicas de OO e ainda muito popular
  • Java / C # - Idiomas mais populares
  • Alguma montagem básica
  • Linguagem funcional - eg Haskell
  • Linguagem de script - por exemplo, Python

0
  1. Pitão. Para fazer as coisas, faça uma programação comum. Procedimental, OO e (até certo ponto) funcional.

  2. Expressões regulares. Eles estão na biblioteca Python, mas é um DSL separado.

  3. Shell (BASH ou o que for). O "&", "|", ";" operadores para combinar processos são críticos e desagradáveis ​​no Python.

  4. SQL Esta é - por enquanto - a língua franca para acesso a dados.

  5. XHTML. Esta é - por enquanto - a língua franca para apresentação de dados.

  6. CSS.

Talvez C, se necessário.


Você parece ter deixado de fora o estágio de " iluminação profunda ". Esse é o número 7?
Mark C

@ Mark C: apenas tentando cobrir "a maioria das linguagens e paradigmas usados ​​hoje". Na minha experiência, esses "outros" ou DSLs são talvez mais usados ​​do que linguagens de programação. Não sei se isso leva a uma iluminação profunda - apenas exposição a muitos idiomas que são realmente usados.
S.Lott

Você está certo, vejo que ele disse isso, então notei que ele também disse "ou paradigmas". Foi apenas de bom humor.
C #

@ Mark C: Mas SQL e CSS são os "outros paradigmas" que são os mais interessantes. Na verdade, Expressões regulares é um paradigma que causa muitas perguntas sobre o estouro de pilha.
S.Lott

0

Comece perto do metal:

  1. Montador
  2. C
  3. C ++
  4. C #
  5. Lisp
  6. Python ou Ruby

Agora, o problema com uma abordagem tão ampla é que ninguém pode se tornar nem remotamente capaz nesses idiomas sem anos de estudo.

  1. Montador: 3 meses
  2. C: 6 meses
  3. C ++: 2 anos
  4. C #: 6 meses
  5. Lisp: 3 meses
  6. Python / Ruby: 3 meses

A menos que sua intenção seja ensiná-los "Olá, mundo", que deve levar cerca de um mês para todos os 6.


-1

Por que não entrar direto e aprender VB ou C #. Na minha opinião, ambos são idiomas completos, do iniciante ao avançado, imho.


4
Porque isso não é muito amplo e, portanto, não é uma resposta para a pergunta. Além disso, se você acha que um (ou ambos) abrange tudo o que deve aprender, você precisa aprender mais idiomas.
David Thornley 31/01
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.