第1章 緒論
程序設計其實就是解決問題,它需要發明、創造和靈感。不論你從事什么職業,可能都需要創造性地區解決問題。
軟件產品處于應用、用戶、規則和硬件的合力之下。
最重要的兩項技能:
溝通能力。
學習和思考能力。
學習能力、批判能的思考能力和創造力——所有這些擴展思維的能力,都取決于自己。你必須自己學習。
萬事萬物都是相互聯系的:自然界、社會系統個、你內心的想法、計算機的邏輯——所有事物構成了一個龐大的相互聯系的現實世界。沒有什么事物是孤立存在的,一切都是系統和更大的情境的一部分。
當我們試圖將某個事物單獨挑出來時,我們發現它與宇宙中的其他事物是息息相關的。——約翰*繆爾(《山間夏日》)
《第五項修煉》系統思維
有些東西是基礎的,各領域相通的。
成為一名專家的關鍵要素:應用你自己的時間經驗、理解情境和利用直覺。
把人腦模型可以類比成雙cpu、共享總線設計
在人類思考中存在著許多"已知的缺陷":個人認知偏見、時代及同代人的影響、固有的個性,甚至是大腦底層的生物性缺陷。
探討做計劃的技能、思維導圖、閱讀技巧(SQ3R),以及教學和寫作的認知重要性。擁有了這些技能后,你將會更快、更容易地吸收新的信息,獲得更強的洞察力,更好地融會貫通新的知識。
積累經驗是學習和成長的關鍵。研究如何利用反饋、樂趣和失敗來創造更有效的學習環境,關注設定最后期限的危害,并體會如何通過自我引導積累經驗。
控制注意力
控制注意力是此次旅程的關鍵下一步。分享一些技巧,幫你管理需要學習和時間的大量知識、信息和見解。加強你的注意力。
研究如何優化你當前的情境,如何更好地處理煩人的打擾,并看一看打擾為何有害。我們還將探討為何需要分散一些注意力,以便更好地聚焦于
超越專家
快速討論下:為何改變自己比想象中的困難,并且會提供一個你可以立即付諸行動的建議。
實踐單元
第2章 從新手到專家的歷程
制造問題的思維方式無法用來解決問題。——阿爾伯特*愛因斯坦
事件理論與構建理論
事件理論可以被測量,這類理論可以被驗證或證明。你能夠判斷某個事件理論的準確性。
構建理論是無形的抽象,無法被證明。
Dreyfus模型是一種構建理論、是一種抽象。
現象:
實際工作中,專家級職員并不總被認為是專家,也沒有拿到相誠的薪水。
不是所有專家級職員都想成為管理者。
職員的能力存在巨大的差異。
管理者的能力存在巨大的差異。
任何團隊的成員在技術水平上可能各不相同,無法看作一個同質的可替代資源集合。
專家通常很難把他們的行為恰如其分地解釋清楚,他們的很多行為是如此地熟練以至于已經變成了無意識的了。他們的大量經驗都是通過大腦的非語言、無意識區域存儲的。
新手跟專家有著根本的區別,他們看待世界的方式不同,反應也不同。
新手
規則只能讓你啟程,不會讓你走得更遠。
高級新手
高級新手不想象全局思維。
勝任者
能夠建立問題域的概念模型,并有效地使用他們。
與更高水平者追隨下意識反應不同,勝任者會探尋和解決問題,他們的工作更多是基于謹慎的計劃和過去的經驗。如果沒有更多的經驗,在解決問題時,他們將難以關注哪些細節。
精通者
需要全局思維。他們將圍繞這個技術,尋找并想了解更大的概念框架。對于過于簡單化的信息,他們會非常沮喪。
他們能夠糾正以往不好的工作表現。會反思以前是如何做的,并修改其做法,期望下一次表現得更好。到了這個階段,自我改進就會出現。
他們會學習他人的經驗。作為精通者,他能夠閱讀案例研究,傾聽有關失敗項目的流言蜚語,觀察別人怎么做,從故事中認真學習,即使他沒有親自參與。
伴隨向他人學習的能力而來的,是理解和運用格言經驗之談(maxim)的能力,這些經驗之談猶如諺言或格言,是可以應用于當前情境的基本原理。
理解情境是成為專家的關鍵。
精通者有足夠的經驗,他們知道下一步會發生什么,如果沒有發生有需要改變什么。他們非常明確哪些計劃需要取消,而應該采取什么行動。
處于精通水平的人可以有效的運用軟件模式,但是這不是較低技能水平所必須掌握的。
精通者可以充分利用思考和反饋,這些都是敏捷方法的核心。處于精通階段的人更像是初級專家,而不是高級勝任者。
階段5:專家
專家是各個領域知識和信息的主要來源。他們總是不斷地尋找更好的方法和方式去做事。有豐富的經驗,可以在恰當的情境中選取和應用這些經驗。他們著書、寫文章、做巡回演講。他們是當代的巫師。
據統計,專家的數量很少,大概占總人數的1%~5%
專家根據直覺工作,而不需要理由。
專家知道哪些是無關緊要的細節,哪些是非常重要的細節。也許不是有意識的,但是專家知道應該關注哪些細節,可以放心的忽略哪些細節。專家非常擅長做有針對性的特征匹配。
2.3 現實中的德雷福斯模型:賽馬和賽羊
缺少準確的自我評估被稱為二階不勝任,也就是說,不知道自己不知道。
很多程序員和經理都意識不到有更好的方法和實踐存在。
無知往往來自于自信而不是知識。——達爾文
開發人員之間存在 20:1~40:1的生產力差異
新手使用規則,專家使用直覺。
提升技能水平的過程中,最重要的三個變化如下:
從依賴規則向依賴直覺轉變。
觀念的改變,問題已不再是一個相關度等同的所有單元的集合體,而是一個完整和獨特的整體,其中有某些單元是相關的。
從問題的旁觀者轉變為問題涉及的系統本身的一部分。
這是從新手到專家的轉變,脫離獨立和絕對化的規則,進入直覺的境界并最最終成為系統本身的一部分。
大多數人的大多數技能,在他們生命的大多數時間里,從來沒有高于第二階段高級新手。
這種現象的證據比比皆是,從復制-黏貼式編程的興起(現在把Google作為IDE的一部分),到設計模式的普遍誤用。
元認知(metacognitive)能力,或者自我認知的能力,往往在較高的技能層次中才會具有。這就意味著處于低技能層次的從業者會明顯高估他們自己的能力——有研究表明高出50%。正確自我評估的唯一辦法就是提高個人技能層次,這反過來又會提高元認知能力。
你可以把這種現象稱為二階不勝任:不知道自己不知道多少。新手盡管能力差但是信心十足,而專家在情況異常時會變得愈發謹慎。專家會更多地自我懷疑。
專家并不總是最好的老師。教學是一門技能。
當團隊需要結對或者尋找指導老師時,你可以嘗試選用和受訓者技能水平相近的老師。
專家與眾不同之處是他們使用直覺和在情境職工識別模式的能力。專家的直覺和識別模式的能力已經超越了他們顯性的知識。
根據著名認知科學家DR.K. Anderson Ericsson的說法,積極的實踐需要四個條件。
需要一個明確定義的任務。
任務需要有適當難度——有挑戰性但可行。
任務環境可以提供大量反饋,以便于你采取行動。
提供重復犯錯和糾正錯誤的機會。
生命如此短暫,學知之路如此漫長。
一旦你成了某個領域的專家,在別的領域成為專家就會變得更容易。至少你已經有了現成的獲取知識的技能和模型構建的能力。
“我只是執行命令!” 是無用的。
為了實現工作態度上的轉變,我們確實需要提高技能。高級新手無法自己做出這類決定。我們必須培養高級新手,幫助他們把技能水平提高到勝任者層次。有助于實現這個目標的主要方法是在環境中有好的榜樣。人天生善于魔方。通過模仿榜樣我們可以學得最好。
訣竅4:通過觀察和模仿來學習
小號手Clark Terry 曾經告訴學生們學習音樂的秘密是經歷三個階段:
模仿
吸收
創新
優勝者是不會幫扶失敗者——失敗者會被團隊拋棄。
為高技能的開發人員提供合適的環境至關重要。
鑒于最高技能水平的開發人員的生產力比最低水平的高幾個數量級,目前常用的工資結構是不到位的。
訣竅5:保持實踐以維持專家水平。
R&D精神(Rip off and Duplicate,偷師學藝)。
模型是工具,而非鏡子。
你不希望一群猴子敲打鍵盤編寫代碼。你需要能思考、負責任的開發人員。對形式模型的過度依賴往往會鼓勵羊群行為而貶低個人創造力。
形式方法有其他優點和用途,但是在實現這些目標時不起作用。雖然它能有助于較低技能水平的人建立基準規則,但是判斷力是無法取代的。
訣竅6:如果你需要創造力、直覺或者獨創能力,避免使用形式方法。
不要屈服于工具或者模型的虛假權威。沒有什么可以代替思考。
新手需要與情境無關的規則,專家使用與情境相關的直覺。
在系統思維中,如面向對象的編程,往往是事物之間的聯系最讓人感興趣,而不是事物本身。這些聯系有助于形成情境,而正是情境讓這些事物各不相同。
在團隊中你同樣需要先考慮他人的技能水平,然后再判斷自己該如何傾聽、響應他們的意見。
訣竅7:學習如何學習的技能
要獲取專業技能要做到如下幾項:
培養更多的直覺。
認識到情境和觀察情境模式的重要性。
更好地利用我們的經驗。
第三章:認識你的大腦
兩個CPU提供了L型和R型處理模式
R型:對直覺、問題解決和創造性非常重要。
L型:讓你細致工作并實現目標。
要想獲得最佳性能,需要R跟L協同工作。
R型:好比針對長期記憶和“進行中”的想法搜索和搜索引擎。R型沒有做任何語言處理。它可以檢索和識別語言元素,但它本身不能處理語言元素,由于L型和R型之間的內存總線沖突造成的。
R型就是意識的“邊緣視覺”
R型是異步的。
R型在存儲方面非常賣力。
訣竅8:捕獲所有的想法以從中獲益更多。
最快的處理方式是甚至沒有到達大腦皮層肌肉記憶類反射。鋼琴演奏家在快節奏的章節演奏中沒有時間思考每一個音符。參與的肌肉基本在無意識或無指令的狀態下自己完成了整個演奏。
左右腦模式,L模式(線性模式L型)和R模式(富模式R型)。
L型處理特點:
R型處理特點:
R型注重主體,總是希望以此就能看到事物整體,感知整體的模式和結構。具有空間性,喜歡弄清楚事物之間的空間關系,部分如何形成整體。
為何要強調R型
我們需要更多地使用R型,R型能夠提供直覺,成為一名專家所迫切需要的。沒有它,我們就不能成為專家。
R型的類比和整體思考方式對軟件架構和設計非常有價值,好的設計就是由這些組成的。
訣竅9:綜合學習與分析學習并重。
訣竅10:爭取好的設計,它真的很有效。
路易*康:“設計并不是創造美,美來自于選擇、共鳴、同化和愛”
創造來自于選擇和組裝,它需要選擇最適合的部件,并將它們組裝成最合適的表現形式,這就是創作。
訣竅11:重新連線大腦,堅信這一點并不斷實踐。
想做一名更好的程序員嗎?那就多編碼,深思熟慮,專注實踐。想學習一門外語嗎?那就投入進去,不停地說,用它思考。大腦會很快意識到并調整自己為這種新用途提供更多方便。
第四章:利用右腦
如果你感到懼怕,不想嘗試某些東西,那么這些恰恰就是你應該首先嘗試的。
訣竅12:增加感官體驗以促進大腦的使用。
L型是符號機器,可以為一些感官輸入快速提供符號化表示。
訣竅13:R型開路,L型緊跟。
L型和R型在隱喻上想通
隱喻是一種激發創造力的強大技術。
訣竅14:使用隱喻作為L型和R型相融之所。
在他的模型中,一些特殊的主題域形成一個參照系。從一個自完備的參照系列到另一個不同的、意想不到的、不相容的參照系的突然切換是一個強大隱喻的基礎。這兩種體系的連接點稱為異類聯想。
當異類聯想時,這種聯系越不可能(兩參照相距越遠),創造性的成果就越大。
使用隨機并列來創造隱喻。
一個足夠豐富的隱喻有助于指導系統的設計和解決開發過程中出現的問題。
隱喻參考體系的特征能夠印到軟件系統,真實世界中隱含的、容易理解的屬性逐漸轉移到軟件本身。
幽默的能力都來自于發覺和擴展常規之外的關系,真正突破思維界限。
急智——能夠發現無關事物的聯系或擴展思維突破其界限——是一種值得在團隊中實踐、鍛煉和提倡的及鞥呢。
訣竅15:培養幽默感以建立更強大的隱喻。
訣竅16:離開鍵盤去解決難題。
大腦非常善于在模型片段的基礎上重構事實。大腦也能基于不完整的數據進行聯想。
從相反角度思考問題,是一種很強大的技術。不要努力預防難以發現的bug,努力找到三四種會主動引起bug的方式。
訣竅17:改變解決問題的角度。
大部分問題都有多個解決方案或者多個“正確答案”
擔心解決方案沒有邏輯性?大部分大腦處理過程也并非合乎邏輯性,但是都沒有出錯。
需要是發明之母。角色扮演是發明之父。——求羅迦費因格
第五章:調試你的大腦
探討四大問題。
認知偏見:思維如何被誤導。
時代影響:同代人如何影響你。
個性傾向:個性如何影響思維。
硬件故障:大腦較老區域如何壓制較聰明區域。
我們傾向于把別人的行為歸因于他們的個性,而不去考慮行為發生時的情境。請記住行為經常是對情境的響應而不是基本的個性使然。
柏拉圖圈概念,強調了人類分層不善于從過去的事情推斷未來的事情。
訣竅18:記住標題:“很少”不意味著“沒有”
推遲下定論。
訣竅19:適應不確定性。
訣竅20:信任記錄而不是記憶,每一次思維的輸出都是一次輸入。
你父母和同齡人的態度,哲學觀和價值觀對你有重大的影響。
四種時代原型和其主要特征
先知:高瞻遠矚、價值觀
游牧民族:自由、生存、榮譽
英雄:利益共同體、富裕
藝術家:多元化、專業知識、法定訴訟程序
訣竅21:從多個角度看待問題。
訣竅22:尊重不同人的不同性格
訣竅23:像高級動物一樣行動,請做深呼吸,而不要張口嘶鳴。
訣竅24:相信直覺,但是要驗證。
第六章 主動學習
當今技術和文化環境下,學習能力可能是成功的最重要因素。決定了你是“大獲全勝”還是“勉強通過”
技術本身不重要,持續學習才是你最重要的。
使用SMART(Specific,Measurable,Achievable,Relevant,and Time-boxed)目標和實用投資計劃(Pragmatic Investment Plan)管理目標和計劃。
SMART代表具體的、可度量的、可實現的、相關的和時間可控的。對于任何目標(減肥、炒老板魷魚、征服世界),你都需要制定一個計劃,定出一系列幫助你實現目標的任務(objective)。每個任務都應該具有SMART特性
訣竅25:建立SMART任務實現你的目標。
目標、任務和行動計劃
嘗試設定一些明確的小任務作為行動計劃的一部分。我要按照目標制定一些小的(有時微小的)任務來創建行動計劃以實現該目標。
設定目標是第一步。下一步行動是創建小任務以幫助你每天或每隔一段時間都能達到某種程度。你創建的小人物越多,,你就越容易看清自己與目標的距離。
建議大家把技術和才干看做一個知識投資組合。
像管理你的金融投資一樣小心管理你的知識投資。
管理你的知識投資有很多要點。
制定具體計劃
多樣化
所有的知識投資都有價值。即使你從來不會在工作中使用某項技術,它也會影響你思考和解決問題的方式。
主動投資
定期投資
訣竅26:對主動學習的投資做好計劃。
使用你的原生學習模式
視覺型、聽覺型和動覺型。
斯滕伯格認為智力分為三部分:一部分是元級別的成分,負責總體管理思維過程,一部分是基于表現的成分,負責執行任務、建立關聯等;最后一部分是知識獲取成分,負責吸收新信息。‘
訣竅27:發現你最佳學習方式。
訣竅28:組織學習小組和輔導。
主動閱讀和總結書面材料的更好方式
使用思維導圖探索和發現模式和關系
以教代學
相比任何經驗式的學習方法,閱讀是一種效率最低的學習方法。
訣竅29:主動閱讀。
訣竅30:同時使用R型和L型做筆記。
訣竅31:寫文檔的過程比文檔本身更重要
訣竅32:觀察、實踐、教學。
第七章:積累經驗
過度努力地嘗試可能和不去嘗試一樣糟糕。
我們不是僅僅接收信息,而是親自探索和構建思維模型。
訣竅33:為了更好地學習,請更好地玩。
訣竅34:從相似點中學習,從差異中忘卻。
一種高效有益的學習環境應該允許你安全地做三件事情:探索、創造和應用。
訣竅35:在你的環境中安全地探索、創造和應用。
建立探索環境
通過探索可以學得更好,而不是指令。
意識是一種超越新手層次的重要工具。
你需要培養非判斷性的意識:不要想著;來糾正,但是在出錯時要知道,然后再采取行動糾正。
訣竅36:觀察,不做判斷,然后行動
訣竅37:允許失敗,你會走向成功
訣竅38:讓大腦為成功形成慣例。
逐步增長的專業知識會漸漸添加到你要使用的過濾器和匹配模型中。
直覺就是這樣增長的:你有越來越多的模型來借鑒和應用,也有越來越多只可意會的知識來幫你確定要搜索什么,以及何時搜索。你開始感受到專家行為的初級階段。
第八章 控制注意力
與其說你沒有時間,不如更準確的說你沒有帶寬。當你帶寬——你的注意力資源——過載時你將會錯過某些事情。
冥想的訓練可以提高人的注意力。
訣竅39:學習集中注意力。
丹尼爾*丹尼特將“意識”定義為某一是時刻下,頭腦中占有對多腦細胞或處理活動的某個草稿。
三法則:一般情況下,如果你不能想出計劃可能出錯的三種方式,或想出一個問題的三種不同解決方法,那么你的思考還不充分。
訣竅40:擠出思維的時間。
大腦之外的思維支持工具會成為你思維頭腦的一部分。
訣竅41:使用wiki來管理信息和知識。
情境:我們這里指的是,加載到你的短期記憶里的有關你手頭工作的信息集合。用計算機術語說,混到內存里的正在使用的頁面集合。
多任務處理會耗費你百分之二十至四十的生產力。會將你的8小時削減到5小時。
多任務處理:不同抽象層次上執行多個并發任務。
如果你深入進行了一項任務(如調試),然后被中斷,那么可能需要平均20分鐘返回到原來的工作狀態。
試圖把注意力同時放在幾件事情上,意味著你在每件事情商都會處理得很差。
訣竅42:制定交流規則來管理干擾。
在項目的早期為你的團隊建立交互規則(實際上是打斷的規則)。
訣竅43:少發送郵件,你就會少收到郵件。
訣竅44:為郵件通信選擇你自己的進度。
發送的郵件越少,頻率越低,你就把瘋狂的速度下降至一個較為合理的水平。
保持情境的一個辦法是提高進出情境的物理成本,有助于提醒你隱藏的精神成本。
在CPU的概念中,中斷有兩種:可屏蔽的和不可屏蔽的。可屏蔽的中斷可以被忽略。
訣竅45:屏蔽中斷來保持注意力。
中斷間隔和恢復間隔。
在打斷起效之前,你需要為自己留下一些“面包屑”。留下線索,以便在你返回這項任務時能夠繼續前進。例如,假設我在寫一封電子郵件或者文章,正表達某些想法時,被打斷了。很快寫下幾個單詞——不是完整的句子——只是提醒我自己當前的想法。
事實上,保持情境中任務相關的東西很有益處。僅僅多使用一臺顯示器就可以讓你生產力提升20%~30%。
情境切換扼殺生產力。
訣竅46:使用多臺顯示器來避免情境切換。
訣竅47:優化你的個人工作流以最大化情境。
第9章:超越專家
改變雖然非常困難,但是它最終會屈服于持久的堅持。
“不作為”是敵人,而“錯誤”不是。
新手的大腦有很多可能性,但是專家心理只有很少。——鈴木俊隆禪師
總是要保持一個新手的頭腦。你需要像小孩一樣擁有無窮的好奇心,充滿問題和驚訝。
要像孩子一樣看待事物的真實面貌。
訣竅48:抓住方向盤,你不能自動駕駛。
提到的書籍:
《沒有銀彈》
《演說之禪:職場必知的幻燈片秘技》
《程序員修煉之道:從小工到專家》
《第五項修煉》
《設計模式:可服用面向對象的軟件》
《高效程序員的45個習慣》
《科爾特斯的海》
《用右腦繪畫》
《項目管理修煉之道》
《二維國》
《永恒之王》
《懷疑的鮭魚》
《成為技術領導者》
《公共科學圖書館-生物學》
《意識的解釋》
《盡管去做:無壓力工作的藝術》
《戴珍珠耳環的少女》
影視:
《全面回憶》
《蓋里甘的島》