我最近讀王垠的部落格,裡面有些文章使我很受益。他總結了程式語言設計上的兩個問題:一是片面追求短小,用C語言做例子;二是試圖容納世界,用python做例子。一般來講,能設計語言的人,都是高手,特別是設計出來的語言用的人多,這些語言的發明者,可以說都是頂尖的人才,其智力、專業程度都是頂尖的。但往往一門語言的設計者,都是一個人。一個人,又是頂尖的人,就很容易存在一個想法:如何彰顯自我。我設計的這門語言,假如和別人設計的一樣,不搞些智力上的特色出來,怎麼能顯示出我的牛逼之處?
作為一門程式語言,如果才能搞些智力上的特色呢?最明顯的就是比誰的更短。這種思維很自然的泛化到使用這門語言的程式員身上,你那個要寫十行,我這個只一行就搞定,牛逼吧,把寫得長等同於寫得差,寫得短等同於寫得好,甚至往智力上去延伸。於是在以前C為王的時代,很多人都追求程式寫得短,結果搞得可讀性很差。自從JAVA興起,這種比短的思維才被壓住。另一個就是談哲學,python喜歡談哲學,於是有了王垠所說的,要容納世界上三隻手兩個頭的人。對於稍大一點的工程,python的這個特性會使得程式不可控,幾乎變得不可用,說是畫蛇添足,有害無益不為過。
一門程式語言的設計者,其設計思想,思維方式,或多或少會影響程式員。於是程式員多多少少都有追求短小和容納世界的毛病。追求短小在C語言裡比較常見,而容納世界在JAVA裡面比較常見,產生的問題更嚴重更深遠。在我看來,前幾年JAVA界流行過度設計,類似SSH的架構就是試圖容納世界的產物。架構的設計思想,比如說,可以隨便更換資料庫,可以替換中介層,可以多種展示方式,不能說是錯誤的思想,但是實現手段帶來了很大的複雜度。於是又引出了另一種思維,把越複雜的東西給折騰會,就顯得自己智力超群,以此換來“優越感”。
中國有句古話叫文人相輕,意思是文人之間互相看不起,覺得別人寫的文章不如自己的。寫程式有點類似寫文章,所以程式員之間也有互相看不起的毛病。經常有些人看幾眼別人的代碼就說寫得差,於是我經常和人說,技術人員不要為難技術人員,不要以彰顯自我的心態來看人,要以開放的心態大家共同提高。
另外,很多人注重技術,而不注重產品,大的東西能搞好,但是細節就不願去搞,結果搞成80%,後面20%遲遲不能完善,只要沒有完善,就不是一個產品,不是產品就不能營利,不能營利就沒有價值。技術構成產品,但是產品不等於技術,技術一定要形成產品才有價值,這才是我們做為技術人員的價值體現。