3

一段时间以来,我一直想学习一种纯 OO 语言,但我被他们似乎都需要 IDE 并且我找不到任何不在视频中的好教程的事实推迟了格式。

我很高兴以后使用 IDE ,但我不想通过一个来学习语言。我正在寻找的是一个简单的控制台解释器或命令行编译器,例如 gcc、ghc、ghci 和 python IDLE(是的,它是一个 IDE,但它是如此的简约以至于它可能只是一个命令行解释器)。我发现当我不尝试同时使用 IDE 时,我可以更快、更好、更全面地学习一门语言。所以请不要告诉我吱吱声是唯一的方法:P

我也在寻找以文本而不是视觉呈现的教程。再一次,当我可以盯着一个页面并一遍又一遍地阅读某人的句子时,我学得更快,而不必暂停视频,将其退回 10 秒,按播放,一遍又一遍,然后再次。

我对具有不同程度的 OO 纯度的各种语言感兴趣,我计划在某个时候学习它们。任何 smalltalk 方言都让我感兴趣,Self(一个极端的面向原型的 smalltalk 版本(非常有趣,越激进越好 imo)),strongtalk,vanilla smalltalk(或一些你能得到的尽可能 vanilla 的实现)。

我也对 Eiffel 感兴趣,我看到的代码片段让它看起来非常优雅,而且我读到它实际上非常创新(引入了代码合同和其他类似的东西)。但是,我会优先选择来自 smalltalk 阵营的语言,而不是来自 Eiffel 方面的语言,因为从表面上看,Eiffel 似乎是 OO 和命令式编程之间的混合体。同样,我宁愿避免使用 Scala(混合 OO 和函数式)和其他混合语言。所以没有 C#、Java、C++、D、python 等等等等。我不是因为我认为它们很糟糕而拒绝这些语言,只是我开始学习纯 OO 而这些语言是混合 OO:不是真的是我要找的。

另外,有没有人可以推荐一下官方书籍?对于 smalltalk,有“蓝皮书”又名“Smalltalk-80:语言及其实现”。对于埃菲尔来说,有“埃菲尔:语言”。我之所以这么问,是因为根据我的经验,您可以通过阅读该语言作者所写的书籍(参见 K&R the C 编程语言)以及通过阅读一般书籍来学到很多东西。

所以是的,我的问题是:从什么纯 OO 语言开始比较好?我如何在不使用 IDE 的情况下学习它?语言作者是否有相关书籍?

4

7 回答 7

23

将 Smalltalk 作为另一种语言来学习是没有帮助的。你会完全忽略这一点。

Smalltalk 的图形环境不仅仅是一个 IDE。系统的核心只是对象。该接口提供了各种创建对象并与之交互的方法。该语言只是为对象创建消息的便捷方式。它仅次于对象本身。

在其他 OO 语言中,您编写程序,然后运行它,这会在内存中创建对象。在 Smalltalk 中并非如此。您在内存中创建对象(例如类对象),然后将消息发送到例如添加方法。但是一个类对象只创建一次,而不是每次“运行程序”时。

事实上,没有“你的程序”之类的东西。没有“主要”。它只是一个物体的世界,有些寿命更长,有些是暂时的。事实上,在系统中有些对象是 30 年前创建的。字面上地。这些对象只是作为内存转储(我们称之为“图像”的文件)冻结到磁盘上,然后再解冻(可能在不同的机器上)。

那个图像,物体的世界,是 Smalltalk 中的主要工件。有一个源文件,是的,但这只是一个文本片段数据库,不会占用太多 RAM。您不能手动编辑此文件(图像中的对象使用源文件中的绝对文件偏移量)。您不能从源文件重新创建系统 - 系统很久以前就被引导了,从那时起只修改了。

确实,Smalltalk GUI 表面上看起来就像另一个 IDE。绝非巧合——Eclipse 最初是由 Smalltalkers 在 Smalltalk 中编写的。但是有一个关键的区别是,在常规 IDE 中,您只需操作文本文件。文本编辑器是一个有效的替代方案。在 Smalltalk 中,GUI 操作内存中的对象。文本编辑器无法做到这一点。

至于使用什么 Smalltalk,我会推荐 Squeak。非常友好的社区,非常好的环境,并且订阅了 Smalltalk 最初的愿景,即为每个人创造一个伟大的个人计算环境。

于 2011-11-22T11:17:18.877 回答
14

作为一个经历过学习 Smalltalk 过程的人(至少在相当程度上),我可以说你正在走更艰难和风险更大的道路,从某种意义上说,有些事情可能需要更长的时间才能弄清楚,或者永远不会真正做到。

但是,如果您坚持,您可以下载 GNU Smalltalk,它没有 GUI 是一种规范。它还包含用 Smalltalk 以块格式编写的系统的所有源代码,您可以在它们上打开文本编辑器并享受,同时慢慢阅读系统的内容。

您还可以启动任何其他 Smalltalk,例如 Pharo,并坚持使用工作区窗口 - 这相当于您的命令行解释器。

Pharo 还包括关于 Smalltalk 的 ProfStef 快速交互式教程,它结合了文本说明和评估 Smalltalk 表达式。

至于阅读,有Pharo By Example - 免费书籍,您可以浏览、下载或购买硬拷贝。

还有一系列免费书籍,如果您对语言的内部和细节感兴趣,我会推荐 Adele Goldberg 和 David Robson 的“Smalltalk-80: The Language and its Implementation”。

已故的 David N. Smith Smalltalk FAQ 也是很好的资源。

所以,你去吧。并接受建议,并尽快向 Smalltalk IDE 屈服,因为它可以更快地理解 Smalltalk。

于 2011-11-22T09:05:52.427 回答
14

Richard Gabriel 最近发表了关于 90 年代初编程语言社区发生的范式转变的演讲。他声称今天的大多数专家都无法理解 80 年代的许多论文。他有证据支持这一点。这是他第一次做演讲,他预计会做很多次,所以我想演讲的很多部分都会改变。起初,他将这种范式转变描述为工程 -> 科学,但后来他将其描述为系统 -> 语言。我认为将其描述为从系统思维到语言思维的转变是一个更好的描述。

理查德加布里埃尔是一个 Lisp 人。(我是一个 Smalltalk 人)。Lisp 就像 Smalltalk 一样,语言和它使用的库之间没有明确的界限。算术和控制流在库中,而不是语言中。(嗯,Lisp 有一些在语言中,一些在库中,而 Smalltalk 在库中都有,除了编译器作弊和硬编码其中一些,所以最终并没有太大区别。) Lisp,一个程序就是一个S-表达式,编辑程序就是编辑S-表达式。在 Smalltalk 中,程序是对象的集合,编辑程序就是编辑对象。当您编程时,您正在构建一个系统,并且您使用该系统进行编程。

系统思维不同于语言思维。语言思考者想要一种语言的精确描述。他们想要一本描述整个事物的书,或者(如果他们是学者)他们想要该语言的正式语义。但是系统思考者知道,一旦他们开始使用系统,它就会改变。他们想了解系统的工作原理,但准备查看系统本身以找出细节。

这是两种思维方式,各有利弊。Smalltalk 是系统思考的一个很好的例子。我认为所有软件开发人员都应该知道至少一种系统,它体现了系统思维。Lisp 很好。Forth 是另一个老例子。当然,我认为 Smalltalk 很棒并且很乐意帮助人们学习它,但我认为学习系统思维的重要性比你学习的特定系统更重要。

不幸的是,学习一个系统比学习一门语言更难。你要做的不仅仅是学习语法,你必须学习库、命名和编码模式,通常还有工具。(如果这是一个系统,它是可扩展的。)这是语言思维的优势之一。但是系统思维具有长期优势,因为一旦您根据需要定制系统,您就会变得非常高效。

于 2011-11-22T12:55:05.093 回答
11

要精益 smalltalk 语法,您需要阅读一页文本(请参阅 wiki http://en.wikipedia.org/wiki/Smalltalk上的语法部分)。现在,要学习 smalltalk 库以及如何使用它们,您需要使用浏览器而不是文本编辑器,否则您将浪费大量时间。

我认为这就像时间差异的 10 倍,在尝试通过阅读文本格式来理解某些代码和使用浏览器导航之间!调试器。

在 smalltalk 系统中,一个活的对象可以告诉你很多关于它们自己的信息,并帮助你学习如何使用它们,这比你把它看作是一个静态的文本块要快得多,因为你根本不会理解这个想法。

于 2011-11-22T11:36:36.767 回答
5

Python 是纯 OOP 。其实这是新手接触python时容易犯的错误。

像 smalltalk 这样的 Python 遵循“一切都是对象”的口号。所以python里面的一切都是一个对象,包括内置类型。不同之处在于 python 与 smalltalk 和 Java 不同,它不强制 OOP,因为它允许过程编程。这就是陷阱,很容易假设这使得 python 减少了 OOP,但是作为一条蛇,它是如此的发达,以至于不会告诉你甚至函数都是对象;)

http://www.linuxtopia.org/online_books/programming_books/python_programming/python_ch10s04.html

回到 smalltalk,它的 IDE 在这里很重要,与其他 smalltalker 可能相信的相反。如果您像我一样对 IDE 的不灵活程度感到非常失望,那么您会喜欢 Squeak 的 IDE。IDE 做了很多工作,使您可以轻松浏览所有库,并让您了解发生了什么、在哪里以及为什么发生了某些事情。我看不到使用文本编辑器的好处。但是您可以使用文件输入和文件输出。但是这样做会使 smalltalk 变得与其他编程语言一样高效;)

我现在只学习 squeak 和 pharo 一个星期,但即使对我作为初学者来说,IDE 的好处从一开始就很明显。

事实上,代码被分割成易于理解的方法,这些方法分组为协议,协议分组为我们熟悉的类,类分组为包。因此代码组织得很好,我从不迷路,一切都属于某个地方,一切都只需点击一下,一切都是可检查的,可浏览的,您只需选择右键单击并将您发送到那里。它准确地向您展示了您需要的代码,长度很少超过 10 行。这是IDE。为什么您更喜欢一个文本编辑器,它可以显示您不需要、不关心并且可能让您感到困惑的信息?

然后一切都在一个图像中,而不是文件、代码、库、系统库,甚至语言本身的集合。一切都在你的掌握之中,等着你,求你去测试、修改、使用和滥用。你是语言的一部分,语言也是你的一部分,如果有什么不符合你的想法,改变它。这是IDE。为什么要回到文件和文件夹的断开方式?

然后你开始害怕所有这些力量,所有这些灵活性,你不太可能会做一些可能完全破坏语言和库的事情。它是可能的,错误可以而且将会发生。IDE 再次为您提供帮助,每个更改都存储在本地 cvs 系统中,每个更改都被分类、存储和随时监控。没有糟糕的撤消和任何其他废话。你得到的是旧的、成熟的、经过良好测试的版本控制。您可以随时准确地改回您想要的东西,没有任何损失,没有错误是不可逆转的。

如果您不信任您的硬盘驱动程序,则 vcs 可以在线扩展到 squeaksource 。它是否让你受制于命令行?一定不行 。为您提供了简单而高效的 Monticello 浏览器,它将确保您安装和卸载没有冲突。

当然,您不希望您的软件有错误,是吗?提供单元测试工具以确保您的代码可靠、稳定并且完全按照您想要的方式执行。再次使用漂亮而出色的 GUI 使复杂的任务只需一个按钮即可完成。

并且因为没有一个是完美的,所以会有时间你会遇到可怕的错误。你一个人呆着吗?你猜对了,又提供了一个工具。调试器。你不需要调用它,你不需要设置它,你甚至不需要弄清楚它是如何工作的。像所有其他工具一样,设计简单但复杂。它不仅会发现错误,不仅会告诉你你做错了什么,不仅会导航回触发错误的最基本的语言元素,提供一个独特的视角来了解语言的行为方式,就像我以前从未见过的那样,它还允许您进行实时编码。实时编码是在代码运行时对程序进行编码的能力。这不是令人印象深刻且无限有用吗?

最后,也许你是那些无法取悦的人之一,也许你仍然发现缺陷,遗漏并认为你简单不喜欢。IDE 是用 smalltalk 编写的,smalltalk 是用 smalltalk 编写的,并且 IDE 可以编辑自身和语言,除了语言的一些非常基本的功能和编译为 C 的 VM 之外,没有什么是你不能改变的。你会如果你认为你可以使用上述所有工具来做到这一点,那就猜对了。

工具并不止于此,smalltalk 可能不像其他语言那么受欢迎,但它已经存在了很长时间,并且它有一些非常热情的程序员愿意做出贡献。坦率地说,拥有如此出色的 IDE 和如此精心设计的语言,而其他为它们做出贡献的语言似乎是一个挑战,在 smalltalk 的情况下,挑战是抵制不贡献的诱惑,因为 IDE 让它变得如此简单。

当其他人仍在编写代码时,您将完成您的代码并真正了解您做了什么以及为什么。这根本不是一件小事。我希望 Python 有这么好的 IDE 或任何其他语言。但根据我的经验,唯一接近的就是 Delphi。即使在 Delphi 的情况下,我仍然更喜欢 squeak 和 pharo。

我对其他 IDE 感到恼火的是,它们根本不是 IDES,它们只不过是美化的编辑器、锁定、不灵活、不可编辑(除非您愿意使用另一种编程语言并浏览大量源代码)。Squeak、Pharo 和所有其他 smalltalk 方言提供了一个真正优雅的 IDE,为您提供真正有用的工具。其他 IDE 最好深入了解 smalltalk 并真正理解成为 IDE 意味着什么。

说了这么多好话,smalltalk 远非完美。而且我认为它最大的弱点和缺陷是缺乏一些可以帮助初学者先入为主的有趣和有用的文档。Squeak By Example 和 Pharo By Example 让我非常失望。这两本书仍然是两本极其重要的书籍,为这两个平台提供了非常有价值的见解,但文档的质量有时从平庸到糟糕。主要原因是这两本书都遵循非新手友好的方法。首先,他们让您深入了解 IDE,从第 1 章向您介绍调试器甚至单元测试!!!对我来说,这是一个很大的错误,即使我对编程远非新手,也不得不努力跟进所解释的内容。那么这本书本身,就让人有很多悬而未决的问题。例如对实例变量和类变量的解释是不够的,我更喜欢几个例子,这些例子不仅展示了如何,还展示了为什么。这本书的几个领域也充满了空白或难以理解。

当我找到这个链接http://stephane.ducasse.free.fr/FreeBooks.html并从那里下载“Smalltalk by Example”时,我的生活变得轻松多了标题,但不假设您是谁以及您知道什么。我只能强烈推荐它。我读到那里免费提供的其他书籍也非常好,我一定会最终下载并阅读所有这些。

irc.freenode.net 上的#squeak 也提供了很多帮助,那里的人一直在回答我的问题并帮助我理解。

Squeak wiki,还可以,但还不够,它的组织也不是很好,我不喜欢评论和讨论出现在 wiki 文档中。因此,对于初学者来说,文档通常可能有点困难,而且 Smalltalk 肯定不是一门容易学习的编程语言。我听到许多 smalltalker 的说法不一样,我不能更不同意,当我将 smalltalk 与 python 进行比较时,就像白天和黑夜一样。但 !一旦了解了 smalltalk ,用它进行编程就变得比我迄今为止学过的任何其他编程语言都容易得多,而且我已经学会了其中的大部分。所以最后我认为 Smalltalk 是一个明显的胜利,我也喜欢让你轻松调用任何 C 库的 FFI 库,它为 smalltalk 释放了强大的力量。

我认为您不需要先学习语言然后再学习 IDE,这实际上是一个非常糟糕的主意,因为 IDE 可以帮助您理解语言及其库以及其中的任何类型的代码。语言和IDE就像兄弟姐妹,阴阳。

于 2011-11-22T15:00:28.773 回答
5

我已经和 Squeak Smalltalk(以及它的近亲 Pharo 和 Cuis)玩了一段时间了。没有比使用已经提供的系统更好的学习 Smalltalk 的方法了。

我设计了一系列长度从 50 秒到 15 分钟不等的简短 youtube 教程,展示了如何在首次启动系统后的几分钟内利用 Squeak 的超酷功能。

事实上,第一行代码演示了 Squeak 的 OOP 特性。从一开始就尖叫

于 2011-11-22T18:53:33.653 回答
2

好吧,如果您决定学习 Eiffel,那么一本好书就是 Betrand Meyer(他创建了 Eiffel 编程语言)的《面向对象的软件构造》。

这本书提供了关于使用 Eiffel 进行面向对象设计的深刻见解。在我看来,这是最好的 OO 书籍之一。

于 2011-11-28T20:29:06.957 回答