小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

方法論、方法論——程序員的阿喀琉斯之踵

 ShangShujie 2010-04-16

方法論、方法論——程序員的阿喀琉斯之踵

以前,我認(rèn)為一個(gè)事物對(duì)我沒(méi)有直接用途的時(shí)候就不會(huì)去理會(huì)它,心理學(xué)上說(shuō)我們都戴著自己的認(rèn)知偏見(jiàn)的有色眼鏡去有選擇性地看待這個(gè)世界, 紛繁的信息經(jīng)過(guò)我們的認(rèn) 知圖式過(guò)濾之后便成為少量有序的事件,所以我們都在有強(qiáng)烈選擇性地關(guān)注一些事物和忽視另一些事物,然而,這樣可能會(huì)導(dǎo)致喪失一些很有價(jià)值的信息, 而總是將知識(shí)面停留在自己的小世界中——當(dāng)然這倒也不是說(shuō)看到什么都要湊上去學(xué)一學(xué)。如何在這兩者中間取得折中,我覺(jué)得一個(gè)好的辦法是先簡(jiǎn)略地想一下這是 個(gè)什么東東,他的本質(zhì)是什么,出現(xiàn)是為了滿足什么需求,等等比較“高層”的問(wèn)題(即“What”和“Why”而不是“How”),這些問(wèn)題應(yīng)該是可以通過(guò) 簡(jiǎn)單的調(diào)研和思考得出結(jié)論的,至于背后的技術(shù)細(xì)節(jié),如果你打算入行,就可以去學(xué),如果不打算的話則可以免了,至少前面的思考和簡(jiǎn)單的調(diào)研能夠一定程度上保 證當(dāng)有價(jià)值的信息或機(jī)會(huì)擺在你面前的時(shí)候你不會(huì)把眼睛蒙上走開(kāi),并且多做做這類思考對(duì)于思維的廣度也很有價(jià)值。最近我開(kāi)始認(rèn)為,最佳的學(xué)習(xí)方法就是先廣度 優(yōu)先遍歷(先弄清What和Why),然后擇最合適的分支深入(How)(算法牛人DD同學(xué)在TopLang上的一個(gè)帖子里面也提到類 似的想法,剛進(jìn)大學(xué)就能夠如此清晰地看清前方道路的走法,我對(duì)DD很佩服)。

方法論看似是個(gè)很抽象的東西,并且的確有一些方法論是抽象到 over-generalized (泛化過(guò)度)的地步,然而說(shuō)實(shí)話在 實(shí)踐當(dāng)中我總是發(fā)現(xiàn)(正確的)方法論是再現(xiàn)實(shí)不過(guò)的東西,比如一個(gè)大家都明白的道理是:如果方向走錯(cuò)了,那么做的功就基本全白費(fèi)了(還 有比如“如果方法對(duì)頭,就能事半功倍,反之可能多走很多彎路”)——然而現(xiàn)實(shí)中有多少人能夠真正實(shí)踐這個(gè)方法呢?絕大多數(shù)人都是只顧解決眼前問(wèn)題,抓了這 頭丟了那頭,更多人是不知道問(wèn)題是什么,只管把頭腦中能聯(lián)想到的一個(gè)以前類似情況下的類似方案套用上來(lái)。以前我總是覺(jué)得一個(gè)公司里面,CEO/CTO 這樣的角色是基本擺設(shè),但我現(xiàn)在不這樣想了。在 How 層面把事情做好,做成一個(gè)精鉆的程序員,那頂多就是能把鉗子使好,這樣的事情很多人都能做到,熟能生巧嘛。換句話說(shuō)程序員基本上是去解決 一個(gè)定義好的問(wèn)題,去實(shí)施一個(gè)定義好的方案。然而決策問(wèn)題就不一樣了,決策問(wèn)題是需要去定義問(wèn)題是什么,以及權(quán)衡最佳方案是什么,不管 是決策技術(shù)架構(gòu)還是決策商業(yè)策略,都是非常復(fù)雜的思維過(guò)程,需要綜合和權(quán)衡大量的信息,這種能力就不 是簡(jiǎn)單楞著頭搞下去能練出來(lái)的了,很多時(shí)候需要抬起頭來(lái)看,免得只見(jiàn)樹(shù)木不見(jiàn)森林。(以上也是為什么我在討論組里面一篇帖子(什 么是算法?為什么學(xué)習(xí)算法?以及學(xué)到什么程度?)中提到我覺(jué)得學(xué)數(shù)學(xué)學(xué)到 精通未必就會(huì)思考日常決策問(wèn)題的原因——數(shù)學(xué)幾乎總是去解決一個(gè)定義好的問(wèn)題,用的也都是定義好的嚴(yán)密的邏輯推導(dǎo)。然而現(xiàn)實(shí)中的問(wèn)題是一個(gè)復(fù)雜系 統(tǒng),諸多變量互相影響,如何權(quán)衡最佳方案實(shí)際上是一個(gè)復(fù)雜的統(tǒng)籌規(guī)劃。更重要的是,你往往甚至都不知道問(wèn)題是什么,能夠從紛繁的信息中抽象出問(wèn)題,是一種 極大的能力。這里推薦《你的燈亮 著嗎?》《失敗的邏輯》

當(dāng)然,我自己還沒(méi)能到這個(gè)層面,尚需要不斷實(shí)踐和總結(jié),所以只能稍微的談一點(diǎn)感受,再往下扯只怕就會(huì)流于空泛了。這一點(diǎn)上我還是舉一個(gè)程序員們喜聞 樂(lè)見(jiàn)的例子吧,在程序員眼睛里面,做一個(gè)項(xiàng)目,也許首先想到的是用什么語(yǔ)言,什么框架,什么庫(kù),在這個(gè)方向上那就是什么看上去牛B用什么,恨不能都用 haskell、lisp 來(lái)寫才爽,用 Java?那多沒(méi)意思啊,Java 那坨弱智語(yǔ)法我小學(xué)的弟弟都能掌握,也沒(méi)啥牛B的語(yǔ)言特性,忒沒(méi)成就感(只可惜真正判別弱智與否的并非用什么語(yǔ)言技術(shù),而是做出什么產(chǎn)品 滿足什么需求)。這就是屬于只考慮單個(gè)孤立因素的簡(jiǎn)單(或者說(shuō) Naive 的)決策,這個(gè)因素就是——只要讓我自己感覺(jué)爽——只可惜并 不是讓自己感覺(jué)爽的做法就是真正解決問(wèn)題的做法,始終要弄清問(wèn)題是什么,在后者意義上,一些對(duì)于技術(shù)型程序員往往沒(méi)有吸引力的話題其實(shí) 有著極其重大的價(jià)值——比如什么時(shí)候設(shè)計(jì),什么時(shí)候重構(gòu),什么時(shí)候集成,再往上一層其實(shí)這些又都是次級(jí)問(wèn)題,首要的問(wèn)題還是這個(gè)產(chǎn)品滿足什么需求,有什么 市場(chǎng)(即這件事情值不值得做),有一句話想必很多人常聽(tīng)說(shuō),如果不知道要做什么,套上十二層架構(gòu)也無(wú)濟(jì)于事,方法永遠(yuǎn) 不是因,而是果(我在以前的另一篇文章“Failing to see the Big Picture – Mistakes we make when learning programming” 中也闡述了類似的觀點(diǎn))。

再舉個(gè)例子,如果我想給我的網(wǎng)站做一個(gè) feature ,我認(rèn)為這個(gè) feature 技術(shù)上很牛很強(qiáng)大,而且剛好有機(jī)會(huì)使用一下我最近修煉的某某 framework 和某某語(yǔ)言,而且這玩意很有挑戰(zhàn)性,還不是一般人能夠做得了的,綜合以上三點(diǎn),我立時(shí)覺(jué)得心癢難耐摩拳擦掌。然而實(shí)際上這個(gè)問(wèn)題應(yīng)該怎樣分析呢?首先,考 慮到以上三點(diǎn),這將會(huì)是一個(gè)投入相當(dāng)大的項(xiàng)目,那么其收益就必須要對(duì)得起這個(gè)投入,技術(shù)上很牛不代表商業(yè)上就牛,再牛再難做的 feature 如果不能帶來(lái)商業(yè)價(jià)值那就是負(fù)收益??偠灾?,

1. 一件事情僅僅讓你 感覺(jué)挺牛不代表這件事情就是值得做的;
2. 一件事情僅 僅讓你感到很有興趣并不代表這件事情就是值得做的。

這兩句話和我們?nèi)粘5恼J(rèn)識(shí)并不沖突,其實(shí)我們幾乎總可以找到既有價(jià)值、又有趣、又有足夠挑戰(zhàn)性的工作。舉個(gè)例 子,本科數(shù)學(xué)學(xué)得精純無(wú)比的同學(xué)有沒(méi)有偶爾也會(huì)覺(jué)得盲目呢?做這些題目到底有什么實(shí)際用途呢?這就像是你總是在磨一把刀,磨得閃閃發(fā)光鋒利無(wú)比,你可以向 別人炫耀自己的刀很牛B,但是刀是為了沖鋒陷陣血濺五步的,你也不想讓它折戟沉沙吧,不管是將數(shù)學(xué)用在數(shù)學(xué)物理上還是用在人工智能、機(jī)器學(xué)習(xí)、密碼學(xué)、通 信上,都是既讓人有成就感,同時(shí)又有意義和價(jià)值的事情。對(duì)我們程序員來(lái)說(shuō),你把一門語(yǔ)言玩得很精通,不僅知曉它所有的語(yǔ)法細(xì)節(jié),陷阱和缺陷,還了解它的底 層實(shí)現(xiàn)模型是如何。你覺(jué)得很牛很有成就感——的確,我們都會(huì)為一件自己做到了別人做不到的事情而感到自豪,然而反問(wèn)一句,除了情緒價(jià)值之外,這樣的事情在 本身的價(jià)值上有沒(méi)有你感覺(jué)到的那么牛呢?如果你只是在削鉛筆,那么何必磨一把倚天屠龍劍來(lái)?反之,如果你做的是一個(gè)本身功能很牛很創(chuàng)新很 有價(jià)值的軟件,那么語(yǔ)言技術(shù)其實(shí)完全是次要的,并不是看上去越眩越好,關(guān)鍵是選擇各個(gè)方面綜合考慮起來(lái)最合適的工具即可,瑞士軍刀也許 很丑,但對(duì)于叢林冒險(xiǎn)很實(shí)用就行。拿著一把屠龍寶刀去野外生存,同樣也不靠譜。

編程語(yǔ)言是為了實(shí)現(xiàn)軟件的,軟件是為了服務(wù)于人的。誠(chéng)然,了解一門語(yǔ)言的方方面面能夠使你更有效地使用它,然而另一方面,如果結(jié)果發(fā)現(xiàn)這門語(yǔ)言并不 何時(shí)來(lái)解決你手頭的問(wèn)題呢?受到投入的沉沒(méi)成本的 影響你一定覺(jué)得很不甘心吧?同理,由于你對(duì)一門工具投入了很多的精力,這門工具已經(jīng)和你的情感掛上了鉤,于是如果讓你來(lái)決策用什么工具來(lái) 完成一個(gè)任務(wù)的時(shí)候,你幾乎會(huì)毫無(wú)疑問(wèn)地想到使用你最熟悉而喜愛(ài)的那個(gè),這就是“當(dāng)你手頭拿的是一個(gè)錘子,任何東西看上去都像釘子”這 句話的一個(gè)解釋。原先的問(wèn)題是使用一門技術(shù)使得能夠性價(jià)比最高地實(shí)現(xiàn)要完成地產(chǎn)品,然而到你那里問(wèn)題就悄悄地變成了“使用一門技術(shù)讓我感 覺(jué)最爽”,問(wèn)題的所有其他需要綜合考慮的因素都被選擇性忽略掉了,所以如果你是一個(gè)語(yǔ)言技術(shù) fans ,那么幾乎毫無(wú)疑問(wèn)你會(huì)成為一個(gè)糟糕的決策者。最近,在學(xué)習(xí)和研究的方法論上我已經(jīng)聽(tīng)到不止一個(gè)人(參見(jiàn)《失敗的邏輯》和這里——一位諾貝 爾獎(jiǎng)得主的忠告(引言如下))忠告我們,不要為了工具而工具,忘記了工具的目的是什么。

…我們前面提過(guò)的顯微攝影專家,擅長(zhǎng)于拍矽藻的照片,動(dòng)物學(xué)家著迷于昆蟲(chóng)貝殼跟有美麗羽毛的鳥(niǎo)類。我們的愛(ài)書狂最高興的事 情,就是讀最新書和專論,他認(rèn)為這些東西很重要,而且很能夠刺激頭腦,可是別人沒(méi)辦法,找到另外一本同樣的書。我們博學(xué)的模范,經(jīng)過(guò)這種策略,讓他的朋友 驚奇,讓他的朋友佩服…

…沒(méi)有效率的科學(xué)家中,有一小類就是所謂的崇拜研究?jī)x器的狂人,他們對(duì)金屬的閃爍非常著迷,就像是夜鷹對(duì)它在鏡里的反影著迷一樣。他們非常仔細(xì)照顧 所崇拜的東西,把儀器拭擦得雪亮,可以當(dāng)鏡子使用,而且把它擺飾在最崇高的地方,就好像在教堂里面的圣壇…

CodingHorror 的作者最近在博客里面跟著 Steve Yegge 同學(xué)宣稱,如果有一件事情是他想教給程序員同學(xué)們的,那就是 Marketing 。無(wú)獨(dú)有偶,有一次吃飯的時(shí)候鮑志云同學(xué)也提到: Marketing Sense 是很重要的。其實(shí)也就是不要總想著寫牛代碼,用牛語(yǔ)言技術(shù),不要落入為技術(shù)而技術(shù)的怪圈,而是首先想明白做的事情有什么價(jià)值,先弄清做什么,為什么做,再 去想怎么做,這樣后面的功夫才花的有價(jià)值。

You won’t– you cannot– become a better programmer through sheer force of programming alone. You can only complement and enhance your existing programming skills by branching out. Learn about your users. Learn about the industry. Learn about your business.

當(dāng)然,最后必須聲明的是,不要矯枉過(guò)正,誤會(huì)以上的觀點(diǎn),以上觀點(diǎn)并不是說(shuō)學(xué)生時(shí)代做的基本功是不需要的,一些 非?;镜墓Ψ颍ㄈ缬?jì)算機(jī)體系結(jié)構(gòu)、數(shù)據(jù)結(jié)構(gòu)和算法、兩個(gè)主要流派(命令式和聲明式)的編程語(yǔ)言都使用了哪些主要的編程范式、對(duì)主流語(yǔ)言的優(yōu)缺點(diǎn)和適用場(chǎng) 合的了解等等)是有必要掌握牢靠的,因?yàn)橐环矫嫖覀儾⒉皇嵌寄苋プ雠袛嗯c決策,碼農(nóng)總是一個(gè)可靠的職業(yè)。另一方面對(duì)技術(shù)大方向的把握也是決策的基礎(chǔ)知識(shí), 只是不要掉進(jìn)無(wú)盡的技術(shù)漩渦,成為技術(shù)追星族。此外也許還有一個(gè)小小的好處就是如果被老板逼著用一門不熟悉的語(yǔ)言時(shí)不會(huì)很不痛快,因?yàn)?strong>真 正重要的事情是你完成的產(chǎn)品,而不是用的語(yǔ)言。

一個(gè)有趣的附錄

我們的思維有很多很多的弱點(diǎn),前文講的其實(shí)就是這樣的弱點(diǎn),更多更系統(tǒng)一點(diǎn)總結(jié)可以看下這 里,和這里。我一向認(rèn)為,正確的思 維方式,是一切高效學(xué)習(xí)的基礎(chǔ)。比如參見(jiàn)如下2個(gè)例子,錯(cuò)誤的思維方式得到的結(jié)論有大得多的可能性是謬誤。

[1] 人總喜歡沿襲以往習(xí)得的經(jīng)驗(yàn),并通過(guò)類比來(lái)進(jìn)行外推。我第一次在一個(gè)地鐵終點(diǎn)站坐地鐵的時(shí)候,看著從遠(yuǎn)方開(kāi)來(lái)的地鐵,我心生疑惑——“這車每節(jié)車廂都這么 長(zhǎng),待會(huì)怎么調(diào)頭呢(我心說(shuō)沒(méi)看到鐵軌終點(diǎn)有一個(gè)大大的供調(diào)頭的U形彎啊)?”,當(dāng)車開(kāi)始開(kāi)的時(shí)候我終于意識(shí)到原來(lái)車是可以往兩頭方向開(kāi)的。

[2] 人喜歡從關(guān)聯(lián)當(dāng)中尋找因果,有一次我我老婆去銀行取款,到了 ATM 室的自動(dòng)門口,我開(kāi)玩笑地拿著手頭的飯卡去刷了一下,然后——門居然開(kāi)了。我頓時(shí)來(lái)了勁,立即得出一個(gè)結(jié)論:這個(gè)刷卡裝置不安全,至少不是能夠?qū)iT識(shí)別銀 聯(lián)的卡的。我甚至飛快地泛化出了一個(gè)更具一般性的理論來(lái)解釋這個(gè)現(xiàn)象:即可能所有帶有磁性的卡都可以用來(lái)開(kāi)門。老婆看我得意洋洋,就潑過(guò)來(lái)一盤冷水:不一 定是你的卡刷開(kāi)的啊,你不刷卡試試看。我不信,說(shuō)怎么可能呢,心想我刷卡,門就開(kāi)了,還有比這更明顯的因果關(guān)系嘛。但出乎我意料的是,我走出門,這次沒(méi)刷 卡,門也開(kāi)了——原來(lái)是感應(yīng)門——原先這個(gè) ATM 室的確是刷卡門,但后來(lái)改成了感應(yīng)門,刷卡的那個(gè)裝置只不過(guò)沒(méi)拆掉殘留在那里而已。

[3] 《失敗的邏輯》里面從認(rèn)知心理學(xué)的角度系統(tǒng)介紹了我們?cè)趶?fù)雜情況下的判斷與決策是如何出錯(cuò)的,非常值得一讀。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多