最近讀到一本書,說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不再扮演重要角色,但它又恢復了一些市場。
