資源描述:
《方法論、方法論程序員的阿喀琉斯之踵》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、以前,我認為一個事物對我沒有直接用途的時候就不會去理會它,心理學上說我們都戴著自己的認知偏見的有色眼鏡去有選擇性地看待這個世界,紛繁的信息經(jīng)過我們的認知圖式過濾之后便成為少量有序的事件,所以我們都在有強烈選擇性地關(guān)注一些事物和忽視另一些事物,然而,這樣可能會導致喪失一些很有價值的信息,而總是將知識面停留在自己的小世界中一一當然這倒也不是說看到什么都要湊上去學一學。如何在這兩者中間取得折中,我覺得一個好的辦法是先簡略地想一下這是個什么東東,他的本質(zhì)是什么,出現(xiàn)是為了滿足什么需求,等等比較“高層”的問題(即"What”和“Why”而不是“How”),這些問題應該是可以通過簡單的調(diào)研和
2、思考得出結(jié)論的,至于背后的技術(shù)細節(jié),如果你打算入行,就可以去學,如果不打算的話則可以免了,至少前面的思考和簡單的調(diào)研能夠一定程度上保證當有價值的信息或機會擺在你面前的時候你不會把眼睛蒙上走開,并且多做做這類思考對于思維的廣度也很有價值。最近我開始認為,最佳的學習方法就是先廣度優(yōu)先遍歷(先弄清What和Why),然后擇最合適的分支深入(How)(算法牛人DD同學在TopLang上的一個帖子里而也提到類似的想法,剛進大學就能夠如此清晰地看清前方道路的走法,我對DD很佩服)。方法論看似是個很抽象的東西,并且的確有一些方法論是抽象到over-generalized(泛化過度)的地步,然而
3、說實話在實踐當屮我總是發(fā)現(xiàn)(正確的)方法論是再現(xiàn)實不過的東西,比如一個大家都明白的道理是:如果方向走錯了,那么做的功就基本全白費了(還有比如“如果方法對頭,就能事半功倍,反之可能多走很多彎路”)一一然而現(xiàn)實中有多少人能夠真正實踐這個方法呢?絕大多數(shù)人都是只顧解決眼前問題,抓了這頭丟了那頭,更多人是不知道間題是什么,只管把頭腦中能聯(lián)想到的一個以前類似情況下的類似方案套用上來。以前我總是覺得一個公司里面,CEO/CTO這樣的角色是基本擺設(shè),但我現(xiàn)在不這樣想了。在How層面把事情做好,做成一個精鉆的程序員,那頂多就是能把鉗子使好,這樣的事情很多人都能做到,熟能生巧嘛。換句話說程序員基本
4、上是去解決一個定義好的問題,去實施一個定義好的方案。然而決策問題就不一樣了,決策問題是需要去定義問題是什么,以及權(quán)衡最佳方案是什么,不管是決策技術(shù)架構(gòu)還是決策商業(yè)策略,都是非常復雜的思維過程,需要綜合和權(quán)衡大量的信息,這種能力就不是簡單楞著頭搞下去能練出來的了,很多時候需要抬起頭來看,免得只見樹木不見森林。(以上也是為什么我在討論組里面一篇帖子(什么是算法?為什么學習算法?以及學到什么程度?)中提到我覺得學數(shù)學學到精通未必就會思考日常決策問題的原因一一數(shù)學幾乎總是去解決一個定義好的問題,用的也都是定義好的嚴密的邏輯推導。然而現(xiàn)實中的問題是一個復雜系統(tǒng),諸多變量互相影響,如何權(quán)衡最
5、佳方案實際上是一個復雜的統(tǒng)籌規(guī)劃。更重要的是,你往往甚至都不知道問題是什么,能夠從紛繁的信息中抽象出問題,是一種極大的能力。這里推薦《你的燈亮著嗎?》和《失敗的邏輯》)當然,我自己還沒能到這個層面,尚需要不斷實踐和總結(jié),所以只能稍微的談一點感受,再往下扯只怕就會流于空泛了。這一點上我還是舉一個程序員們喜聞樂見的例子吧,在程序員眼睛里面,做一個項目,也許首先想到的是用什么語言,什么框架,什么庫,在這個方向上那就是什么看上去牛B用什么,恨不能都用haskelLlisp來寫才爽,用Java?那多沒意思啊,Java那坨弱智語法我小學的弟弟都能掌握,也沒啥牛B的語言特性,忒沒成就感(只可惜
6、真正判別弱智與否的并非用什么語言技術(shù),而是做出什么產(chǎn)品滿足什么需求)。這就是屬于只考慮單個孤立因素的簡單(或者說Naive的)決策,這個因素就是一一只要讓我自己感覺爽一一只可惜并不是讓自己感覺爽的做法就是真正解決問題的做法,始終要弄清問題是什么,在后者意義上,一些對于技術(shù)型程序員往往沒有吸引力的話題其實有著極其重大的價值——比如什么吋候設(shè)計,什么吋候重構(gòu),什么吋候集成,再往上一層其實這些又都是次級問題,首要的問題還是這個產(chǎn)品滿足什么需求,有什么市場(即這件事情值不值得做),有一句話想必很多人常聽說,如果不知道要做什么,套上十二層架構(gòu)也無濟于事,方法永遠不是因,而是果(我在以前的另
7、一篇文章“Eai1ingtoseetheBigPicture-Mistakeswemakewhenlearningprogrammingn中也闡述了類似的觀點)。再舉個例子,如果我想給我的網(wǎng)站做一個feature,我認為這個feature技術(shù)上很牛很強大,而且剛好有機會使用一下我最近修煉的某某framework和某某語言,而且這玩意很有挑戰(zhàn)性,還不是一般人能夠做得了的,綜合以上三點,我立時覺得心癢難耐摩拳擦學。然而實際上這個問題應該怎樣分析呢?首先,考慮到以上三點,這將會是一個投