为什么Scheme是我上大学的第一语言?


80

每当人们开始谈论计算机科学时,我每天都会听说C,C ++,Java,但是在我的第一门计算机科学课程中,我们被要求用Scheme(DrRacket)编写。

这是为什么?

这将对我以后对编程的理解产生什么不同?

更新:我已经完成了第一学期,但是对Scheme并没有完全完成。在第二个学期(现在)中,我们开始进行C编程。一开始学习指针很沮丧,但是现在我感觉好多了。

没有比这更多的话了。我正在尝试为缺少的OOP部分自学Java(或C ++?)。到目前为止,我仍然最喜欢函数式编程。Lambda令人着迷。:)


148
恭喜,(对我而言)听起来像是您可能要去的少数几所实际上试图教授计算机科学的学校之一。将学习计划作为第一语言是(IMO)很好的事情。不,它不像其他商业软件那么商业化,但是它是学习计算机科学真正精髓的绝妙语言。
杰里·科芬,

21
C,C ++和Java是计算机科学的行业副产品。Scheme的全部根源是计算机科学。商业使用的语言与计算机科学的关系和麦当劳与美食的关系一样。
2011年

33
这些家伙是对的。您将计算机编程计算机科学相混淆-正如Dijkstra所说,这就像使望远镜构造与天文学相混淆。方案是关于学习计算机科学基本概念的最佳语言。如果您期望获得计算机科学学位是关于学习如何用Java编写业务线应用程序,那么您可能会被注册错误的程序。
埃里克·利珀特

29
对于动物学课程教进化生物学,解剖学和动物的行为,而不是如何渣土出大象摊位同样的原因
JK。

4
一旦了解了Scheme的基本语法,便可以尝试阅读“ The Little Schemer”。这是一本很薄的书,但是如果您能理解其中的所有内容,那么您将对函数式编程语言的基础有真正的了解。
埃里克·利珀特

Answers:


91

听起来像是一所很棒的学校!Lisp方言更紧密地遵循算法的数学范式。它们迫使程序员学习递归和功能风格。这是极好的经验。您的学校在MIT的行列中,而MIT仍然使用Abelson和Sussman来满足要求的CS 6.001。

您可能会发现本文令人鼓舞,并且有助于您理解该问题。


6
“ Force”可能不是一个好词。“火车”怎么样?
巴里·布朗

4
实际上,在过去几年中,麻省理工学院的EECS课程发生了翻天覆地的变化。他们的入门课程现在分为两门课程(上半部分请参阅mit.edu/6.01/mercurial/fall11/www/index.html),并且大多数语言说明都使用Python。
jonsca 2011年

4
我同意Scheme是一门很棒的语言,学习它是一个好主意。但是,让我们面对现实吧。几乎每个现实世界的编程工作都使用命令式语言;大多数真正认真的编程工作都需要C ++,并且C ++程序员通常会出于某种原因而主动劝阻您不要将所有基于数学的好主意用于程序设计。递归在命令式程序中不会扮演重要角色。
菲利克斯·丹贝克

4
@FelixDombek,你确定吗?所有想法?真?注意,命令式循环也是数学上的想法。
SK-logic

3
@FelixDombek,我只能看到 在C ++中使用迭代而不是尾部递归的原因。递归的所有其他形式均与功能语言实现中的方式完全相同。所以我完全不同意你的说法。您在C ++编码中投入的数学越多越好。我怀疑您会尝试在C ++中实现无递归的红黑树。
SK-logic

37

没有人期望作为一名新生,您会精通任何一种语言来找到一份真正的工作,那么为什么不从一个容易学习的语言开始呢?期望新手在专业的IDE中使用专业的语言来学习编程,就像给一年级医学生手术刀,然后让他们在活体上工作一样。

不用担心 您最终可能会学习Java / C / C ++,可能从第二年开始。如果您现在就开始学习Java 6,那么您到Java 8毕业的时间就会过去。否则它将被Python取代。或其他尚未发明但会席卷整个行业的语言。最好尽量不要学习“流行”的东西,这样当您离开工作岗位时就不会过时了。

方案/球拍将帮助您专注于重要概念:算法设计,数据结构和信息处理。您知道,所有语言都通用的东西。


36

恭喜,您现在已经变成了计算机世界中的纯素食主义者,并且在两年之内,如果不通知人们您所站在的更高道德基础,您将无法结束任何讨论。;)

无论如何,您获得了一所非常好的学校。没有受到行业欢迎的学校是好的。
就像别人说的那样,他们教您科学,您可以从中学到手艺

许多错误的代码猴子农场会教给您技巧,然后您可能碰巧从中推论出了科学原理,但这并不能保证。(并且您可能会对此产生非常奇怪的误解)

无论如何,作为功能强大的人群中的荣幸成员,当您离开那里时,您总是会感到被误解低估

让我们承认,对于一般的计算机向导来说并不是什么新鲜事。

您现在面临以下高风险:

  • 试图结束学术生涯
  • 开始追求PHD
  • ... emacs

您可能还会喜欢开源,但是您永远找不到足够的合作伙伴来完成您的功能项目。


2
抱歉,要取消评论,但是为什么要使用emacs?我很好奇。我和OP在同一条船上(今年秋天开始大学新生),我们将使用Racket(类似于Scheme)。
凯文·约翰逊

2
@KevinJohnson emacs通常被称为用LISP编写的操作系统,它偶然地帮助许多人编辑代码。如果您使用函数范式并且(被教导)像LISP一样语法的晦涩难懂,它可能会成为您首选的文本编辑器。
ZJR

1
“向您传授科学知识,使您从中学习工艺”:+1
乔治

23

这将对我以后对编程的理解产生什么不同?

这有点像问莎士比亚读书将如何帮助您撰写学期论文。编程(使用任何语言)只是一种以可执行形式表达您的想法的方法。计算机科学提供了概念性的构建基块,这些块将给您一些有趣的说法。Scheme语法相对简单,因此您可以快速找到有趣的想法,而不会遇到很多编译器错误,标准库等。

在课堂上要密切注意-这个学期您将学到很多有趣的东西。


14

似乎您是完全没有编程经验的编程新手。因此,这里有一些说明:

为什么选择Scheme而不选择C / C ++ / Java ...?

在学习编程语言(可以用英语进行类比)时,您将学习需要遵循的语法,以便使代码在语法上是正确的。但是,语言不会教您解决问题的逻辑。为了学习该逻辑,您将学习不同的编程范例

每种语言都可以(或多或少准确地)实现一个或多个范例。范式是一种构造逻辑的方法,Scheme实现的范式称为功能编程(FP)。

因此,您要问的真正问题是:为什么选择FP?

正如您提到的,C,C ++和Java(未实现FP)更受欢迎。事实上,(由于各种原因,每个人都有自己的见解)FP在行业中并不十分流行。

另一方面,FP在学术界享有很高的声誉。它更接近于普通的数学方法,更多地侧重于算法的可证明性和优化,并且大多数人都会同意这将使您总体上成为一个更好的程序员。

这类似于教授拉丁语以学习英语文学的学校。


1
Scheme不必在功能上使用,尽管与C,C ++和Java相比,您更有可能使用它。
里奇·克拉克森

“这类似于讲拉丁语以学习英语文学的学校。”:或讲授类似Unix的操作系统而不是其他更广泛使用的OS的操作系统课程。
Giorgio

11

您应该学习如何进行编程以及基本概念是什么。大多数企业中使用的日常语言可能非常适合于生产当今所需的软件,但不一定最适合给您编程的基础知识。

一旦掌握了这些概念,就很容易将它们应用于其他语言。


4
“在大多数企业使用的日常语言可能是非常适合用于生产当今所需的软件” -考虑到典型的成本,质量和成功率,这是一个相当乐观的声明:-)
约尔格W¯¯米塔格

绝对是真的!这就是为什么我写“力量”而不是“是”的原因:-)
波斯语,2011年

1
“一旦掌握了这些概念,就很容易将它们应用于其他语言。” -这个说法太正确了。我怀疑要花几乎一周的时间才能精通几乎所有新语言的语法。我在学校里教过C / C ++和汇编语言,但是我一边教自己Python一边和Lisp参加一个研究项目。没有从Python,Lisp和Assembly获得的基本知识,我怀疑我会成为今天的程序员。
韦恩·维尔纳

9

如果您正在使用DrRacket进行学习,那么我敢打赌,您还将使用“如何设计程序”课程。

以下是HTDP的(诚然偏见)作者之一必须说关于如何教学计划已准备在东北大学本科生的合作办学项目(“合作社”:学生学术研究的交替学期有专职学期就业)。

在我到达之前,Northeastern一直使用标准课程已有二十年:当前流行的语言的三个术语(Pascal,C ++,Java),使用了一组极其丰富的图形练习,并结合了实际应用课程。该课程在SIGCSE和相关社区中广泛发布,但是没有用。在网络泡沫最严重的时候,只有大约三分之一的学生获得了编程合作社。大多数其他人最终被称为“技术专家”:搬动计算机,运行脚本,设置路由器和网络等。所有这些教育费用为15万美元的学费。

在东北大学呆了一年后,我们的院长让我上了第一门课。最初是成功的,与一些当地教师的预测相反。即使已被视为试用版,我们还是改用了TeachScheme!永久的课程;院长建议我设计一个衔接课程,将HtDP课程与其余课程联系起来;这开始了我与Viera Proulx在HtDC上的合作。请参阅下面的附言。几年之内,我开始从我们的合作社老师那里得知编程职位的份额正在上升。到了2007年,这是我最后一次参加该课程,当时我被告知,第一次合作社的编程比例达到了三分之二甚至更高。同时,所有TeachScheme!许多老师教的课程与我本人的教学风格和个性截然不同。编程合作的比例已上升到四分之三以上,并且所有下游教师对学生的编程技能感到满意。

编辑:对于那些对课程背后的理性非常感兴趣的人,这是主要建筑师的解释-http: //www.youtube.com/watch?v=m3be1PHW5X0


6

我的学校也从Scheme开始。提到的一个原因是这有助于公平竞争。大多数第一学年的Comp Sci可能会接触到一些或更多种通用语言。任何人都不太了解Scheme的可能性很小。


4
我同意; 我从了解Pascal,C,Basic,x86汇编程序开始学习CS,而其他人则拥有不同语言的经验,或者根本没有经验。我们了解到ML,它不仅没有人有过任何经验,而且它的范式如此陌生,即使对于我们当中最有经验的人来说,也是如此。后来,我认为ML(功能范例)是我在CS中学到的最有用的东西。
KaptajnKold

6

实际上,由于Lisp(方案是方言)是功能语言(例如F#,Groovy,Clojure,Haskell等)的大公爵夫人,因此这种培训也不会给您带来任何商业上的不利影响,因为这是最热门的关于开发块的话题。


4

方案将帮助您变得良好,并以正确的方式思考如何使用函数式编程语言。例如,Scala是一个功能性/ OO混合体,虽然密度很高,但却非常出色。像这样的语言虽然标志着未来-希望如此。

类似于Lisp的语言的设计纯净而简单,这使它们的教学更加容易。不过,这样做的好处是,您以后可以更轻松地学习诸如Scala之类的东西。


3

我们在第二学期的上半年和下半年完成了计划。直到我们真正开始使用C时,我才开始意识到Scheme的强大功能。

关于您的问题,为什么选择Scheme:答案是它是最简单的语言之一,它使您可以做很多事情(尤其是当我们稍后开始使用惰性列表时)。此外:

  1. 对于没有编程经验的人来说,它更容易学习。技术细节不多,只有几种特殊形式。
  2. 它允许更高级别的抽象。一门好的课程可以侧重于教程序员如何思考,而不是侧重于使学生成为更好的程序员的技术细节。
  3. 列表很棒。您可以使用它们做很多事情。Car和cdr被证明是功能强大的工具,只有当您开始使用指针时,您才意识到Scheme在处理列表方面很棒。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.