Por que Scheme é meu primeiro idioma na universidade?


80

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ência da computação nos pedem para escrever em Scheme (DrRacket).

Por que é que?

Que diferenças isso fará no meu futuro entendimento da programação?

ATUALIZAÇÃO: Eu terminei meu primeiro mandato, mas ainda não o concluí completamente. No meu segundo mandato (que é agora), entramos na programação C. Foi frustrante aprender dicas a princípio, 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, ainda gosto mais da programação funcional. Lambda é simplesmente fascinante. :)


148
Parabéns, parece (para mim) que você pode estar freqüentando uma das poucas escolas que realmente tentam ensinar ciência da computação. O esquema de aprendizagem como primeira língua é (IMO) uma coisa muito boa. Não, não é tão comercial quanto muitos outros, mas é uma linguagem excelente para aprender a verdadeira essência da ciência da computação.
Jerry Coffin

21
C, C ++ e Java são subprodutos da indústria da ciência da computação. As raízes inteiras do esquema estão na ciência da computação. As línguas em uso comercial têm tanto a ver com ciência da computação quanto o McDonalds tem a ver com culinária.
JasonTrue

33
Esses caras estão corretos; você está confundindo programação de computadores com ciência da computação - como Dijkstra disse, isso é como confundir construção de telescópio com astronomia. O esquema é sobre a melhor linguagem que existe para aprender conceitos básicos em ciência da computação . Se você espera que se formar em ciência da computação seja aprender a escrever aplicativos de linha de negócios em Java, você pode estar inscrito no programa errado.
Eric Lippert

29
Pela mesma razão que os cursos de zoologia ensinam biologia evolutiva, anatomia e comportamento animal, em vez de estragar uma barraca de elefantes
jk.

4
Depois de entender bem a sintaxe básica do Scheme, tente ler "The Little Schemer". É um livro fino, mas se você puder entender tudo nele, terá uma compreensão realmente sólida dos fundamentos das linguagens de programação funcionais.
precisa

Respostas:


91

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

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


6
"Força" provavelmente não é uma boa palavra para usar. Que tal "treinar"?
Barry Brown

4
Na verdade, houve mudanças radicais no currículo do EECS do MIT nos últimos dois anos. O curso de introdução está dividido em dois cursos agora (consulte mit.edu/6.01/mercurial/fall11/www/index.html da primeira metade) e a maioria das instruções de idioma está em Python.
jonsca

4
Concordo que o Scheme é uma ótima linguagem e é uma boa idéia aprendê-la. No entanto, vamos enfrentá-lo; quase todo trabalho de programação do mundo real emprega uma linguagem imperativa; os trabalhos de programação realmente mais sérios requerem C ++, e os programadores de C ++ geralmente desencorajam ativamente o uso de todas as boas idéias matematicamente baseadas em design de programas por um motivo ou outro. A recursão não terá um papel importante em seus programas imperativos.
Felix Dombek

4
@FelixDombek, você tem certeza? Todas as ideias? Realmente? Um loop imperativo também é uma idéia matemática - lembre-se.
SK-logic

3
@FelixDombek, só posso ver uma razão para usar iteração em vez de uma cauda recursão em C ++. Todas as outras formas de recursão são servidas exatamente da mesma maneira que nas implementações de linguagens funcionais. Portanto, não posso concordar com sua observação. Quanto mais matemática você colocar em sua codificação C ++, melhor. Duvido que você tente implementar, digamos, árvores vermelho-pretas em C ++ sem recursão.
SK-logic

37

Ninguém espera que, como calouro, você seja proficiente o suficiente em qualquer idioma 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 a programar usando uma linguagem profissional em um IDE profissional é como dar um bisturi a um estudante de medicina do primeiro ano e tê-lo trabalhando em corpos vivos.

Não se preocupe; você acabará aprendendo Java / C / C ++, provavelmente iniciando seu segundo ano. Se você começou a aprender Java 6 agora, quando você se formar, o Java 8 estará pronto. Ou será substituído pelo Python. Ou alguma outra linguagem que ainda não foi inventada, mas que arrasa a indústria. É melhor adiar o aprendizado das coisas "populares" o máximo de tempo possível, para que não fique obsoleto quando você entrar na força de trabalho.

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


36

Parabéns, agora você está se transformando no equivalente a um vegano no mundo da computação e, em dois anos, não será capaz de terminar nenhuma discussão sem informar as pessoas sobre o fundamento moral mais elevado em que se coloca. ;)

De qualquer forma, você conseguiu uma escola muito boa. Escolas que não são chicoteadas pela indústria são boas.
Como alguém disse, eles ensinam a ciência, da qual você obtém a arte .

Muitas fazendas de macacos-código ruins ensinam a você o ofício, e então você pode inferir a ciência a partir dele, mas não é garantido. (e você pode terminar com conceitos equivocados bastante estranhos)

De qualquer forma, como um membro honrado da multidão funcional, quando você sai de lá, sempre se sente incompreendido e subestimado .

O que, vamos admitir, para o especialista em informática médio não é novidade.

Você está agora com um alto risco de:

  • tentando encerrar uma carreira acadêmica ,
  • embarcar na busca de um PHD ,
  • ... emacs .

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


2
Desculpe, para necro-comentar, mas por que emacs? Estou curioso. Estou no mesmo barco que o OP estava (iniciando o primeiro ano da faculdade) e vamos usar o Racket (semelhante ao Scheme).
Kevin Johnson

2
O @KevinJohnson emacs é frequentemente referido como um sistema operacional escrito em LISP que acidentalmente ajuda muitas pessoas a editar código . Se você cria paradigmas funcionais e (é ensinado a) como obscenidades de sintaxes do tipo LISP, provavelmente crescerá em você como seu editor de texto preferido.
ZJR 01/07

1
"ensinar-lhe a ciência, da qual você obtém a arte": +1
Giorgio

23

Que diferenças isso fará no meu futuro entendimento da programação?

É como perguntar como ler Shakespeare o ajudará a escrever artigos. Programar (em qualquer idioma) é apenas um meio de expressar suas idéias de forma executável. A ciência da computação fornece os blocos de construção conceituais que lhe darão algo interessante a dizer. A sintaxe do esquema é relativamente simples, para que você possa obter idéias interessantes rapidamente e sem encontrar muitos erros de compilador, bibliotecas padrão etc.

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


14

Parece que você é muito novo em programação e não tem nenhuma experiência prévia. Então, aqui estão alguns esclarecimentos:

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

Ao aprender uma linguagem de programação (uma analogia pode ser feita com o idioma inglês), você aprende a sintaxe que precisa seguir para que seu código esteja gramaticalmente correto. No entanto, um idioma não ensina 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 pergunta que você está fazendo é: 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, o FP é altamente considerado nos círculos acadêmicos. Está mais próximo da abordagem matemática comum, concentra-se mais na provabilidade e otimização de algoritmos, e a maioria das pessoas concorda que isso faria de você um programador melhor em geral.

É semelhante às escolas que ensinam latim para estudar literatura de inglês.


1
O esquema não precisa ser usado funcionalmente, embora seja mais provável que você o faça do que em C, C ++ e Java.
9788 Ricky Clarkson

"É semelhante às escolas que ensinam latim para estudar literatura em inglês.": Ou às classes de sistemas operacionais que ensinam um sistema operacional semelhante ao Unix, em vez de outros sistemas operacionais mais difundidos.
Giorgio

11

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

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


4
"Os idiomas do dia-a-dia usados ​​na maioria das empresas podem ser adequados para a produção do software necessário hoje" - Considerando as taxas típicas de custo, qualidade e sucesso, essa é uma afirmação bastante otimista :-)
Jörg W Mittag

Definitivamente isso é verdade! É por isso que eu escrevi "poderia" em vez de "são" :-)
perdian

1
"Depois de entender os conceitos, é fácil aplicá-los a outros idiomas." - Esta afirmação é verdadeira demais. Eu suspeito que levaria cerca de uma semana para captar a sintaxe em praticamente qualquer novo idioma e ser proficiente. Eu aprendi C / C ++ e Assembly na escola, mas aprendi Python ao lado e Lisp para um projeto de pesquisa. Sem o entendimento fundamental que obtive do Python, Lisp e Assembly, duvido que seria quase o programador que sou hoje.
Wayne Werner

9

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

Aqui está o que um dos autores (reconhecidamente tendenciosos) do HtDP tem a dizer sobre como o Scheme de ensino preparou estudantes de graduação da Northeastern University para o programa de educação cooperativa ("cooperativa": estudantes alternam semestres de estudos acadêmicos com semestres de período integral emprego).

Antes da minha chegada, a Northeastern usava um currículo padrão há duas décadas: três termos da linguagem atualmente na moda (Pascal, C ++, Java), usando um conjunto de exercícios extremamente ricos em gráficos, entrelaçados com lições sobre aplicações práticas. O currículo foi amplamente publicado no SIGCSE e em comunidades relacionadas, mas não funcionou. No auge da bolha da web, apenas cerca de um terço dos estudantes conseguiu cooperativas de programação; muitos outros acabaram sendo "técnicos", como se autodenominavam: mover computadores, executar scripts, configurar roteadores e redes, etc. E toda essa educação custou US $ 150.000.

Depois de um ano no Nordeste, nosso reitor me pediu para fazer o primeiro curso. A primeira instância foi um sucesso - contrariamente às previsões de alguns professores locais. Mesmo tendo sido considerado um teste, mudamos para o TeachScheme! currículo permanentemente; o reitor sugeriu que eu desenvolvesse um curso intermediário para conectar o curso HtDP ao restante do currículo; isso iniciou minha colaboração no HtDC com Viera Proulx. Veja o postscript abaixo. Dentro de alguns anos, comecei a ouvir de nossa equipe de cooperativas que a participação nas posições de programação estava aumentando. Em 2007 - a última vez que estive envolvido no curso - me disseram que a proporção de programação na primeira cooperativa subia para dois terços ou mais. Enquanto isso, todo o TeachScheme! Os cursos foram ministrados por vários professores com estilos e personalidades de ensino bastante diferentes dos meus. A proporção de cooperação em programação aumentou para três quartos e mais, e todo o corpo docente a jusante está satisfeito com as habilidades de programação dos alunos.

Editar: para aqueles muito interessados ​​no racional por trás do currículo, aqui está a explicação do arquiteto principal - http://www.youtube.com/watch?v=m3be1PHW5X0


6

Minha escola também começou com Scheme. Um dos motivos mencionados foi que isso ajudou a nivelar o campo de jogo. A maioria dos Sci do primeiro ano pode ter alguma ou muita exposição a idiomas mais comuns. Era menos provável que qualquer pessoa tivesse muito conhecimento de Scheme.


4
Concordo; Comecei o CS conhecendo Pascal, C, Basic, x86 Assembler, enquanto outros tinham experiências em idiomas diferentes ou nenhum. Fomos apresentados ao ML, com o qual não apenas ninguém tinha experiência anterior, mas também tinha um paradigma tão estranho que era como recomeçar, mesmo para os mais experientes entre nós. Mais tarde, acho que o ML (o paradigma funcional) é a coisa mais útil que aprendi no CS.
KaptajnKold

6

Na verdade, como Lisp (Scheme sendo um dialeto) é a Grande Dama das linguagens funcionais (pense em F #, Groovy, Clojure, Haskell etc.), esse treinamento também não deixa em desvantagem comercial, pois é o mais quente tópico no bloco de desenvolvimento agora.


4

O esquema o ajudará a melhorar e a pensar da maneira correta para usar linguagens de programação funcionais. Scala, por exemplo, é um híbrido Functional / OO bastante brilhante, embora um pouco denso. Idiomas como este marcam o futuro - espero.

As linguagens do tipo Lisp, embora tenham pureza e simplicidade no design, facilitam um pouco o ensino. O bom benefício, porém, é que você terá muito mais facilidade para aprender algo como Scala posteriormente.


3

Concluímos o esquema no primeiro e no primeiro semestre do segundo semestre. Foi só quando começamos a trabalhar com C que comecei a perceber o poder do Scheme.

Quanto à sua pergunta, por que o Scheme foi escolhido: a resposta é que ele é um dos idiomas mais simples do mercado e permite que você faça muito (principalmente quando começarmos a brincar com listas preguiçosas posteriormente). 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 que os alunos se tornem 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 é somente quando você começa a trabalhar com ponteiros que você percebe que Scheme era incrível nas listas de manipulação.
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.