軟體的複雜度就像細菌的抗藥性一樣,依然在持續增加。當萬古黴素開始壓制不住金黃色葡萄球菌,物件導向漸漸讓軟體開發力不從心,我們應該如何是好? 面對越來越複雜的軟體開發需求,我們需要更高的抽象層。過去二十多年來,我們將物件導向(Object-Oriented Programming,OOP)和元件(Components)的觀念,注入大多數的主流命令式編程語言(Imperative Programming,例如BASIC、C、Pascal)。採用這些技術可以降低軟體開發的複雜度(Complexity),增加再用性(Reusability),於是我們著實過了好一陣子安穩的生活。
越來越複雜的專業領域知識、越來越多元的異質平臺、越來越普遍的網路環境和多核心電腦,這些都會提升軟體開發的複雜度,我們再度陷入困境。忽然發現,古老的函數編程(Functional Programming,FP)可以解決這個階段的許多問題,原來FP是現代編程問題的一帖良方。這使得最近函數編程忽然又被炒熱,成為許多語言設計者的最愛。
相較於OOP是往真實世界的方向進行抽象,FP卻是往數學的方向進行抽象。FP的理論基礎是來自Lambda Calculus,而Lambda Calculus同時賦予FP簡單性和威力。當然除了Lambda Calculus之外,方便的List處理、自動記憶體管理、Meta-Programming也都是函數式編程語言常見的特性。
提到函數編程,就不能不提1958年被創造出來的LISP(List Processing),因為它是函數編程語言的始祖。暢銷書《駭客與畫家》(Hackers and Painters)的作者Paul Graham提到,LISP是許多公司成功的祕訣,因為透過LISP,他們可以用精簡的人力,在很短的時間內,開發出威力強大的系統。
全文>>
沒有留言:
張貼留言