說說約束與代碼實現

近日,讀劉宇博(liuyubobobo)老師發表在微信公衆號”是不是很酷“文章”無解“時,很有感觸。摘錄幾句如下:

”原來,這個世界上有的問題,是沒有解的“;

”不合理的約束合在一起,讓我們的問題無解“;

”一個問題爲什麼沒有解?因爲問題的條件限制。說的文縐縐一點,叫做約束“;

”在大多數情況下,解決方案,都是改變約束“;

”我們必須承認:這個世界上很多問題,就是無解的。數學尚且如此,生活更是如此。“

有興趣的朋友可以按圖索驥,去看一看這個文章,挺不錯的。讓我感慨的是,這篇文章讀後,能讓人釋懷,舒坦。不會再糾結鑽牛角尖去跟很多問題較勁,跟自己較勁,跟生活較勁。妥協、臣服有時是睿智豁達的表現。

以前我和一隱士老師在網上學象棋,老師總結的下棋理論中就提到過,象棋中招法着重對不對,而不是佳不佳。的確,在不同的盤面局勢下,有不同的招法,都是我們通常意義上的對的招法;但當你把對的要求變得嚴苛,昇華到”最優解“的層面上去理解時,這時追求的便是最”精確“、效率最高的招法,那麼此時所謂的對招,可能就那麼爲數不多的一、二招。而這種對的招法,老師強調的就是追求自己每一當前回合所面對的盤面形勢下,下出最精確的一招(與日本動漫《棋魂》裏,佐爲追求的”神之一招“不謀而合)就是由盤面形勢(約束條件)決定的。

結合劉宇博老師的文章,結合編程實踐,我們在編碼實現一個用例時,可能有多種看似可行的方案,但真要細琢磨起來,摳細節、提高要求,現有的實現可以說完全”不對“。就比如最近寫的一個項目,上層把數據post過來,我對數據做入庫、上傳ftp等不同處理,之後return迴響應碼;其實仔細琢磨需求的隱含含義,會發現這是一個典型的觀察者模式,並且,上層不關心不同觀察者對於數據的響應處理方式和處理結果(只關心數據有沒有到達接口被成功接收),那麼這時在接收了數據之後,其實應該採用異步編程模型去處理數據,然後直接把收到數據的響應返回給上層。

再比如,我們追求好的代碼。可是怎麼樣定義好代碼呢?比如java遍歷一個list,我閒來無事做實驗,用5種方式完成不同數量級的循環遍歷,最後驚奇的發現,無論在哪種數量級下,優雅簡潔ambda表達式,其性能效率是最差的;而寫起來比較原始的iterator+while循環,是最快的。那麼追求性能還是代碼簡潔就是個不同約束條件面向的問題了。

所以,不必糾結,代碼語言特性、設計模式、算法等終歸都是手段、工具,在不同約束下,把問題解決漂亮纔是真的。

發佈了25 篇原創文章 · 獲贊 10 · 訪問量 9673
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章