《程序員思維修煉(修訂版)》從認知科學、神經(jīng)學、學習理論和行為理論角度,深入探討了如何才能具備優(yōu)秀的學習能力和思考能力,闡述了成為一名專家級程序員的關(guān)鍵要素,具體包括:大腦運行機制簡介,如何正確使用和調(diào)試大腦,改進學習能力的具體技巧,如何通過自我引導積累經(jīng)驗,控制注意力的方法。為了讓讀者加深印象,作者還特別設(shè)立了一個“實踐單元”,其中包括具體的練習和實驗,旨在讓讀者真正掌握所學內(nèi)容。
生命中沒有什么是一成不變的,人們需要改變自己的習慣和方法。不論你是程序員、軟件公司管理者、技術(shù)奇人還是思想家,或者你只是想讓自己的大腦更聰明一點兒,所有嘗試改變自己的人,請把本書當作改變的開始……
做一名程序員,就意味著要不斷地學習,不但要學習新技術(shù),還要學習怎么解決應用領(lǐng)域的問題,要了解用戶社區(qū)的奇思妙想,要適應同事的怪癖,等等。在本書中,作者將帶領(lǐng)大家共同經(jīng)歷一次有關(guān)認知科學、神經(jīng)學、學習和行為理論的旅程,探索人類大腦令人驚奇的工作機制,并研究如何克服這一系統(tǒng)局限來提高自己的學習和思考技能。
歡迎大家!
感謝選擇這本書。我們將共同經(jīng)歷一次有關(guān)認知科學、神經(jīng)學、學習和行為理論的旅程。你將看到人類大腦令人驚奇的工作機制,并研究如何克服這一系統(tǒng)的局限來提高自己的學習和思考技能。
我們將開始重構(gòu)你的“濕件”——對大腦進行“重新設(shè)計”和“重新連線”,使你更高效地工作。不論你是程序員、管理者、“知識工人”、技術(shù)奇人還是思想家,或者你只是想讓你的大腦聰明一點,這本書對你都會有所幫助。
我是一名程序員,所以我的例子和言論都離不開軟件開發(fā)領(lǐng)域。但是,如果你不是開發(fā)人員,也不必擔心,實際上程序設(shè)計與使用神秘、深奧的編程語言編寫軟件沒有多大關(guān)系(盡管我們總是習慣性地認為它們很相關(guān))。
程序設(shè)計其實就是解決問題,它需要發(fā)明、創(chuàng)造和靈感。不論你從事什么職業(yè),可能都需要創(chuàng)造性地去解決問題。然而,對于程序員來說,既要受到數(shù)字計算機系統(tǒng)的嚴格約束,又要展開豐富而靈活的人類思考,這就會展示二者的強大力量,又會深深地暴露二者的缺陷。
無論你是一名程序員,還是一位心灰意冷的用戶,可能都曾認為軟件開發(fā)是人類可以想象和遇到的最艱難的工作。它的復雜性耗盡了我們的全部智慧,而一旦失敗則后果是可怕的,且往往極具新聞價值。我們曾經(jīng)讓宇宙飛船偏離了軌道,撞向遙遠的星球;讓昂貴的火箭爆炸,蒙受無法彌補的實驗損失;給消費者寄去索要零美元的催款信,搞得人家莫名其妙;時不時還讓航空旅客滯留在機場。
適才我們發(fā)現(xiàn):這完全是我們自己的錯誤造成的。我們自身往往增加了程序設(shè)計的難度。隨著軟件行業(yè)的不斷發(fā)展,我們似乎失去了作為一名軟件開發(fā)人員所必需的最基礎(chǔ)、最重要的技能。
不過好在,我們此時此地就能改正這個錯誤。本書將告訴你如何去做。
過去40年中,程序員引入到程序中的缺陷的數(shù)量已經(jīng)基本保持不變。盡管程序設(shè)計語言、技術(shù)、項目方法論等都在不斷改進,但缺陷發(fā)生的頻率仍然保持在同一水平,沒能得到改善 。
也許這是因為我們一直關(guān)注著錯誤的事情。盡管技術(shù)上有了很多顯著的改變,但有一樣東西卻始終沒變:我們自己——作為開發(fā)人員的人。
軟件并不是在集成開發(fā)環(huán)境(IDE)或其他工具上設(shè)計出來的,它是在我們的大腦中想象和創(chuàng)造出來的。 軟件是在頭腦中創(chuàng)建的。
Software is created in your head. 思想和概念是需要在團隊(也包括付錢讓我們開發(fā)軟件的人)中分享和交流的。我們已經(jīng)在改進基礎(chǔ)技術(shù)——程序設(shè)計語言、工具、方法上花費了很多時間,當然這也是十分必要的,但現(xiàn)在是我們更進一步的時候了。
現(xiàn)在我們需要研究的真正難題是團隊內(nèi)部和團隊間的交流,甚至更困難的問題是完全陳舊的思想。沒有任何項目是孤島,軟件不可能孤立地創(chuàng)建或者運行。
Frederick Brooks在他的里程碑式的文章《沒有銀彈》[Bro86]中提出:“軟件產(chǎn)品處于應用、用戶、規(guī)則和硬件 的合力之下。這些因素總是在不斷變化,迫使軟件產(chǎn)品也隨之改變!
Brooks的言論把我們推向了社會漩渦的中心。考慮到社會中各個相關(guān)團體的復雜交互影響和社會的持續(xù)變化,在我看來當前最重要的兩項技能就是:
溝通能力;
學習和思考能力。
軟件行業(yè)正在逐步提高溝通能力。特別是敏捷方法(見注解欄),強調(diào)了團隊成員之間、最終客戶和開發(fā)團隊之間的溝通交流。類似《演說之禪:職場必知的幻燈片秘技》[Rey08]這樣的大眾圖書突然熱賣,表明越來越多的人意識到簡單、有效的溝通非常重要。這是個好的開始。
不過,提高學習和思考能力要更難一些。
程序員需要不斷地學習——不僅僅是學習新技術(shù),還包括應用的問題域、用戶社區(qū)的奇思妙想、同事的古怪習慣、行業(yè)的八卦新聞和項目演進的重要特征,我們必須學習學習再學習,持續(xù)不斷地學習,然后把學習成果應用到解決日常遇到的一切新舊問題上。
也許,這些聽起來都相當容易,但學習能力、批判性的思考能力和創(chuàng)造力——所有這些擴展思維的能力,都取決于你自己。這些東西沒人教得了,你必須自己學習。我們往往錯誤地看待老師和學生的關(guān)系:不光是老師在教,學生也要學。學習完全取決于你自己。
我希望本書能夠幫你獲得又快又強的學習能力和更實用的思考能力。
什么是敏捷方法
“敏捷方法”這個詞最早出現(xiàn)在2001年2月的一次峰會上,與會的17個人都是軟件開發(fā)行業(yè)領(lǐng)軍人物,他們創(chuàng)建了各種開發(fā)方法,如極限編程、Scrum、Crystal,當然也包括我們的注重實效的編程。
敏捷方法在很多重要的方面都與傳統(tǒng)的基于計劃的方法不同,最顯著的就是擺脫了死板的規(guī)則,丟棄了陳舊的日程表,注重實時的反饋。
我在本書中會經(jīng)常提到敏捷方法,因為很多敏捷思想和實踐都是與良好的認知習慣相融合的。
Andy Hunt,敏捷開發(fā)權(quán)威人士,敏捷宣言首倡者之一,著名IT圖書出版公司Pragmatic Programmers創(chuàng)始人。除本書外,他還與人合著有多本獲獎圖書,深受讀者歡迎,包括《高效程序員的45個習慣——敏捷開發(fā)修煉之道》等。
第1章 緒論 1
1.1 再提“實用” 3
1.2 關(guān)注情境 4
1.3 所有人都關(guān)注這些技能 5
1.4 本書結(jié)構(gòu) 6
1.5 致謝 9
第2章 從新手到專家的歷程 11
2.1 新手與專家 12
2.2 德雷福斯模型的5個階段 14
2.3 現(xiàn)實中的德雷福斯模型:賽馬和賽羊 21
2.4 有效地使用德雷福斯模型 26
2.5 警惕工具陷阱 32
2.6 再一次考慮情境 34
2.7 日常的德雷福斯模型 35
第3章 認識大腦 38
3.1 雙CPU模式 39
3.2 隨時(24×7)記錄想法 43
3.3 L型和R型的特征 46
3.4 R型的崛起 53
3.5 R型看森林,L型看樹木 57
3.6 DIY腦部手術(shù)和神經(jīng)可塑性 58
3.7 如何更上一層樓 60
第4章 利用右腦 61
4.1 啟動感觀輸入 62
4.2 用右腦畫畫 63
4.3 促成R型到L型的轉(zhuǎn)換 67
4.4 收獲R型線索 77
4.5 收獲模式 85
4.6 正確理解 92
第5章 調(diào)試大腦 94
5.1 了解認知偏見 95
5.2 認清時代影響 103
5.3 了解個性傾向 111
5.4 找出硬件問題 113
5.5 現(xiàn)在我不知道該思考什么 117
第6章 主動學習 121
6.1 學習是什么……不是什么 121
6.2 瞄準SMART目標 124
6.3 建立一個務實的投資計劃 128
6.4 使用你的原生學習模式 132
6.5 一起工作,一起學習 137
6.6 使用增強的學習法 139
6.7 使用SQ3R法主動閱讀 139
6.8 使用思維導圖 142
6.9 利用文檔的真正力量 148
6.10 以教代學 150
6.11 付諸實踐 151
第7章 積累經(jīng)驗 152
7.1 為了學習而玩! 152
7.2 利用現(xiàn)有知識 156
7.3 正確對待實踐中的失敗 157
7.4 了解內(nèi)在訣竅 160
7.5 壓力扼殺認知 164
7.6 想象超越感觀 167
7.7 像專家一樣學習 171
第8章 控制注意力 173
8.1 提高注意力 174
8.2 通過分散注意力來集中注意力 179
8.3 管理知識 181
8.4 優(yōu)化當前情境 187
8.5 積極地管理干擾 192
8.6 保持足夠大的情境 197
8.7 如何保持注意力 200
第9章 超越專家 202
9.1 有效的改變 202
9.2 明天上午做什么 204
9.3 超越專家 205
附錄A 圖片授權(quán) 208
附錄B 參考文獻 209
譯后記 216