標籤:des cWeb style blog java 使用 os io
The pragmatic programmers
一直在工作之餘讀些書,之前主要是純英文版的電腦相關的演算法,編譯器,數學等,想通過讀這些書來提高自己每日工作效能,結果收效甚微。一是,因為純英文的書,閱讀的慢,第二,也是最重要的一點,發現掌握的很慢,思前想後感覺可能是和工作的內容距離較遠,兩者不能互相輔助,第三,不能直接的回饋工作本身。
索性就換一換類型,最先入手的,是《agile software development-principles, patterns, and practices》,接著回顧了《code complete》。依然覺得使用時(寫代碼,或者就某個設計與別人討論時,等),無法得心應手的應用。
再換類型,這次是the pragmatic programmers系列。Eureka!我需要加強這些方面的學習。先開始讀的是《程式員的思維修鍊--開發認知潛能的九堂課》,它主要討論了如何pragmatic thinking and learning, refactor you Wetware。我們都聽過software, hardware, 什麼是wetware?你的大腦!
德雷福斯模型
在稍微靠前的章節,這本書提到了德雷福斯模型,這個模型是用來研究人類如何擷取和掌握一項技能的。它分為5個階段:
階段 |
特徵 |
|
新手 |
l 沒有或者很少的經驗(包括,一年的經驗又重複了九年,也就是號稱十年的經驗。); l 很在乎是否成功,很容易因為不成功而慌亂; l 不是很想學習,只是想要一個立竿見影的目標; l 如果提供給他們與情境無關的規則去參照,他們會變得非常能幹。請記住,情境相關的情況下,他們會無法做出正確的選擇。 l 需要指令清單,清單只能讓你啟程,不會讓你走很遠。 |
比如:話務中心工作人員,給他們規則,按部就班,照決策樹執行就一切Ok。 |
進階新手 |
l 進階新手,多多少少開始擺脫關聯規則,它們可以獨自嘗試解決問題,但仍難以成功。 l 他們想快速擷取資訊,瀏覽到某個API時,不想在一些細節處尋根究底,或者重新溫習一邊基礎知識。 l 根據過去經驗,逐步在正確的情境中採納建議,但比較吃力。 l 他們沒有全面的理解,同時也不想要全面的理解。 |
你是否關心CEO展示的全年銷售資料? |
勝任者 |
l 能夠建立問題域的概念性模型,並有效使用他們; l 可以獨立解決遇到的問題,並開始考慮如何解決新的問題; l 他們開始尋求和運用專家的意見,並有效利用; l 勝任者會探尋和解決問題; l 如果沒有更多的經驗,他們將難以確定將關注哪些細節。 l 有主動性,足智多謀,缺乏足夠的能力反思和自我糾正 |
|
精通者 |
l 觀察,並從中學習 l 有全域思維,尋找並瞭解更大的概念架構; l 能夠反思、糾正過往不好的工作表現,自我改進; l 能夠預料下一步將要發生什麼; |
|
專家 |
l 專家是各個領域知識和資訊的主要來源; l 他們不斷尋找更好的方法和方式去做事; l 他們能根據情境不同,選擇不同的應對方法; l 他們著書,立說,演講; l 根據直覺工作,“覺得這樣是正確的”,不需要理由; l 綜合過往經驗,知道從哪些方面去忽略細節,抓住主要矛盾; |
|
後面的內容,我會使用這個模型來給自己定位。同時也想其他人能夠找到自己合理的定位,進而知道應該如何努力改變現狀。
Wetware refactor
這裡說到的wetware就是人的大腦。
Refactor,我覺得是一個被IT從業者新發明的單詞(到目前為止,在牛津高階字典第八版裡,查不到這個詞),意思是代碼寫的不好,在保證功能不變的前提下重新組織一下代碼,讓他們更加易讀,易於理解,維護。簡單一點理解,它就像把家裡收拾一下:你感覺她髒了,亂了,布局不合理,那麼就重新布局,打掃一回,甚至裝修一下,然後她就煥然一新了一樣。
Wetware refactor與code refactor一樣,都需要先弄懂要refactor的對象:大腦的工作機制,才能很好的refactor。
左腦和右腦
從一個非常成功的實驗入手,這個實驗使其開創者心理生物學家Roger W. Sperry獲得了1981年的諾貝爾獎。
首先,先自己做個小實驗吧。坐下,抬起右腳順時針旋轉,與此同時,用右手在空中寫數字6。在我做這個實驗時,當我開始寫6的時候,我的腳開始和手寫6的方向變得一直。你也可以實驗一下。這是大腦關聯的結果,剪斷這種關聯會發生會讓你表現出一些怪異的行為。
剪掉這種關聯?怎麼剪掉?開顱,拿剪刀,找到胼胝體,剪,就可以了。太血腥了吧,事實上這個實驗的機會是由60年代的癲癇病患者給予的。這些癲癇病患者由於大腦病變導致經常性痙攣,腦科醫生們一怒之下切斷了他們的胼胝體,使得他們的左右大腦分離開來,腦部的病變也就被控制住了,而且,令人驚異的是,這些患者手術之後竟然沒有什麼異常,反而十分開心。於是,我們英明的Sperry發現良機,他立即邀請這些腦子被人一分為二的“裂腦人”加入了自己的實驗,而年輕的心理學家Michael Gazzaniga也加入Sperry的實驗,於是史上久負盛名的裂腦人實驗拉開了帷幕。
研究人員在同一時刻為這些腦裂患者的兩隻眼睛展示不同的圖片,如果要求他們說出看到的映像,他們會報告右眼看到的畫面,他們會用語言描述右眼看到的畫面(右眼是由左腦控制的,有負責語言功能的中樞)。但是要求他們觸摸圖片以確定映像,他們會觸摸左眼看到的畫面(左眼由右腦控制,這裡有非語言中樞,行動中樞?)。
這裡有一個潛在的知識點:右眼由左腦控制,左眼由右腦控制,這個知識點的第一印象是基於中學生物知識的。先是回顧中學知識,後是懷疑正確性,礙於時間限制沒有去搜尋相關的論文只是百度了一下。百度搜尋“左眼 右腦”證實了它。百度會返回很多左眼有毛病,右腦不舒服的例子:
更多腦裂人的實驗請參考附錄。
左腦和右腦,處理的內容形式上差很多,比如左腦是語言的,文字的,右腦是映像的,聲音的;工作方式上也不是不一樣的,左腦串列,右腦並發;工作特徵也不一樣,左腦抽象,右腦形象。
雙CPU模式的大腦
Sperry最早指出了腦半球各自不同的功能,在現代詞彙中首次引入了此條左半球和右半球,但事實上這種說法並不完全正確。不論是古老的爬蟲類腦部,還是新近發現的大腦新皮質,他們之間都有協作。他們的不同是物理的,是認知風格的不同:
- 1號CPU負責線性,邏輯思維和語言處理,它就像傳統的馮諾依曼式的CPU,按部就班的處理指示。我們把這種線性處理方式命名為L模式。
- 2號CPU則有很大的不同,它就是大腦中的GOOGLE搜尋引擎,它使用Regex來從大腦中所有的資訊中去匹配,搜尋。它的搜尋結果是非同步返回的,也就是當你有了某個疑問後,觸發這個搜尋你就可以去思考別的事情去了,數天后,只要你依然對這個問題感興趣並且你的大腦裡有這個答案,那麼你就可能就會得到這個答案。我們把這種模式非同步、綜合處理模式命名為R模式,又叫富模式。
請注意這兩個CPU共用通往記憶體核心的匯流排,這意味著1號CPU佔用匯流排,2號CPU無法擷取記憶體執行操作。同樣,如果2號CPU進行一個高優先順序搜尋,1號CPU也無法訪問記憶體,它們互相干擾。
L型,線性模式
上學時,以及日常工作中用到的分析、總結能力,都源於此模式。主要有:
- 語言能力,使用詞語來命名、描述、定義;
- 分析能力,有理有節分析事情;
- 符號能力,用符號表示事物;
- 抽象能力,抽取小部分資訊(本質),並用其表示事物整體;
- 時間能力,遵時循序;
- 推理能力,基於理智和事實得到結論;
- 數字能力,使用數字計數;
- 邏輯能力,基於邏輯(定理,明確地論點)得出結論;
- 線性思維能力,按照關聯、依序推演問題和思考,經常會得出收斂性結論。
L型思維方式區分了人類和普通動物,它帶領人類走出了森林和熱帶雨林,組織起來了村莊和城鎮,從田間地頭走入工廠車間,最終做到辦公室裡用Microsoft Word寫下了這篇文章。
但,畢加索曾說過“電腦一無是處,他們只能給出你答案。”如果答案不重要,那麼就是“問題”重要。而這一點違反L型思維,因為基於L型思維的邏輯推理、思考,問題才是我們花費各種努力要尋找的,怎麼可能最重要的是“問題”呢?
R型,富模式
R型是非語言的,它可以獲得語言但是無法建立語言。它喜歡綜合學習,集合事物形成整體。它具有空間性,喜歡弄清楚事物之間的空間關係,部分如何形容整體。它是直覺性的,跳躍性的思維。它可以給予不完整模式、直覺、感覺、視覺影像來做推斷。具體列表:
- 非語言,
- 非理性,
- 綜合,
- 空間性,
- 具體,
- 直覺,
- 分析,
- 全面,
R型模式,非常擅長類比,或者說模式搜尋;它天馬行空,不願意為守時費心。它不受理性的約束,不需要基於原因或者已知事實來處理輸入,它完全願意暫時不做判斷,來者不拒統統接受,因而它能不必先理解再學習進而吸收。
R型模式,更像是從遠古時期遺傳下來的一種思維方式。就拿直覺來說,從看到危險到反應,無須邏輯、推理、判斷,直接跑開就對了。空間感也一樣,在低級動物時期,可以沒有語言就能存活,但是沒有空間感,如果是只老虎,不能判斷從山崖到地面的高低,它已經摔死了,不會參與進化過程了。
在與R型模式對應的L型模式下,成人很難不理解一樣東西,但能記得很牢靠。L型模式是典型的:你要進入我的世界,你得先讓我認識你,理解你,覺得你放心,你不會搗亂,你對我有意義等,我才讓你進來。
R模式還有一些其它獨特的特點:
- 正如上面提到的它是非同步,也就是你想回憶一個東西當時不一定能想到,某天在想另外一個東西時,想到了,或者晚上睡覺夢到了。與這點相關的另外一點就是:
- 不可預測性,答案和靈感會獨立於你的意識活動出現,而且不總是在恰當的時候,你需要時刻準備著紙和筆;
- R模式不受主觀意識直接控制,就像心跳速度不受你控制一樣;
- R型提供直覺,提供隱性知識;
R型模式的應用
就像前面說到的L和R型模式是共用記憶體匯流排的,他們互斥。而現實中的我們又大部分在使用L型思維在說話,生活,思考,工作,如何快捷進入R型模式呢?
很多常見休閑活動都能夠啟用R型模式的思維:聽音樂,繪畫,靜思,慢跑,針線活,攀岩等,各種手、腦、眼需要協調一些活動都可以瞬時啟動R型模式。有一本非常出名的書,叫《用右腦繪畫》。它教人們如何停止L型模式的思維,全面開始R型模式,每個人都可以很快學會畫畫,並且還畫的不錯。我已經開始嘗試了,期待不久的將來能展示給大家看。
軟體開發中的R型模式
R型的類比和整體思考方式對軟體架構和設計非常有價值;在開發中使用原型和獨立的單元測試,編碼和構建並且從中學習應用了R型綜合。隨著Agile,Scrum的流行,結對程式設計已經不再陌生。結對程式設計中的Navigator表現出來的R型模式就明天多於Driver。Navigator更多從架構,層次,易讀,美觀等方面綜合思考。而這其中的“層次”,多與隱喻相關。隱喻的思維過程基本上是:搜尋,模式比對,建立聯絡,抽象,變形的過程。最後通過語言表達出來。也有一種說法:隱喻是串連L型與R型模式的橋樑。
隱喻
隱喻(metaphor)源自希臘語metaphora,“轉移”的意思,表示你正在以一種事實上不可能的方式把一個事物的屬性轉移到另外一個事物上。事物的屬性,是對事物的抽象,找到他們共同存在的抽象,把這個抽象從用來描述A,發展到描述B,這就是隱喻。
從小學語文開始的類比,比喻,都屬於這一範疇吧。在軟體開發領域,“瀑布式”開發過程,瀑布式就是隱喻。這種開發過程都有一個特點就是,從上而下—這是對瀑布的抽象,也是對這種開發過程的抽象。
詩歌中有很多隱喻,“疑是銀河落九天”,“愛情是歎息吹起的一陣煙”,“哲學史逆境中的蜜乳”等。
《代碼大全》。。。。(待補充)
離開鍵盤去解決難題
著名數學家龐加萊有一套特殊的解題技巧。每當遇到一道困難、複雜的問題時,他就把已知的、與此相關的從西都寫在紙上,這麼做可以揭露許多問題,先解決掉那些簡單問題,然後挑出剩下問題中的最簡單的問題,離開辦公室除去走一走。只思考這一個問題,一旦有了靈感,馬上中斷散步,回去解答之。重複此步驟,直道所有問題都有了答案。龐加萊,如此形如此過程“想法會成堆的出現,我感覺它們一直在碰撞,最後發生結合,也就是說,產生穩定的結合”。
把問題相關的關鍵點寫在紙上,然後記住它們。除去散個步,聽聽音樂,讓寫在紙上的那些東西,盡情在R模式思維中去自由的攪和、浸泡,直到找到靈感後返回來去解決問題。
類似的經曆,我也有過,那就是,當我感覺一個問題太大,思考不過來時,我就把它們已知的東西,都寫出來。然後從這些已知的概念,方法論出發,啟用大腦,盡量讓你感覺大腦被打了雞血一樣興奮起來了,然後開始發散思考。我的啟用方法是深呼吸,然後想象一些非常美好的,讓你感覺非常安全的東西,這是一股暖流從心底升起,遍布全身。這個時候,我覺得,大腦裡那些列在紙上的那些知識點閃閃發光,試圖從他們為中心,向各個方向散射,找到合適的解決方案。
我們不再需要Coach
我覺得目前我們請到的一些Coach幾乎沒有什麼或者也沒有比我們多很多的編程經曆,為什麼他們那麼能說,並且確實能夠給我們一些指導呢?我覺得主要是它們就是看的書多了些,並且他們也一直是在充當結對程式設計中的Navigator而已。這一點從我們幾乎所有的Coach給我們帶來的影響在兩到三個月後就開始看到邊際效應可以猜測到:
一方面,他們不能深入項目的代碼,而深入代碼恰恰是考驗Coach功力的時候。因為我覺得一旦深入開始作為Driver,腦的限制,7+/-2 原則,也就開始出現了。再看他們掌握的那些經典案例,也就是書上最簡單的sample code 情況下,應該如何處理。他們已然爛熟於胸了,這些知識在我們討論代碼設計時不需要再佔用7+/-2空間,所以他們可以有多於的buffer用來討論那些設計,原則。一旦讓他們開始深入我們的代碼:前面有三個if後面有四個else和一個經常出Regression的函數,它們也會歇菜。
第二方面,我們,缺少讀書,缺少那些看起來很酷的工具,而這些恰恰是書裡學到的。所以我們要做的就是,讀書,多讀書,把我們可能用到的書,大家都好好讀一下,慢慢研究,多投入點時間。當我們需要哪方面的知識時,找諮詢公司,問一下我們需要讀哪些書就好了。讀完書,象龐加萊那樣,遇到什麼問題了,把已知的概念,方法論,列舉出來,思考一下,我們每個人都是完美的Coach。
第三方面,Coach,給我們的感覺就是老師帶著學生解題,而學生始終不能自己解題,因為這是緣木求魚而已。我們需要的是,讀書,建立完整的思想體系,健全解決問題的工具,從而某天開始我們每個人都是Coach,Coach自己,Coach別人。
讀書,明晰概念,設計原則,怎麼樣平衡。遇到問題,寫下那些已經學到的,對當前問題有協助的知識點,讓他們在腦中閃耀,停下來多想;問題比Coach解決的還漂亮。
真正的發現之旅不在於追求新大陸,而在於擁有新的視野。
-------------馬塞爾-普魯斯特
(未完待續)。