《程序員的修煉——從優(yōu)秀到卓越》讀書筆記

這本書作者是stack overflow的創(chuàng)始人之一

里面有幾個很有意思的觀點值得記錄分享一下。

待辦事項不靠譜

每24小時就有一個To-Do軟件發(fā)布,所以你大概需要一個To-Do軟件來跟蹤發(fā)布的新的To-Do軟件。

所以不需要用到代辦列表這種東西。它是一種折磨,會給你一種你正在進(jìn)行的錯覺。未完成的事又會給你負(fù)罪感和壓力。

最好就只在代辦列表上留一項。

或者每天清早起床時就想出今天一天最重要的三個事然后完成它。

你沒有說服我

如果你想影響別人,你必須有能力說服他們。

成功的軟件工程師要有好的說服能力。

方法:

從總體上說,觀點是相當(dāng)出色的

做事的方法自下而上

總能帶頭親自做事

擁有足夠的耐心等待機(jī)會的到來

勿以專家自居

作為一個專家,重要的不是告訴別人你就知道什么,而是要清楚你該問什么樣的問題。

持續(xù)學(xué)習(xí)的過程

克服了漫不經(jīng)心:我現(xiàn)在明白了,我需要學(xué)點東西

克服了恐懼:我覺得我可以學(xué)會這個技能。我會對它變得很了解,而不會懼怕比我懂得多的人

我變得有條理:我不再覺得自己不懂裝懂或者不學(xué)無術(shù)。我覺得我有能力參加討論或?qū)嵺`。我對自己說的話很有信心。

我超越了自身能力:現(xiàn)在我覺得對自己有了更高的要求。我想冒一點風(fēng)險,富有創(chuàng)造力,不斷學(xué)習(xí),想要與那些充滿熱情的人共事。

管理中要有信任

大型軟件項目成功率很低,最好的管理方案是“信任”

信任也是無法代替管理的

關(guān)于績效考核:

丘吉爾有句名言,要不是由于其他形式都行不通,民主制度會是最糟糕的政府模式(democracy is the worst form of government except for all those others that have been tried)

毫無疑問,績效考核可能會產(chǎn)生糟糕的影響,但是在有更好的形式替代之前想要摒棄績效,只不過是圖一時口舌之快。

博伊德迭代法則

迭代的速度勝過迭代的質(zhì)量

一些測試的建議:

單元測試必須小而快,以便每次編譯時都能運行

可用性測試:以兩周為一個周期來做一些小改動,并且快速拋棄掉不好的部分

大多數(shù)敏捷開發(fā)都建議,迭代周期不超過4周

軟件測試就是(在發(fā)布之前)讓它提早失敗,經(jīng)常失敗。

功能規(guī)范書最好能簡明扼要,并且持續(xù)改進(jìn)

切忌一根筋

《編程大師訪談錄》

比爾蓋茨的一個回答。

問:若要做好編程工作,必須積累很多年的經(jīng)驗才行嗎?

比爾?蓋茨答道:"不是這樣的。我覺得在最開始的3?4年后,你是不是一名優(yōu)秀的程序員就已經(jīng)定型了。更多年的歷練,只會讓你更多地了解到大項目管理和人員管理。3?4年的時間足以看清你的未來。在微款,沒有一個人是在一開始幾年毫無?建樹,而在后來出人意料地成為多面手的。通過和一個人聊他所寫的程序,我可以馬上看出他是不是一名優(yōu)秀的程序員。"

但是你可以成為一名更好的程序員,培養(yǎng)自己對于編程周邊所有事情的熱情。

后來在2005年的一次訪談中,比爾?蓋茨繼續(xù)闡述了他在1986年的觀點。

工作的本質(zhì)并不是閉門造車(埋頭寫代碼),我相信這一點很容易理解。最最匱乏的人才是那些既對工程技術(shù)有超強(qiáng)的領(lǐng)悟能力,又可以與核心開發(fā)人員建立良?好的關(guān)系,并且可以充當(dāng)與客戶、市場等之間橋梁的人。像這種工程管理人才,即?使在微軟也是很缺的,所以我們不得不經(jīng)常鼓勵一些人去嘗試。

我很希望看到有更多人投身于這些職位。他們除了掌握基本的工程技能之外,也把人員管理和群體動力看作是一項對自己的歷練。要是這樣,那就太好了 !

只有技能不夠,客戶、行業(yè)和業(yè)務(wù)也很重要。

最牛的編碼套路

這一小節(jié)太好了。整個摘抄下來。

最近,我大量閱讀了Steve Yegge的文章。其中有一篇叫"Practicing?programming"(練習(xí)編程),寫成于2005年,讀后令我驚訝不已。

與你所相信的恰恰相反,單純地每天埋頭于工作并不能算是真正意義上的鍛煉?。參加會議并不能鍛煉你的人際交往能力;回復(fù)郵件并不能提高你的打字水平。?你必須定期留出時間,集中鍛煉,這樣才能把事情做得更好。

我認(rèn)識很多杰出的程序員——這是在亞馬遜工作最好的額外"福利"之一。如果仔細(xì)觀察他們,你會發(fā)現(xiàn)他們時時都在鍛煉。他們已經(jīng)很優(yōu)秀了,但仍然不忘鍛煉。他們鍛煉的方法林林總總,而我在這篇文章中只會介紹其中的幾種。

據(jù)我了解,這些杰出程序員之所以如此成功,就是因為他們一直在鍛煉。完美的身材要靠定期的鍛煉才能獲得,而且必須堅持鍛煉才能保持,否則身材就會走形。?對于編程和軟件工程來說,道理是一樣的。

這是一個重要的區(qū)別我每天都開車去上班,但我的駕駛水平遠(yuǎn)遠(yuǎn)不如專業(yè)車手;類似的情況,天天編程可能并不足以使你成為一名專業(yè)的程序員。那么,什么才能把一個普通人變成一名專業(yè)車手或者專業(yè)程序員昵?你需要鍛煉什么呢?

答案就在《科學(xué)美國人》的一篇名為"the expert mind"(專家思維)的文章里。

愛立信提出,重要的并不是經(jīng)驗本身,而是"努力地學(xué)習(xí)",也就是要不斷地挑戰(zhàn)自身能力之外的東西。一些狂熱的愛好者花費了大量的時間去下棋,打高爾夫球或者玩樂器,但他們可能始終停留在業(yè)余水平,而一個訓(xùn)練有素的學(xué)生卻可以在相對較短的時間里超越他們,原因就在這里。值得注意的是,在提高水平方面,花費在下棋上的大量時間(即使參加各種比賽)似乎還是比不過專門的訓(xùn)練來得更為有效。訓(xùn)練的主要價值在于發(fā)現(xiàn)弱點,并有針對性地進(jìn)行提高。

"努力地學(xué)習(xí)"意味著,要常常去處理那些剛好在你能力極限上的問題,也就是那些對你來說有很大可能失敗的事情。如果不經(jīng)歷一些失敗的話,你可能就不會成長。你必須不斷地挑戰(zhàn)自我,超越自己的極限。

那樣的挑戰(zhàn)有時會在工作中碰到,但也未必。將鍛煉從職業(yè)工作中分離出來,

這在編程領(lǐng)域常被人稱為"編碼套路"(code kata)。

所謂套路,就是一系列的招式。這個概念借鑒于武術(shù)。

如果你想要看一些編碼套路的例子(也就是努力學(xué)習(xí)和磨練編程技能的方法),steve Yegge的文章里倒是提出了一些不錯的建議。他把它們稱作為“實踐演練”:

1.寫一份自己的簡歷。把自己所有的相關(guān)技能都羅列出來,然后把那些在100年后還用得到的標(biāo)出來。給每個技能打分,滿分為10分。

2. 羅列出你所景仰的程序員。盡量包括那些與你一起工作的人,因為你會在工作中從他們身上獲取一些技能。記錄下他們身上的1?2個閃光點,也就是你希望自己有所提高的方面。

3. 查看維基百科上的"計算機(jī)科學(xué)"欄目,找到"計算機(jī)領(lǐng)域先驅(qū)者"這個分類(網(wǎng)址:http://zh.wikipedia.org/wiki/Category 計算機(jī)領(lǐng)域先驅(qū)者),從這個列表中挑選一個人,閱讀他的事跡,并且在閱讀讀時打開任何你感興趣的鏈接。

4. 花20分鐘通讀別人的代碼。讀出色的代碼和讀糟糕的代碼都是有益的,兩者都要讀,輪流切換。如果你無法感覺出它們之間的區(qū)別,可以求助于一位你尊敬的程序員,讓他給你展示一下什么是出色的代碼,什么是糟糕的代碼。把你讀過的代碼也給別人看看,問問他們的看法。

5. 羅列出你最喜歡的10個編程工具——那些你覺得你用得最多、缺了它們不行的工具。從中隨機(jī)挑選一個,花一個小時去閱讀它的文檔。在這一個小時里,努力去學(xué)習(xí)這個工具的某個你不曾意識到的新功能,或者發(fā)現(xiàn)某種新的使用方法。

6.想一想,除了編程之外作最擅長什么事情?再想一想,你是通過怎樣的鍛煉才變得如此熟練和專業(yè)的?這對于你的編程工作又有什么啟發(fā)呢?(怎么把這些經(jīng)驗應(yīng)用到編程方面?)

7.拿出一疊簡歷,并和一組面試官在同一個房間里持上一個小時。確保每份簡歷都至少被3個面試官看過,并且要給出1?3分的評分。針對那些不同面試官評判大相徑庭的簡歷展開討論。

8.參與一個電話面試。事后寫下你的反饋,拋出你的觀點,然后與主持電話面試的人聊一聊,看看你們是否達(dá)成了一致的結(jié)論。

9. 進(jìn)行一次技術(shù)面試,并且被面試的人應(yīng)該是某個你不太了解的領(lǐng)域里的專家。讓他假定聽眾在該領(lǐng)域里一無所知,因此請他從最基礎(chǔ)的講起。努力去理解他所說的,必要時問一些問題。

10. 有機(jī)會參與別人的技術(shù)面試。期間,你只是認(rèn)真地聽,認(rèn)真地學(xué)。在應(yīng)聘者努力解決技水問題的同時,你也要在自己腦子里嘗試解決這些問題。

11. 找到一個能和你交換實際問題的人,每隔一周,相互交流編程問題?;?10?15分鐘來嘗試解決這些問題,再用10?15分鐘進(jìn)行討論(無論能否解決)。

12. 當(dāng)聽到任何一時間你也無法解決的面試問題時,趕緊回到你的座位上,把這個問題用電子郵件發(fā)給自己,以留作日后的提醒。在那一周里找出點時間,用自己最喜歡的編程語言來解決它。

我之所以喜歡steve開出的這個清單,是因為它看上去很全面。有些有些程序員一想到"鍛煉",總認(rèn)為就是一些編碼上的難題。但在我看來,編程更在于人,而不是代碼。因此,通過解決世上所有的、晦澀的編程面試題目,來提高你的個人能力,?這種方法是有局限的。

關(guān)于"努力地學(xué)習(xí)",我也很喜歡Peter Norvig在"Teach Yourself Programming?in Ten Years" (花10年時間自學(xué)編程)一文中提出的諸多建議:

1. 與別的程序員交流。讀別人的代碼。這比任何書籍或培訓(xùn)課程都更重要。

2. 動手寫程序!最好的學(xué)習(xí)方法就是邊做這學(xué)。

3. 在本科或研究生的課程中學(xué)習(xí)編程課程。

4. 找一些項目來做,并且需要與其他程序員形成團(tuán)隊來合作。在項目的進(jìn)行過程中,學(xué)會辨別最出色的程序員以及最槽糕的程序員。

5. 在項目中跟隨別的程序員一起工作,了解如何維護(hù)那些不是你寫的代碼,并且學(xué)習(xí)如何寫出利于他人維護(hù)的代碼。

6. 學(xué)習(xí)多種不同的編程語言,特別是那些與你現(xiàn)在所熟悉的語言有著不同的世界觀和編程模型的。

7. 了解硬件對軟件的影響。知道你的計算機(jī)執(zhí)行一條指令需要多少時間,從內(nèi)存中取出一個字(在有緩存或沒緩存的情況下)需要多少時間,在以太網(wǎng)(或者因持網(wǎng))上傳輸數(shù)據(jù)需要多少時間,從磁盤中讀取連續(xù)的數(shù)據(jù)或者在磁盤上跳轉(zhuǎn)到另一個位里需要多少時間,等等。

你還可以從Dave Tomas的21種實用的編碼套路中獲取靈感(codeKata.com),或者你更愿意加入一個你家當(dāng)?shù)氐?編程武館"(CodingDojo.org) 。

對于"努力的學(xué)習(xí)",我無法像Steve、Peter或者Dave那樣提供一個長長的建議列表。我遠(yuǎn)不如他們有耐心。實際上,在我看來,"編程套路"只需下面兩個招式。

1.寫博客。我在2004年初創(chuàng)辦了codingHorror.eom博客,作為我自己努力學(xué)習(xí)的一種形式。它在一開始很不起眼,到后來成為我職業(yè)生涯中做過的最重要的一件事。所以,你也應(yīng)該寫博客。最后"聞達(dá)于天下"的人,往往就是那些能夠有

效書寫和溝通的人。他們的聲音最響亮,是他們在制定游戲規(guī)則,并且引領(lǐng)世界的潮流。

2.積極參與著名的開源項目。所有的高談闊論聽起來都很好,但是,你是一個大話王還是一名實干家呢?別光說不練,這個非常重要,因為人們會用你的行動來衡量你,而不是你的言論。努力在公眾面前留下一些實實在在有用的東西吧,到?時候你就可以說:"我在那個項目中出過力?!?/p>

當(dāng)你能編寫精彩的代碼,并且能用精彩的言辭向世人解釋那些代碼時,到那時候,我會覺得你已經(jīng)掌握了最牛的編碼套路!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本書是筆者上一篇讀書筆記高效能程序員的修煉的姊妹篇,同樣介紹了一些程序員需要了解的,有關(guān)于編程本身以外的一些事情。...
    J_Knight_閱讀 3,321評論 23 63
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,119評論 25 708
  • 本文把程序員所需掌握的關(guān)鍵知識總結(jié)為三大類19個關(guān)鍵概念,然后給出了掌握每個關(guān)鍵概念所需的入門書籍,必讀書籍,以及...
    dle_oxio閱讀 11,387評論 6 244
  • 夜話: 清貧耐得始求官 寫下小文《官有所值》,又夜讀《為官楷模陳廷敬》。陳廷敬次子做地方...
    邯鄲趙金海閱讀 855評論 0 0
  • 在這浮華的世界,在這喧囂的歲月,我們是落入紅塵中的一粒微塵。 我們窺視著周遭的一切,覬覦著身外的富有,滿足著迷失的...
    秦公子書影閱讀 305評論 0 1

友情鏈接更多精彩內(nèi)容