天天看點

長短相形

“天下皆知美之為美,斯惡已;皆知善之為善,斯不善已。故有無相生,難易相成,長短相形,高下相傾,音聲相和,前後相随。是以聖人處無為之事,行不言之教。萬物作焉而不辭,生而不有,為而不恃,功成而弗居。夫唯弗居,是以不去” ———《道德經》

小時候,常被人教誨,要揚長避短,于是就形成了一種思維定勢:長處永遠是好的,短處就永遠見不得人。長大後讀《道德經》,才有所明悟:長短相形,長無恒長,短無恒短。

屈原在《蔔居》中說:“夫尺有所短,寸有所長,物有所不足,智有所不明,數有所不逮,神有所不通,用君之心,行君之意”。說的也是同一個道理,長和短是會互相轉化的,做人做事,遵循你的内心就好了,如果要無所不用其極的想做好一件事,反而可能會取得相反的效果。

成為一名程式員是我從高中時代就有的興趣和理想,經過各種曲折,終于是得償所願了,寫代碼确實給我帶來了很多快樂和心靈的充實。随着時間的推移,我逐漸收獲了程式設計帶給我的另一種快樂:以程式設計悟道修心。我知道我說的這話玄而又玄的,很容易被人誤解成一名「神棍」。當然,如果是跟我有相同感受的有緣人,能明白我說什麼。不明白的也不用急,可以跟着我的思緒一起思考一下。

江湖中有一句流傳已久的話:“PHP是最好的語言”。 絕大部分人是把這句話當作一句笑料,一種嘲諷,經常在各種場合來使用,當然也包括曾經的我。但是也有小部分人會問:“為什麼PHP技術群裡很少有人去探讨文法特性呢?” 。但是反觀其他語言的技術群,比如C++,比如Haskell,聊的最多的就是文法。噴子請不要誤會,我并沒有要黑哪個的意思。

這其實是我思考的一個點:“PHP文法簡單,是事實,沒有那麼多高大上的文法特性,可能相比于C++/Haskell/Ruby/Python等語言沒有那麼多思想内涵,從這個角度來看,這一點正是PHP的短闆。可恰恰是這個短闆,成就了PHP”。恰恰是因為PHP文法簡單,沒有那麼多複雜的概念,沒什麼好讨論的,捋起袖子就是幹,反而會更加聚焦于業務和領域層面的問題。

反觀Golang語言也是類似,見過很多人吐槽Golang,也就那麼一句:“if err != nil”, 或者說“golang怎麼沒有泛型?“,但實際Golang技術群裡也很少有人讨論具體的文法,因為沒什麼好讨論的,就是那麼點内容。Golang簡潔的設計,是很多人眼裡的短處,但其實也是它自身的長處。君不見,Golang社群生産力多麼強?噴子請不要誤會,我不是Golang社群派來的,目前我也沒用Golang。

有一段時間,我對軟體架構比較上心,還經常把軟體和建築去類比,甚至還找我做建築行業的朋友去咨詢,有哪些建築方面的書可以閱讀。朋友跟我說了一句話:”我們建築行業,是絕不能出bug的,如果出了bug,付出的就是生命的代價。軟體和建築還是不一樣的”。 我當時并沒有對這句話有過多的考慮,隻是覺得,不都是架構嗎?我學習的是架構的「神」,又不是要學建築,就沒有進行深入的思考。

後來機緣巧合,又讓我回到了這個問題上,這一次的思考讓我有所明悟。建築行業,正是因為要避免付出生命的代價,是以會在項目實施之前會做好非常詳細的規劃,藝術性和工程性都需要保證,然後還需要嚴格的監督才能傳遞一個完整的工程。而軟體架構不一樣,軟體需求是經常變化的,軟體架構在保證穩定的同時,還需要有一定的靈活性和可擴充性,這和建築行業有本質的不同。

是以,瀑布模型在建築行業,是極具優勢的,因為它安全,但是拿來軟體行業,就不一定了,除非是對安全有嚴格要求的項目。尺有所短,寸有所長,要看它所處的環境或領域去取舍,是以我們需要靈活。

這種哲學性的思考,正如我前面所說的「悟道修心」,也是現階段,程式設計所帶給我的另一種樂趣。其實再往大了思考,整個人類的發展不也是這樣嗎? 人類的大腦計算速度比不過計算機,行動也隻是線性的,從實體學方面考慮,人類簡直就是渣渣,但是為什麼能發展出高度發達的文明呢?正是因為這種限制,讓人類擁有了抽象的能力,這種能力可以讓人類簡化萬物進而對宇宙有更進一步的認知。宇宙有多少顆星星?我們不需要一顆一顆數,我們隻需要找到規律做出預估就可以了。