此讀書筆記并不完全作為闡述想法,所以在闡述一些問題的時候可能沒有前因后果,更是一種總結性的話語和書上言語的精華,這有點悖論,如果你想了解,請去看《程序員的思維修煉》,這本書可以跨學科,即便你不懂程序,都值得一看,是從思維和大腦層面來開展介紹的。
第2章 從新手到專家的歷程
新手到專家需要經歷5個階段(德雷福斯技能獲取模型)
真正的專家不怕考驗,而輕松面對~
真正的專家很難將自己的行為解釋清楚,而熟練到已經無意識了。
新手:很在乎自己是否能成功,不知道自己是對是錯,不是特別想要學習,只是實現一個立竿見影的目標,不知道如何應付錯誤,錯誤出現不知所措。新手需要指令清單,有規則,有順序。但規則只能讓你啟程,不會讓你走的更遠。
高級新手:高級新手不想要全局思維,當公司在展示全年銷售測量表和數據時,你可能不感興趣,可這預示著明年你在這家公司是否還能繼續干下去。但是,你看不到這種聯系,因為你層次還不夠,只處于較低的技能水平。
勝任者:可以獨立解決自己遇到的問題,并開始考慮如何解決新的問題。處于這樣水平的人通常具備“主動性”和“足智多謀”,往往在團隊中發揮著領導作用,他們是團隊里的好人,但缺乏足夠的能力——自我反思和糾正。
精通者:精通者需要全局思維,而且需要更大的概念框架,過于簡單化的信息,他們會非常沮喪。在精通者中,最明顯的特征:自我改進和反思。同時他們善于傾聽別人的意見,并從那些失敗或者成功的項目中認真觀察、學習和總結。
專家(大師):專家憑直覺工作,并不需要理由。他們有豐富的經驗,并能家當運用,他們著書、寫文章、做演講等等。專家往往通過觀察一些細節(可能常人根本無法覺察到的一些細節)就能判定特征和問題所在,那些無關緊要的會自動過濾更是專家具備的能力。
實踐:
你不知道自己不知道
達爾文:“無知往往來自于自信而不是知識”
上面兩句話,剛開始理解的時候沒有突然頓悟的感覺,但跟媳婦一番討論后,更加理解了:
學生問老師自己所掌握的知識到底有多少?
老師給出了下面的回答:
你現在的知識就仿佛是一個點,而老師比你要多一些,是個圈,老師知道你不知道的,你有可能知道自己不知道的而老師知道的,你通過學習將來會知道老師知道的,然后超過老師去知道老師不知道的,老師也在不停地學習,但隨著知道的越來越多,也就意識到自己不知道的越來越多,因為越大的圓外面就會有更大的圓。

達爾文的總結,一語道破了無知的“自信”(無知者無畏這句古話更是說明了“假自信”),潛意識層面根本就是不知道自己不知道。有時候自信也很可怕,因為你要確認自己到底是否真的知道。
大師都是憑直覺辦事,可公司更希望通過數據或者規則來確定事情是否是“對的”,這種方式試圖在“毀滅"專家,公司往往輕視專家的直覺,認為這是“不科學”和“不可重復”。新手使用規則,而專家使用直覺,具備元認知能力(metacognitive),或者叫具備自我認知能力的人往往出現在較高層次中。
知道你不知道什么。
專家!=老師,教學是一門技能,你在某個領域是專家,但這并不能保證你可以將它教給別人。
有效地使用德雷福斯模型
十年磨一劍,也許需要一輩子或者更長?學漫漫路漫漫,我們需要積極實踐自己:
• 需要一個明確定義的任務
• 任務需要有適當的難度——有挑戰性但可行
• 任務環境可以提供大量反饋,以便于你采取行動
• 提供重復犯錯和糾正錯誤的機會
• 一旦你成為某個領域的專家,在別的領域成為專家就會變得更容易。你已經有了現成的獲取知識的技能和模型構建的能力。
軟件開發的職業特征:
• 程序員往往認為自己是一種工具,從而漠視工作,只是執行分析師的指令,而不期望自己對項目的設計和架構有所創見。
• 由于薪酬等級的不平等,專家級的程序員爭先恐后的離開一線編碼,通過管理、教學或者巡回演講賺更多的錢。
• 軟件工程教育開始受到質疑。很多人認為正規的實踐模式是最好的教育方法。這種對正規方法和工具的過度依賴削弱了實踐中真正經驗的作用。
R&D精神(Rip off and duplicate, 偷學技藝/偷師學藝),我們可以從他們的工作中借鑒很多經驗教訓并應用到軟件開發中。
勇于承擔責任:
• 新手往往只是執行命令,新手過渡到勝任者最大的區別在于能獨立解決問題
和承擔責任。
• 通過觀察和模仿來學習(R&D)。如果你有孩子你會發現,他們很少照你說的做,而是大多時候在模仿你。
• 模仿的同時就是實踐的過程,沒有實踐就沒有技能。模仿->吸收->創新
• 保持實踐以維持專家水平,全世界最優秀的那些專家沒有因為做了20年以上開發而不去編碼了,實踐是保持技能的唯一手段。
警惕工具陷阱:
曾經,在我剛接觸軟件領域的時候,曾一度認為UML,MDA以及TDD是未來解決軟件的必要良方,甚至也將其濫用,然而合宜的工具需要放到合宜的
環境去運用,模型只是工具,而非鏡子。如果你需要創造力、直覺或者獨創能力,避免使用形式方法。
再次考慮情境:
高端的顧問最喜歡回答說:“具體情況具體分析”,當然他們是對的,他們的分析依賴于很多事情——所有那些專業人士懂得去尋找至關重要的細節,同
時也忽略無關的細節。
在系統思維中,如面向對象編程,往往是事物之間的聯系最讓人感興趣,而不是事物本身。這也是面向對象化編程的特點,你大多數時候在想事物本身的聯系,而實際問題的解決卻放到了后面,本人的目前的理解是,面向對象編程真的有那么重要么?或許只是在某些方面比較重要罷了,擴展性和低耦合的確是面向對象的實踐的目的,可除此之外純為了面向對象而行動,就存在濫用傾向了。例如java這種語言的面向對象純屬為統一思想而設置的程序員枷鎖。
日常中的德雷福斯模型:
• 新手需要快速成功和與情節無關的規則,而專家需要獲得全貌。理想情況下,你希望團隊里混合各種層次技能水平的人,擁有一個全部是專家的
團隊存在它的難處。當所有人在考慮森林的時候,你也需要一些人來關注一棵棵大樹。
• 學習如何學習的技能。
總結:
了解自己出于德雷福斯模型中的哪個階段,并自我評價,了解你的團隊成員,他們的技能階段,以及對你有何幫助。回顧曾經團隊經歷的問題,并運用德雷福斯模型解釋這些問題,對于已知的問題是否能通過德雷福斯模型解決或者避免?