《程序員的職業(yè)素養(yǎng)之代碼整潔之道》成為專業(yè)人士必讀

程序員的職業(yè)素養(yǎng)之代碼整潔之道

此處悼念1986年1月28日挑戰(zhàn)者號(hào)航天飛機(jī)事故中喪生的七名優(yōu)秀的宇航員

接下來(lái)大家?guī)е韵聠?wèn)題去閱讀此書(shū)《程序員的職業(yè)素養(yǎng)之代碼整潔之道》
也可以閱讀此文章 本人盡可能將書(shū)中精華總結(jié)于此文章中

  • 什么是專業(yè)人士
  • 軟件專業(yè)人事如何行事
  • 軟件專業(yè)人士如何處理沖突,應(yīng)對(duì)很緊的工期,如何和不講道理里的管理人員打交道
  • 軟件專業(yè)人士何時(shí)應(yīng)該說(shuō)"不" 怎么說(shuō)
  • 軟件專業(yè)人士如何應(yīng)對(duì)壓力

一 專業(yè)主義

1.1 專業(yè)主義

專業(yè)主義的精髓就在于將公司利益視同個(gè)人利益.也就是意味著擔(dān)當(dāng)責(zé)任

1.2 擔(dān)當(dāng)責(zé)任
1.3 首先不行損害之事
  • 1.3.1 不要破壞軟件功能
    所謂專業(yè)人士就是能對(duì)自己的犯下的錯(cuò)誤負(fù)責(zé)的人,哪怕那些錯(cuò)誤實(shí)際上在所難免,失誤率永遠(yuǎn)不可能為零 但是你有責(zé)任讓他無(wú)線接近于零
    簡(jiǎn)單的做到以下幾點(diǎn):
    • 盡可能的讓 QA 找不出問(wèn)題
    • 要確信代碼正常運(yùn)行
    • 自動(dòng)化 QA
  • 1.3.2 不要破壞結(jié)構(gòu)
    成熟的專業(yè)開(kāi)發(fā)人員知道 聰明的人不會(huì)為了發(fā)布新功能而破壞結(jié)構(gòu) ,結(jié)構(gòu)良好的代碼更靈活, 以犧牲結(jié)構(gòu)為代價(jià),得不償失, 將來(lái)必回追悔莫及
    所有軟件項(xiàng)目根本指導(dǎo)原則是:軟件要易于修改
1.4 職業(yè)道德

你應(yīng)該計(jì)劃每周工作60個(gè)小時(shí), 前40個(gè)小時(shí)是給雇主的,后20個(gè)小時(shí)是給自己的, 在這剩余的20個(gè)小時(shí)里 ,你應(yīng)該多看書(shū), 練習(xí), 學(xué)習(xí), 或者做其他能提升職業(yè)能力的事情

  • 1.4.1 了解你的領(lǐng)域
  • 1.4.2 堅(jiān)持學(xué)習(xí)
    軟件行業(yè)的飛速改變 意味著軟件開(kāi)發(fā)人員必須堅(jiān)持廣泛學(xué)習(xí)才不至于落伍 : 時(shí)刻記住不寫(xiě)代碼的架構(gòu)師必然遭殃,他們很快會(huì)發(fā)現(xiàn)自己跟不上時(shí)代了,不學(xué)習(xí)新語(yǔ)言的程序員同樣會(huì)遭殃,他們只能眼睜睜的額看著軟件業(yè)一路發(fā)展,把自己拋在后邊,學(xué)不會(huì)新規(guī)矩和新技術(shù)的開(kāi)發(fā)人員更可憐他們只能在日漸淪落的時(shí)候看著身邊人越來(lái)越優(yōu)秀
  • 1.4.3 練習(xí)
    業(yè)精于勤荒于嬉
  • 1.4.4 合作
    學(xué)習(xí)的第二個(gè)最佳方式就是與他人合作
  • 1.4.5 輔導(dǎo)
    俗話說(shuō)教學(xué)相長(zhǎng)想迅速牢固的掌握某些事實(shí)和觀念 最好的辦法就是與你負(fù)責(zé)的人交流這些內(nèi)容
  • 1.4.6 了解業(yè)務(wù)領(lǐng)域
    每開(kāi)發(fā)一個(gè)新領(lǐng)域項(xiàng)目的時(shí)候 就要了解自己開(kāi)發(fā)的解決方案所對(duì)應(yīng)的業(yè)務(wù)領(lǐng)域 如果你編寫(xiě)財(cái)務(wù)系統(tǒng) 你就應(yīng)該對(duì)財(cái)務(wù)領(lǐng)域有了解,如果你編寫(xiě)旅游應(yīng)用程序 那么你需要去了解旅游業(yè)
  • 1.4.7 與雇主/客戶保持一致
  • 1.4.8 謙遜

二 說(shuō) "不"

能就是能 不能就是不能 不要說(shuō)"試試看" ----尤達(dá)

專業(yè)人士應(yīng)該懂得說(shuō)"不" 事實(shí)上 優(yōu)秀的經(jīng)理人對(duì)于敢于說(shuō)"不"的人總是求賢弱渴 因?yàn)橹挥懈矣谡f(shuō) "不" 的人 才能真正做成一些事情

2.1 對(duì)抗角色

你的經(jīng)理要求你在明天之前完成登錄頁(yè)面 這就是他在追求和捍衛(wèi)的一個(gè)目標(biāo) 那是進(jìn)他的職責(zé).如果你明知第二天之前不可能完成登錄頁(yè)面 嘴上卻說(shuō)"好的 我會(huì)試試的" 那么你就是失責(zé)了 這時(shí)候 盡職的文藝選擇是說(shuō)"不 . 這不可能"

2.2 高風(fēng)險(xiǎn)時(shí)刻

越是關(guān)鍵時(shí)刻 "不"字就越有價(jià)值
這一點(diǎn)應(yīng)該不證自明 當(dāng)公司存亡成敗皆系于此時(shí) 你必須盡己所能 把最好的信息傳遞給你的經(jīng)理 這往往意味著要說(shuō)"不"

2.3 要有團(tuán)隊(duì)精神

有團(tuán)隊(duì)精神的人會(huì)頻繁與大家交流 會(huì)關(guān)心隊(duì)友 會(huì)竭力做到盡職盡責(zé)

  • 2.3.1 試試看
    允諾"嘗試" 就意味著你承認(rèn)自己之前未盡全力 承認(rèn)自己還有余力可施 允諾嘗試意味著只要你在加把勁 還是可以達(dá)成目標(biāo)的 而且這是一種表示你將再接再厲去實(shí)現(xiàn)的目標(biāo)的承諾 因此只要你要允諾自己去嘗試 你其實(shí)就是在承諾你會(huì)確保成功 這樣 壓力就是你來(lái)抗了 如果你的嘗試 沒(méi)有達(dá)到預(yù)期的效果 那就表示你失敗了

三 說(shuō) "是"

3.1 承諾用語(yǔ)

做出承諾,要包含三個(gè)步驟

  • 1 口頭上說(shuō)自己將會(huì)去做
  • 2 心里認(rèn)真對(duì)待做出的承諾
  • 3 認(rèn)真付諸行動(dòng)

如果你能夠一直信守承諾 ,大家會(huì)以為你是一名嚴(yán)謹(jǐn)負(fù)責(zé)的開(kāi)發(fā)人員 在我們這行中 也是最有價(jià)值的評(píng)價(jià)了

3.2 學(xué)會(huì)如何說(shuō) "是"

和學(xué)會(huì)說(shuō) 同樣重要的是 要學(xué)會(huì)說(shuō)

專業(yè)人員不需要對(duì)所有請(qǐng)求都回答"是" 不過(guò) 他們應(yīng)該努力尋找創(chuàng)新的方法 盡可能做到有求必應(yīng) 當(dāng)專業(yè)人士給出肯定回答是 他們會(huì)使用正式的承諾 一確保各方能明白無(wú)誤的理解承諾的內(nèi)容

四 編碼

4.1 做好準(zhǔn)備

編碼是一項(xiàng) 頗具挑戰(zhàn)也十分累人的智力活動(dòng) 相比其他類型的活動(dòng) 編碼要求更加聚精會(huì)神 因?yàn)樵诰幋a是你必須平衡互相牽制的多種因素
如果感到疲勞或者心煩意亂,千萬(wàn)不要編碼 相反要找到一種方法來(lái)消除干擾 讓心緒平靜下來(lái)

  • 4.1.1 凌晨三點(diǎn)寫(xiě)出的代碼 ??(驚呆了)
    疲勞的時(shí)候 千萬(wàn)不要寫(xiě)代碼 奉獻(xiàn)精神和職業(yè)精神更多意義上指要遵循紀(jì)律原則而非長(zhǎng)時(shí)間工作的的工作狂 要確保自己已經(jīng)將睡眠,健康和生活方式調(diào)整到最佳狀況,這樣才能做到在每天的8小時(shí)工作時(shí)間內(nèi)全力以赴
4.2 流態(tài)區(qū)

這是程序員在編寫(xiě)代碼時(shí)會(huì)進(jìn)入的一種意識(shí)高度專注 但思維視野卻會(huì)收攏到狹窄的狀態(tài).在這種狀態(tài)下,他們會(huì)感到效率極高;在這種狀態(tài)中他們會(huì)感到"絕無(wú)錯(cuò)誤" 因此他們一直苦苦追求進(jìn)入這種狀態(tài) 并經(jīng)常以能在那種狀態(tài)下 維持多久來(lái)衡量自我價(jià)值

4.3 阻塞

有的時(shí)候.就是死活寫(xiě)不出代碼.我自己就曾經(jīng)遇到過(guò),也看到其他人身上遇到過(guò)這種情況,干坐在電腦前什么也寫(xiě)不出
這里有個(gè)簡(jiǎn)單的好的方法可以解決這個(gè)問(wèn)題, 這個(gè)辦法屢試不爽,既簡(jiǎn)單易行,有能夠幫助你寫(xiě)出很多代碼,那就是:找個(gè)搭檔結(jié)對(duì)編程

4.4 保持節(jié)奏

軟件開(kāi)發(fā)是一場(chǎng)馬拉松,而不是短跑沖刺.你無(wú)法全程一直以最快的速度沖刺來(lái)贏得比賽,只有通過(guò)保存體力和維持穩(wěn)定節(jié)奏來(lái)取勝.

4.5 進(jìn)度延遲

管理延遲的訣竅就是早期檢測(cè)和保持透明 要根據(jù)目標(biāo)定期衡量進(jìn)度,使用三個(gè)考慮到多種因素的期限:樂(lè)觀預(yù)估,標(biāo)稱預(yù)估,悲觀預(yù)估

  • 4.5.1 期望
    如果項(xiàng)目要在十天后發(fā)版 而你的常規(guī)預(yù)估是15天,你是絕對(duì)不可能完成任務(wù)的,所以不要對(duì)十天內(nèi)全部完成特性開(kāi)發(fā)抱有期望!這種期望會(huì)殺死整個(gè)項(xiàng)目,期望會(huì)毀掉項(xiàng)目進(jìn)度表,玷污你的名聲,期望會(huì)把你拖進(jìn)大麻煩中.

  • 4.5.2 盲目沖刺
    不要經(jīng)受不住誘惑就盲目沖刺
    其實(shí)沖刺是做不到的 你無(wú)法更快的寫(xiě)完代碼. 你無(wú)法更快的解決問(wèn)題, 如果視圖這么做 最終只會(huì)讓自己變得更慢. 同時(shí)只能制造出一頓混亂 讓其他人慢下來(lái)

  • 4.5.3 加班加點(diǎn)
    加班確實(shí)有用, 而且有時(shí)候很有必要,有時(shí)候 通過(guò)一天工作十個(gè)小時(shí)在加上周末 你確實(shí)能夠達(dá)成原本不可能的進(jìn)度. 但這么做的風(fēng)險(xiǎn)也很高. 在額外加班20%的工作時(shí)間內(nèi) 你其實(shí)并無(wú)法完成20%的額外工作而且,如果連續(xù)兩三周都要加班工作 則加班的措施必?cái)o(wú)疑

  • 4.5.4 交付失誤
    在程序員所能表現(xiàn)的各種不專業(yè)中 最糟糕的是明知道還沒(méi)有完成任務(wù) 確宣稱已經(jīng)完成 這時(shí)候這只是一個(gè)撒過(guò)頭的謊言,. 這就已經(jīng)很糟糕了

  • 4.5.5 定義"完成"
    可以通過(guò)創(chuàng)建一個(gè)確定定義 的''完成''標(biāo)準(zhǔn)來(lái)避免交付失誤 最好的方法就是讓業(yè)務(wù)分析師和測(cè)試人員創(chuàng)建一個(gè)自動(dòng)化的驗(yàn)收測(cè)試,只有完全通過(guò)這些驗(yàn)收測(cè)試,開(kāi)發(fā)任務(wù)才能算已經(jīng)完成

4.6 幫助

編程絕非易事 編程很難 事實(shí)上 僅憑一己之力無(wú)法寫(xiě)出優(yōu)秀的代碼.即使你的技能格外高超,也肯定能從另外一名程序員的思考與想法中獲益

4.7.1 幫助他人

因此互相幫助是每個(gè)程序員的職責(zé)所在,作為專業(yè)人士,要以能夠隨時(shí)幫助他人為榮

4.7.2 接受他人的幫助

如果有人向你伸出援手,要誠(chéng)摯接受,心懷感激的接受幫助并誠(chéng)意合作,不要死命的護(hù)住自己的地盤(pán) 拒絕別人的幫助

五 測(cè)試驅(qū)動(dòng)開(kāi)發(fā)(TDD)

5.1 TDD 的三項(xiàng)法則
  • 1 在編好失敗單元測(cè)試之前,不要編寫(xiě)任何產(chǎn)品代碼
  • 2 只要有一個(gè)單元測(cè)試失敗了,就不要在寫(xiě)測(cè)試代碼;否則無(wú)法通過(guò)編譯也是一種失敗
  • 3 產(chǎn)品代碼恰好能夠讓當(dāng)前失敗的單元測(cè)試成功通過(guò)即可,不要多寫(xiě)
    遵循這三項(xiàng)法則的話,大概三十秒就要運(yùn)行一次代碼, 先寫(xiě)好一個(gè)單元測(cè)試的一部分代碼, 很快,你會(huì)發(fā)現(xiàn)還缺少一些類或函數(shù), 所以單元測(cè)試無(wú)法編譯.因此必須編寫(xiě)產(chǎn)品代碼,讓這些測(cè)試能夠編譯成功. 產(chǎn)品代碼夠用即可,然后再哎回頭接著寫(xiě)單元測(cè)試
5.2 TDD 的優(yōu)勢(shì)
  • 5.2.1 保證代碼的確定性
  • 5.2.2 降低缺陷注入率
  • 5.2.3 勇氣
    這是 TDD 強(qiáng)大之處, 擁有一套值得信賴的測(cè)試,便可完全打消對(duì)修改代碼的全部恐懼, 當(dāng)看見(jiàn)糟糕的代碼是,就可以放手整理, 代碼會(huì)變的具有可塑性,你可以放心打磨出簡(jiǎn)單滿意的結(jié)果
  • 5.2.4 文檔
    單元測(cè)試即是文檔, 他們描述了系統(tǒng)設(shè)計(jì)的最底層設(shè)計(jì)細(xì)節(jié),他們清晰正確,以讀者能夠理解的語(yǔ)言寫(xiě)成, 并且形式規(guī)整可以運(yùn)行, 他們是最好的底層文檔.
    *5.2.5 專業(yè)人士的選擇
    本節(jié)可以歸結(jié)一句話, TDD 是專業(yè)人士的選擇.他是一項(xiàng)能夠提升代碼確定性,給程序員鼓勵(lì),降低代碼缺陷率,優(yōu)化文檔和設(shè)計(jì)的原則.對(duì) TDD 的各項(xiàng)嘗試表明,不使用 TDD 就說(shuō)明你可能還不夠?qū)I(yè)
5.3 TDD 的局限

盡管 TDD 有諸多優(yōu)點(diǎn),遵循這三個(gè)法則并不能擔(dān)保一定會(huì)帶來(lái)上述好處, 及時(shí)做到了測(cè)試先行, 仍有可能寫(xiě)出糟糕的代碼.如果遵循某項(xiàng)法則會(huì)弊大于利,專業(yè)的開(kāi)發(fā)人員就當(dāng)然不會(huì)選用它

六 練習(xí)

專業(yè)人士都需要通過(guò)專門(mén)訓(xùn)練提升自己的技能
此節(jié)主要講的就是要不斷地練習(xí) 就像彈鋼琴一樣, 要想自如彈奏,樂(lè)手需要反復(fù)的彈奏音節(jié),各種練習(xí)曲,重復(fù)的節(jié)奏,直到爛熟于心.要相信10000小時(shí)定律

七 驗(yàn)收測(cè)試(溝通的重要性)

專業(yè)開(kāi)發(fā)人員既要做好開(kāi)發(fā),也要做好溝通

7.1 需求的溝通

PM 和 RD 之間最常見(jiàn)的溝通就是關(guān)于需求了的 PM 描述他們認(rèn)為自己需要的東西, RD 按照自己理解的業(yè)務(wù)放表達(dá)的需求來(lái)開(kāi)發(fā), 至少理論上是這樣的,但是在現(xiàn)實(shí)里 關(guān)于需求的溝通是極其困難的,其中會(huì)出現(xiàn)各種問(wèn)題

  • 7.1.1 過(guò)早的精細(xì)化
    PM 和 RD 都容易陷入一個(gè)陷阱, 即過(guò)早進(jìn)行精細(xì)化,
    • 1 不確定原則, 任何一個(gè)需求總是不確定 來(lái)回改變
    • 2 預(yù)估焦慮 評(píng)估可以額而且必須基于不那么精確地需求,這些評(píng)估只是評(píng)估而已
  • 7.1.2 遲來(lái)的模糊性
    專業(yè)的 RD 也包括 PM 必須確認(rèn),需求中沒(méi)有任何不確定因素
7.2 驗(yàn)收測(cè)試
  • 7.2.1 "完成"的定義
    身為專業(yè)開(kāi)發(fā)人員, 我們經(jīng)常面對(duì)的不確定因素之一就是"完成"的各種說(shuō)法,開(kāi)發(fā)人員說(shuō)他已經(jīng)完成任務(wù)了,太想表達(dá)什么意思呢,是指開(kāi)發(fā)人員已經(jīng)有足夠的信心吧這項(xiàng)功能部署到生產(chǎn)系統(tǒng),還是他可以準(zhǔn)備 QA 程序,或者他已經(jīng)寫(xiě)完了代碼并且跑通了,但還沒(méi)有真正測(cè)試過(guò)
  • 7.2.2 溝通
    驗(yàn)收測(cè)試的目的是溝通澄清,精確化. 開(kāi)發(fā)方,業(yè)務(wù)方,測(cè)試方對(duì)驗(yàn)收測(cè)試達(dá)成共識(shí),大家都能明白系統(tǒng)的行為將會(huì)是怎樣 各方都應(yīng)該記錄這種準(zhǔn)確的共識(shí), 在專業(yè)開(kāi)發(fā)人員看來(lái), 與業(yè)務(wù)方,測(cè)試方協(xié)同工作,確保大家都明白要做的是什么,是自己的責(zé)任
  • 7.2.3 自動(dòng)化
    專業(yè)程序員會(huì)避免手動(dòng)測(cè)試,相比手動(dòng)測(cè)試來(lái)說(shuō),自動(dòng)化測(cè)試成本非常低, 讓人手工執(zhí)行測(cè)試腳本不劃算.專業(yè)的開(kāi)發(fā)人員認(rèn)為 實(shí)現(xiàn)驗(yàn)收測(cè)試的自動(dòng)化是自己的責(zé)任
  • 7.2.4 額外工作
    寫(xiě)這些測(cè)試并不是什么額外的工作,這些測(cè)試是為了確定系統(tǒng)的各項(xiàng)指標(biāo)符合要求,. 確定細(xì)節(jié)指標(biāo)的目的,是為了確定系統(tǒng)的指標(biāo),只有確定這些系統(tǒng)的指標(biāo),我們程序員才能確知完成, 只有確認(rèn)這些指標(biāo), 業(yè)務(wù)方才能確認(rèn)他們花錢(qián)開(kāi)發(fā)的系統(tǒng)確實(shí)滿足了需求,只有確認(rèn)這些指標(biāo), 才可以真正做到自動(dòng)化測(cè)試, 所以不要把這些測(cè)試看做額外的工作,而應(yīng)當(dāng)看成節(jié)省時(shí)間和金錢(qián)的辦法.
  • 7.2.5 驗(yàn)收測(cè)試什么時(shí)候?qū)?有誰(shuí)來(lái)寫(xiě)
    在理想狀態(tài)下, PM和 QA 會(huì)協(xié)作編寫(xiě) 這些測(cè)試, 程序員來(lái)檢查測(cè)試之間是否有沖突或矛盾. 但實(shí)際上 業(yè)務(wù)方通常沒(méi)有時(shí)間 或者有時(shí)間也難以達(dá)到所需要的細(xì)致程度 所以他們通常會(huì)把測(cè)試交給業(yè)務(wù)分析員,QA 甚至是開(kāi)發(fā)人員.如果只能有開(kāi)發(fā)人員來(lái)寫(xiě)測(cè)試,應(yīng)當(dāng)確保測(cè)試
    的程序員與開(kāi)發(fā)測(cè)試功能的程序員不是同一個(gè)人
  • 7.2.6 開(kāi)發(fā)人員的角色
    開(kāi)發(fā)人員有責(zé)任吧驗(yàn)收測(cè)試與系統(tǒng)聯(lián)系起來(lái),然后讓這些測(cè)試通過(guò)
  • 7.2.7 測(cè)試的協(xié)商與被動(dòng)推進(jìn)
    身為專業(yè)開(kāi)發(fā)人員, 與編寫(xiě)測(cè)試的人協(xié)商并改進(jìn)測(cè)試是你的責(zé)任.決不能被動(dòng)接受測(cè)試
  • 7.2.8 驗(yàn)收測(cè)試和單元測(cè)試
    單元測(cè)試是程序員寫(xiě)給程序員的 他是正式的設(shè)計(jì)文檔,描述了底層結(jié)構(gòu)及代碼的行為, 關(guān)心單元測(cè)試的結(jié)果是程序員而不是業(yè)務(wù)人員
    驗(yàn)收測(cè)試是業(yè)務(wù)方寫(xiě)給業(yè)務(wù)方的 他們是正式的需求文檔 描述了業(yè)務(wù)放認(rèn)為 系統(tǒng)應(yīng)該如何運(yùn)行.關(guān)心驗(yàn)收測(cè)試結(jié)果的是業(yè)務(wù)方和程序員
7.3 結(jié)論

要解決開(kāi)發(fā)方和業(yè)務(wù)方的問(wèn)題,我所知道的唯一的解決辦法就是編寫(xiě)出無(wú)可挑剔的需求文檔

八 測(cè)試策略

每個(gè)專業(yè)的開(kāi)發(fā)團(tuán)隊(duì)都需要一套好的測(cè)試策略

8.1 QA 應(yīng)該找不到任何錯(cuò)誤

我們努力的目標(biāo)應(yīng)該是讓 QA 應(yīng)該找不到任何錯(cuò)誤

8.2 自動(dòng)化測(cè)試金字塔

擁有一套單元測(cè)試和驗(yàn)收測(cè)試的 同事 還需要更高層次的測(cè)試,這樣 QA 才找不出任何錯(cuò)誤 如下圖

image.png
  • 8.2.1 單元測(cè)試
    在金字塔底部就是單元測(cè)試,這些單元測(cè)試作為持續(xù)集成的一部分來(lái)運(yùn)行,用以確保程序員的代碼意圖沒(méi)有遭到破壞
  • 8.2.2 組件測(cè)試
    組件測(cè)試是驗(yàn)收測(cè)試的一種 他們針對(duì)系統(tǒng)的各個(gè)組件而編寫(xiě)的 組件的測(cè)試差不多可以覆蓋系統(tǒng)的一半
  • 8.2.3 集成測(cè)試
    集成測(cè)試只對(duì)那些組件很多的大型系統(tǒng)才有意義,集成測(cè)試一般有系統(tǒng)架構(gòu)師或主設(shè)計(jì)師編寫(xiě)
  • 8.2.4 系統(tǒng)測(cè)試
    這個(gè)測(cè)試是針對(duì)整個(gè)完畢的系統(tǒng)進(jìn)行的自動(dòng)化測(cè)試,是最終的集成測(cè)試,這個(gè)測(cè)試中 ,應(yīng)該包含吞吐率測(cè)試和性能測(cè)試
  • 8.2.5 人工探索式測(cè)試
    這些測(cè)試的意圖 是要在驗(yàn)證預(yù)期行為的時(shí)候,探索系統(tǒng)預(yù)期之外的行為.為了達(dá)到這個(gè)目的,需要人類智慧的介入,需要人類的創(chuàng)新能力

九 時(shí)間管理

八小時(shí)其實(shí)非常短暫, 只有480分鐘 28800秒,身為專業(yè)開(kāi)發(fā)人員,你肯定希望能在這短暫的時(shí)間里盡可能高效的工作,取得盡可能多的成果

9.1 會(huì)議

關(guān)于會(huì)議 有兩條真理:
(1) 會(huì)議是必需的
(2) 會(huì)議浪費(fèi)了大量的時(shí)間

專業(yè)的開(kāi)發(fā)人員同樣清楚會(huì)議的高昂成本, 他們同樣清楚自己的時(shí)間是寶貴的,他們同樣需要時(shí)間來(lái)寫(xiě)代碼,來(lái)處理日程表上的事物,所以 如果會(huì)議沒(méi)有現(xiàn)實(shí)且顯著 的成效,他們會(huì)主動(dòng)拒絕

  • 9.1.1 拒絕
    受到邀請(qǐng)的會(huì)議沒(méi)有必要全部參加, 參加的會(huì)議太多,其實(shí)只能證明你不夠?qū)I(yè).你應(yīng)該理智的使用時(shí)間,所以 必須要謹(jǐn)慎選擇, 應(yīng)當(dāng)參加那些會(huì)議, 禮貌拒絕那些會(huì)議 好的領(lǐng)導(dǎo)一定會(huì)主動(dòng)維護(hù)你拒絕出席的決定,因?yàn)樗湍阋粯雨P(guān)心你的時(shí)間

  • 9.1.2 離席
    重要的是,你應(yīng)該明白, 繼續(xù)待在會(huì)議室里是浪費(fèi)時(shí)間; 繼續(xù)參加對(duì)你沒(méi)有意義的會(huì)議是不專業(yè)的行為, 因?yàn)槟阌胸?zé)任合理分配老板給你的時(shí)間和金錢(qián), 所以選擇一個(gè)合適的機(jī)會(huì)商量如何離席,并非不專業(yè)的做法

  • 9.1.3 確定議程 和 目標(biāo)
    為了合理使用與會(huì)者的時(shí)間,會(huì)議應(yīng)當(dāng)有清晰的議程, 確定每個(gè)議程所花的時(shí)間以及確定的目標(biāo)

  • 9.1.4 立會(huì)
    讓立會(huì)簡(jiǎn)潔

  • 9.1.5 迭代計(jì)劃會(huì)議
    迭代計(jì)劃會(huì)議用來(lái)選擇在下一輪迭代中實(shí)現(xiàn)的開(kāi)發(fā)任務(wù), 在會(huì)議召開(kāi)前必須完成兩項(xiàng)任務(wù): 評(píng)估可選擇任務(wù)的開(kāi)發(fā)時(shí)間, 確定這些任務(wù)的業(yè)務(wù)價(jià)值, 如果組織的足夠好, 驗(yàn)收和組件測(cè)試也應(yīng)當(dāng)在會(huì)議召開(kāi)前完成,或者至少要有概略方案

  • 9.1.6 迭代回顧和 Demo 演示
    此類會(huì)議用來(lái)讓業(yè)務(wù)方可以看到最新工作的成果的 DEmo 這類會(huì)議可能浪費(fèi)很多時(shí)間, 所以不妨在最后一天下班前45分鐘召開(kāi), 花20分鐘來(lái)回顧, 花25分鐘來(lái)演示

  • 9.1.7 爭(zhēng)論/反對(duì)
    凡是不能再5分鐘內(nèi)解決的 爭(zhēng)論, 都不能靠辯論來(lái)解決 因?yàn)闋?zhēng)論之所以話這么長(zhǎng)時(shí)間,就是因?yàn)楦鞣蕉寄貌怀鲎銐蛴辛Φ淖C據(jù), 所以應(yīng)當(dāng)盡量控制爭(zhēng)論的時(shí)間

9.2 注意力點(diǎn)數(shù)

編程是需要持續(xù)投入精力和注意力的智力活動(dòng).注意力是稀缺的資源,它類似魔力點(diǎn)數(shù),如果你用光了自己的注意力點(diǎn)數(shù), 必須花一個(gè)小時(shí)或更多的時(shí)間做不需要注意力的事情,來(lái)補(bǔ)充他

  • 9.2.1 睡眠
    睡眠的重要性怎么強(qiáng)調(diào)都不為過(guò),專業(yè)的開(kāi)發(fā)人員會(huì)安排好他們的睡眠, 保證清晨有飽滿的注意力點(diǎn)數(shù)去上班

  • 9.2.2 咖啡因
    毋庸置疑,對(duì)有些人來(lái)說(shuō),適量的咖啡因可以幫他們更有效的使用注意力點(diǎn)數(shù)

  • 9.2.3 恢復(fù)
    在你不集中注意力的時(shí)候,注意力點(diǎn)數(shù)可以慢慢恢復(fù),漫長(zhǎng)的一段長(zhǎng)路,與朋友聊天, 看看窗外, 都有助于恢復(fù)注意力點(diǎn)數(shù)

  • 9.2.4 肌肉注意力

肌肉注意力有助于改善心智注意力, 而且不僅僅是簡(jiǎn)單的恢復(fù), 我發(fā)現(xiàn)定期培訓(xùn)肌肉和注意力,可以提升心智注意力的上限. 比如我自己 我就會(huì)經(jīng)常的跑步鍛煉身體

  • 9.2.5 輸入與輸出
    關(guān)于注意力, 我知道的另一個(gè)重點(diǎn)是平衡輸入與輸出, 編程是一項(xiàng)創(chuàng)造性勞動(dòng), 我發(fā)現(xiàn)如果能接觸到其他人的創(chuàng)造思維,我的創(chuàng)造力也最旺盛,
9.3 時(shí)間拆分和番茄工作法

其基本思想很簡(jiǎn)單, 把廚房用的計(jì)時(shí)器(通常他們很想番茄) 設(shè)定到25分鐘, 倒計(jì)時(shí)期間不要讓任何事情干擾你的工作

9.4 死胡同

所有軟件開(kāi)發(fā)者都要遇到死胡同 比如你做了一個(gè)決定,選擇了走不通的技術(shù)道路.你對(duì)這個(gè)絕地個(gè)越是堅(jiān)持,浪費(fèi)的時(shí)間就越多, 專業(yè)人員不會(huì)執(zhí)拗有不讓放棄也無(wú)法繞開(kāi)的注意, 他們會(huì)保持開(kāi)放的頭腦來(lái)聽(tīng)取其他意見(jiàn)

9.5 泥潭

比死胡同更糟的是泥潭,泥潭會(huì)減慢你的速度,專業(yè)開(kāi)發(fā)人員對(duì)泥潭的恐懼遠(yuǎn)遠(yuǎn)大于死胡同.他們會(huì)時(shí)刻留神顯露出來(lái)的泥潭, 然后運(yùn)用各種努力,盡早盡快的脫身,

9.6 結(jié)論

專業(yè)的開(kāi)發(fā)人員會(huì)用心管理自己的時(shí)間和注意力, 他們知道優(yōu)先級(jí)錯(cuò)亂的誘惑, 他們也珍視自己的聲譽(yù). 所以會(huì)抵制優(yōu)先級(jí)錯(cuò)亂, 他們永遠(yuǎn)有多種選擇,永遠(yuǎn)敞開(kāi)心扉聽(tīng)取其他解決方案, 他們從來(lái)不會(huì)執(zhí)拗于某個(gè)無(wú)法放棄的解決方案, 他們也時(shí)刻警惕著正在顯露的泥潭,一旦看清楚 就會(huì)避開(kāi).

10 預(yù)估

預(yù)估是軟件開(kāi)發(fā)人員面對(duì)的最簡(jiǎn)單也是最可怕的活動(dòng)之一了,預(yù)估影響到的商業(yè)價(jià)值巨大關(guān)乎聲譽(yù)嗎預(yù)估是也業(yè)務(wù)人員和開(kāi)發(fā)人員之間最重要的障礙, 橫亙?cè)陔p方之間的種種不信任幾乎都由他引發(fā)

10.1 什么是預(yù)估

問(wèn)題在于 不同的人對(duì)預(yù)估不同的看法.業(yè)務(wù)方覺(jué)得預(yù)估就是承諾, 開(kāi)發(fā)方認(rèn)為預(yù)估就是猜測(cè), 兩者相差迥異

  • 10.1.1 承諾
    承諾是必須做到的 如果你承諾在哎某天做成某件事, 就必須按時(shí)完成, 即便他意味著你必須每天工作12個(gè)小時(shí), 放棄周末的休假, 也不得不如此, 既然承諾了,就必須要實(shí)現(xiàn)

  • 10.1.2 預(yù)估
    預(yù)估是一種猜測(cè), 預(yù)估無(wú)關(guān)聲譽(yù),不幸的是,大多數(shù)軟件開(kāi)發(fā)人員都很不擅長(zhǎng)預(yù)估

  • 10.1.3 暗示性承諾
    專業(yè)開(kāi)發(fā)人員能夠清楚地區(qū)分預(yù)估和承諾, 只有在確切知道可以完成的前提下, 他們才會(huì)給出承諾, 此外, 他們也會(huì)小心避免給出暗示性的承諾, 他們會(huì)盡可能清楚的說(shuō)明預(yù)估的概率分布, 這樣主管就可以作出合適的計(jì)劃了

10.2 PERT 計(jì)劃評(píng)審計(jì)劃

簡(jiǎn)單的 PERT 計(jì)算說(shuō)明了一種避免樂(lè)觀預(yù)估的合理方法, 不管嘗試加快進(jìn)度的壓力有多大, 專業(yè)開(kāi)發(fā)人員都應(yīng)當(dāng)謹(jǐn)慎的設(shè)定合理的預(yù)估值

10.3 結(jié)論

專業(yè)的開(kāi)發(fā)人員懂得如何為業(yè)務(wù)人員提供可信的預(yù)估結(jié)果,以便做出計(jì)劃,如果做不到或者不確定能做到,專業(yè)開(kāi)發(fā)人員不會(huì)給出承諾
一旦做出了承諾, 就會(huì)提供確定的數(shù)字, 按時(shí)兌現(xiàn), 但是在大多數(shù)情況下, 他們都不會(huì)做這種承諾, 而是提供概率預(yù)估,來(lái)描述期望的完成時(shí)間及可能的變數(shù)

11 壓力

即使有巨大的壓力, 專業(yè)的開(kāi)發(fā)人員也會(huì)冷靜果斷. 盡管壓力不斷增大, 他仍然會(huì)堅(jiān)守所受的訓(xùn)練和紀(jì)律, 他知道這些是他賴以戰(zhàn)勝有最后期限和承諾所帶來(lái)的壓力感的最好方法

11.1 避免壓力

在壓力下保持冷靜的最好方式,便是規(guī)避會(huì)導(dǎo)致壓力的處境, 規(guī)避的方式也許無(wú)法完全檢出壓力, 但是可以大大降低壓力并縮短高壓力期的時(shí)間

  • 11.1.1 承諾
    之前第十章已經(jīng)說(shuō)過(guò),我們應(yīng)該避免對(duì)沒(méi)有把握能夠完成的最后期限作出承諾 避免給自己帶來(lái)不可估量的后續(xù)問(wèn)題
  • 11.1.2 把持整潔
    讓系統(tǒng),代碼和設(shè)計(jì)盡可能整潔, 就可以避免壓力, 這并非是說(shuō)我們要花無(wú)窮無(wú)盡的時(shí)間去清理代碼, 而只是說(shuō)不要容忍混亂, 混亂會(huì)降低速度, 導(dǎo)致工期延誤, 承諾失信, 因此,要盡力保持輸出成果整潔干凈
  • 11.1.3 危機(jī)中的紀(jì)律
    當(dāng)困境臨降時(shí), 也不要改變工作方式, 如果你遵守的紀(jì)律原則是工作的最佳方式, 那么即使在深度危機(jī)中也要堅(jiān)決秉承這些紀(jì)律原則
11.2 應(yīng)對(duì)壓力
  • 11.2.1 不要驚慌失措
    正確對(duì)待壓力, 放松下來(lái),對(duì)問(wèn)題深思熟慮,努力尋找可以帶來(lái)最好結(jié)果的路徑, 然后沿著那條路徑一合理穩(wěn)定的節(jié)奏前進(jìn)

  • 11.2.2 溝通
    多多溝通,讓你的團(tuán)隊(duì)和主管知道你正深陷困境之中, 告訴他們你所制定的走出困境的最佳計(jì)劃, 請(qǐng)求他們支援,避免產(chǎn)生驚恐,沒(méi)有東西比驚恐更令人憤怒和市區(qū)理性,驚恐會(huì)讓你的壓力增大十倍

  • 11.2.3 依靠你的紀(jì)律原則
    當(dāng)事情十分困難的時(shí)候,要堅(jiān)信你的紀(jì)律原則,他們可以指引你度過(guò)高壓期

11.3 結(jié)論

應(yīng)對(duì)的訣竅在于,能回避壓力是盡可能回避,當(dāng)無(wú)法回避是則勇敢直面壓力, 可以通過(guò)慎重承諾, 遵循自己的紀(jì)律原則,保持整潔等來(lái)回避壓力.直面壓力時(shí), 則要保持冷靜, 與別人多多溝通, 堅(jiān)守自己的原則和紀(jì)律 并尋求他人的幫助.

12 協(xié)作

大多數(shù)軟件都是由團(tuán)隊(duì)開(kāi)發(fā)出來(lái)的,當(dāng)團(tuán)隊(duì)成員能夠十分專業(yè)的互相協(xié)作時(shí), 整個(gè)團(tuán)隊(duì)是最為高效的, 單打獨(dú)斗與游離于團(tuán)隊(duì)之外都是不專業(yè)的表現(xiàn)

12.1 程序員與人

我們并非是因?yàn)橄矚g和其他人一起工作才選擇做程序員的, 我們都認(rèn)為人人際關(guān)系難以應(yīng)付而且毫無(wú)規(guī)律.編程用的機(jī)器則整潔,行為也可預(yù)見(jiàn),如果可以一個(gè)人待在房間里數(shù)個(gè)小數(shù)沉浸在一些真正有趣的問(wèn)題上, 那將會(huì)是最開(kāi)心的時(shí)光

  • 12.1.1 程序員與雇主
    專業(yè)的程序員的首要職責(zé)是滿足雇主的需求.這意味著要和你的經(jīng)理們,業(yè)務(wù)分析師門(mén),測(cè)試工程師門(mén),和其他團(tuán)隊(duì)成員很好的協(xié)作, 深刻理解業(yè)務(wù)目標(biāo), 這并不是說(shuō)你必須要成為業(yè)務(wù)方面的老學(xué)究,而是說(shuō)你需要理解手上正在編寫(xiě)的代碼的業(yè)務(wù)價(jià)值是什么,了解雇你的企業(yè)將如何從你的工作中獲得回報(bào)

  • 12.1.2 程序員與程序員
    程序員之間很難密切合作,這就會(huì)帶來(lái)不小的問(wèn)題

    • 代碼個(gè)體所有
      不正常的團(tuán)隊(duì)最糟糕的情況是,每個(gè)程序員在自己的代碼周邊筑起一道高墻, 拒絕 讓其他程序員接觸到這些代碼
    • 2 協(xié)作性的代碼共有權(quán)
      專業(yè)的開(kāi)發(fā)人員是不會(huì)阻止別人修改代碼的, 他們不會(huì)再代碼上構(gòu)造所有權(quán)的藩籬,而是盡可能多的合作, 他們通過(guò)合作來(lái)達(dá)到學(xué)習(xí)的目的
12.2 結(jié)論

也許我們不是因?yàn)橥ㄟ^(guò)編程可以和人互相協(xié)作才選擇從事這項(xiàng)工作的, 但真不走運(yùn),編程就意味著與人協(xié)作.我們需要和業(yè)務(wù)人員一起工作,我們之間也需要互相合作.
如果我們真想終生能以編程度日,那么一定要學(xué)會(huì)交流 ,和大家交流

13 團(tuán)隊(duì)和項(xiàng)目

小項(xiàng)目該如何實(shí)施? 如何給程序員分派? 大項(xiàng)目有該如何實(shí)施?

13.1 只是簡(jiǎn)單混合么

讓一個(gè)程序員把一半的時(shí)間投入到項(xiàng)目 A 中,把其余時(shí)間投入到項(xiàng)目 B 中,這并不可行,尤其是當(dāng)這連個(gè)項(xiàng)目的項(xiàng)目經(jīng)理不同,業(yè)務(wù)分析師不同,程序員不同,測(cè)試人員不同是,更不可行.這不是一個(gè)團(tuán)隊(duì),只是從榨汁機(jī)中榨出的混合物而已

  • 13.1.1 有凝聚力的團(tuán)隊(duì)

形成團(tuán)隊(duì)是需要時(shí)間的,團(tuán)隊(duì)成員需要先建立關(guān)系,他們需要學(xué)習(xí)如何互相協(xié)助,需要了解彼此的癖好,強(qiáng)項(xiàng),弱項(xiàng),最終才能凝聚成團(tuán)隊(duì),
有凝聚力的團(tuán)隊(duì)確實(shí)有些神奇之處, 他們能夠一起創(chuàng)造奇跡,他們互為知己,能夠替對(duì)方著想, 互相支持, 激勵(lì)對(duì)方拿出自己最好的表現(xiàn),他們攻無(wú)不克

  • 13.1.2 如何管理好有凝聚力的團(tuán)隊(duì)
    每個(gè)團(tuán)隊(duì)都有自己的速度,團(tuán)隊(duì)的速度,即是指在一定時(shí)間段內(nèi)團(tuán)隊(duì)能夠完成的工作量,有些團(tuán)隊(duì)使用每周點(diǎn)數(shù)來(lái)衡量自己的速度,其中"點(diǎn)數(shù)"是一種關(guān)于復(fù)雜度的單位.
    管理人員可以依據(jù)團(tuán)隊(duì)的平均速度來(lái)合理分配每周工作的點(diǎn)數(shù)
13.2 結(jié)論

團(tuán)隊(duì)比項(xiàng)目更難構(gòu)建 .因此 組建穩(wěn)健的團(tuán)隊(duì),讓團(tuán)隊(duì)在一個(gè)又一個(gè)項(xiàng)目中整體移動(dòng)共同工作是較好的做法, 并且 團(tuán)隊(duì)也可以同時(shí)承接多個(gè)項(xiàng)目, 在組建團(tuán)隊(duì)是, 要給予團(tuán)隊(duì)充足的時(shí)間, 讓他們形成凝聚力, 一直共同工作,成為不斷交付項(xiàng)目的強(qiáng)大引擎

一周的零碎時(shí)間將此書(shū)讀完并整理出每節(jié)重要內(nèi)容,書(shū)中更多的是結(jié)合公司中實(shí)際例子來(lái)說(shuō)明每一個(gè)點(diǎn)的重要性,希望每個(gè)開(kāi)發(fā)都能成為像 bob 大叔一樣厲害的人

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 專業(yè)主義 笑吧,科廷,老伙計(jì)。這是上帝,或者也可以說(shuō)是命運(yùn)或者自然,跟我們開(kāi)的一個(gè)玩笑。不過(guò),不管這家伙是誰(shuí)或是什...
    MrException閱讀 949評(píng)論 0 0
  • 本文把程序員所需掌握的關(guān)鍵知識(shí)總結(jié)為三大類19個(gè)關(guān)鍵概念,然后給出了掌握每個(gè)關(guān)鍵概念所需的入門(mén)書(shū)籍,必讀書(shū)籍,以及...
    dle_oxio閱讀 11,215評(píng)論 6 244
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,455評(píng)論 25 708
  • “長(zhǎng)不大”的老師(孩子筆下的我之二) 文豪 馮老師雖說(shuō)已四十出頭,可是她卻像一個(gè)長(zhǎng)不大的孩子。你看她,個(gè)子雖說(shuō)高高...
    binbin的簡(jiǎn)書(shū)閱讀 524評(píng)論 0 4
  • 繁星怒放的夏夜 在前頭搔首弄姿 在放聲肆掠的言語(yǔ) 在眼前空游思度 …撩撥吧,我想 ,撩撥吧……我不必和你分享我的幻...
    黑超假面人閱讀 187評(píng)論 0 0