Gordius, the King of Phrygia, once tied a knot that no one could untie. It was said that whoever solved the riddle of the Gordian Knot would rule all of Asia. So along comes Alexander the Great, who chops the knot to bits with his sword. Just a little different interpretation of the requirements, that’s all…. And he did end up ruling most of Asia.
核心概念#
你偶爾會在專案中遇到非常棘手的難題——某個工程問題你就是找不到突破口,或者某段程式碼比你想像的難寫得多。也許它看起來不可能。但它真的那麼難嗎?
想想現實世界的謎題——那些巧妙的小木頭、鐵絲或塑膠拼圖。你拉環、塞 T 形塊,很快發現顯而易見的解法行不通。但即使你知道不行,人們還是一遍又一遍地嘗試同樣的方法,「想」著一定有辦法。
當然不行。解答在別處。解開謎題的秘密在於:識別真正的(而非想像的)約束條件,並在其中找到解決方案。
真正的約束 vs. 先入為主的觀念#
有些約束是絕對的;有些僅僅是先入為主的觀念。絕對約束必須被尊重,無論它們看起來多麼不合理。但另一方面,正如亞歷山大所證明的,某些看似約束的東西可能根本不是真正的約束。許多軟體問題也同樣狡猾。
自由度#
流行的「跳出框框思考」其實不完全準確。如果「框框」是約束和條件的邊界,那麼訣竅是找到那個框框——它可能比你想的大得多。
解開謎題的關鍵是:既要認識到施加在你身上的約束,也要認識到你確實擁有的自由度——因為你的解決方案就在那些自由度中。
Tip 81 - Don’t Think Outside the Box – Find the Box(不要在框框外思考——找到框框)
面對棘手的問題時,列出你面前所有可能的途徑。不要否定任何東西,無論它聽起來多麼不可用或愚蠢。然後逐一檢查列表,解釋為什麼某條路不能走。你確定嗎?你能證明嗎?
以特洛伊木馬為例——一個對棘手問題的新穎解決方案。你可以打賭「從正門進入」最初一定被認為是自殺行為。
分類和排定約束的優先順序。就像木工開始一個專案時,先切最長的木頭,然後從剩餘的木頭中切較小的。同樣地,我們要先識別最嚴格的約束,然後在其中嵌入其餘的約束。
讓開自己的路!#
有時你會發現自己正在解決一個比想像中難得多的問題。也許你感覺走錯了路——一定有比這更簡單的方法!也許你已經落後進度了,甚至絕望認為這個「不可能」的問題永遠無法解決。
這是去做點別的事情的理想時機。去散步、遛狗、睡一覺。
你的意識腦知道這個問題,但意識腦其實很笨(沒有冒犯的意思)。所以讓你真正的大腦——那個隱藏在意識之下的驚人聯想神經網路——有點空間。你會驚訝於當你刻意分散注意力時,答案竟然常常自己跳出來。
Psychology Today 報導:被分散注意力的人在複雜問題解決任務上,比投入有意識努力的人表現更好。
如果你還是不願意先放下問題,那下一個最好的辦法可能是找人解釋這個問題。通常光是談論它帶來的分散注意力就會引導你走向啟發。讓他們問你這些問題:
- 你為什麼要解決這個問題?
- 解決它的好處是什麼?
- 你遇到的問題是否與邊界情況有關?你能消除它們嗎?
- 是否有一個更簡單的相關問題可以解決?
這是「小黃鴨除錯法」(Rubber Ducking)的另一個實際應用。
幸運偏愛有準備的心智#
Louis Pasteur 據說講過:
Dans les champs de l’observation le hasard ne favorise que les esprits preparés. > (When it comes to observation, fortune favors the prepared mind.)
這對解決問題也是如此。為了擁有那些「啊哈!」時刻,你的非意識腦需要大量的原始素材——先前的經驗來貢獻答案。
一個餵養大腦的好方法是給它回饋——什麼有效、什麼沒效。使用工程日誌(Topic 22)是一個很好的方式。
永遠記住*《乘乘指南》*封面上的建議:DON’T PANIC(不要恐慌)。
相關章節#
- Topic 5,夠好的軟體
- Topic 37,聆聽您的蜥蜴腦
- Topic 45,需求坑