这个问题让我不禁要问——当改进的现代语言免费提供时,为什么大学仍然用像 Modula2 这样的语言教学?
例如,有没有仍然教帕斯卡的大学?我的意思是,30 年前还不错,但是……现在呢?为什么?
为什么不是 Java、C#、Haskell?
相关:仍然教 LISP 是倒退吗?
这是一个重复的问题吗?如果不是,我认为它应该是一个社区 wiki 主题。
这个问题让我不禁要问——当改进的现代语言免费提供时,为什么大学仍然用像 Modula2 这样的语言教学?
例如,有没有仍然教帕斯卡的大学?我的意思是,30 年前还不错,但是……现在呢?为什么?
为什么不是 Java、C#、Haskell?
相关:仍然教 LISP 是倒退吗?
这是一个重复的问题吗?如果不是,我认为它应该是一个社区 wiki 主题。
大学的工作不是教你一门编程语言,而是教你编程概念。他们使用的语言仅与他们已经从其他来源生成或使用的教材相关。
我认为重做课程就像重写一个大型应用程序——只有当你有一个令人信服的理由时你才会这样做,即使这样你也要三思而后行。
改进的现代语言(Java、C#、Haskell)是否免费提供?
因此,“改进”是指功能强大、加载了外部库和框架,并且非常复杂?有一个曲折的小功能迷宫,初学者很容易迷失方向?当他们迷路时,他们会收到任何初学者都无法理解的错误信息?
优秀的大学能够抵制教授当今流行语言的压力,因为我们的工作是教授永恒的真理和技能,这些真理和技能在 50 年后仍然适用。(今天的大学生至少可以工作到 70 岁。)我们最好的工具就是简单、简单和简单。Modula-2 是一个不错的选择。(PLT Scheme的初级学生语言也是如此。
我喜欢 Haskell,在研究中大量使用它,在高级课程中教授过它。你付给我的钱不足以在入门课程中教授它——我会割断自己的喉咙。
为什么不是 Java、C#、...
在没有与现有代码库互操作的要求的情况下,Java 或 C# 比 Smalltalk 有什么优势?我白天是一名 C# 程序员(也是前 Java 程序员),它有一些好的一面,也有一些不好的一面,但真正突出的一件事是它的复杂程度令人难以置信。看看这里有多少关于 C# 语法和语义的细节的问题。你会浪费整个学期或一年的时间来教琐事。Modula-2 更简单,完全可以解决许多问题。
你也需要学习汇编,从 Modula-2 到汇编比从 C# 到汇编要容易得多。我不想尝试向一群只知道微软专业工具的学生教授汇编。
相关:仍然教 LISP 是倒退吗?
(大约有 50 种不同的方式来解释这一点……)
我看不出它有什么“倒退”,除非您看到它在 {before,after} 教一种较低级别的语言,并认为应该改为在 {after,before} 教它。
你能推荐另一种语言吗?(Smalltalk?Forth?Icon?Factor?)例如,如果你想看一个真正的 OO 系统的设计(可以说是比 Java 或 C# 更强大的系统),你可以拿起AMOP并在一个简短的书,包括完整的源代码。(Common Lisp 不是最简单的 Lisp 方言,但它比 C# 或 Java 简单得多,而且 AMOP 使用它的一个相对较小的子集。)你将如何用 Java 教授元编程,甚至多分派?
或者:Lisp 的最初目的是取代图灵机作为构建算法的结构。(它恰好对编写真正的程序非常有用!)您是否建议您宁愿使用图灵机来教授算法?还是 C# 用于建模计算?图灵机是一个 7 元组——我无法想象 C# 计算模型会有多少组件!Lisp 完美地弥补了这一差距,而我在这个领域只见过一两种其他语言——我想到了 Forth,但无论出于何种原因,它都没有在学术界流行起来。
……哈斯克尔?
我认为这是个好主意。我是在学校学的。再说一次,我认为该语言家族的任何成员都会做得很好。如果你改为在学校学习 ML,我认为你的情况不会更糟。概念是一样的。
这就像在柏林和芝加哥学习机械工程:语言可能不同,但概念是相同的。但如果你什么都不知道,甚至一门语言都不知道,那么从最简单的语言开始是有意义的。如果你想在柏林成为一名工程师,但不会说德语,那么学习工程学和德语是有意义的,但传统的想法是,从只有德语的工程学课程开始效率较低。
我能想到的原因有两个,一个好,一个不好。(我是教授。)
很好的理由:简化教学。教入门学生就像在跳水板上放小鸡一样。如果有办法让他们掉下来,他们会的。如果我必须教 C,我会扯掉我的头发,用char
, unsigned char
, char*
, char**
, char*[]
, char[10]*
等等都是合法的和不同的,这只是树上的一些碎片。对于第二或第三门课程,情况就不同了。
不好的原因:学术自由。我们有一个人教一些遥远的解释语言,因为他喜欢它。另一个坚持教电子表格编程,因为那是“未来的浪潮”。
虽然这个问题似乎已经处理了一段时间,但我想补充一些东西(因为我是上述问题的提问者:))为什么我们在第一年学习 Modula2:除了所有已经提到的原因之外,它是为了得到在接触 Java 之类的东西之前掌握基本的东西(例如指针)是如何工作的,所有这些东西对程序员来说都是不可见的 :)
我意识到这个问题相当古老,并且有很多很好的答案。尽管如此,我还是想插话。
大多数答案都是“Modula-2 更简单,因此更容易教/学”主题的变体。尽管这是正确的,但这并不是大学应该选择教授 Modula-2 的理由。
向本科计算机科学专业的学生教授 Modula-2 最重要的好处是它可以形成良好的习惯和灌输纪律。
另请参阅“Modula-2 最重要的好处是什么?” 在:
http://modula-2.info/m2info/pmwiki.php/General/FAQ
很少有语言能够教授严格的编程纪律、遵守工程原则和良好习惯。大多数现代语言,尤其是流行语言实际上恰恰相反,它们教人坏习惯。
在严格的语言中,Modula-2 是最小的,在小语言中,Modula-2 是最严格的。
这种组合使 Modula-2 成为任何不只是想成为软件力学职业学校的大学的完美选择。
这听起来可能很苛刻,但如果软件开发人员渴望被称为软件工程师,那么他们应该像工程师一样接受培训,像工程师一样思考,最重要的是,在他们开始工作时表现得像工程师。
电气、机械和土木工程师有义务建造最重要的安全可靠的东西。除了少数例外,软件并没有完全达到这个标准,缺乏经典的工程思维是这里的一个主要因素。例如,流行的“早发布,后修复”的概念与工程原则截然相反。
Lisp/ADA 与 C/Java 的问题与信息学与编程的问题相同。一个是科学,另一个是工艺。