Linguagens de programação que melhoram sua habilidade de programação em geral? [fechadas]

27

Quais idiomas você sugeriria que um programador aprendesse, não porque eles terão muito uso da linguagem (mas podem ter), mas porque melhorarão as habilidades de programação de uma pessoa em geral e permitirão pensar de uma maneira diferente (e possivelmente melhor ) maneira?

Anto
fonte
12
Nem um único. Antes: o maior número possível deles, cada um o mais diferente possível dos outros.

Respostas:

27

para programação e algoritmos "normais":

  • python, bom de aprender, fácil de usar, bonito de ler.
  • C ++, ensina o que é realmente um computador.

para uma experiência de mudança de pensamento:

  • Haskell
  • Prolog

por destruir sua mente e cruzar a linha entre padawan e Jedi Master:

  • LISP comum
Lacrymology
fonte
3
sim, concordando com chrisaycock, C e montagem vai ensinar o que um computador realmente é, C ++ é um muito ligeiro passo para cima, mas ainda terá que você lidar com questões como ponteiros de memória e questões de alto desempenho
Lacrymology
mh O prólogo é ótimo, mas não vejo como isso poderia ser interessante para melhorar as habilidades gerais de programação. Eu o vejo como um sistema alternativo de notação matemática / lógica, cujas construções você pode consultar, mais do que como uma linguagem de programação (descreve stati, não procedimentos). Edit: com certeza muda a maneira como você pensa sobre algo, mas esse algo não está programando.
Cbrandolino
Prolog certeza está programando. Programação declarativa e enraizada na lógica (e, portanto, relativamente matemática), sim. Mas ainda está programando. Quanto ao último ponto, você acha que outro Lisp (isto é, Scheme) também faria?
3
Prolog é a linguagem mais conhecida do paradigma lógico. É importante pensar em todos os paradigmas com os quais você pode lidar; se o que você quer é melhorar como programador, isso ajudará você a obter agilidade mental e novas ferramentas. Eu acho que qualquer dialeto Lisp faria, o que eu vejo no Common Lisp é que parece o Lisp mais utilizável em produção para mim.
precisa saber é o seguinte
1
Eu votaria no Scheme sobre o Common Lisp - acho que depende se você acha que realmente usará um Lisp na produção. Caso contrário, vá para Scheme.
Skilldrick
13

Não se esqueça do Javascript .

Possui recursos OO que não são os recursos usuais de OO. É adequado para funções e fechamentos de ordem superior, e você os utiliza rotineiramente. Ele permite muitos truques de programação funcional. É extremamente flexível.

E é prático, porque todo navegador sério possui.

(É claro que ele também tem uma série de peculiaridades desagradáveis. Poucas linguagens práticas não)

9000
fonte
1
O JS possui recursos OO que o Java não possui?
Mahmoud Hossam
3
@ Phobia: JS faz OO de uma maneira totalmente diferente. Não há aulas. A herança é feita através de protótipos - essencialmente, um objeto pode herdar de qualquer outro objeto. Funções são valores de primeira classe; além de distribuí-los, é possível atribuir facilmente novos métodos a objetos existentes. A maneira como o JS oculta os dados também é bem diferente do Java: tudo o que um objeto expõe é público, portanto, você oculta dados e métodos usando fechamentos. Observe que não há 'OO canônico'; O JS está um pouco mais próximo do OO 'original' que o Smalltalk inventou do que, por exemplo, o C ++, mas o OO do Java agora também é 'canônico'.
9000
11

C e montagem de como um computador funciona

Haskell e LISP para programação funcional e metaprogramação

APL para programação vetorial e concisa

bash ou tcsh para saber como administrar um computador programaticamente

chrisaycock
fonte
4
Em vez de APL, você pode usar J do mesmo autor.
9000
+1 na montagem. Você nunca vê linguagens de alto nível da mesma maneira depois de fazer qualquer desenvolvimento significativo. Se você estiver procurando por algo que faça com que você pense em codificar de uma maneira realmente diferente, o ASM fará isso.
21911 Kurtis
9

Eu sugeriria Scheme.

É uma linguagem de programação funcional derivada (a maioria pensa que é um dialeto) do Lisp. A principal diferença com o Common Lisp é que sua abordagem é muito minimalista - extremamente . Por exemplo, em uma distribuição normal de Scheme (qualquer esquema <R5, ou Mit / GNU / Scheme), você não encontrará uma implementação de loop: você terá que fazer o seu próprio usando a recursão da cauda.

É realmente expressivo e sua sintaxe é ótima para aprender algo novo sobre programação, como em: apenas olhando o código, você tem uma idéia de como o compilador / intérprete trabalhará através dele.

Além disso, ele vem com o Melhor Livro de Programação de todos os tempos, Estrutura e Interpretação de Programas de Computador , disponível gratuitamente para download no site do MIT.

Aqui estão algumas lições em vídeo que, espero, interessam imediatamente a essa linguagem fascinante - os palestrantes são os autores do SICP: http://groups.csail.mit.edu/mac/classes/6.001/abelson-sussman- palestras/

cbrandolino
fonte
Obrigado. No entanto, preciso advertir que as lições são fáceis de levar os programadores apaixonados às lágrimas.
Cbrandolino
@cbrandolino - É verdade que nossa classe de programação funcional expulsou muitas pessoas do programa de ciência da computação.
precisa saber é o seguinte
1
O esquema era minimalista, mas no R5 havia crescido algumas verrugas e no R6 é decididamente enorme. É uma pena, pois era muito bonito. Para uma linguagem realmente minimalista, mas ainda prática, consulte Lua
Javier
@Javier, você está certo. Vou editar a resposta para especificar as implementações.
Cbrandolino
Estou fazendo esquema no caixa eletrônico da universidade e odeio isso. Não porque seja uma linguagem funcional, eu quero entrar nisso há muito tempo. No entanto, a sintaxe realmente me mata. Existem três tipos diferentes de chaves no teclado (quatro se você contar colchetes angulares) e você só usa parênteses. Por quê? Qual é o problema de usar os outros?
Femaref 17/01
4

O LISP, preferencialmente o Esquema em combinação com a "Estrutura e Interpretação de Programas de Computador" de Abelson & Sussman, ensinará você a pensar em termos diferentes dos impostos pelo C / C ++.

FORTH, especificamente um FORTH orientado a blocos, e não orientado a arquivos (como o D85), ensinará você a reduzir sua loquacidade. Quando você não pode, em nenhuma circunstância, escrever uma rotina com mais de 16 linhas de 64 caracteres, você é forçado a abstrair e fatorar.

John R. Strohm
fonte
4

Java é uma das línguas mais ensinadas nas universidades do mundo e há uma razão para isso. Embora seja frequentemente parecido com um dinossauro, ele oferece a todos uma visão muito boa dos conceitos da programação moderna. NÃO mostra como o computador em si funciona como Assembler ou mesmo a linguagem C., que já é muito mais abstrata. Mas os pilotos precisam voar e não construir um avião por conta própria - aprenda JAVA como uma boa base para qualquer código que você escreverá nas linguagens mais comuns atualmente: Java, c ++, php, c #, python ruby ​​(on rails) e assim por diante ...

max

madmax
fonte
3

C # 3 com LINQ.

É uma ótima introdução à programação funcional.

Tente escrever um programa (ou resolver o Project Euler) e substituir o maior número possível de loops por chamadas LINQ.
Ajuda a dominar os conceitos de programação funcional e avaliação lenta.

A partir daí, pode-se passar para F #

SLaks
fonte
3

De mãos dadas, eu diria Haskell. E por duas razões:

  • É simplesmente a melhor maneira de aprender programação funcional. Praticamente todos os outros idiomas permitem efeitos colaterais por padrão, mas podem fazer as coisas funcionalmente (e sim, isso inclui os MLs e Erlang: veja esta palestra para mais informações ). Haskell é funcional por padrão, mas pode ser feito para usar efeitos colaterais quando você precisar deles.
  • Definitivamente, é uma linguagem que incentiva você a pensar antes de codificar. Para ser sincero, isso nunca foi realmente um problema para mim (se é que é exatamente o oposto). Dito isto, parece que sou uma minoria. A maioria dos programadores em que me deparei parece mais com a mentalidade "código primeiro, faça perguntas depois", em vez da mentalidade "pondere seu problema por dias antes de codificar a solução em 5 minutos" (que tende a ser minha mentalidade) . Portanto, esse tipo de linguagem pode fornecer uma experiência valiosa para a maioria dos programadores.
Jason Baker
fonte
3

Eu sugeriria Scala se alguém vier do mundo C / Java.

Não é uma linguagem de programação puramente funcional, mas usa OO para simular alguns recursos de programação funcional (por exemplo, usando o objeto para simular a função de primeira classe e a função de alta ordem).

Portanto, se você conhece o OO, o Scala usa termos que você já conhece para explicar o mundo funcional.

Achei mais fácil entender a programação funcional no Scala do que mergulhar em uma programação mais funcional como Haskell, List ... etc.

Brian Hsu
fonte
2

As linguagens funcionais são as que eu sinto que ajudaram a me levar para onde estou hoje. Embora eu esteja desenvolvendo aplicativos da Web, os conceitos aprendidos das linguagens funcionais me ajudam a encontrar soluções para problemas que, de outra forma, eu não teria visto. Aqui estão os idiomas com os quais trabalhei na minha universidade:

  • C ++ (não funcional, mas conceitos como ponteiros e gerenciamento de memória são inestimáveis)
  • Dr. Scheme
  • ML / Ocaml (escrevemos outro idioma usando o ML / Ocaml!)
  • JavaScript (linguagem funcional que está ganhando força no setor, do lado do cliente e do servidor)

O aprendizado desses idiomas o ajudará a entender o mundo das abstrações e a criar blocos de código que encapsulam outras funcionalidades, ocultando os detalhes de baixo nível para que você possa se concentrar nos objetivos de negócios de alto nível.

jmort253
fonte
1

Ruby tem uma das estruturas de teste mais poderosas e intuitivas que já usei. Não sei se realmente entendi como usar zombaria e stubing até começar a escrever testes em rubi. O rSpec e o Pepino são ferramentas fantásticas.

Gposton
fonte
1

Existem várias linguagens de programação que exigirão que você pense sobre um problema de uma maneira nova (em relação ao que você está acostumado, é claro.) As linguagens mais comuns para aprender depois de aprender uma linguagem imperativa, é uma linguagem lógica, por exemplo, prólogo e lisp .

Algumas línguas são fortemente influenciadas pela teoria das categorias, como ocaml e Haskell, e outras são linguagens cruzadas, como Curry (funcional e lógica). Curry é provavelmente a linguagem mais alucinante que eu conheço, não apenas porque recebeu toda a alucinância de Haskell com programação lógica, mas também por causa da integração com programação baseada em restrições.

Outra linguagem divertida é o Occam-pi, pois é muito concorrente, mas também devido à recente porta do arduino .

HaskellElephant
fonte
1

Um programador completo possui várias malas na manga e inclui:

  • Assembly, para aprender como funcionam as entranhas de um computador.
  • Uma linguagem processual como C ou Pascal.
  • Uma linguagem funcional como Scheme.
  • Uma linguagem OOP, como Squeak.

Todos esses ensinam maneiras ligeiramente diferentes de pensar e abordar problemas.

sujeira vermelha
fonte
0

você não aprenderá corretamente nenhuma linguagem de programação sem um objetivo claro. Sabendo o que você quer fazer com ele, você pode decidir qual programa se adequa às suas necessidades.

Por exemplo, digamos sobre c #.

O C # pode executar programas da Web, console, executável autônomo, programa de jogos, programa Silverlight e programa móvel. Embora a sintaxe seja igual em quase todos os casos, ela funciona de maneira diferente em todos os cenários. Por exemplo, um executável autônomo mantém suas informações até que sejam descarregadas ou o programa seja concluído. Enquanto um programa da Web, as informações são destruídas toda vez que você carrega uma página e, no silverlight, você passa a maior parte do tempo lutando contra um arquivo xml.

E segundo, não gaste seu tempo com idiomas exóticos (Haskel por exemplo), falando em empresas, existem muito poucos programas que valem o seu esforço: java (rei da colina), c # / vb.net, php e sql.

Magallanes
fonte
0

Existe um programa muito simples para escrever Java Applets chamado Processing

Essa linguagem lhe dará uma compreensão muito básica de variáveis, loops e esse tipo de coisa, se você está apenas começando.

Buns Glazing
fonte
0

Algumas ótimas sugestões aqui. Eu provavelmente iria com C ou C ++ pessoalmente. Eles o forçam a lidar com muitos conceitos que são importantes para entender como as coisas funcionam, mas que tendem a ser ofuscados em outros idiomas. Apenas entender como as coisas realmente estão funcionando ajudará você como programador, mesmo que a linguagem que você está usando mais tarde oculte alguns detalhes.

A montagem é divertida se você quiser se aprofundar em um nível um pouco mais baixo do que isso, mas não espere muito. :)

Tridus
fonte
0

Eu recomendaria Ruby. Ruby não exige que você mude de paradigma, mas incentiva você a trabalhar em vários paradigmas. Penso que a vantagem disso é que, em vez de ficar frustrado por não poder trabalhar da maneira que você está acostumado, você usa um paradigma diferente por frustração com as limitações de fazer as coisas do jeito que está acostumado.

philosodad
fonte