專業(yè)主義
笑吧,科廷亮蛔,老伙計师逸。這是上帝,或者也可以說是命運或者自然铝侵,跟我們開的一個玩笑。不過触徐,不管這家伙是誰或是什么咪鲜,他真幽默!哈哈撞鹉!
01 | 清楚你要什么
02 | 擔當責任
03 | 不行損害之事
不破壞軟件功能
不破壞結構
04 | 職業(yè)道德
了解你的領域
- 設計模式
- GOF書中的24種設計模式
- 設計原則
- SOLID原則
- 組件設計原則
- 方法
- XP
- Scrum
- 精益
- 看板
- 瀑布
- 結構化分析
- 結構化設計
- 實踐
- 測試驅動開發(fā)
- 面向對象設計
- 結構化編程
- 持續(xù)集成
- 結對編程
- 工件
- UML圖
- DFD圖
- 結構圖
- Petri網(wǎng)絡圖
- 狀態(tài)遷移表
- 流程圖
- 決策表
堅持學習
.net到java疟丙,java到ruby颖侄,c到lisp
Prolog和Forth
練習
10分鐘kata練習
合作
一起編程、一起練習隆敢、一起設計发皿、一起計劃
輔導
了解業(yè)務領域
每位開發(fā)人員有義務了解自己開發(fā)的解決方案所對應的業(yè)務領域
與雇主或客戶保持一致
謙遜
說“不”
能就是能,不能就是不能拂蝎。不要說“試試看”穴墅。
01 | 對抗角色
02 | 高風險時刻
03 | 團隊精神
試試看
- 許諾嘗試,意味著你承認之前未盡全力温自,趁人自己還有余力可施
- 許諾嘗試玄货,意味著你承諾你會確保成功
- 如果沒有保留,沒有新方案悼泌,不要輕易許諾嘗試松捉,否則你在說謊
消極對抗
- 災難降臨,證明自己某市某刻給領導的建議馆里,撇去自己的責任隘世,放任領導走向懸崖,是一種消極對抗
04 | 說“是”的成本
05 | 如何寫出好代碼
說“是”
01 | 承諾用語
- 口頭上說自己將會去做
- 心理認真對待做出的承諾
- 真正付諸行動
“天哪鸠踪,我真該減減肥了丙者?”但你知道其實他還會是老樣子,什么改變都不會發(fā)生营密。
識別缺乏承諾的征兆
透露“缺乏承諾”的用語:
- 需要械媒、應當
- 希望、但愿
- 讓我們
- 我要
真正的承諾聽起來是怎樣的
我將在...之前...
- 只能承諾自己能完全掌控的事
- 如果最終目標依賴他人评汰,那就應該采取些行動纷捞,接近最終目標
- 沒預料到的情況,一定要及時說明被去,越快越好
02 | 學習如何說“是”
“試試”的另一面
別說“試試”主儡,真實反應自己的情況
編碼
“信心”與“出錯感知”
01 | 做好準備
- 代碼必須能夠正常工作
- 代碼能夠幫你解決客戶提出的問題
- 代碼必須要能和現(xiàn)有系統(tǒng)結合的天衣無縫
- 其他程序員必須能讀懂你的代碼
如果感到疲勞或者心煩意亂,千萬不要編碼
凌晨3點寫出的代碼
疲勞的時候惨缆,千萬不要寫代碼
焦慮時寫下的代碼
- 私人時間解決私人問題
- 先安靜糜值,再工作
02 | 流態(tài)區(qū)
高效率狀態(tài):流態(tài)
避免進入流態(tài)區(qū)
音樂
中斷
禮貌的表現(xiàn)出樂于助人的態(tài)度才是專業(yè)的態(tài)度
03 | 阻塞
- 找一個搭檔結對編程,和別人一起工作時踪央,會發(fā)生一種生理上的變化臀玄?
- 結對的主要好處就是能夠重新激活思維
04 | 調(diào)試
05 | 保持節(jié)奏
保存好自己的精力和創(chuàng)造力
知道何時應該離開一會兒
開車回家路上
洗澡
回家瓢阴,吃頓好的畅蹂,上床睡覺,清晨洗個澡2333
06 | 進度延遲
做好3個評估:
- 樂觀預估
- 標稱預估
- 悲觀預估
期望
不要讓其他人對預估抱有希望
盲目沖刺
堅持維護你的估算
加班加點
沒有后備語言荣恐,不要同意接受加班方案
交付失誤
07 | 幫助
幫助他人
接受他人的幫助
輔導
測試驅動開發(fā)
TDD:測試驅動開發(fā)
XP:極限編程
對任何新鮮事物液斜,最好不要馬上批駁
01 | 此事已有定論
TDD絕不僅僅是一種用于縮短編碼周期的簡單技巧
- 此事已有定論累贤!
- 爭論已經(jīng)結束
- GOTO是有害的
- TDD確實可行
02 | TDD的三項法則
- 編好失敗單元測試之前,不要編寫任何代碼
- 只要有一個單元測試失敗了少漆,就不要再寫測試代碼臼膏;無法通過編譯也是一種失敗情況
- 產(chǎn)品代碼恰好能夠讓當前失敗的單元測試成功通過即可,不要多寫
測試代碼之匹配于產(chǎn)品代碼示损,就如抗體之匹配于抗原一樣
03 | TDD的優(yōu)勢
確定性
缺陷注入率
勇氣
專業(yè)程序員怎么會容忍代碼持續(xù)劣化呢渗磅?
文檔
設計
專業(yè)人士的選擇
- 提升代碼確定性
- 給程序員鼓勵
- 降低代碼缺陷率
- 優(yōu)化文檔和設計的原則
04 | TDD的局限
練習
01 | 引子
10的22次方
我們有了更好的工具,更好的語言检访∈加悖可是,語句的本質并沒有隨時間而改變脆贵。我們真正打交道的東西医清,40多年來沒有多少改變
轉變
02 | 編程柔道場
卡塔
武術里,卡塔是一套設計好的卖氨、用來模擬搏斗一方的招式会烙。目標則是要逐步把整套招式練習到純熟。習武者努力訓練自己的身體來熟悉每一招筒捺,把它們連貫成流暢的套路柏腻。
收錄編程卡塔的網(wǎng)站:
瓦薩
瓦薩是兩個人的卡塔
自由練習
03 | 自身經(jīng)驗的拓展
開源
為開源項目貢獻代碼
java給rails做點貢獻,c++給python做點貢獻
關于練習的職業(yè)道德
04 | 結論
練習的時候你是賺不到錢的焙矛,但是練習之后葫盼,你會獲得回報,而且是豐厚的回報
驗收測試
01 | 需求的溝通
客戶對功能的設想村斟,經(jīng)不起電腦前真刀真槍的考驗
過早精細化
- 不確定原則
- 每次你向業(yè)務方向展示一項功能贫导,它們就獲得了比之前更多的信息,這些新信息反過來又會影響他們對整個系統(tǒng)的看法
- 預估焦慮
- 需求是一定會變化的蟆盹,所以追求那種精確性是徒勞的
02 | 遲來的模糊性
02 | 驗收測試
驗收測試的目的在于確定需求已經(jīng)完成
“完成”的定義
溝通
自動化
自動化驗收測試工具:
- FitNesse
- Cucumber
- cuke4duke
- robot framework
- Selenium
額外工作
驗收測試什么時候寫孩灯,由誰來寫
開發(fā)人員的角色
測試的協(xié)商與被動推進
驗收測試和單元測試
真正的價值不在測試上,而是在具體指標上
圖形界面及其他復雜因素
GUI與業(yè)務邏輯解耦
持續(xù)集成
03 | 結論
解決開發(fā)方與業(yè)務方溝通的問題逾滥,唯一有效的辦法是編寫自動化測試
測試策略
01 | 目前:QA找不到任何錯誤
QA也是團隊的一部分
需求規(guī)約定義者
QA編寫針對極端情況峰档、邊界狀態(tài)和異常路徑的測試
特性描述者
02 | 自動化測試金字塔
- 單元測試
- 由程序員實現(xiàn),在最低層次上定義系統(tǒng)寨昙,確保程序員代碼意圖沒有被破壞
- 組件測試
- 針對系統(tǒng)各個組件進行車市讥巡,對其中的業(yè)務規(guī)則進行驗收測試,由QA和開發(fā)人員編寫舔哪,開發(fā)人員進行輔助欢顷,主要測試成功路徑的情況及部分明顯的極端情況、邊界狀態(tài)和可選路徑
- 集成測試
- 測試組件之間是否能正常通信捉蚤,主要測試組件之間是否正常連接抬驴,可以進行性能測試和吞吐率測試炼七,一般由系統(tǒng)架構師或者主設計師來實現(xiàn)
- 系統(tǒng)測試
- 測試系統(tǒng)是否正確組裝完畢,系統(tǒng)各個部件之間是否能夠正確交互布持,應包含吞吐率測試和性能測試豌拙,由系統(tǒng)架構師和技術負責人編寫
- 人工探索式測試
- 驗證預期行為時,探索系統(tǒng)預期之外的行為
03 | 結論
時間管理
01 | 會議
- 會議是必需的
- 會議浪費了大量的時間
拒絕
受到邀請的會議沒必要全部參加题暖,為時間負責的只有自己
領導最重要的職責之一按傅,就是幫你從某些會議中脫身,因為他和你一樣關心你的時間
離席
如果會議讓人厭煩胧卤,就離席逞敷,如果會議是在浪費你的時間,就應當想一個禮貌的方式退出來
確定議程和目標
立會
- 我昨天干了什么
- 我今天打算干什么
- 我遇到了什么問題
每個問題時間有限灌侣,發(fā)言時間有限
迭代會議計劃
迭代回顧和Demo展示
爭論與反對
唯一出路推捐,用數(shù)據(jù)(事實)說話
02 | 注意力點數(shù)
睡眠
咖啡因
- 早上一杯濃咖啡
- 中午一罐無糖可樂
恢復
肌肉注意力
提升肌肉注意力,繼而提升心智注意力
輸入與輸出
03 | 時間拆分與番茄工作法
04 | 要避免的行為
優(yōu)先級錯亂:提高某個任務的優(yōu)先級侧啼,之后就有借口推遲真正的急迫任務牛柒。
05 | 死胡同
坑法則:如果你掉進了坑里,別挖痊乾。
06 | 泥潭
07 | 結論
最糟糕的事情皮壁,莫過于看到一群同志徒勞拼命的工作,結果卻陷入越來越深的泥潭
預估
01 | 什么是預估
承諾
如果你被要求承諾做自己不確定的事情哪审,那么就應當堅決拒絕
預估
墨菲定律說蛾魄,如果可能出錯,那么一定會出錯
PERT
- 樂觀預估
- 標稱預估
- 悲觀預估
02 | 預估任務
- 亮手指
- 規(guī)劃撲克
- 關聯(lián)預估
- 三元預估
04 | 大數(shù)定律
把大任務分成許多小任務湿滓,分開預估在總和
壓力
高質量而不是愚蠢的勞作來享受自己的職業(yè)生涯
01 | 避免壓力
承諾
保持整潔
臟亂只會導致緩慢
危機中的紀律
當困難降臨時滴须,也不要改變行為
02 | 應對壓力
不要驚慌失措
溝通
依靠你的紀律原則
當事情十分困難時,要堅信并堅持你的原則
尋求幫助
協(xié)作
01 | 程序員與人
程序員與雇主
程序員與程序員
- 代碼個體所有
- 協(xié)作性的代碼共有權
- 結對
02 | 小腦
03 | 結論
編程意味著你就要和別人合作叽奥,一定要學會交流
團隊與項目
01 | 只是簡單的混合嗎
有凝聚力的團隊
- 7名程序員
- 2名測試人員
- 2名分析師
- 1名項目經(jīng)理
- 發(fā)酵期
- 團隊和項目扔水,何者為先
- 按照項目來構建團隊,永遠不可能有凝聚力
- 管理有凝聚力的團隊
項目承包人的困境
02 | 結論
團隊比項目更難構建朝氓。要給予團隊充足的時間魔市,讓他們形成凝聚力,一直共同工作赵哲,成為不斷交付項目的強大引擎
輔導待德、學徒期與技藝
01 | 失敗的學位教育
在大學里完全可以蒙混過關,混的一紙文憑枫夺,其實什么都不懂
02 | 輔導
Digi-Comp I
ECP-18
非常規(guī)輔導
艱難的錘煉
03 | 學徒期
軟件學徒期
- 大師
- 熟練工
- 學徒或者實習生
現(xiàn)實情況
03 | 技藝
覺者覺人
首先你自己要成為能工巧匠将宪,向別人展示你的技藝
附錄
01 | 工具
版本控制工具
- git
IDE
- vi
- emacs
- intelliJ
- TextMate
問題跟蹤
- Pivotal Tracker
- Lighthouse
- wiki
持續(xù)構建
- Jenkins
單元測試工具
- Java:JUnit
- .Net:NUnit
- Clojuer:Midje
- C/C++:CppUTest
組件測試工具
- Fitness
- RobotFX
- Green Pepper
- Cucumber
- JBehave