Smalltalk有什么特别之处?

在每一个技术出版物和这个网站上,人们总是比较OO语言和Smalltalk 。 我的经验是在Java中:Smalltalk是如此重要,我应该研究它?

Smalltalk是最早的面向对象(OO)语言之一(与Simula和Eiffel一样 ),可以说在OO意义上是非常“纯粹”的:

  • 一切都是一个对象,只有通过发送消息来传达对象
  • 没有原语(没有int s, boolean s等)
  • 没有控制结构(不,不, if等)。 听起来不可能,但这是真的!
  • 没有静力

它也开创了一些其他现在常见的东西:

  • 虚拟机(和JIT编译)
  • 通过检查debugging
  • “Hotswapping”运行代码
  • 现代的IDE
  • closures
  • 鸭子打字
  • UI的模型 – 视图控制器(MVC)体系结构
  • testing驱动开发(TDD)和敏捷方法

还有一些与Smalltalk相关的东西并没有真正成为主stream:

  • “基于图像”的系统而不是基于文件的系统。
  • 面向对象的数据库

公平地说,Java集合API和apache-commons集合 API受到Smalltalk的很大影响。

我不会说你应该学习Smalltalk 本身 ,但是熟悉这些特性的基础 (现在用其他语言)对你来说肯定是有利的。

请注意,目前在这里只有123个关于这门语言的问题,这个问题最初是作为一种教育语言(即针对儿童)由其创build者Alan Kay开发的。 它不是特别重的使用了。 这并不是说它不被使用。 例如,摩根大通在其中编写了一个庞大的奇异衍生品风险pipe理系统。

Smalltalk拥有许多辉煌的创新 – 我们今天都认为理所当然,其中包括:

  • 成为有史以来第一个IDE
  • 使用鼠标为GUI提供编程支持如果您学习Smalltalk GUI编程,您将确实了解MVC。
  • 是由less数强大的想法构build而成的,这些想法非常合作
  • Smalltalk的方式不是意外行为的崩溃 – 这是适应 。 如果你发送一个消息给一个不理解它的对象,debugging器就会出现,并邀请你写这个方法…所以它为增量开发提供了很好的支持
  • IDE,您正在编写的应用程序和数据都是同一个系统的一部分,因此您可以更轻松地编写自己的工具和debugging工具。
  • Smalltalk中TDD工具集仍然比任何其他语言都好(见下文)。
  • Squeak Smalltalk有相当多的尖端devise研究:
    • morphic UI – 您可以熟悉“活跃”的概念,
    • 海边网站框架 – 了解一个延续服务器是什么 ,以及它如何根本不同
    • Squeak 与OLPC软件 (每个孩子一台笔记本电脑)项目有着密切的联系 – 并且可能对世界产生重大影响。
    • 找出什么是“特质”
    • 玩与开放槌球的激进3D沉浸式环境
  • 由于Smalltalk是一个更小,更简单,更一致的语言,因此它具有自己的内置环境,所以开始教授面向对象程序的时候,这是一个不那么令人困惑的地方 。 走这条路线的人最终会成为更好的Java,Ruby和C#程序员,因为他们可以学习基本的面向对象程序devise,而不会造成主stream语言的混乱不一致。
  • 一些商业Smalltalk有令人惊叹的多节点分布式OO数据库环境。 我在想gem。
  • 知道Model-View-Controller和Model-View-Presenter之间的区别 – 看看Dolphin Smalltalk …

今天学习Smalltalk的最重要的原因是极端的编程和Scrum都是在Smalltalk社区中发明的……而且在Smalltalk中体验到的高度交互式编程风格比Java所能做的更简单,更强大和直接或者C#或者Ruby …并且你不能真正理解敏捷方法如何工作,直到你试图在Smalltalk中进行极端的编程 。 很less有其他的语言(反正没有主stream的语言)具有相似的function集。

…真正理解什么是TDD可以是你需要使用SUnit。 JUnit只是显示你的testing失败的地方。 SUnit实际上允许你在testing失败的地方点击debugging器,看到实际的对象以及它们如何连接,这样你就可以看到,在debugging器中如何代码失败并在那里修复它。

是的,Smalltalk是如此重要,你应该研究它。 为什么? 你可以理解纯粹,简单的面向对象编程。 人们忘记的是Smalltalk-80“蓝皮书”只有大约90页致力于语言 – 语言就是这么简单。 另有300页讲述预定义的类层次结构,这是使用单一inheritance的基于类的面向对象语言devise的杰作。 你会得到一个更深入的了解对象(例如,类是对象,它们有元类,从无到有…除了结被仔细地绑在一起保持系统有限)比你从研究像Java或C ++混合语言。 Smalltalk不仅仅是因为它的历史,而是因为它的简单性:

  • 足够简单,所以你可以了解整个语言图书馆

  • 显示一个想法(对象是你所需要的)推到它的逻辑极端

每个人都有从Smalltalk学到的东西!

Smalltalk是前两种原始OOP语言之一,另一种是Simula-67。 因此,有两个大家族 – 以Simula(C ++,Java,C#都属于这里)开创的方法调用为中心的静态types模型,以Smalltalk开发的以消息传递为中心的dynamictypes模型(Python,Ruby) )。

今天,Smalltalk本身并不是特别重要,有些人还在用它来写东西,但绝对不是主stream。 然而,学习它将会给你一些关于OOP如何和为什么发展的见解。

上个月,我在一个关于Smalltalk的历史和影响力的会议上做了大约5分钟的演讲。 使用Smalltalk查看基于图像的开发 。 当今程序员的一个比较陌生的概念是“基于图像”的发展。 有一些很好的类比,包括DBMS和电子表格。

是。 下载海边的一键式图片 ,从James Foster的教程开始使用它,你至less会学到:

  • 如何构buildWeb应用程序
  • 如何debugging应该工作

我同意其他人。 我不确定它本身是否重要 ,但却是COOL(imho)。

我喜欢语言中没有循环或条件。 If-then-else是发送到布尔对象的消息。 Truetypes的对象做一件事,Falsetypes的对象做另一件事。 (是,True和False是布尔的子types,每个值分别是true和false)。

它开始是一种反直觉,但它确实给你一个非常有趣,深刻的关于面向对象编程应该如何工作的观点…

Smalltalk不仅是第一个,它直到今天仍然是面向对象语言devise的典范。 后来比较stream行的语言–C ++,Java,甚至是Objective-C–都比原来的面向对象的方式更具限制性,比老式的Smalltalk更具有限制性。 Smalltalk具有普遍的一stream对象,对运行时反省的很好的支持,非常自然地使用鸭子打字和封闭,比我在任何非function性语言中都看到的更好。 我的意思是,我们正在谈论的是一种没有本地控制结构(如果,而等)的语言,但是能够以无缝工作的方式将它们从对象系统中创build出来。 多么酷啊?

如今,我不会推荐Smalltalk用于任何密集的桌面应用程序开发(这只是没有一个可行的实施IMO),但如果你想看看OO是如何被认为是可能的,也许拿起一些想法,你可以在你的应用程序中使用,Smalltalk是一个很好的地方。

如果你只知道一个面向对象的语言,你应该考虑学习第二,第三和第四,以获得更广泛的视angular用对象编程。 学习Smalltalk将会使你的大脑更加灵活,因为我们熟悉的其他语言(例如if-then-else,for(;;),while()等等)在Smalltalk中并不存在。 显然有等价物,但是Smalltalk做不同的事情,学习不同的方法来做事情总是一个好主意。

祝你好运。

我刚刚开始重新激发我对Smalltalk的兴趣,在我看来,有一些关于Smalltalk的特别的东西是非常有吸引力的:

  • 高生产力的发展环境
  • 内置对敏捷/极限编程方法的支持
  • “纯”的对象模型
  • 易于使用的graphics框架

这些对于那些不在软件开发业务中的人来说都不是特别有用。 我第一次接触到它的时候,我看到一个embedded式设备的用户界面,使用Smalltalk在PC上进行原型开发。 这使得用户界面能够被非常快速地修改和testing,并且在完成时为embedded式开发人员提供比任何文档更精确的“可执行规范”。 我很惊讶,我没有看到这种技术比我在过去20年的旅行中观察到的要多得多。

使用Smalltalk作为原型工具是我的兴趣所在:我认为给出一个新问题,可以在Smalltalk环境中快速轻松地尝试和validation解决这个问题的不同方法,一旦find期望的解决scheme,它应该是相对的机械将其转换为Java / C ++ / C#等等。实际上,对于重复的事​​情,使用Smalltalk为某些其他目标语言的解决scheme的一部分生成代码是可能的。

另一件关于SmallTalk的事情是,其校友包括Kent Beck和Ward Cunningham。 他们与SmallTalk的合作产生了自动化的xUnittesting , 软件devise模式 , CRC卡以及其他编辑成XP / Agile等的实践。所以可以认为SmallTalk一直是现代编程领域的主要贡献者。

只有两点意见:

  1. Smalltalk不是面向对象的,是真实的对象,只是环境中的对象和消息。

  2. Smalltalk不是一种语言,是一种语言(同名)的环境,但这里的大部分“魔力”都是由于环境(图像)的缘故。