知識(shí)的偏見(jiàn) - 讀《暗時(shí)間》的思考

最近剛剛讀了《暗時(shí)間》,這篇來(lái)自本書(shū)引發(fā)的思考:『知識(shí)的偏見(jiàn)』

在思考這個(gè)問(wèn)題的時(shí)候,先用 10 秒鐘思考一下這個(gè)問(wèn)題:

『如何建一個(gè)網(wǎng)站賣(mài)化妝品?』

對(duì)于這個(gè)問(wèn)題沒(méi)有答案,如果你思考,把解決方案保留在你的腦海里??赐瓯酒覀?cè)倩貋?lái)思考這個(gè)問(wèn)題。

『如果你手里有把錘子,所有東西看上去都想釘子』

hack_joking.png

在真實(shí)世界里每人都會(huì)自己獨(dú)特的經(jīng)歷,不同的經(jīng)歷會(huì)造成對(duì)一個(gè)問(wèn)題產(chǎn)生不同的直覺(jué),比如 Developer 和 Sales 基本不可能站在同一個(gè)視角思考問(wèn)題。這種由經(jīng)歷不同產(chǎn)生偏見(jiàn)我們很好理解:成長(zhǎng)經(jīng)歷不同,對(duì)事物的看法會(huì)不同。

還有一種 偏見(jiàn) 可以歸為 知識(shí)偏見(jiàn)。這類偏見(jiàn)由我們掌握的知識(shí)決定的。不同的知識(shí)給我們帶來(lái)不同的解決問(wèn)題的工具(錘子),不同工具(錘子)有不同的思路。這種偏見(jiàn)在程序員的世界非常常見(jiàn)。

編程語(yǔ)言

language_preduice.png

每種語(yǔ)言的開(kāi)發(fā)者,對(duì)其所掌握的語(yǔ)言都會(huì)有一種無(wú)法抑制的執(zhí)著。

比如說(shuō)這個(gè)強(qiáng)大的 《程序員鄙視鏈》。

記得 6 年前剛參加工作的時(shí)候,公司基于 GWT 使用 Java 寫(xiě) SPA。 GWT 是 Google 推出的神奇的工具,它可以使用 Java 代替 Javascript,不但如此,在 GWT 中不用再擔(dān)心瀏覽器兼容問(wèn)題。Google 紅極一時(shí)的 Google Wave 便是用 GWT 編寫(xiě)的。

『使用 Java 代替 Javascript!』

一切聽(tīng)起來(lái)都很美,當(dāng)我真正的用它的時(shí)候,各種限制接踵而至。GWT 中只能使用部分 Java 的功能,比如 java.util.Date 就無(wú)法使用。這種限制使得大部分 Java 庫(kù)都無(wú)法在 GWT 環(huán)境下運(yùn)行。除了 Java 標(biāo)準(zhǔn)庫(kù)的限制,Javascript 世界中的庫(kù)也無(wú)法直接在 GWT 下使用,比如 jQuery 就需要使用 JSNI 引入到 GWT 中。
如果你同時(shí)掌握 Java 和 Javascript,如果強(qiáng)迫你用 Java 去寫(xiě) Javascript 估計(jì)你會(huì)有什么感想?我是被 GWT 虐了兩年,現(xiàn)在再也不想回到用 Java 寫(xiě)前端的世界。

『用合適的語(yǔ)言做合適的事情』

TDD

tdd.png

在寫(xiě)本文時(shí),筆者還在實(shí)踐 TDD。現(xiàn)在已經(jīng)到了不先寫(xiě)測(cè)試,不會(huì)寫(xiě)代碼的程度。但是對(duì)一種編程模式過(guò)于執(zhí)著總是會(huì)讓我陷入一種恐慌,閑暇聽(tīng)聽(tīng)其他不同的聲音,希望自己不會(huì)陷入對(duì) TDD 宗教般的崇拜:

『軟件開(kāi)發(fā)沒(méi)有銀彈,方法論同樣也適用』

OOP

OOP.png

聽(tīng)聽(tīng)不同的聲音:

如果你對(duì)面向?qū)ο筮€保持著封裝,繼承,多態(tài),教條的遵循 SOLID 原則,可能僅對(duì) OOP,可能還需要更多的思考。

『OOP 不是萬(wàn)能的』

Design Pattern

design pattern.png

四人幫的 Design Pattern 猶如圣經(jīng)般存在于 OOP 的世界。估計(jì)每個(gè)采用 OOP 的都被它虐過(guò)。尤其是對(duì) Java 程序員,沒(méi)用幾種設(shè)計(jì)模式,可能連找工作都會(huì)有點(diǎn)困難。

那 23 個(gè) Design Pattern 背后隱含的思想,其他語(yǔ)言會(huì)很好的解決方案。

比如我們可在 Ruby 中使用 Duck Typing 解決 AbstractFactory 問(wèn)題。同樣屬于編譯型語(yǔ)言的 Objective C 也支持這個(gè)特性。
(Objective C 中將方法調(diào)用抽象成向?qū)ο蟀l(fā)消息,只要該對(duì)象能夠處理這個(gè)消息即可)

比如 Ruby,Javascript,Java 8 中支持的 each 方法,可以非常簡(jiǎn)單的解決了 Iterator Pattern 要解決的問(wèn)題。

當(dāng)然這種類比還有很多。有一個(gè)很搞笑的編程模式:《設(shè)計(jì)模式驅(qū)動(dòng)開(kāi)發(fā)》

『Design Pattern 是我們重構(gòu)代碼時(shí)的參考,不是我們寫(xiě)代碼的準(zhǔn)則』

講個(gè)故事

fan.png

聯(lián)合利華新?lián)Q了一批自動(dòng)香皂包裝機(jī)以后,經(jīng)常出現(xiàn)香皂盒子是空的情況,而 在裝配線一頭用人工檢查因?yàn)樾蕟?wèn)題不太可能而且不保險(xiǎn)。這不,一個(gè)由自 動(dòng)化、機(jī)械、機(jī)電一體化等專業(yè)博士組成的Solution小組來(lái)解決這個(gè)問(wèn)題,沒(méi) 多久他們?cè)谘b配線的頭上開(kāi)發(fā)了全自動(dòng)X光透射檢查線,透射檢查所有的裝配 線盡頭等待裝箱單香皂盒,如果有空的就用機(jī)械臂取走。

無(wú)獨(dú)有偶,在中國(guó)一鄉(xiāng)鎮(zhèn)企業(yè)生產(chǎn)香皂也遇到了類似問(wèn)題,老板吩咐線上小公務(wù)必想出對(duì)策解決之,小工拿了一個(gè)電風(fēng)扇放在裝配線的頭上,對(duì)著最后的成 品吹,空盒子被吹走了,問(wèn)題也解決了。

『如果你想釘一顆釘子,所有東西看上去都像是錘子。』

如果我們專注與問(wèn)題,按照 How,Why,Who did it? 反復(fù)思考待解決的問(wèn)題??赡軙?huì)更容易的得到合適的解決方案。

使用合適的語(yǔ)言解決合適的事情。

language_thinking.png

使用 DSL 處理特定的領(lǐng)域

dsl.png

寫(xiě)在最后

我始終覺(jué)得視野很重要,每種語(yǔ)言,工具都能帶來(lái)不同的思考方式。對(duì)同一個(gè)問(wèn)題,不同語(yǔ)言有不同的的思路,了解這些不同的思路可以擴(kuò)展自己的視野,讓自己不會(huì)拘泥于某一中語(yǔ)言所帶來(lái)的生態(tài)圈中。

2009 我作為 Java 程序員從一個(gè)非計(jì)算機(jī)的專業(yè)轉(zhuǎn)到了計(jì)算機(jī)領(lǐng)域。在 2012 年,我做了一個(gè)很有意思的回顧,自己平均每年都會(huì)學(xué)習(xí)一門(mén)新的語(yǔ)言或者新的技術(shù)領(lǐng)域:

  • 2009 精通CSS
  • 2010 Groovy
  • 2011 Ruby, node.js
  • 2012 Objective C

由于每個(gè)技術(shù)領(lǐng)域都能帶來(lái)新的思維方法,這也讓我不由自主的保持了一年一門(mén)語(yǔ)言或者框架的習(xí)慣:

  • 2013 Shell, improve ruby
  • 2014 Lisp ( SICP, Scheme )
  • 2015 Swift,Clojure,Rails

系統(tǒng)的學(xué)習(xí)CSS,讓我懂得如何布局,如何使用 CSS 靈活的創(chuàng)建 UI。做頁(yè)面的時(shí)候也偏向于先用 HTML + CSS 構(gòu)建原型,再完成實(shí)現(xiàn)。

接觸 Groovy 是由于 Grails 這個(gè)類 Rails 的框架。Groovy 讓我見(jiàn)識(shí)到了腳本語(yǔ)言的強(qiáng)大,之后使用 Groovy 作為膠水語(yǔ)言為項(xiàng)目設(shè)計(jì)了基于 Groovy 描述的工作流引擎。

學(xué)習(xí) Ruby 是因?yàn)?Rails。非常喜歡 Ruby 社區(qū)的氣氛,非?;钴S,時(shí)刻都能擁抱最新的技術(shù)。由于對(duì) Ruby 的熱情,讓我買(mǎi)了第一臺(tái) Macbook, 同時(shí)也讓我有幸參加了 ShanghaiOnRails 和 2012 RubyConfChina 聚會(huì)。也是由于 Ruby,讓我有機(jī)會(huì)加入 Thoughtworks,有機(jī)會(huì)跟 Ruby 社區(qū)活躍的開(kāi)源貢獻(xiàn)者 FredWu 有共事的機(jī)會(huì)。

學(xué)習(xí) iOS 開(kāi)發(fā),讓產(chǎn)品有機(jī)會(huì)跟上海的 SMG 廣電集團(tuán)有了一次合作,也讓我步入了 iOS Developer 的行列。

了解 Lisp 是從讀 《黑客與畫(huà)家》開(kāi)始,2014 在 Thoughtworks 和同事共同搞 SICP Bookclub,這個(gè)活動(dòng)讓我刷新了對(duì)編程的認(rèn)識(shí),也讓我了解到函數(shù)式思維的強(qiáng)大。

2015 年初接觸 Clojure,其中有一個(gè) Memorization 的思想對(duì)函數(shù)運(yùn)算進(jìn)行緩存,這個(gè)思想激發(fā)了靈感。按照 Momorization 思想對(duì)項(xiàng)目中的校驗(yàn)引擎做了優(yōu)化,性能提升了近 100 倍。

知識(shí)猶如我們手中工具,我們可以通過(guò)不斷學(xué)習(xí)來(lái)豐富我們的『工具箱』。每當(dāng)碰見(jiàn)問(wèn)題的時(shí)候,懷著開(kāi)放的心,從自己的『工具箱』中選出做順手的工具來(lái)達(dá)成自己的目標(biāo),這樣可以避免知識(shí)的偏見(jiàn)帶來(lái)的副作用。

再回來(lái)思考一下本文開(kāi)頭的問(wèn)題:『如何建一個(gè)網(wǎng)站賣(mài)化妝品?』

此時(shí)你會(huì)有什么想法?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容