最近读到一本书,说Python程序员比Java程序员聪明。同理,懂Smalltalk的程序员也比Java程序员聪明。所以,我在StackOverflow上找到这个关闭很久的问题,整理了一下,跟大家分享。

在介绍为什么Smalltalk不流行之前,你一定会想它有什么特别之处吗,以至于很多技术刊物和出版物在谈论面向对象时都拿它作为参照。我只会Java,它真的有那么重要吗,或者说我需要学习它。因此我先就这个问题作了整理。

Smalltalk可以说是OO语言的先驱之一(当时与之对应的是Simula和Eiffel),它是相当纯粹的OO语言。

  • 一切皆对象,对象之间的通讯只能通过发送消息实现
  • 无原生对象(例如int或boolean等)
  • 无结构控制(例如for或switch等),听起来不可思议但这是真的
  • 无静态对象(static)

它甚至实现了一些现在看来司空见惯的设计:

  • 虚拟机(JIT编译)
  • 检查式调试
  • “Hotswapping”执行代码
  • 闭包
  • 现代IDE
  • Duck typing
  • 基于Model-View Controller (MVC) 的UI
  • 测试驱动开发(TDD)和敏捷方法

另外Smalltalk还有很多特性让它显得另类:

  • 基于Image的系统而不是基于文件
  • 面向对象的数据库

毫不夸张的说,Java和apache-common的集合类(collections)API都极大地受到Smalltalk的影响。

我不会建议你去学习Smalltalk,但熟悉这些基本概念(目前很多语言都提供了)对你相当有帮助。 该语言的创作者Alan Kay最初的目的是儿童教育。现在人们不再大规模使用它,但这不并不是说它完全退出了。比如,JPMorgan有一个大型的管理衍生品风险的系统就是用Smalltalk语言编写的。

言归正传,回到刚才的主题,为啥Smalltalk没有流行起来。 某人说,最近几个月来我一直在看Smalltalk(VisualWorks),我越学越对它刮目相看。不过我总觉得我是不是忽略了一些东西,它现在为啥不再流行还是它从未流行过。那些抛弃Smalltalk转而学习Java或C++的人,谁能告诉我这是为什么。

大家普遍认可的一个回答说,有很多原因(大部分是历史造成的)导致Smalltalk没有火起来。

  • 与那个时代的硬件相比,它太超前了。
  • 1995年,Java横空出世,Smalltalk主要的厂商(ParcPalace)正忙着呢与另一个厂商(Digitalk)合并,最终以失败告终。
  • 2000年,Cincom收购VisualWork时,人们已经不再对Smalltalk感冒了。
  • 此后,Smalltalk不再扮演重要角色,但它又恢复了一些市场。

为什么Smalltalk不流行的更多相关文章

  1. 【转】最流行的编程语言JavaScript能做什么?

    本文转自互联网! 首先很遗憾的一点是,“PHP虽然是最好的语言”,但是它不是最流行的语言. 对不起的还有刚刚在4月TIOBE编程语言排行榜上榜的各个语言: 你们都很棒,但是你们都担当不了这个大任. 开 ...

  2. 2015最流行的Android组件、工具、框架大全

    Android 是目前最流行的移动操作系统之一. 随着新版本的不断发布, Android的功能也日益强大, 涌现了很多流行的应用程序, 也催生了一大批的优秀的组件. 本文试图将目前流行的组件收集起来以 ...

  3. 流行的JavaScript库 ——jQuery

    1.为了简化 JavaScript 的开发, 一些 JavsScript 库诞生了. JavaScript 库封装了很多预定义的对象和实用函数.能帮助使用者建立有高难度交互的 Web2.0 特性的富客 ...

  4. 最流行的编程语言 JavaScript 能做什么?

    此文转载oschina文章 首先很遗憾的一点是,“PHP虽然是最好的语言”,但是它不是最流行的语言. 同时对不起的还有刚刚在4月TIOBE编程语言排行榜上上榜的各个语言: 你们都很棒,但是你们都担当不 ...

  5. 为什么google bazel构建工具流行不起来

    作者Jack47 转载请保留作者和原文出处 之前博主写了系列文章Google软件构建工具Bazel原理及使用方法介绍.最近使用了一段时间后,觉得这个东西不是一种通用的构建工具,很难对接到情况复杂的大的 ...

  6. 流行ORM产品优缺点分析--EntityFramework、NHibernate、PetaPoco

    什么是ORM? ORM的全称是Object Relational Mapping,即对象关系映射.它的实现思想就是将关系数据库中表的数据映射成为对象,以对象的形式展现,这样开发人员就可以把对数据库的操 ...

  7. 【转】【译】JavaScript魔法揭秘--探索当前流行框架中部分功能的处理机制

    推荐语: 今天推荐一篇华为同事的同事翻译的一篇文章,推荐的主要原因是作为一个华为员工居然晚上还能写文章,由不得小钗不佩服!!! 其中的jQuery.angular.react皆是十分优秀的框架,各有特 ...

  8. iOS流行的开源代码库

    本文介绍一些流行的iOS的开源代码库 1.AFNetworking 更新频率高的轻量级的第三方网络库,基于NSURL和NSOperation,支持iOS和OSX.https://github.com/ ...

  9. GitHub 上 57 款最流行的开源深度学习项目

    转载:https://www.oschina.net/news/79500/57-most-popular-deep-learning-project-at-github GitHub 上 57 款最 ...

随机推荐

  1. Flex使用Blazeds与Java交互及自定义对象转换详解-DATAGRID读取ORACLE数据

    http://www.cnblogs.com/RocD-DuPeng/articles/1751040.html 一.建立Flex与Java交互的工程. 本文中讲到的交互是利用Blazeds的,因为这 ...

  2. mysql 模糊查询语句比较(LIKE、instr、locate、find_in_set、position)

    大家都知道mysql 模糊查询的常用方法是LIKE 但这个语句查询效率很慢,那么有没有比较好的方法呢,下面本人测试了几个语句 测试数据800条左右 1,

  3. 转 LoadRunner 技巧之 IP欺骗 (推荐)

    IP欺骗也是也loadrunner自带的一个非常有用的功能. 需要使用ip欺骗的原因: 1.当某个IP的访问过于频繁,或者访问量过大是,服务器会拒绝访问请求,这时候通过IP欺骗可以增加访问频率和访问量 ...

  4. python 面向对象和类成员和异常处理

    python 面向对象 你把自己想象成一个上帝,你要创造一个星球,首先你要把它揉成一个个球,两个直径就能创造一个球 class star: '''名字(name),赤道直径(equatorial di ...

  5. ping命令

    ping命令能够用于判断一个主机是否可达或者是否存活.它的工作原理就像潜水艇的探测原理一样.该命令通过向目标计算机发送一个数据包,请求目标计算机回送该数据包以表明自己还存活着.同时该命令还能够知道数据 ...

  6. Unix目录结构的来历(转)

    原文:http://www.ruanyifeng.com/blog/2012/02/a_history_of_unix_directory_structure.html Unix(包含Linux)的初 ...

  7. Hex string convert to Binary String and Vise-Versa(16进制和2进制字符串的相互转换)

    这个转换在我们日常的编码中还是很有机会遇到的,这里贴出来和大家分享探讨. void pu_hex_to_binary(std::string strHex, std::string &strB ...

  8. bootstrap dialog 使用模态对话框

    bootstrap3-dialog 使用模态对话框 <div class="modal fade"> <div class="modal-dialog& ...

  9. C#中清空ListView中的数据

    我的显示数据的方式通过button按钮点击事件,当点击之后查询数据库库并将数据显示出来. 代码如下: private void button6_Click(object sender, EventAr ...

  10. 完整的 mime type 列表

    原文地址:http://blog.csdn.net/zhaoyw2008/article/details/46647723 Suffixes applicable Media type and sub ...