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?
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)
@ 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
+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.
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.
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 ...
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.
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.
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.
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.
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.
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 .
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.
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. :)
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.
Respostas:
para programação e algoritmos "normais":
para uma experiência de mudança de pensamento:
por destruir sua mente e cruzar a linha entre padawan e Jedi Master:
fonte
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)
fonte
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
fonte
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/
fonte
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.
fonte
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
fonte
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 #
fonte
De mãos dadas, eu diria Haskell. E por duas razões:
fonte
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.
fonte
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:
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.
fonte
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.
fonte
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 .
fonte
Um programador completo possui várias malas na manga e inclui:
Todos esses ensinam maneiras ligeiramente diferentes de pensar e abordar problemas.
fonte
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.
fonte
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.
fonte
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. :)
fonte
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.
fonte