当前位置: 首页 > 科技观察

如何选择教学语言

时间:2023-03-16 17:40:11 科技观察

如果您正在教授编程课,您会使用哪种语言?我喜欢这个问题,因为它有很多很好的答案,彼此之间差异很大,对编程理解的思考方式也不同。我在普林斯顿的第一门正经编程课是COS217,由优秀的老师AnneRogers教授(我当时觉得这很可怕)。这个类是用C写的,这个类的巧妙之处在于它从机器开始。我们不只是学习C,我们还学习了我们用来编程的机器是如何工作的。这是我第一次接触到指令计数器、栈帧、寄存器和分层存储,真是太激动了。C鼓励你从机器开始,而Scheme[注1]希望你从计算的数学基础开始。你不需要了解lambda演算[注2],得益于Scheme简洁的核心,你可以在其之上构建丰富多彩的计算世界。它的核心具有足够的表现力,可以引入许多不同的语言,包括函数式和命令式语言、面向对象的语言和逻辑编程。经典课程是MIT的6.001,又名SICP,计算机程序的构建与解释。不幸的是,麻省理工学院的网站上不再提供这门课程,但是这本书仍然存在,即使你在几年前上过最后一门计算机科学课程,它也值得一读。MIT用基于Python的课程取代SICP反映了一个更广泛的趋势。正如PhilipGuo的一项非正式研究所强调的那样,许多学校现在教授Python,尤其是早期的入门课程。对于这个选择,我的心情很复杂。Python是一种非常友好的语言,但是这种友好也伴随着一些问题。在某种程度上,我认为它更明显。根据我的面试经验,应聘者选择的编码语言是Python。在很多情况下,Python是理想的面试语言,因为它简洁易读的语法,在空间有限的白板上写代码是完全可以接受的。然而,我发现Python的学生经常被这种语言相当粗糙的语义模型搞糊涂。大量用Python编程的同学都猜不透Python的列表(list)是如何实现的,更谈不上能够解释生成器或装饰器等语言特性的语义。这真的不是说Python不好。毕竟,有一些很棒的工具,您甚至可以在不了解其工作原理的情况下完成工作。但以不同的方式,Scheme和C鼓励您自下而上地理解正在发生的事情,并且其中具有一定的教学能力。总而言之,我认为Python是早期入门课程的不错选择,尤其是对于那些不打算最终成为计算机科学家或全职程序员的人。但是,我对在这种情况之外使用Python持保留态度。就个人而言,我觉得值得鼓励的一项发展是静态类型语言的出现,尤其是ML语言[注3]作为教学语言。在过去的几年里,我有幸在布朗大学、康奈尔大学、宾夕法尼亚大学、卡内基梅隆大学和哈佛大学等学校访问和演讲,这些学校同时使用Ocaml和标准ML的方言。ML语言已经有了极好的理由的基础。首先,它分享了Scheme的许多优雅编程思想,即使它的核心没有Scheme迷人的简单性。但是ML比Scheme的范围更广,因为你可以向学生展示打字在编程中的作用。尽管OCaml和SML的影响范围更广,但它们是相对简单的语言,对教学而非日常使用最重要。我看到许多语言选择,但我唯一无法接受的是Java。当然,Java是一种广泛使用的工业语言,但这并不意味着它是一种优秀的教学语言。在我看来,教学语言的关键要素是简洁性,我刚才提到的所有其他选择都具有某种形式的简洁性:C是机器顶部最少的层;Scheme和ML是基于计算的简单数学模型;Python是易于使用的语言。从各方面来看,Java并不简洁。尤其不容易入门,需要告诉学生,所有的细节都可以忽略而不是理解。(是的,publicstaticvoidmain,我看到了!)它没有C的简单、透明的执行模型。像Scheme和ML核心这样优雅的计算机核心计算简直是看不见的。我在Java中看到的唯一真正优势是它更容易找到工作,好像这对我来说还不够。当您考虑选择一种教学语言时,您不仅仅是在为学生在课堂上选择一些指令。您正在选择一种知识分子的头脑,在这种头脑中,学生将看到您教给他们的所有经验。你应该认真地发现这个想法。原文地址:https://blogs.janestreet.com/how-to-choose-a-teaching-language/注1:Scheme是一种函数式编程语言,Lisp的两个主要方言之一(另一个为CommonLisp).与CommonLisp不同,Scheme遵循极简主义哲学,以小型语言核心为标准,加上各种强大的语言工具(语法糖)来扩展语言本身。http://zh.wikipedia.org/wiki/Scheme注2:λ演算(英文:lambdacalculus,λ-calculus)是一套研究函数定义、函数应用和递归的形式化系统。http://zh.wikipedia.org/wiki/Λ-calculus注3:ML是1970年代后期由爱丁堡大学的RobinMilner等人开发的一种通用函数式编程语言。今天的ML家族中有几种语言:两种主要方言是StandardML和Caml,其他的包括F#——一个针对Microsoft.NET平台的开放研究项目。ML中的思想影响了许多语言,例如Haskell、Cyclone和Nemerle。http://zh.wikipedia.org/wiki/ML语言原文链接:https://img.ydisp.cn/news/20220914/zp5kkawvhx1