Russel Winder
程式設計心理學#
**程式設計心理學(the psychology of programming)的研究早已指出:程式設計專業能力與程式設計師能夠自如運用的不同程式設計範式(programming paradigm)**數量直接相關——不是只知道或略知一二,而是能真正用它來開發。
語言如何限制思維#
每個程式設計師都從一種語言起步,而那種語言會對程式設計師的思考方式產生主導性影響。無論累積了多少年經驗,如果始終使用同一種語言,就只會知道那種語言。單一語言的程式設計師,其思維受限於那種語言。
跨語言的挑戰#
- 學習第二種語言會帶來挑戰,特別是當它具有不同的**計算模型(computational model)**時
- C、Pascal、Fortran 都共享相同的基本計算模型;從 Fortran 切換到 C 只有少許挑戰
- 從 C 或 Fortran 轉到 C++ 或 Ada 會帶來根本性的挑戰
- 從 C++ 轉到 Haskell 是重大且顯著的挑戰
- 從 C 轉到 Prolog 則是非常明確的挑戰
程式設計範式#
我們可以列舉許多計算範式:procedural(程序式)、object-oriented(物件導向)、functional(函數式)、logic(邏輯式)、**dataflow(資料流)**等。在這些範式之間切換能帶來最大的挑戰。
跨語言交叉施肥#
跨語言的**交叉施肥(cross-fertilization)**效果巨大:
- 一種語言中的慣用解法在另一種語言中可能行不通
- 嘗試將慣用法從一種語言**移植(port)**到另一種語言,能同時加深對兩種語言和問題本身的理解
- 最明顯的例子是宣告式(declarative)風格在命令式語言中的運用——熟悉函數式程式設計的人,即使使用 C 語言也能輕鬆運用宣告式方法
- C++ 的泛型程式設計(generic programming)幾乎必須使用宣告式表達方式
實踐建議#
每位程式設計師都應該至少精通兩種不同範式的程式設計,理想情況下至少五種。程式設計師應該始終有興趣學習新語言,最好是來自不熟悉的範式。即使日常工作始終使用同一種語言,從其他範式的交叉施肥也能提升對該語言的使用水準。
學習一門新語言不能只靠一週的培訓課程——通常需要數個月的持續使用,才能真正掌握一門語言的慣用法(idioms)和計算模型,而非僅僅是語法。