Por que o Scheme é meu primeiro idioma na universidade?

79

Eu ouço sobre C, C ++, Java todos os dias sempre que as pessoas começam a falar sobre ciência da computação, mas na minha primeira aula de ciências da computação nos pedem para escrever em Scheme (DrRacket).

Por que isso?

Que diferenças isso fará para meu futuro entendimento de programação?

UPDATE: Eu terminei o meu primeiro mandato, mas não completamente feito com o Scheme. No meu segundo mandato (que é agora), entramos na programação C. Foi frustrado aprender os ponteiros no começo, mas agora me sinto muito melhor.

Não há muito mais a dizer do que isso. Estou tentando me ensinar Java (ou C ++?) Para a parte OOP que estou perdendo. Até agora, eu ainda gosto de programação funcional melhor. Lambda é simplesmente fascinante. :)

    
por Erica Xu 20.10.2011 / 05:29
fonte

11 respostas

89

Parece uma ótima escola! Os dialetos Lisp seguem o paradigma matemático dos algoritmos de forma muito mais próxima. Eles forçam os programadores a aprender a recursão e o estilo funcional. Esta é uma excelente experiência. Sua escola está nas fileiras com o MIT, que ainda usa Abelson e Sussman para o necessário CS 6.001.

Você pode achar este artigo encorajador e útil para entender o problema.

    
por 20.10.2011 / 05:39
fonte
36

Ninguém espera que, como um calouro, você seja proficiente o suficiente em qualquer linguagem para conseguir um emprego de verdade, então por que não começar com um que seja fácil de aprender? Esperar que os novatos aprendam programação usando uma linguagem profissional em um IDE profissional é como dar um bisturi a um estudante de medicina do primeiro ano e fazê-lo trabalhar com corpos vivos.

Não se preocupe; você eventualmente aprenderá Java / C / C ++, provavelmente iniciando seu segundo ano. Se você começou a aprender Java 6 agora, quando você se formar Java 8 estará fora. Ou será substituído pelo Python. Ou alguma outra linguagem que ainda não tenha sido inventada, mas toma a indústria de assalto. É melhor adiar o aprendizado do material "popular" o máximo possível, para que ele não fique obsoleto quando você sair da força de trabalho.

Scheme / Racket ajudará você a se concentrar nos conceitos importantes: design de algoritmo, estruturas de dados e manipulação de informações. Você sabe, as coisas que são comuns a todos os idiomas.

    
por 20.10.2011 / 06:17
fonte
34

Parabéns, agora você está se transformando no equivalente a um vegan no mundo da informática, e em dois anos você não poderá terminar nenhuma discussão sem informar as pessoas sobre o < strong moral superior você se levanta. ;)

De qualquer forma você conseguiu uma escola muito boa. Escolas que não são golpeadas pela indústria são boas.
Como alguém disse, eles ensinam-lhe a ciência, da qual você deriva o ofício .

Muitos code-monkey-farms ensinam o ofício, e então você pode inferir a ciência a partir dele, mas isso não é garantido. (e você pode acabar com conceitos errados bastante estranhos sobre isso)

De qualquer forma, como um membro honrado da multidão funcional, quando você sair de lá, você sempre sentirá entendimento errado e apreciado .

Qual, vamos admitir, para o wiz médio do computador não é nada novo.

Você está agora com um alto risco de:

  • tentando finalizar em uma carreira acadêmica ,
  • embarcar na busca por um PHD
  • ... emacs .

Você provavelmente também gostará de código aberto, mas nunca encontrará colaboradores suficientes para seus projetos funcionais.

    
por 20.10.2011 / 14:45
fonte
22

What differences will this make to my future understanding of programming?

Isso é um pouco como perguntar como a leitura de Shakespeare irá ajudá-lo a escrever trabalhos. A programação (em qualquer idioma) é apenas um meio de expressar suas idéias de forma executável. A informática fornece os blocos conceituais de construção que lhe darão algo interessante para dizer. A sintaxe do esquema é relativamente simples, assim você pode obter idéias interessantes rapidamente e sem incorrer em muitos erros de compilador, bibliotecas padrão, etc.

Preste muita atenção na aula - você aprenderá muitas coisas interessantes neste semestre.

    
por 20.10.2011 / 07:00
fonte
13

Parece que você é muito novo em programação, sem nenhuma experiência anterior. Então, aqui estão alguns esclarecimentos:

Por que o esquema e não o C / C ++ / Java ...?

Ao aprender uma linguagem de programação (uma analogia poderia ser feita com o idioma inglês), você aprende a sintaxe que precisa seguir para que seu código seja gramaticalmente correto. No entanto, uma linguagem não ensinará a lógica por trás da solução de problemas. Para aprender essa lógica, você aprende diferentes paradigmas de programação .

Cada idioma pode implementar (com mais ou menos precisão) um ou mais paradigmas. Um paradigma é uma maneira de estruturar sua lógica, e o paradigma implementado pelo Scheme é chamado de Programação Funcional (FP).

Então a verdadeira questão que você está perguntando é: Por que FP?

Como você mencionou, C, C ++ e Java (que não implementam FP) são muito mais populares. Por uma questão de fatos, (e por várias razões, todos têm sua opinião) FP não é muito popular na indústria.

Por outro lado, FP é muito bem visto nos círculos acadêmicos. Ele está mais próximo da abordagem matemática comum, foca mais na provabilidade e na otimização de algoritmos, e a maioria das pessoas concorda que isso faria de você um programador melhor em geral.

É semelhante a escolas que ensinam latim para estudar literatura inglesa.

    
por 20.10.2011 / 13:06
fonte
10

Você deveria aprender como está sendo feita a programação e quais são os conceitos básicos. As linguagens do dia-a-dia usadas na maioria das empresas podem ser adequadas para a produção do software necessário hoje, mas não são necessariamente mais adequadas para ensinar os fundamentos da programação.

Depois de entender os conceitos, é fácil aplicá-los a outros idiomas.

    
por 20.10.2011 / 09:21
fonte
9

Se você estiver aprendendo com DrRacket, aposto que também está usando o currículo Como projetar programas.

Veja o que um dos autores (reconhecidamente tendenciosos) do HtDP tem a dizer sobre como o programa de ensino preparou os alunos de graduação da Northeastern University para o programa de educação cooperativa ("co-op": alunos alternam semestres de estudo acadêmico com semestres de emprego em período integral).

Prior to my arrival, Northeastern had been using a standard curriculum for two decades: three terms of the currently fashionable language (Pascal, C++, Java), using a set of extremely graphics-rich exercises intertwined with lessons on practical applications. The curriculum was widely published in SIGCSE and related communities, but it didn’t work. At the height of the web bubble, only around one third of the students got programming co-ops; most others ended up as “techies” as they called themselves: moving computers, running scripts, setting up routers and networks, etc. And all of this education cost $150,000 tuition.

After a year at Northeastern, our dean asked me to take over the first course. The first instance was a success—contrary to predictions from some local faculty. Even though it had been considered a trial, we switched to the TeachScheme! curriculum permanently; the dean suggested that I design a bridge course to connect the HtDP course to the rest of the curriculum; this started my collaboration on HtDC with Viera Proulx. See the postscript below. Within a couple of years, I started hearing from our co-op faculty that the share of programming positions was going up. By 2007—the last time I was involved with the course—I was told that the ratio of programming on the first co-op went up to two thirds and higher. In the meantime, all TeachScheme! courses have been taught by numerous faculty members with rather different teaching styles and personalities than my own. The ratio of programming co-op has risen to three quarters and more, and all the downstream faculty are happy about the students’ programming skills.

Editar: para aqueles muito interessados no racional por trás do currículo, aqui está a explicação do arquiteto principal - link

    
por 20.10.2011 / 19:14
fonte
6

Minha escola começou com Scheme também. Uma das razões mencionadas foi que isso ajudou a nivelar o campo de jogo. A maioria dos primeiros anos da Comp Sci pode ter alguma, ou muito, exposição a idiomas mais comuns. Era menos provável que alguém tivesse muito conhecimento de Scheme.

    
por 20.10.2011 / 06:05
fonte
6

Na verdade, como Lisp (Scheme sendo um dialeto) é o Grande Dame de linguagens funcionais (pense em F #, Groovy, Clojure, Haskell etc), então este treinamento não o deixa em qualquer tipo de desvantagem comercial, pois é o tema mais quente no bloco de desenvolvimento agora.

    
por 20.10.2011 / 17:43
fonte
4

O esquema ajudará você a obter bons resultados e a pensar na maneira correta de usar linguagens de programação funcionais. O Scala, por exemplo, é um híbrido Functional / OO que é bastante brilhante, embora um pouco denso. Línguas como esta, no entanto, marcam o futuro - espero.

Linguagens semelhantes a Lisp, embora tenham pureza e simplicidade em seu design, o que as torna um pouco mais fáceis para o ensino. O bom benefício é que você terá muito mais facilidade em aprender algo como o Scala.

    
por 20.10.2011 / 13:01
fonte
3

Concluímos o Scheme na primeira e primeira metade do segundo semestre. Não foi até que nós realmente começamos a trabalhar com C que eu comecei a perceber o poder do Scheme.

Quanto à sua pergunta, por que Scheme é escolhido: a resposta é que é uma das linguagens mais simples e permite que você faça muito (especialmente quando começamos a brincar com listas preguiçosas mais tarde). Além disso:

  1. Para pessoas que não têm experiência em programação, é mais fácil aprender. Não há muitos detalhes técnicos e apenas alguns formulários especiais.
  2. Permite abstração de nível superior. Um bom curso pode se concentrar em ensinar os programadores a pensar em vez de se concentrar nos detalhes técnicos que permitem aos alunos se tornarem melhores programadores.
  3. As listas são incríveis. Há tanta coisa que você pode fazer com eles. Carro e cdr provam ser ferramentas poderosas e é só quando você começa a trabalhar com ponteiros que você percebe que Scheme foi incrível em lidar com listas.
por 08.07.2013 / 12:50
fonte

Tags