前言
最近讀論文、做事情感覺效率太低,且注意力不太集中,需要去開拓下思維,調整下自己的學習方法,碰巧看見了這本書《程式員的思維修煉:開發認知潛能的九堂課》,沒有醍醐灌頂,但起碼受益匪淺;
前面五章,大多是在講德雷福斯模型,一個從新手到專家的曆程,一個人從按規則行事的模式轉變為使用直覺的模式;感覺對于目前的狀态過于遙遠,可能在步入社會工作後會有更深的認識;這裡主要學一些我在本書中學習到的一些提高效率的手段,比如主動學習、控制注意力這些;
主動學習
如果你不知道去往何處,那麼你必須多加小心,因為你很可能無法到達那裡;
——尤吉·貝拉(Yogi Berra),前美國紐約揚基棒球隊接球手
瞄準SMART目标
使用SMART方法實作目标能夠更加專注,在這裡,SMART代表具體的、可度量的、可實作的、相關的和時間可控的(Specific, Measurable, Achievable, Relevant, and Time-boxed);
我們往往對于這兩個詞目标(goal)和目标任務(objective)的意思有一些模糊。明确地說:目标是一種理想狀态,通常是短期的,是你努力要達到的狀态。目标任務是一種幫你接近目标的事物。但是不要在這上面太過計較,不同人使用這些詞語稍有不同;即目标任務使你更靠近目标;
具體的
首先,一個目标任務應該是具體的。也就是說,隻說“我想學習Erlang”是不夠的。應該把事情具體化,例如“我想要用Erlang編寫一個可以動态生成内容的Web伺服器”;
可度量的
如何知道你何時完成?為了努力實作目标任務,不管采用什麼方法,你必須能夠度量它;如果你認為無法度量自己的目标任務,那麼很可能它還不夠具體;但是一定要采取穩紮穩打、步步為營的過程。你不能期望一周之内減掉五十英鎊或者利用一個周末就學會一門全新的程式設計語言和它的全部函數庫。度量你的目标任務,但是要采取增量進步的方法;
可實作的
一個你無法達到的目标不是目标,隻是一種瘋狂、吸食靈魂的自我挫敗。有些事情對大多數人是不現實的;是以,先确定目标是否合理。你也許可以在下周用新語言編寫一段“Hello,World! ”或者一個簡單應用,但是你可能無法編寫一個完整的Web應用架構和一個帶有神經網絡優化算法的使用者界面構造器;
是以,從你現在所處的情況着眼,讓每一個目标都可實作;
相關的
這個目标真的與你有關嗎——對你重要嗎?你對此有熱情嗎?是在你控制之下的事情嗎?如果不是,這個目标就是不相關的;目标需要相關,需要在你掌控之中;
時間可控的
這可能是目标最重要的一個特性,這意味着你需要設定一個最後期限;沒有期限,目标會逐漸衰退,永遠被每天更緊急的事情所排擠,這樣它永遠都不會實作;
再強調一遍,穩紮穩打。采取循序漸進、比較細小的裡程碑;當實作它們後,你會更有動力去實作下一個裡程碑;
這種方法幫助你從自己的角度(“我”)、從更積極的角度(“我要”)來明确目标,要麼用一般現在時,要麼給出明确的時間表述(“我會在××時間之前完成zyzzy”);
“設定目标是第一步。下一步行動是建立小任務以幫助你每天或每隔一段時間都能達到某種程度。你建立的小任務越多,你就越容易看清自己與目标的距離。”
——Johanna Rothman
務實的投資計劃
定期投資(成本平均法)
在金融領域,你需要采用成本平均法(dollar-costaveraging)。這意味着如果你定期購買股票,有時你會付出很多,有時你會收益很多。但是長期來看,這些差異互相抵消,一般最後你都會獲得較好的回報;
識投資也是一樣。你需要定期投資最低限度的時間量。養成一種習慣,如果需要的話。躲到你的家庭辦公室裡去或者走進有無線網絡的咖啡廳。并非每期學習都同樣富有成效,但是隻要定期安排學習,長期來看一定會成功。如果你一直在等待空閑時間或者等待靈感的突現,那麼它永遠都不會發生。
例如,我想學習FXRuby GUI工具包,在坐下來認真學習之前,我首先得有相關的書籍,下載下傳需要的軟體,想好用FXRuby編寫什麼東西。我也需要配置設定足夠的時間研究它,隻是周六下午或者周二晚上很可能是不夠的;
使用原生學習模式
既然已經建立了主動學習的良好架構,我們現在需要看看學習本身。在本章剩餘部分,我們将研究一些具體方法來幫助你更快更好地學習。以下是主要提綱。
❑ 主動閱讀和總結書面材料的更好方式
❑ 使用思維導圖探索和發現模式和關系
❑ 以教代學
單獨使用上述任一種方法本身就能讓人受益匪淺。合在一起,它們更可以使你成為一台高效的學習機器。但是每一個人都是不同的,每個人的最佳學習方法也是不同的。是以,你可能發現某些方法最為有效——請記住,沒有放之四海而皆準的辦法。
使用SQ3R法主動閱讀
書面的指令通常被認為是最無效的
SQ3R法
❑ 調查(Survey):掃描目錄和每章總結,得出總體看法 =>首先,帶着問題審視你要看的書。看一看目錄、各章介紹和總結,以及作者留給你的其他标志性内容。你需要在深入細節之前得到一個總體印象;
❑ 問題(Question):記錄所有問題 => 這項技術如何解決這個問題?我是要學習如何使用這項技術嗎?或者這項技術實際是指向另一個源頭嗎?把各章節的标題改寫成問題,這些都是你期望這本書回答的問題;
❑ 閱讀(Read):閱讀全部内容 => 現在你可以閱讀這本書的全部内容了。如果可以的話,随身攜帶這本書,這樣你可以在等待會議或約會、在火車上或者飛機上或者任何空閑的時候閱讀。在困難的部分放慢速度,如果内容不是很清楚就重新閱讀;
❑ 複述(Recite):總結,做筆記,用自己的話來描述 => 随着閱讀深入,複述、回想和使用你自己的語言改寫書本最重要的部分。要點是什麼?對想法做一些初步的記錄。創造一些縮寫來幫助你記憶等。真正感受這些資訊,利用你的R型、通感建構等等。這個主題作為一部電影看起來像什麼?卡通嗎?
❑ 回顧(Review):重讀,擴充筆記,與同僚讨論 => 最後,回顧這本書。如有必要,重新閱讀一些部分,當你再次發現一些有趣的内容時,可以擴充筆記;
這項技術的第一個有用方面是主動性。人們不再是随機地撿起一本書閱讀,而不管記住或者沒有記住多少内容。這項技術是一種更周到、更自覺、更有意識的方法。
測試驅動學習法
重複閱讀同樣的材料或者重複學習相同的筆記,不會有助于你記住材料,可以選擇測試,通過重複回顧材料來不斷測試你自己,這種方法有效得多;
使用思維導圖
無論是筆記還是思維導圖,手寫是關鍵。例如,聽講座時做筆記真的能幫助我記憶講座内容——即使我再也沒有看過這些筆記。
我發現最有效的辦法是在聽講時先草草地記筆記(這可以使你在提取要點的同時不至于分心),然後把這些草稿筆記整理成正式筆記。即使我從沒有再看過這些筆記,但是整理草稿筆記的過程是最有價值的。對思維導圖,你也可以做同樣的事情——先做一個粗糙的,然後根據需要重畫。重畫有助于在大腦中形成更多關聯。
當你不完全确定你會發現什麼時,思維導圖是最有效的。讀書時做筆記是一個例子;下一次讀書時(也許嘗試SQ3R),請用思維導圖的方式做筆記;你會對主題有一個大體上的認識,但是随着具體細節的出現,你開始看清哪些條目是互相聯系的,它們是如何聯系的,導圖會不斷填充,了解的思路就會出現。然後,當你進入SQ3R的回顧階段時,根據你的了解重畫和修改思維導圖。你能夠利用思維導圖更新你的記憶,這種方法比其他筆記形式或者重新看書要有效得多;
使用詞語作為标題,你不需要長篇大論,甚至連一句完整的句子也不必有。利用圖示代表關鍵想法。重要的連線使用粗體,不确定的關聯使用細長線。寫上你目前知道的一切,即使你不知道它适合歸在哪裡。
以教代學
和橡皮鴨聊天
對一個領域不相幹的人用通俗的話講清楚你的工作;你可能會在這個過程中驚奇地發現一些新的收獲和領悟;
積累經驗
當面對一個棘手的問題時,你可以采用幾種經典的方法。首先,能否把問題分成若幹個更小的、更易于管理的部分?這種功能分解對軟體開發人員非常實用:把事物分成大腦足以容納的幾部分;
波利亞的解題方法
解決問題時,先提問自己:
❑ 未知量是什麼?
❑ 已知量是什麼?
❑ 條件是什麼?
然後制定一個計劃,執行之,回顧結果。波利亞建議的一些技巧(如下所示)聽起來非常熟悉:
❑ 努力回想擁有相同或類似未知量的常見問題;
❑ 畫一張圖;
❑ 解決一個相關的或者更簡單的問題,放寬限制,或者使用已知量的子集;
❑ 所有已知量和條件都用上了嗎?如果沒有,為什麼?
❑ 嘗試重新叙述這個問題;
❑ 嘗試從未知量推到已知量;
波利亞的一個關鍵建議是尋找以前類似的解決方案:如果你解決不了這個問題,你知道如何解決類似的問題嗎?也許相似點是完全一緻的(比如“這就像我上周看到的bug”),或者是一種隐喻關系(比如“資料庫的工作情況就像是一灘水”);
好問題是沒有答案的。它不是一個需要擰緊的螺栓,而是一顆種下的種子,由它可以收獲一片思想的綠洲;
——約翰·安東尼·查爾迪(John Anthony Ciardi,1916—1986),美國詩人和評論家
總結
總結的是第六章到第八章的内容,其他的話大多屬于一種激勵内容或者對于已經懂得的知識的擴充,比如如何正确對待實踐中的失敗等等;