0

这个问题让我不禁要问——当改进的现代语言免费提供时,为什么大学仍然用像 Modula2 这样的语言教学?

例如,有没有仍然教帕斯卡的大学?我的意思是,30 年前还不错,但是……现在呢?为什么?

为什么不是 Java、C#、Haskell?

相关:仍然教 LISP 是倒退吗?


这是一个重复的问题吗?如果不是,我认为它应该是一个社区 wiki 主题。

4

7 回答 7

15

大学的工作不是教你一门编程语言,而是教你编程概念。他们使用的语言仅与他们已经从其他来源生成或使用的教材相关。

我认为重做课程就像重写一个大型应用程序——只有当你有一个令人信服的理由时你才会这样做,即使这样你也要三思而后行。

于 2010-04-20T17:49:00.503 回答
9

改进的现代语言(Java、C#、Haskell)是否免费提供?

因此,“改进”是指功能强大、加载了外部库和框架,并且非常复杂?有一个曲折的小功能迷宫,初学者很容易迷失方向?当他们迷路时,他们会收到任何初学者都无法理解的错误信息?

优秀的大学能够抵制教授当今流行语言的压力,因为我们的工作是教授永恒的真理和技能,这些真理和技能在 50 年后仍然适用。(今天的大学生至少可以工作到 70 岁。)我们最好的工具就是简单、简单和简单。Modula-2 是一个不错的选择。(PLT Scheme的初级学生语言也是如此。

我喜欢 Haskell,在研究中大量使用它,在高级课程中教授过它。你付给我的钱不足以在入门课程中教授它——我会割断自己的喉咙。

于 2010-04-21T00:50:50.103 回答
4

为什么不是 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,我认为你的情况不会更糟。概念是一样的。

这就像在柏林和芝加哥学习机械工程:语言可能不同,但概念是相同的。但如果你什么都不知道,甚至一门语言都不知道,那么从最简单的语言开始是有意义的。如果你想在柏林成为一名工程师,但不会说德语,那么学习工程学和德语是有意义的,但传统的想法是,从只有德语的工程学课程开始效率较低。

于 2010-04-20T19:39:47.470 回答
3

我能想到的原因有两个,一个好,一个不好。(我是教授。)

很好的理由:简化教学。教入门学生就像在跳水板上放小鸡一样。如果有办法让他们掉下来,他们会的。如果我必须教 C,我会扯掉我的头发,用char, unsigned char, char*, char**, char*[], char[10]*等等都是合法的和不同的,这只是树上的一些碎片。对于第二或第三门课程,情况就不同了。

不好的原因:学术自由。我们有一个人教一些遥远的解释语言,因为他喜欢它。另一个坚持教电子表格编程,因为那是“未来的浪潮”。

于 2010-04-20T18:06:28.643 回答
1

虽然这个问题似乎已经处理了一段时间,但我想补充一些东西(因为我是上述问题的提问者:))为什么我们在第一年学习 Modula2:除了所有已经提到的原因之外,它是为了得到在接触 Java 之类的东西之前掌握基本的东西(例如指针)是如何工作的,所有这些东西对程序员来说都是不可见的 :)

于 2010-05-21T09:54:04.287 回答
0

我意识到这个问题相当古老,并且有很多很好的答案。尽管如此,我还是想插话。

大多数答案都是“Modula-2 更简单,因此更容易教/学”主题的变体。尽管这是正确的,但这并不是大学应该选择教授 Modula-2 的理由。

向本科计算机科学专业的学生教授 Modula-2 最重要的好处是它可以形成良好的习惯和灌输纪律。

另请参阅“Modula-2 最重要的好处是什么?” 在:

http://modula-2.info/m2info/pmwiki.php/General/FAQ

很少有语言能够教授严格的编程纪律、遵守工程原则和良好习惯。大多数现代语言,尤其是流行语言实际上恰恰相反,它们教人坏习惯。

在严格的语言中,Modula-2 是最小的,在小语言中,Modula-2 是最严格的。

这种组合使 Modula-2 成为任何不只是想成为软件力学职业学校的大学的完美选择。

这听起来可能很苛刻,但如果软件开发人员渴望被称为软件工程师,那么他们应该像工程师一样接受培训,像工程师一样思考,最重要的是,在他们开始工作时表现得像工程师。

电气、机械和土木工程师有义务建造最重要的安全可靠的东西。除了少数例外,软件并没有完全达到这个标准,缺乏经典的工程思维是这里的一个主要因素。例如,流行的“早发布,后修复”的概念与工程原则截然相反。

于 2015-10-15T18:30:13.763 回答
-1

Lisp/ADA 与 C/Java 的问题与信息学与编程的问题相同。一个是科学,另一个是工艺。

于 2010-05-21T10:02:51.457 回答