您会开始学习Smalltalk吗?[关闭]


81

我的问题很简单!

  1. 如果有时间,您会开始学习Smalltalk吗?为什么?为什么不?
  2. 您已经了解Smalltalk吗?为什么您会推荐Smalltalk?为什么不?

我个人是Ruby on Rails程序员,我真的很喜欢它。但是,我正在考虑Smalltalk,因为我阅读了许多博客,并且有些人称Ruby为“ Smalltalk Light”之类的东西。我对Smalltalk感兴趣的第二个原因是Seaside

也许以前有人进行过相同的转换?

编辑:实际上,最让我对Smalltalk / Seaside感到最兴奋的是WebDevRadio的以下剧集:第52集:Seaside上的Randal Schwartz(除其他外)

Answers:


61

如果您喜欢Ruby,则可能会喜欢Smalltalk。IIRC Seaside已被移植到Gemstone VM,这是其Gemstone / S OODBMS的一部分。与Ruby相比,它具有更好的线程支持,因此对于大容量系统而言,它是更好的后端。这可能是仔细研究它的好理由。

学习Smalltalk的理由:

  • 这是一个非常非常好的编程环境。一旦掌握了这一点(对于习惯于C ++或Java的人来说,这往往会引起文化冲击),您会发现它是一个非常好的工作环境。即使是像我使用的旧Digitalk是一个非常令人愉悦的系统。肯特·贝克Kent Beck)马丁·福勒Martin Fowler)等许多老牌XP和OO大师类型在白天回避了Smalltalk,并偶尔听到他们渴望在公开场合过得很好(感谢Frank Shearer的引用,+ 1)-敏捷开发起源于此平台。

  • 它是历史上生产力最高的开发平台之一。

  • 存在几种成熟的实现,并且那里有一个出奇的大代码库。一方面,它在金融市场圈中变得非常流行,在这些市场中,开发人员的生产力和上市时间相当重要。直到1990年代中期,如果您想要一种适用于应用程序开发的商业支持的高级语言,那么它大约是该镇唯一的游戏(LISP可能除外)。

  • 部署很容易-只需将映像文件放在适当的目录中即可。

  • 这并不是一个真正的原因,但是《四人帮》中的许多例子都使用了Smalltalk。

不学习Smalltalk的原因:

  • 这是一个利基市场。您可能找不到工作。但是,如果您要生产某种在拥有服务器的.com应用程序,则可能不是问题。

  • 许多人将其视为旧系统。该平台上的新进展相对较少(尽管Seaside似乎正在推动某种复兴)。

  • 它往往不能与传统的源代码控制系统很好地配合使用(至少到90年代中期我使用它时为止)。情况可能是,也可能不是。

  • 它有点孤立,喜欢自己玩。Python或Ruby是为从头开始集成而构建的,并且往往更加混杂,因此更易于与第三方软件集成。但是,其他各种更主流的系统都或多或少地受到这种类型的孤立的困扰,这似乎并没有太大地阻碍其使用。


1
Ruby也已移植到Gemstone:它被称为Maglev:infoq.com/news/2008/04/maglev-gemstone-builds-ruby
brian d foy 08/09/29

您所说的“它在传统的源代码控制系统中往往无法很好地发挥作用”是什么意思?
确实是2010年

4
传统Smalltalk存储源代码的方式意味着将其嵌入到映像以及相关的源和更改文件中。您没有像使用(例如)C那样获得一套很好的程序文件。Smalltalk系统趋向于需要专用于感知Smalltalk的源代码控制系统,这些系统往往是(a)专有的,(b)昂贵的,并且( c)与其他一切不兼容。
ConcernedOfTunbridgeWells 2010年

希望蒙蒂塞洛将解决这些问题的(a)和(b)。Squeak已经大量使用它,而SqueakSource有许多项目正在使用它。它仍然有疣。一旦实际使用了git-Monticello项目,(c)有望也被抛在一边。
Frank Shearar

2
我通常喜欢这个答案,但Smalltalk可以与第三方软件一起使用。您没有看到很多API的事实并不是因为您在技术上无法集成它们,而是因为它是一个利基市场(因此,需要外部软件的人越来越少)。造成这种影响的第二个原因(这也不是技术性的)是,小谈话者更喜欢处理小谈话中的问题,而不是其他不太有趣的技术。
塞巴斯蒂安·萨斯特

45

好吧,既然您提到了我的名字,我觉得我应该插话了。

正如我在播客采访中所说的那样,正如我在http://MethodsAndMessages.vox.com/的博客中反复说明的那样,今年是“闲话之年”。现在在过去的十个月中进行了Smalltalk倡导,我可以看到它确实正在发生。越来越多的客户转向Smalltalk和Seaside,Smalltalk供应商都在努力吸引这种新的关注。正在计划举办更大的Smalltalk会议。正在发布更多职位。正在发布更多博客。

如果您今天转向Smalltalk,您并不孤单。还有很多其他人在那里。

编辑

好吧,几年后,我现在推荐Dart。这是一种很棒的语言,起源于Google,现在由ECMA委员会拥有。它通过node.js样式在服务器端运行,但通过转换为JavaScript在现代浏览器中也可以在客户端运行。很多好的书籍,博客,帮助频道,IDE支持,公共实时pastebin。我认为肯定有腿...足以让我写课件在现场或在线教授它,而且我很确定我的著作中有一两本书。老式Smalltalker的Gilad Bracha是该设计的主要贡献者,因此Dart中有很多Smalltalk。


2
这就是Stack Overflow很棒的原因!谢谢您的回答!
Christoph Schiessl,

出于好奇,您能详细说明一下注意力的涌入吗?
ConcernedOfTunbridgeWells

Ruby肯定有帮助,我认为Javascript和Objective-C也是如此。对于那些不懂OO的人,这些语言提供了一个熟悉的起点,从中可以推断出Smalltalk是如何发光的。
Damien Pollet

然后,海边的家伙做了一些不错的公关,与DabbleDB的Avi Bryant以及在Rails conf上的Maglev政变一样,而Randal也很有声望:) Google V8的Lars Bak也来自Self……有很多这样的微小线索,所有这些都暗示着在Smalltalk和Lisp中,来自过去的未来的奇怪语言:)
Damien Pollet

30

Smalltalk是一门好学的语言,而且很棒的地方是,只需一天就可以完成。它不只是一种学术语言。人们正在构建处理数十亿美元的庞大,可伸缩,可复制的应用程序。他们只是不多谈论。例如,请参见GemStone和Orient Overseas Container Lines:《航运业案例研究》

海边是学习Smalltalk的一个很好的理由,但是我认为您不会发现它比Rails好几个数量级。

令我信服的是GemStone。我真的很喜欢Gemstone的GLASS(GemStone,Linux,Apache,Smalltalk和Seaside)。其中的杀手是GemStone,它几乎为您处理所有对象持久性,而无需您考虑。看到他们的一些演示并听到人们对GemStone的处理后,我对“大型应用程序”的含义重新认识了。

关于Rails,最让我困扰的部分是对象关系映射。这对Ruby没什么好处,因为它在GLORP(处理Smalltalk的ActiveRecord),Perl或其他任何东西上都同样困难。将对象映射到数据库表很痛苦。使用GemStone,关于数据库的思考就消失了,因此使用数据库的工作也就消失了。就像一块巨大的石头(或一群猴子)从我的背上摘下了。


1
我希望我可以投票两次...我完全同意。
塞巴斯蒂安RoccaSerra

1
+1用于显示ODB优于ORM的优势。从一个到另一个绝对是您可以感觉到的
ryan0 2012年

15

>找不到不花一分钱的Smalltalk开发环境

谷歌-免费的Smalltalk

Cincom Smalltalk,Squeak,GNU Smalltalk


吱吱声真好!纯OOP,完全图形化,可爱的用户界面,开放源代码(对此有些反对),或多或少可移植……
Joe Pineda

1
+1代表Squeak,它有一个很棒的社区,并为初学者提供了一个不错的邮件列表。
塞巴斯蒂安RoccaSerra

Squeak的+1,对象资源管理器(或任何它称为的对象)对于学习对象模型的工作原理非常重要。
莫里西奥·谢弗

3
菲罗是免费的,并拥有所有现代化的工具..
戴维德·里斯

15

从发明OO的人(Alan Kay)的角度出发,学习Smalltalk将为您提供面向对象软件开发的基础。重叠窗口环境的想法来自Smalltalk。

学习Smalltalk的绊脚石是,它是一种消息传递系统,其流控制的语法很奇怪,例如:

i < 60
   ifTrue: [ self walk ]

它有一个非常成熟的类库,它具有一个一致性,我没有见过太多地方。所有环境(甚至是商业Smalltalks)中的类库都有可用的源代码,使您可以向语言大师学习。在对Smalltalk进行编程时,我总是问这样一个问题:在环境中该如何完成。

Smalltalk通常在映像中实现,该映像是系统中所有对象的实时环境。

交互式调试器确实将Smalltalk与Ruby分开。

Seaside是Web开发框架,它使Smalltalk成为新的亮点。它是一个基于连续的环境,允许进行内部命中调试和流畅的Rich Client类型开发经验(可以使用一种方法设计顶级应用程序流)。它与script.aculo.us的集成已经完成,因此可以在Smalltalk中轻松调用它。


1
语法并不奇怪-实际上非常优雅。必须将其读取为:嘿,无论您得出的“ i <60”结果如何,这都是一段代码(作为参数传递的代码对象),如果您认为是正确的,则要对其进行评估。有趣的是,如果“ i <60”返回一个模糊的统计数据,它甚至可以工作。
blabla999

……然后模糊的统计事物可以决定(作为一种方法)如何处理。没有一个内置的运算符或控件结构无法用这种方式重新定义。
blabla999

10

奈杰尔,我的一句话是:

尽管我做任何事情都已经很长时间了,但我还是提名了Smalltalk,但是我至今还没有遇到过类似的事情,因为它能够将思想转化为计算机代码。这不仅是语言,还包括美妙的浏览器环境,库以及以最快的速度编写出清晰,设计良好的代码的文化,这比其他任何方式都可以解决。当JavaOne的参与者赞扬Java的生产力比其他任何事物都要高时,我需要一个牛皮纸袋。哦,好了,回到整理我的类路径上了……-Martin Fowler(软件开发杂志,2001年1月)

我在这里找到的。


9

会不同意那些认为您不会在大型应用程序中使用Smalltalk的海报的人-这正是它的亮点。但是我也用不到一周的时间就创建了相当时髦(注意小写)的原型应用程序。

我从92年开始在ST学习OO,非常高兴。它给了我真正的面向对象背景。在课堂上思考。没有类型。ST真正重视消息传递。如果您想知道一些信息,请向对象发送消息并获得答案。恕我直言,精神和IDE确实鼓励您通过耦合和凝聚力做正确的事。

在我的Java日常工作中,我被文件,泛型,IDE之类的日食所困扰,它们的效率要比任何ST IDE低几个数量级。我只有在提前完成开发时才使用ST。实际上,它是如此高效,而且我们得到了太多的重用性,我不得不移到另一个项目,因为我无事可做!(好吧,也许我本可以花时间学习估计...)

下载尖叫声,找到一本好书并播放。唯一的缺点是,如果您的日常工作使用Java或C#,您最终会希望可以使用ST。你早点回来

克里斯·布鲁克斯


9

我建议大家学习Lisp(方案)或Smalltalk。

Smalltalks具有出色的IDE,一旦您克服了文化冲击,您就不会错过它。是的,有不止一种免费软件:Squeak,Dolphin,Smalltalk / X和Visualworks(非社交)。

不过,Lisp的数学基础甚至更干净。

问候

PS:实际上我建议两者都学习!


8

我不认识露比

Smalltalk是一种OO语言。如果您需要真正了解OO,而不仅仅是最流行的“ OO”语言(如C ++,Java等)的模拟OO,那么我建议您使用smalltalk。

在Smalltalk中,所有事物都是具有属性,行为和元数据的对象。在模拟中,您具有在对象中使用的数据类型。

我想说,您只会从中受益。


1
在SmallTalk中,甚至“类”都是对象,是类Class的实例!!!这让我发疯,直到我摸索它!
乔·派

1
从意义上说,即使类都是对象,Ruby也是一种纯OO语言。块,方法和空指针的引用也是如此。
艾伦(Alan)

4
Ruby从Smalltalk中汲取了很多想法(Matz将自由声明这一点)。在许多方面,它可以被视为类似于Smalltalk的“实用”(对Hunt和Thomas道歉)语言。
ConcernedOfTunbridgeWells,

7

我完全在你的鞋子里。我正在使用RoR并研究Smalltalk领域。我发现一些重要的利与弊:

优点:

  • 成熟稳定的环境
  • 快速的开发周期
  • 让您多想而少写

缺点:

  • 需要不同的思维
  • 还是不太了解

我如何了解Smalltalk真是很有趣。搜索Lisp和Erlang内容时,正是这一件事在Google搜索结果中不断弹出。有一天,我检查了一下,对漂亮的Windows环境感到惊讶。片刻之后,我发现了Aida / Web框架。我迷上了这个框架,并开始通过Web开发学习Smalltalk。

仍然还没到那儿,但是真是太有趣了,我简直不能坐着……:-)我又很开心。


5

如果有时间,我将不会开始学习它。为什么不?因为学习C#或Java会在财务上提高生产力和利润。

另一方面,如果您是一个业余爱好者,并且想继续进行考古研究,那么我建议您花一些时间研究Alan Kay,看看什么,什么时候,为什么以及如何进行小话。令人着迷的故事和令人难以置信的人(毕竟,他获得了转机奖)。然后,也许会发出吱吱声,以感受一下这种语言。之后,您可能会重新认识/理解块,闭包和面向对象的原理。

我知道并使用Smalltalk,至今已有15年的历史,并且仍在维护它,并且不会向朋友推荐Smalltalk。为什么不?拥有和保持就业是一件好事。尽管您可以从Smalltalk中学到很多东西,但是您不能轻易地将其转化为当今时代的有酬职业。

另外,您似乎对Seaside感到兴奋,我将担任Seaside / GemStone的合作伙伴。我已经使用GemStone相当一段时间了,两者在一起非常吸引人。我希望他们能够获得成功所需的市场份额和动力。


5

别!如果您真的开始学习它,那么您可能不再想要进行其他编程。

如果您是Lisp程序员,则可能不是这样。



4

绝对,学习Smalltalk!到了2015年,借助Pharo,Smalltalk再次崛起。Pharo是免费的。Pharo正在迅速发展成为功能强大的企业工具。在4.0版(即将成为5.0版)上,它在短短四年内就已经成熟了许多!

然后是Amber,它是Web上的Smalltalk。它也是免费的,并且发展迅速。

尽管Smalltalk享有声誉,但这不是您父亲的Smalltalk。现代Smalltalk令人兴奋且充满希望。

确实,Smalltalk的工作还不够。但是,如果你们中的足够多的人加入了新一轮的Smalltalkers,那么该行业将适应它,并且我们将看到Smalltalk在业务中的广泛采用。问题是,您有远见吗?


3

我在第一批研究生水平的面向对象编程课程(大约于1988年)中被授以Smalltalk的教taught。老师认为最好的方法是先使用一种“纯”的OO语言,然后再使用一种更流行的语言(在学期末我们做了一点C ++)。

通过这种方法,最好还是从纯OO开始,尽管现在我们有了Java和C#,两者都是“近乎纯净的” OO —足够接近,您可以忽略它们的非OO功能,并将自己限制在语言的Pure-OO子集中。



3

我担任软件工程师已有好几年了。我听说人们曾多次提起Smalltalk,并且肯定自1980年左右就诞生了Smalltalk,但它似乎从未成为软件主流的那些语言之一。有点像Objective C,CLIPS,PL / I等,您可能听说过,但大多数人从未编程过。

除非我需要从事特定的工作,否则我可能不会花时间学习Smalltalk。几年前,我简要回顾了一些Smalltalk教程和示例,对于OO编程的某些方面,它似乎具有明显的优势(例如消息概念看起来很酷)。但可悲的是,它不是主流,并且似乎没有获得很大的发展势头。


3
Objective-C ...不要认为该声明截至2012
sjas

@sjas多么真实!现在,Smalltalk的所有需求都是大型开发商创建一个新的设备利基市场,并指定Smalltalk作为为该设备编写应用程序的事实上的语言!
Ogre Psalm33

2

这个线程对我来说已经很实际了。我正在计划将软件迁移到Web应用程序。这是一个基于数据库的软件。我正在特别检查其他选择1)Rails 2)Seaside

如果我能获得Gemstone / S作为数据库的数据,我也会考虑的。因此对我而言,这意味着我必须比以前学习Smalltalk(更好)。因为这可能是我未来15年的工作。您将(并且不应)使用您不喜欢那么长时间的软件;-)。我给人的印象是Gemstone / S是“杀手级”应用程序之一。但是对象的持久性仍然是一个非常困难的领域。


2

1)是的!学习语言总是好事。如果您要学习一种语言,请使其成为一种强大而有影响力的语言,可以轻松,快速地学习它。

Smalltalk仍然是学习面向对象概念的杰出语言和环境。

它是所有对象,一直向下。这使工作方法真正一致。

整数是类整数的实例。字符串是字符对象的集合。类是它们定义的类的单例实例对象。

控制结构通过将get消息发送到Class Boolean实例来工作。

甚至匿名方法(代码块,又名块)都是对象。

一切都通过向对象发送消息来完成。语法可以放在明信片上。

概念的清晰性及其在Smalltalk中的实现意味着您可以开发直接转移到Java,Ruby和C#中的思维方式。我希望Python也是如此。

清楚地说明这些概念真是太好了,英国一所主要的大学使用Smalltalk每年培训5,000名面向对象计算的人。

吱吱5,刚刚被释放。它通过新的Cog / Spur VM获得了重大性能提升,该功能具有渐进式垃圾收集功能。

Pharo 4具有漂亮的干净桌面主题。下一个版本Pharo 5即将发布。它将转为使用Cog / Spur VM,在发行版中它将具有大约5,000个类,并且可以通过配置浏览器工具从网上轻松获得其他类包。

Squeak 5甚至在第一代Raspberry Pi上也表现出色,在新的5美元Raspberry Pi 0上几乎快50%。99美元即可购买Raspberry Pi 2,屏幕和保护套-运行成熟的,功能齐全的IDE。

在Smalltalk(例如Naiad和Spoon)中,正在对分布式分布式OO系统进行前沿研究。

世界上一些最大的公司数据库都在Smalltalk上运行-包括跟踪世界上60%的运输集装箱以及世界上最大银行的交易系统。

您可以将Smalltalk用作一种超级功能的CoffeeScript,使用Amber Smalltalk编写并转换为JavaScript,然后在浏览器中运行。

Squeak,Pharo和Amber都是免费的,开源的,开放许可的语言和环境。

Squeak和Pharo提供一次写入功能,可在MacOS,Windows和Linux的任何位置运行。(也可能是RiscOS)。

Dolphin Smalltalk牢固地针对本机Windows外观,使您可以编译完成工作的封闭.exe,以分发给最终用户。供应商对Dolphin的进一步开发已经停止,但它已完全起作用,并且像所有Smalltalks一样,被设计为可大规模扩展。(我是否提到过,Pharo现在有5,000个班级,而Squeak则是3,000个班级?Pharo是Squeak 3.9的分支)

**在以下位置有安装和启动Squeak,Amber,Pharo,Cuis和Dolphin的操作指南:** http://beginningtosmalltalk.blogspot.co.uk/2015/11/how-to-get-smalltalk- up-and-running.html

Seaside Web框架可在Squeak和Pharo上运行。与更传统的AidaWeb框架一样,它是一个很棒的成熟工具。

VisualAge,VisualWorks和Gemstone都提供企业级的健壮系统。Gemstone提供了一个具有事务和持久性的无限扩展的对象数据库。

2)是-我已经使用它了。

我通过开放大学学习了它,并立即在Ruby中工作(Pickaxe书籍的副本和我身边的库参考)。它对Java和Xerox Moo代码的帮助极大。

我刚刚返回它来编写应用程序,以控制管理和分发响应性的,大规模的多平台移动应用程序。

我希望很快我也将使用Amber重写我的JavaScript移动应用程序。


1

我真的不知道你在找什么。

如果您正在寻找另一种语言来编写,我认为那将在很大程度上取决于可用的库。我既不了解Ruby,也不了解Smalltalk,但是在Rails之类的应用程序上编写Ruby的最有效方法似乎可能不是Smalltalk。

如果您想学习Ruby背后的思想,这可能是一个很好的举措。我没有定量的东西,但是如果我不仅了解工具,还想了解工具背后的想法或它们的工作方式,那么我对使用工具(例如语言系统)总会感觉更好。

如果您想学习不同类型的面向对象的语言,则可能要学习Smalltalk(如果它与Ruby有很大不同),例如Java或C ++,也许还有Common Lisp对象系统。

如果您只是想学习不同的东西,Smalltalk可能是一个不错的选择。我还建议Common Lisp,其他人无疑会有其他建议(如今,您能否获得一个好的Forth系统?)。


很明显,您没有看过Seaside。显然,Seaside是编写Ruby-on-Rails这类应用程序的最有效方法。
2009年

没有看过Seaside,也没有使用Ruby或Smalltalk,所以这是一般性建议。感谢您指出海边。
David Thornley,2009年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.