Se alguém aprender uma nova linguagem de programação a cada ano, qual deve ser a lista? [fechadas]

19

No capítulo um do "Programador Pragmático", o primeiro objetivo de aprendizado é:

Aprenda pelo menos um novo idioma a cada ano. Idiomas diferentes resolvem os mesmos problemas de maneiras diferentes. Ao aprender várias abordagens diferentes, você pode ajudar a ampliar seu pensamento e evitar ser atingido por uma rotina. [...]

Para conseguir isso ao longo de uma carreira, é provável que a lista de idiomas seja bastante longa (principalmente se você não quiser "progredir" no gerenciamento). Claramente, a educação de um programador (ou qualquer outra forma) ajudará você a começar com um núcleo de linguagens comercialmente úteis (a lista usual de anúncios de empregos: C, C ++, Ruby, Python, JavaScript, C #, Java, VB, etc. .). Além disso, é provável que um programa de aprendizado formal ou informal tenha abordagens funcionais cobertas (por meio de algo como Haskell, LISP ou uma linguagem derivada de ML)

Mas uma vez que um subconjunto razoável dessa lista é aprendido - o que vem a seguir e por quê ?

Richard
fonte
3
Em esta resposta que eu listar alguns dos paradigmas de linguagem que poderiam ser estudadas para ampliar suas habilidades. Eu começaria tentando aprender todos esses paradigmas (em vez de focar nos idiomas), então marque todos os que o seu idioma atual usa e escolha um idioma que tenha tantos diferentes do que você está acostumado. Não faz muito sentido começar em C # e depois em Java, tentar diversificar mais inicialmente. Depois de cobrir todos os tipos básicos, você poderá escolher outros idiomas comuns.
Simon P Stevens
@ Simon: Por que não fazer disso uma resposta aqui?
Richard
1
Você aprenderá muito de Java para C #, mas não muito do contrário
Casebash 09/09/10
@Richard. Eu realmente não achei que isso justificasse uma resposta completa, eu estava apenas referindo a você algo relevante que eu havia escrito em outro lugar.
Simon P Stevens
1
A maioria das pessoas que aprende um idioma por ano será um "valete de todos os negócios, mas não domina nenhum" até que você se concentre em alguns por vários anos. Acredito que, com base em muita experiência, a noção de programador 'full-stack' seja falsa, exceto por 1% a 5% dos desenvolvedores. A maioria das pessoas de back-end que conheço não possui grandes habilidades de front-end e vice-versa.
Jun12

Respostas:

19

Torne-o interessante e passe todos os anos escrevendo um intérprete ou compilador para sua própria linguagem de programação que preenche um nicho para o qual você nunca usou uma linguagem de programação. A cada ano, escreva seu próximo compilador / intérprete usando o idioma que você escreveu no ano anterior.

alternativo
fonte
7
Posso ter seu autógrafo, por favor? :-)
Christian Davén
1
+1 Resposta brilhante, mesmo que provavelmente tenha sido feita de maneira bem-humorada.
Joe D
1
@ Joe D Não significa de uma maneira totalmente bem-humorada. Se você pode fazer isso, você dominou todos os nichos.
alternativa
-1 por não significar isso de uma maneira totalmente bem-humorada. (como não temos suficientes semi abandonadas línguas / implementações, que volta)
ZJR
2
@ZJR Então 99% humorístico, 1% não humorístico é ruim? Vamos lá. Além disso, por que você está recusando uma resposta com base em um comentário?
alternativa
13

Você deve maximizar a "relevância marginal", ou seja, sempre se aventurar em novas áreas nas quais você ainda não é forte. Varie as linguagens de programação e os conceitos . Se você não conhece nenhuma linguagem orientada a objetos, tente Java e alguma estrutura de alta abstração, como o Hibernate. Em seguida, escreva algumas coisas sobre administração de sistemas em uma linguagem de script como Python ou Perl. Em seguida, adquira algumas habilidades de baixo nível em C ou C ++, escrevendo código de servidor multithread de alto desempenho. Se você não conhece a programação funcional, tente o Haskell com alguns problemas da teoria dos grafos, como resolver o Peg Solitaire , etc. É muito viável fazê-lo, para que tudo o que você aprenda tenha valor imediato de mercado, até atingir itens eruditos ou para fins especiais, como como segurança de capacidade de objeto ,Prolog ou VHDL .

Bom exercício, a propósito! Isso ensinará você a pensar lateralmente e visualizar problemas em termos independentes de idioma, em vez de confiar em poucas técnicas específicas da plataforma. Por exemplo, depois de dominar as semelhanças e diferenças no envio de método virtual entre C ++ e Python, você "obtém" instantaneamente qualquer outra linguagem.

DomQ
fonte
9

Uma linguagem que não afeta a maneira como você pensa sobre programação, não vale a pena conhecer. - Alan Perlis

Como algumas das outras respostas foram abordadas, se você está aprendendo um novo idioma por ano, por quê? é expandir seus recursos como programador. O como? é aprendendo idiomas com paradigmas distintos daqueles que você já conhece, e fazer um balanço dos paradigmas que você já conhece determina qual idioma aprender a seguir.

Quais são esses paradigmas? O livro avançado Conceitos, técnicas e modelos de programação de computadores fornece uma excelente visão geral com um mapa gráfico .

Assim, se você conhece apenas linguagens imperativas do tipo C, aprender o Scheme / Lisp é extremamente útil. Se você já conhece idiomas imperativos e funcionais, aprender o Prolog será útil, etc.

Um livro recente que tenta ensinar vários idiomas e paradigmas é Sete idiomas em sete semanas . É claro que você não será fluente em cada idioma após uma semana de estudo, mas parece fornecer uma perspectiva multiparadigma acessível e orientada ao profissional.

Quando você cria outro paradigma, é realmente um momento zen; passar da programação imperativa para a funcional me fez ver o mundo da computação sob uma luz totalmente nova. Feliz aprendizado!

limitadas
fonte
E uma linguagem afeta o seu pensamento não tanto pelo que permite expressar, mas mais pelo que o obriga a expressar.
Florian F
9

C - como essencial, "subjacente a tudo", linguagem de programação de sistemas

Lisp (Scheme) - a estranha mas incrivelmente poderosa linguagem ur que os grandes hackers acham que define legal

Smalltalk - porque é isso que OO deveria ser

Erlang (ou outro idioma do ator) para entender os atores

Haskell - para entender Mônadas

Javascript - porque está em toda parte e é essencial para criar scripts para o navegador

Um do Python / Ruby / Perl (mas realmente não importa qual) - para que você saiba como é uma linguagem de script popular, moderna e de alto nível, com bom suporte de biblioteca

SQL - para que você possa conversar com bancos de dados relacionais

Prolog - porque você ainda precisa impressionar

interstar
fonte
2
A razão pela qual aprendi Haskell é porque eu queria aprender uma linguagem funcional (em oposição a todas as processuais que eu conhecia antes), e Haskell me pareceu o garoto-propaganda das linguagens funcionais. A razão pela qual eu gosto do Haskell agora é porque é uma linguagem de alto nível, possui um bom suporte de biblioteca e é rápida (cerca de 50% mais rápida que C, mas depende do que você está fazendo). Além disso, eu gosto de poder escrever um monte de código e tudo funciona na primeira ou na segunda vez (depois de compilar).
Joey Adams
Definitivamente, importa se você aprende Perl, Python ou Ruby. Como exemplo, o Python possui compreensões de lista, que não existem no Ruby, e Ruby possui módulos, que não existem no Python. Você pode duplicar os resultados de ambas as coisas em qualquer idioma, mas a aprendizagem de qualquer uma delas influenciará seu pensamento de maneiras muito diferentes.
Filodad
1
Prolog - porque você ainda precisa explodir sua cabeça - Melhor comentário de todos os tempos +1
Zachary K
1
Eu acho que o principal benefício do aprendizado de haskell não é necessariamente controlar a abstração da mônada, mas aprender os benefícios de um sistema de tipo REAL forte e poderoso. Se a idéia de um "sistema de tipo estático" é algo como Java, o haskell vai tirar o fôlego.
sara
4
  • Go (nova linguagem de programação no nível do sistema com bom suporte para simultaneidade e conceitos não tão tradicionais)
  • Lua (linguagem de script paradigmas simples, expressivos, extremamente flexíveis e balanceados imperativos, funcionais e meta programação, permitindo OOP)
  • D (C / C ++ corretamente)
  • Groovy (Expressividade e meta programação no mundo Java)
  • Eiffel (Design By Contract e uma abordagem diferente para OOP)
  • Prolog (A linguagem de programação lógica)
bigown
fonte
1
Por que alguém deveria aprender isso? (O motivo é a parte interessante aqui, há algumas linguagens de programação verdadeiramente únicas: cada paradigma tem sido implementado mais de uma vez.)
Richard
Interessante ver que você acha que D é C bem feito. Pessoalmente, quando uso C, geralmente o uso para coisas de baixo nível em que não quero abstrações de OOP.
Jonas
@Jonas: Ainda precisamos de uma linguagem simples, da maneira correta, enquanto essa linguagem não vem, o D pode ser usado muito bem de maneira imperativa. Para você, o D2 é mais funcional; quando concluído, talvez seja a melhor implementação de paradigma para uma linguagem essencialmente imperativa.
Maniero
bem feito é subjetivo. Para mim, Erlang é uma linguagem muito pequena e simples, correta. A parte que falta é uma ótima estrutura de GUI, e se você faz sistemas complexos, talvez queira mais uma linguagem estática de tipo.
Jonas
@Jonas: Erlang é uma boa linguagem, mas não é C / C ++, é uma coisa totalmente diferente.
Maniero
2

1) Prolog: é completamente diferente de todos os idiomas imperativos que você está usando até o momento, e isso mudará a maneira como você pensa sobre os problemas

2) Lisp: sem ele, você também pode estar usando o Vi

3) Erlang: Novamente, é completamente diferente, também, parece bastante elegante.

4) Algo do Turing Tarpit (por exemplo, Brainfuck), e provavelmente escreva um compilador ou intérprete para ele: não consigo pensar em um motivo para fazer isso, mas parece uma boa idéia.

Paul Butcher
fonte
1
"sem ele, você pode estar usando o Vi". Estou surpreso que ninguém tenha entendido isso :) #
Gauthier
Eu uso o vi! (Well gvim)
Zachary K
1

Além dos que você listou,

Haskell, F #, Clojure, OCaml, Lua, Vá, D, Erlang, Objetivo C.

grokus
fonte
1

Embora eu concorde que é bom aprender novos idiomas (e até mesmo imperativos durante uma longa carreira), acho que um por ano já passou dos primeiros cinco a dez anos. O que eu prefiro ver é alguém com esse nível de experiência aprendendo coisas novas sobre os idiomas que já conhece. Em algum momento, você precisa de profundidade e amplitude de conhecimento. Então, você pode escrever uma construção If em 12 idiomas, grande grito. Prefiro ver alguém que realmente se interessa e se torne especialista em pelo menos uma coisa. E então, nos próximos anos, tornar-se especialista em outra coisa. Ao longo de mais de 30 anos de carreira, quero que alguém tenha um conhecimento profundo, não apenas o básico em muitas coisas.

HLGEM
fonte