代碼整潔之道
程序員的職業(yè)素養(yǎng)
專業(yè)主義
清楚你要什么
擔(dān)當(dāng)責(zé)任
首先唉俗,不行損害之事
- 不要破壞軟件功能
- 讓QA找不出任何問題
- 要確信代碼正常運(yùn)行
- 自動(dòng)化QA
- 不要破壞結(jié)構(gòu)
職業(yè)道德
- 了解你的領(lǐng)域
- 專業(yè)軟件開發(fā)人員必須精通事項(xiàng)
- 設(shè)計(jì)模式
- 設(shè)計(jì)原則
- 方法
- 實(shí)踐
- 工件
- 專業(yè)軟件開發(fā)人員必須精通事項(xiàng)
- 堅(jiān)持學(xué)習(xí)
- 練習(xí)
- 業(yè)精于勤。真正的專業(yè)人士往往勤學(xué)苦干卧蜓,以求得自身技能的純屬精煉副渴。
- 合作
- 學(xué)習(xí)的第二個(gè)最佳方法是與人合作
- 輔導(dǎo)
- 想迅速牢固地掌握某些事實(shí)和觀念跷睦,最好的辦法就是與你負(fù)責(zé)指導(dǎo)的人交流這些內(nèi)容赡矢。這樣慕匠,傳道受業(yè)的同時(shí)饱须,導(dǎo)師也會(huì)從中受益。
- 了解業(yè)務(wù)領(lǐng)域
- 每位專業(yè)軟件開發(fā)人員都有義務(wù)了解自己開發(fā)的解決方案所對(duì)應(yīng)的業(yè)務(wù)領(lǐng)域
- 與雇主/客戶保持一致
- 雇主的問題就是你的問題
- 謙遜
說“不”
能就是能台谊,不能就是不能蓉媳。不要說“試試看”
因?yàn)橹挥懈矣谡f“不”,才能真正做成一些事情
對(duì)抗角色
- 最關(guān)鍵的是要找到那個(gè)共同目標(biāo)酪呻,而這往往有賴于協(xié)商
“為什么”重要嗎
- 有時(shí)候解釋很重要盐须,但是事實(shí)更重要
高風(fēng)險(xiǎn)時(shí)刻
- 最要說“不”的是那些高風(fēng)險(xiǎn)的關(guān)鍵時(shí)刻。越是關(guān)鍵時(shí)刻贼邓,“不”字就越具價(jià)值
要有團(tuán)隊(duì)精神
- 具備團(tuán)隊(duì)精神,意味著恪盡職守女坑,意味著當(dāng)其他隊(duì)員遭遇困境時(shí)你要援手相助
- 有團(tuán)隊(duì)精神的人會(huì)頻繁與大家交流统舀,會(huì)關(guān)心隊(duì)友,會(huì)竭力做到盡職盡責(zé)
說“是”的成本
- 運(yùn)作良好的團(tuán)隊(duì)的經(jīng)理和開發(fā)人員誉简,會(huì)相互協(xié)商碉就,直至達(dá)成共同認(rèn)可的行動(dòng)方案
- 有時(shí)候,獲取正確決策的唯一途徑闷串,便是勇敢無畏地說出“不”字
說“是”
承諾用語
- 三步驟
- 口頭上說自己將會(huì)去做
- 心里認(rèn)真對(duì)待做出的承諾
- 真正付諸行動(dòng)
- 識(shí)別“缺乏承諾”的征兆
- 包含的用詞和短語
- 需要/應(yīng)當(dāng)
- 希望/但愿
- 讓我們
- 包含的用詞和短語
- 真正的承諾聽起來是怎樣的
- 你對(duì)自己將會(huì)做某件事做了清晰的事實(shí)陳述瓮钥,而且還明確說明了完成期限。那不是指別人,而是說的自己骏庸。你談的是自己會(huì)去做的一項(xiàng)行動(dòng),而且年叮,你不是可能去做具被,或是可能做到,而是必須做到
- 沒能做到“言必信只损,行必果”的一些原因
- 之所以沒成功一姿,是因?yàn)槲壹南M谀衬橙プ鲞@件事
- 之所以沒成功,是因?yàn)槲也惶_信是否真能完成得了
- 之所以沒成功跃惫,是因?yàn)橛行r(shí)候我真的無能為力
學(xué)習(xí)如何說“是”
- “試試”的另一面
- “試試”是“可能做得到叮叹,也可能做不到”的意思,但是問題往往需要得到明確的回答爆存,“能”或是“不能”蛉顽,而不是“試試”這種含糊不清的答案
- 堅(jiān)守原則
結(jié)論
- 專業(yè)人士不需要對(duì)所有請(qǐng)求都回答“是”。不過先较,他們應(yīng)該努力尋找創(chuàng)新的方法携冤,盡可能做到有求必應(yīng)。當(dāng)專業(yè)人士給出肯定回答時(shí)闲勺,他們會(huì)使用正式的承諾曾棕,以確保各方能明白無誤地理解承諾的內(nèi)容
編碼
要精熟掌握每項(xiàng)技藝,關(guān)鍵都是要具備“信心”和“出錯(cuò)感知”能力
做好準(zhǔn)備
- 首先菜循,代碼必須能夠正常工作
- 代碼必須能夠幫你解決客戶提出的問題
- 代碼必須要能和現(xiàn)有系統(tǒng)結(jié)合得天衣無縫
- 其他程序員必須能讀懂你的代碼
流態(tài)區(qū)
- 高效率狀態(tài),這種狀態(tài)通常稱為“流態(tài)”衙耕,也叫“流態(tài)區(qū)”
- 進(jìn)入流態(tài)區(qū)可以敲出更多的代碼臭杰,但是放棄了顧全全局渴杆,后面有可能會(huì)需要重新審視這些代碼
- 避免進(jìn)入流態(tài)區(qū)
阻塞
- 遇到什么代碼也寫不出來磁奖,可以嘗試進(jìn)行結(jié)對(duì)編程
調(diào)試
- 不管是否采納TDD或其他一些同等效果的實(shí)踐,衡量你是否是一名專業(yè)人士的一個(gè)重要方面南誊,便是看你是否能將調(diào)試實(shí)踐盡量降到最低。絕對(duì)的零調(diào)試時(shí)間是一個(gè)理想化的目標(biāo)橄务,無法達(dá)到蜂挪,但要將之作為努力方向
- 醫(yī)生不喜歡重新打開病人的胸腔去修復(fù)此前犯下的錯(cuò)誤棠涮。律師不喜歡重新接手此前搞砸的案子严肪。經(jīng)常重新返工的醫(yī)生或律師會(huì)被認(rèn)為不專業(yè)。同樣伦仍,制造出許多bug的軟件開發(fā)人員也不專業(yè)
保持節(jié)奏
- 軟件開發(fā)是一場馬拉松隧枫,而不是短跑沖刺
進(jìn)度延遲
- 期望
- 一個(gè)特性完不成官脓,就不要讓其他任何人對(duì)此抱有期望
- 盲目沖刺
- 不要經(jīng)受不住誘惑盲目沖刺
- 必須明白告訴老板卑笨、團(tuán)隊(duì)和利益相關(guān)方赤兴,讓他們不要抱有可以靠沖刺完成特性的這種期望
- 加班加點(diǎn)
- 需滿足三個(gè)條件
- 你個(gè)人能擠出這些時(shí)間
- 短期加班桶良,最多加班兩周
- 你的老板要有后備預(yù)案,以防萬一加班措施失敗
- 需滿足三個(gè)條件
- 交付失誤
- 在程序員所能表現(xiàn)的各種不專業(yè)行為中,最糟糕的是明知道還沒有完成任務(wù)卻宣稱已經(jīng)完成
- 定義“完成”
- 可以通過創(chuàng)建一個(gè)確切定義的“完成”標(biāo)準(zhǔn)來避免交付失誤
幫助
- 編程并非易事
- 編程很難承二,事實(shí)上,僅憑一己之力無法寫出優(yōu)秀的代碼缩焦。即使你的技能格外高超,也肯定能從另外一名程序員的思考與想法中獲益
- 幫助他人
- 互相幫助是每個(gè)程序員的職責(zé)所在
- 作為專業(yè)人士灾螃,要以能夠隨時(shí)幫助別人為榮
- 接受他人的幫助
- 如果有人向你伸出援手嵌赠,要誠摯接受姜挺,心懷感激地接受幫助并誠意合作
- 為了能夠?qū)崿F(xiàn)高效編程炊豪,好的協(xié)作至為重要
- 輔導(dǎo)
- 輔導(dǎo)缺乏經(jīng)驗(yàn)的程序員是那些經(jīng)驗(yàn)豐富的程序員的職責(zé)
- 培訓(xùn)課程無法替代词渤,書本也無法替代缺虐。除了自身的內(nèi)驅(qū)力和資深導(dǎo)師的有效輔導(dǎo)之外高氮,沒有東西能將一名年輕的軟件開發(fā)人員更快地提升為敏捷高效的專業(yè)人士
- 因此,再強(qiáng)調(diào)一次韧掩,花時(shí)間手把手地輔導(dǎo)年輕程序員是資深程序員的專業(yè)職責(zé)所在坊谁。同樣道理口芍,向資深導(dǎo)師尋求輔導(dǎo)也是年輕程序員的專業(yè)職責(zé)
測試驅(qū)動(dòng)開發(fā)
TDD的三項(xiàng)法則
- 在編好失敗單元測試之前颠猴,不要編寫任何產(chǎn)品代碼
- 只要有一個(gè)單元測試失敗了翘瓮,就不要再寫測試代碼资盅;無法通過編譯也是一種失敗情況
- 產(chǎn)品代碼恰好能夠讓當(dāng)前失敗的單元測試成功通過即可呵扛,不要多寫
TDD的優(yōu)勢
- 確定性
- 如果這些測試全部通過今穿,我就確信它可以隨時(shí)交付
- 缺陷注入率
- 勇氣
- 擁有一套值得信賴的測試荣赶,便可完全打消對(duì)修改代碼的全部恐懼
- 當(dāng)程序員不再懼怕整理代碼時(shí),他們便會(huì)動(dòng)手整理富蓄!整潔的代碼更易于理解灭红,更易于修改变擒,也更易于擴(kuò)展
- 文檔
- 單元測試即是文檔
- 設(shè)計(jì)
- 為了編寫測試娇斑,你必須找出將這個(gè)函數(shù)和其他函數(shù)解耦的辦法
- 測試先行的需要毫缆,會(huì)迫使你去考慮什么是好的設(shè)計(jì)
- 專業(yè)人士的選擇
TDD的局限
- 即使做到了測試先行苦丁,仍有可能寫出糟糕的代碼旺拉。沒錯(cuò)晋涣,因?yàn)閷懗龅臏y試代碼可能就很糟糕
練習(xí)
專業(yè)人士都需要通過專門訓(xùn)練提升自己的技能姻僧,無一例外
自身經(jīng)驗(yàn)的拓展
- 開源
- 保持不落伍的一種方式是為開源項(xiàng)目貢獻(xiàn)代碼,就像律師和醫(yī)生參加公益活動(dòng)一樣
- 關(guān)于練習(xí)的職業(yè)道德
- 職業(yè)程序員用自己的時(shí)間來練習(xí)
結(jié)論
- 無論如何赌莺,專業(yè)人士都需要練習(xí)
- 他們這么做挎扰,是因?yàn)樗麄冴P(guān)心自己能做到的最好結(jié)果
- 更重要的是遵倦,他們用自己的時(shí)間練習(xí)梧躺,因?yàn)樗麄冎辣3肿约旱募寄懿宦湮槭亲约旱呢?zé)任掠哥,而不是雇主的責(zé)任
驗(yàn)收測試
專業(yè)開發(fā)人員既要做好開發(fā)续搀,也要做好溝通
需求的溝通
- 過早精細(xì)化
- 做業(yè)務(wù)的人和寫程序的人都容易陷入一個(gè)陷阱彪杉,即過早進(jìn)行精細(xì)化
- 不確定原則
- 在工作中在讶,有一種現(xiàn)象叫觀察者效應(yīng)构哺,或者不確定原則曙强。每次你向業(yè)務(wù)方展示一項(xiàng)功能碟嘴,他們就獲得了比之前更多的信息娜扇,這些新信息反過來又會(huì)影響他們對(duì)整個(gè)系統(tǒng)的看法
- 預(yù)估焦慮
- 需求是一定會(huì)變化的雀瓢,所以追求那種精確性是徒勞的
- 評(píng)估可以而且必須基于不那么精確的需求,這些評(píng)估只是評(píng)估而已
- 遲來的模糊性
- 解決分歧的方案泊业,是尋找各方都同意的關(guān)于需求的表述吁伺,而不是去解決爭端
- 即便客戶與程序員當(dāng)面溝通篮奄,也可能出現(xiàn)因語境產(chǎn)生的模糊
驗(yàn)收測試
- “完成”的定義
- 專業(yè)開發(fā)人員的“完成”只能有一個(gè)含義:完成宦搬,就是完成
- 完成意味著所有的代碼都寫完了间校,所有的測試都通過了憔足,QA和需求方已經(jīng)認(rèn)可控妻。這弓候,才是完成
- 溝通
- 驗(yàn)收測試的目的是溝通菇存、澄清依鸥、精確化
- 開發(fā)方贱迟、業(yè)務(wù)方衣吠、測試方對(duì)驗(yàn)收測試達(dá)成共識(shí)蒸播,大家都能明白系統(tǒng)的行為將會(huì)是怎樣
- 各方都應(yīng)當(dāng)記錄這種準(zhǔn)確的共識(shí)
- 自動(dòng)化
- 驗(yàn)收測試都應(yīng)當(dāng)自動(dòng)進(jìn)行。原因很簡單:要考慮成本
- 額外工作
- 寫大量測試根本不是什么額外工作塘揣。寫這些測試是為了確定系統(tǒng)的各項(xiàng)指標(biāo)符合要求
- 驗(yàn)收測試什么時(shí)候?qū)懬渍。烧l來寫
- 在理想狀態(tài)下奖蔓,業(yè)務(wù)方和QA會(huì)協(xié)作編寫這些測試吆鹤,程序員來檢查測試之間是否有沖突或矛盾
- 通常沾凄,業(yè)務(wù)分析員測試“正確路徑”撒蟀,以證明功能的業(yè)務(wù)價(jià)值
- QA則測試“錯(cuò)誤路徑”保屯、邊界條件配椭、異常股缸、例外情況敦姻,因?yàn)镼A的職責(zé)是考慮哪些部分可能出問題
- 遵循“推遲精細(xì)化”的原則,驗(yàn)收測試應(yīng)該越晚越好犬绒,通常是功能執(zhí)行完成的前幾天茵瘾。在敏捷項(xiàng)目中拗秘,只有在選定了下一輪迭代或當(dāng)前沖刺所需要的功能之后雕旨,才編寫測試
- 開發(fā)人員的角色
- 開發(fā)人員有責(zé)任把驗(yàn)收測試與系統(tǒng)聯(lián)系起來凡涩,然后讓這些測試通過
- 測試的協(xié)商與被動(dòng)推進(jìn)
- 身為專業(yè)開發(fā)人員活箕,與編寫測試的人協(xié)商并改進(jìn)測試是你的職責(zé)
- 身為專業(yè)開發(fā)人員末盔,你的職責(zé)是協(xié)助團(tuán)隊(duì)開發(fā)出最棒的軟件陨舱。也就是說游盲,每個(gè)人都需要關(guān)心錯(cuò)誤和疏忽益缎,并協(xié)力改正
- 驗(yàn)收測試和單元測試
- 驗(yàn)收測試不是單元測試莺奔。單元測試是程序員寫給程序員的令哟,它是正式的設(shè)計(jì)文檔,描述了底層結(jié)構(gòu)及代碼的行為蛙卤。關(guān)心單元測試結(jié)果的是程序員而不是業(yè)務(wù)人員
- 驗(yàn)收測試是業(yè)務(wù)方寫給業(yè)務(wù)方的(雖然可能最后是身為開發(fā)者的你來寫)神年。它們是正式的需求文檔瘤袖,描述了業(yè)務(wù)方認(rèn)為系統(tǒng)應(yīng)該如何運(yùn)行昂验。關(guān)心驗(yàn)收測試結(jié)果的是業(yè)務(wù)方和程序員
- 圖形界面及其他復(fù)雜因素
- 持續(xù)集成
- 立刻中止
- 保持持續(xù)集成系統(tǒng)的時(shí)刻運(yùn)行是非常重要的
- 持續(xù)集成不應(yīng)該失敗,如果失敗了甫恩,團(tuán)隊(duì)里的所有人都應(yīng)該停下手里的活酌予,看看如何讓測試通過
- 立刻中止
結(jié)論
- 交流細(xì)節(jié)信息是件麻煩事
- 要解決開發(fā)方和業(yè)務(wù)方溝通問題,我所知道的唯一有效的辦法就是編寫自動(dòng)化的驗(yàn)收測試
測試策略
QA應(yīng)該找不到任何錯(cuò)誤
- QA也是團(tuán)隊(duì)的一部分
- 需求規(guī)約定義者
- 特性描述者
自動(dòng)化測試金字塔
- 單元測試
- 這些測試由程序員使用與系統(tǒng)開發(fā)相同的語言來編寫简僧,供程序員自己使用
- 組件測試
- 系統(tǒng)的組件封裝了業(yè)務(wù)規(guī)則,因此,對(duì)這些組件的測試便是對(duì)其中業(yè)務(wù)規(guī)則的驗(yàn)收測試
- 組件測試差不多可以覆蓋系統(tǒng)的一半夏志。它們更主要測試的是成功路徑的情況盲镶,以及一些明顯的極端情況溉贿、邊界狀態(tài)和可選路徑
- 大多數(shù)的異常路徑是由單元測試來覆蓋測試的
- 在組件測試層次宇色,對(duì)異常路徑進(jìn)行測試并無意義
- 集成測試
- 這些測試只對(duì)那些組件很多的較大型系統(tǒng)才有意義
- 集成測試是編排性測試甥捺。它們并不會(huì)測試業(yè)務(wù)規(guī)則,而是主要測試組件裝配在一起時(shí)是否協(xié)調(diào)皿曲。它們是裝配測試,用以確認(rèn)這些組件之間已經(jīng)正確連接劫樟,彼此間通信暢通
- 系統(tǒng)測試
- 這些測試是針對(duì)整個(gè)集成完畢的系統(tǒng)來運(yùn)行的自動(dòng)化測試,是最終的集成測試
- 人工探索式測試
- 覆蓋率并非此類測試的目標(biāo)
- 探索式測試不是要證明每條業(yè)務(wù)規(guī)則、每條運(yùn)行路徑都正確,而是要確保系統(tǒng)在人工操作下表現(xiàn)良好疏旨,同時(shí)富有創(chuàng)造性地找出盡可能多的“古怪之處”
結(jié)論
- TDD很強(qiáng)大法挨,驗(yàn)收測試是表達(dá)和強(qiáng)化需求的有效方式
- 開發(fā)團(tuán)隊(duì)要和QA緊密協(xié)作窃植,創(chuàng)建由單元測試、組件測試延塑、集成測試沼撕、系統(tǒng)測試和探索式測試構(gòu)成的測試體系
- 應(yīng)該盡可能頻繁地運(yùn)行這些測試,提供盡可能多的反饋,確保系統(tǒng)始終整潔
時(shí)間管理
會(huì)議
- 拒絕
- 受到邀請(qǐng)的會(huì)議沒有必要全部參加
- 領(lǐng)導(dǎo)的最重要責(zé)任之一邻薯,就是幫你從某些會(huì)議脫身。好的領(lǐng)導(dǎo)一定會(huì)主動(dòng)維護(hù)你拒絕出席的決定,因?yàn)樗湍阋粯雨P(guān)心你的時(shí)間
- 離席
- 如果會(huì)議讓人厭煩,就離席
- 選個(gè)合適的機(jī)會(huì)商量如何離席绪穆,并非不專業(yè)的做法
- 確定議程與目標(biāo)
- 為了合理使用與會(huì)者的時(shí)間第岖,會(huì)議應(yīng)當(dāng)有清晰的議程,確定每個(gè)議題所花的時(shí)間猎塞,以及明確的目標(biāo)
- 立會(huì)
- 到場人依次回答3個(gè)問題
- 我昨天干了什么?
- 我今天打算干什么?
- 我遇到了什么問題?
- 到場人依次回答3個(gè)問題
- 迭代計(jì)劃會(huì)議
- 迭代計(jì)劃會(huì)議用來選擇在下一輪迭代中實(shí)現(xiàn)的開發(fā)任務(wù)
- 會(huì)議召開前必須完成兩項(xiàng)任務(wù)
- 評(píng)估可選擇任務(wù)的開發(fā)時(shí)間
- 確定這些任務(wù)的業(yè)務(wù)價(jià)值
- 會(huì)議的節(jié)奏應(yīng)該足夠快,簡明扼要地討論各個(gè)候選任務(wù),然后決定是選擇還是放棄
- 迭代回顧和DEMO展示
- 爭論/反對(duì)
- 技術(shù)爭論很容易走入極端。每一方都有各種說法來支持自己的觀點(diǎn),只是缺乏數(shù)據(jù)。在沒有數(shù)據(jù)的情況下,如果觀點(diǎn)無法在短時(shí)間(5~30分鐘)里達(dá)成一致简识,就永遠(yuǎn)無法達(dá)成一致。唯一的出路是,用數(shù)據(jù)說話
- 如果爭論必須解決,就應(yīng)當(dāng)要求爭論各方在5分鐘時(shí)間內(nèi)向大家擺明問題,然后大家投票道盏。這樣粹排,整個(gè)會(huì)議花的時(shí)間不會(huì)超過15分鐘
注意力點(diǎn)數(shù)
- 選擇注意力點(diǎn)數(shù)充裕的時(shí)候編程妙同,在注意力點(diǎn)數(shù)匱乏時(shí)做其他事情
- 睡眠
- 一覺醒來辉浦,注意力點(diǎn)數(shù)是最充裕的
- 咖啡因
- 對(duì)有些人來說弛槐,適量的咖啡因可以幫他們更有效地使用注意力點(diǎn)數(shù)
- 恢復(fù)
- 在你不集中注意力的時(shí)候,注意力點(diǎn)數(shù)可以緩慢恢復(fù)
- 肌肉注意力
- 搏擊鸯两、太極匠襟、瑜伽之類體力活動(dòng)使用的注意力是不同的
- 定期訓(xùn)練肌肉注意力,可以提升心智注意力的上限
- 輸入與輸出
- 關(guān)于注意力忽舟,另一重點(diǎn)是平衡輸入與輸出
時(shí)間拆分和番茄工作法
要避免的行為
- 優(yōu)先級(jí)錯(cuò)亂
- 專業(yè)開發(fā)人員會(huì)評(píng)估每個(gè)任務(wù)的優(yōu)先級(jí)枝嘶,排除個(gè)人的喜好和需要镀裤,按照真實(shí)的緊急程度來執(zhí)行任務(wù)
死胡同
- 專業(yè)開發(fā)人員不會(huì)執(zhí)拗于不容放棄也無法繞開的主意
- 保持開放的頭腦來聽取其他意見颗搂,所以即使走到盡頭疚察,他們?nèi)匀挥衅渌x擇
泥潭
- 比死胡同更糟的是泥潭
- 在泥潭中繼續(xù)前進(jìn)的危害是不易察覺的
- 發(fā)現(xiàn)自己身處泥潭還要固執(zhí)前進(jìn),是最嚴(yán)重的優(yōu)先級(jí)錯(cuò)亂
結(jié)論
- 專業(yè)開發(fā)人員會(huì)用心管理自己的時(shí)間和注意力
預(yù)估
什么是預(yù)估
- 問題在于,不同的人對(duì)預(yù)估有不同的看法步咪。業(yè)務(wù)方覺得預(yù)估就是承諾悯周。開發(fā)方認(rèn)為預(yù)估就是猜測族跛。兩者相同迥異
- 承諾
- 承諾是必須做到的
- 承諾是關(guān)于確定性的
- 預(yù)估
- 預(yù)估是一種猜測长酗。它不包含任何承諾的色彩。它不需要做任何約定。預(yù)估錯(cuò)誤無關(guān)聲譽(yù)
- 暗示性承諾
- 專業(yè)開發(fā)人員能夠清楚區(qū)分預(yù)估和承諾
- 只有在確切知道可以完成的前提下吉挣,他們才會(huì)給出承諾
- 專業(yè)開發(fā)人員會(huì)小心避免給出暗示性的承諾马胧。他們會(huì)盡可能清楚地說明預(yù)估的概率分布
PERT
- O:樂觀預(yù)估
- N:標(biāo)稱預(yù)估
- P:悲觀預(yù)估
預(yù)估任務(wù)
- 德爾菲法
- 亮手指
- 規(guī)劃撲克
- 關(guān)聯(lián)預(yù)估
- 三元預(yù)估
大數(shù)定律
- 把大任務(wù)分成許多小任務(wù)垫卤,分開預(yù)估再加總,結(jié)果會(huì)比單獨(dú)評(píng)估大任務(wù)要準(zhǔn)確很多
結(jié)論
- 專業(yè)開發(fā)人員懂得如何為業(yè)務(wù)人員提供可信的預(yù)估結(jié)果介返,以便做出計(jì)劃
- 專業(yè)開發(fā)人員一旦做了承諾栓拜,就會(huì)提供確定的數(shù)字污茵,按時(shí)兌現(xiàn)
- 對(duì)需要妥善對(duì)待的預(yù)估結(jié)果邢笙,專業(yè)開發(fā)人員會(huì)與團(tuán)隊(duì)的其他人協(xié)商侍匙,以取得共識(shí)
壓力
避免壓力
- 承諾
- 有時(shí)有人會(huì)代我們做出承諾想暗。比如業(yè)務(wù)人員可能在沒有事先咨詢我們的情況下就向客戶做出了承諾说莫。發(fā)生這種事情時(shí),出于責(zé)任感我們必須主動(dòng)幫助業(yè)務(wù)方找到方法來兌現(xiàn)這些承諾,但是一定不能接受這些承諾
- 其中的差別至關(guān)重要懂牧。專業(yè)人士總會(huì)千方百計(jì)地幫助業(yè)務(wù)方找到達(dá)成目標(biāo)的方法,但并不一定要接受業(yè)務(wù)方代為做出的承諾验懊。
- 最終奏夫,如果我們無法兌現(xiàn)業(yè)務(wù)方所做出的承諾蹂析,那么該由當(dāng)時(shí)做出承諾的人來承擔(dān)責(zé)任
- 保持整潔
- 快速前進(jìn)確保最后期限的方法,便是保持整潔
- 臟亂只會(huì)導(dǎo)致緩慢!
- 讓系統(tǒng)、代碼和設(shè)計(jì)盡可能整潔校翔,就可以避免壓力
- 危機(jī)中的紀(jì)律
- 如果在危機(jī)中依然遵循著你守持的紀(jì)律烧给,就說明你確實(shí)相信那些紀(jì)律
- 當(dāng)困境降臨時(shí),也不要改變行為哩陕。如果你遵守的紀(jì)律原則是工作的最佳方式扣讼,那么即使是在深度危機(jī)中湖雹,也要堅(jiān)決秉持這些紀(jì)律原則
應(yīng)對(duì)壓力
- 不要驚慌失措
- 溝通
- 讓你的團(tuán)隊(duì)和主管知道你正身陷困境之中
- 依靠你的紀(jì)律原則
- 當(dāng)事情十分困難時(shí)橡娄,要堅(jiān)信你的紀(jì)律原則
- 尋求幫助
結(jié)論
- 應(yīng)對(duì)壓力的訣竅在于,能回避壓力時(shí)盡可能地回避扬绪,當(dāng)無法回避時(shí)則勇敢直面壓力
協(xié)作
程序員與雇主
- 專業(yè)程序員的首要職責(zé)是滿足雇主的需求
- 專業(yè)程序員會(huì)花時(shí)間去理解業(yè)務(wù)
程序員與程序員
- 代碼個(gè)體所有
- 從技術(shù)角度來看竣蹦,這無疑是一場災(zāi)難
- 協(xié)作性的代碼共有權(quán)
- 專業(yè)開發(fā)人員是不會(huì)阻止別人修改代碼的
- 結(jié)對(duì)
- 最有效率且最有效果的代碼復(fù)查方法翰舌,就是以互相協(xié)作的方式完成代碼編寫
結(jié)論
- 也行我們不是因?yàn)橥ㄟ^編程可以和人互相協(xié)助才選擇從事這項(xiàng)工作的计技。但真不走運(yùn)它抱,編程就意味著與人協(xié)作沮脖。我們需要和業(yè)務(wù)人員一起工作,我們之間也需要互相合作
團(tuán)隊(duì)與項(xiàng)目
只是簡單混合嗎
- 有凝聚力的團(tuán)隊(duì)
- 形成團(tuán)隊(duì)是需要時(shí)間的
- 有凝聚力的團(tuán)隊(duì)通常有大約12名成員
- 7名程序員
- 2名測試人員
- 2名分析師
- 1名項(xiàng)目經(jīng)理
- 發(fā)酵期
- 6個(gè)月至1年
- 團(tuán)隊(duì)和項(xiàng)目辑舷,何者為先
- 專業(yè)的開發(fā)組織會(huì)把項(xiàng)目分配給已形成凝聚力的團(tuán)隊(duì),而不會(huì)圍繞著項(xiàng)目來組建團(tuán)隊(duì)
- 如何管理有凝聚力的團(tuán)隊(duì)
- 每個(gè)團(tuán)隊(duì)都有自己的速度
- 團(tuán)隊(duì)的速度,即是指在一定時(shí)間段內(nèi)團(tuán)隊(duì)能夠完成的工作量
- 項(xiàng)目承包人的困境
- 反對(duì)意見:這會(huì)讓項(xiàng)目承包人失去些安全感和權(quán)力
- 組建和解散團(tuán)隊(duì)只是人為的困難,公司不應(yīng)受到它的束縛。如果公司在業(yè)務(wù)上認(rèn)為一個(gè)項(xiàng)目比另一個(gè)項(xiàng)目的優(yōu)先級(jí)更高,應(yīng)該要快速重新分配資源
結(jié)論
- 團(tuán)隊(duì)比項(xiàng)目更難構(gòu)建。因此,組建穩(wěn)健的團(tuán)隊(duì)涌乳,讓團(tuán)隊(duì)在一個(gè)又一個(gè)項(xiàng)目中整體移動(dòng)共同工作是較好的做法
輔導(dǎo)逗宜、學(xué)徒期與技藝
失敗的學(xué)位教育
- 在學(xué)校中所學(xué)的內(nèi)容和在工作中發(fā)現(xiàn)的實(shí)際需要智厌,這兩者之間通常會(huì)有巨大的差異
輔導(dǎo)
- 真正的“老師”、“大師”或是“導(dǎo)師”
- 能夠深入淺出地指導(dǎo)我跨過其中的溝溝壑壑
- 我可以在給他打下手完成一些小任務(wù)時(shí)觀察他的工作方式
- 他會(huì)對(duì)我的工作進(jìn)行審查,指導(dǎo)我的早期工作
- 他會(huì)專門教導(dǎo)我建立正確的價(jià)值觀和反思內(nèi)省的習(xí)慣
學(xué)徒期
- 軟件學(xué)徒期
- 大師
- 他們是那些已經(jīng)領(lǐng)到過多個(gè)重要軟件項(xiàng)目的程序員
- 熟練工
- 他們還處在受訓(xùn)期中沧踏,不過已能勝任工作,而且精力充沛员串。在職業(yè)生涯的當(dāng)前階段,他們將會(huì)學(xué)習(xí)如何在團(tuán)隊(duì)中卓越工作和成為團(tuán)隊(duì)的領(lǐng)導(dǎo)者
- 學(xué)徒/實(shí)習(xí)生
- 畢業(yè)生會(huì)從學(xué)徒這一步開始他們的職業(yè)生涯竖幔。學(xué)徒?jīng)]有“自治權(quán)”蜕青,他們需要在熟練工的緊密督導(dǎo)下工作
- 學(xué)徒期至少應(yīng)持續(xù)一年
- 大師
- 現(xiàn)實(shí)情況
- 上述這些描述是假設(shè)的一種十分理想化的狀況
- 觀念上最大的差別在于挠他,專業(yè)主義價(jià)值觀和技術(shù)敏銳度需要進(jìn)行不斷的傳授艾凯、培育、滋養(yǎng)和文火慢燉,直至其完全滲入文化當(dāng)中
- 我們當(dāng)前的做法之所以傳承無力,主要是因?yàn)槠渲腥笔Я速Y深人士輔導(dǎo)新人向其傳授技藝的環(huán)節(jié)
技藝
- 技藝是工匠所持的精神狀態(tài)
- 技藝的“模因”(meme)中包含著價(jià)值觀宣鄙、原則、技術(shù)、態(tài)度和正見
- 技藝模因經(jīng)由口口相傳和手手相承而來浴韭,需要由資深人士向年輕學(xué)徒殷勤傳授点骑,然后再在學(xué)徒之間相互傳播
- 覺者覺人
- 你無法說服別人成為一名匠者荞彼,你無法說服他們?nèi)ソ邮芗妓嚹R?/li>
- 只要技藝模因可以被人觀察到,它便具有傳染性。因此只需讓技藝模因可以被他人觀察到即可
- 你自己首先要成為表率。你自己首先要成為能工巧匠,想人們展示你的技藝凭峡。然后,將剩余的事情交給技藝模因的自然運(yùn)行之道即可
結(jié)論
- 學(xué)校并不會(huì)也無法傳授作為一名編程匠者所需掌握的原則、實(shí)踐和技能
- 指引下一代軟件開發(fā)人員成熟起來的重任無法寄希望于大學(xué)教育描睦,現(xiàn)在這個(gè)重任已經(jīng)落到了我們肩上