我認識的許多軟體工程師,跟我一樣,對於管理『人』這件事,總是有點抗拒。另一方面, 就我個人的經驗中,軟體工程師的開發工作之中,也含有許多管理的哲學。換言之,軟體工程師往往也身為經理人而不自知,只是他們管理的不是『活生生的人』,而是『軟體開發的知識』。以下可以舉幾個例子來說明:函數命名原則與功能性分權Common Lisp 裡,很常見的兩個函數,一個是 CAR ,一個是 CDR 。CAR 是 copy address register 的縮寫。 CDR 是 copy decrement register 的縮寫。這兩個函數,在 Clojure 裡,被改成了 first 和 rest 。哪一個命名比較好呢?我想大家心裡的答案應該都跟我一樣,是 first 和 rest 比較好。CAR 與 CDR 的命名,它描述的是「實作」(implementa
有個關於鋼琴家的故事是這樣子: 某樂譜裡最華麗的樂章,需要人類極限的超快指法才能彈奏。有位鋼琴家在他年老時,發現自己的體力衰退了,手指無法彈出超高速,不由得為了無法演奏這段華麗的樂章而困擾不已。所幸,不久之後,這位鋼琴家找到了很聰明的解決方案: 「透過人耳的相對節奏感來解決問題。」由於人類的耳朵對於音樂的節奏是相對的感受,所以這位鋼琴家在演奏到接近最華麗的樂章前,就先把音樂節奏的速度放慢 1/8 ,等到演奏到最華麗的樂章時,再發揮自己的最高速來彈奏。對於聽眾來說,由於之前聽到音樂的是略慢的,於是會感到強烈的反差,覺得華麗的樂章極快。甚至聽眾還會覺得,音樂家到老年時, 彈奏的技巧更高超了,最華麗的那一段樂章還比他年輕時彈得更快。我今年 37 歲,在軟體業來講,已經算是大齡的軟體工程師。體力、腦力也不如現在二十多歲的年輕人。函數式編程,對於我來講,就像是上頭故事中鋼琴家的犯規技巧,讓我可以比十年前產出更多、更正確。那什麼是函數式編程呢? 光是這個定義,就有很多不一致的看法,不一致的看法部分,已經超出本文的篇幅。在本文裡,我想探討一個問題: 「函數式編程,是如何