SlideShare a Scribd company logo
軟體專案管理與開源精神
chentsulin
chentsulin
chentsulin
C.	T.	Lin
Ac+ve	JavaScript	Open	Source	Developer
System	Engineer	Lead@Yoctol
專案管理
⼗個⼥⽣各懷胎⼀個⽉	
能不能⽣出⼀個⼩孩?	
Answer:不能
⼗個⼯程師⼀起做⼀個⽉	
會不會跟⼀個⼈做⼗個⽉	
⼀樣快?	
Answer:不會
人月神話
•  團隊交流公式: n(n – 1)/ 2	
•  50 個開發⼈員,就要 50(50 – 1)/ 2 =
1225 個溝通管道	
•  為成本與管理會計上的基礎時程預估技術	
•  優秀專業程式設計師的⽣產⼒要⽐差勁的
程式設計師好上⼗倍	
•  熬夜加班頭腦不清楚加 Bug 只會讓專案倒
退
設計
•  保有概念整體性(conceptual integrity)
是最重要的原則	
•  功能多,不⾒得是好事	
•  將架構設計獨⽴於實作之外是取得概念整
體性強⽽有利的⽅法	
•  寧願做錯設計,也不要不確定
Brooks	法則

在⼀個時程已經落後的軟體
專案中增加⼈⼿,只會讓它
更加落後。
技術
「軟體⾸要技術使命是管理
複雜度。」	
	
– Steve McConnell in Code Complete
複雜度
•  Facebook 的 Codebase 有兩萬個 UI 元
件	
•  騰訊微博有近⼆⼗萬⾏的前端程式碼	
•  新進員⼯怎麼快速上⼿
沒有單元測試的程式碼
•  就是 Legacy Code	
•  無從探究真正正確的⾏為	
•  沒⼈⼼臟夠⼤敢做修改	
•  久了⼤家也忘了這是幹嘛⽤	
•  有問題都是 Feature 不是 Bug
版本控制系統	
•  我不⼩⼼改壞了怎麼辦	
•  上禮拜的時候明明 Work	
•  同學:我把你的程式碼⼤改了,⽤ USB 傳
給你	
•  產品經理:這個功能我不要了,⿇煩拿掉	
•  例如:Git
持續整合
•  保持隨時功能都正常,可以 Demo 的狀況	
•  不輕易同意合併有問題的程式碼	
•  必須要有單元測試	
•  穩定交付給⼈員做測試的版本必須有版號
嚴格的要求品質
•  專案是否會花很多時間常跟品質有很⼤的
關係	
•  變數命名是否精準?	
•  是否有正確的抽象概念?	
•  Coding Style 是否⼀致?無法把空格跟縮
排搞定的⼈怎麼寫出優美的程式碼	
•  寫程式時,讀程式碼時間佔 90%,不要逞
⼀時之快
可是..

Workaround 雖可恥但是有⽤	

把這樣的程式碼限縮在	
Function	內並加上明顯的註解
人
「我們在⼯作中所⾯臨的,
在本質上,主要都是社會性
的問題,⽽⾮技術性的問題」	
	
– 《⼈⽉神話》第19章
人的管理
•  軟體⼯作者是知識⼯作者	
•  ⼈在時間壓⼒下不會把⼯作做得更好,只
會做得⽐較快,結果被迫交出低品質的產
品,⾃尊⼼降低,最後辭職不幹	
•  想辦法讓團隊產⽣化學作⽤	
•  終極的管理罪惡,就是浪費員⼯的時間例
如儀式性的會議	
•  如何真正發揮⼈才的⼒量
Bus	Factor

如果專案中的其中⼀個⼈被巴
⼠撞到,專案就會失敗嗎?
適度的工作內容輪調
•  能降低 Bus Factor	
•  增加熟悉程式碼的⼈數,有利於 Code
Review	
•  團隊成員對彼此⼯作內容越了解,合作能
⼒就越強	
•  增進⼯作的有趣程度,強化個⼈技能
避免死亡行軍	(Death	march)

•  時程被壓縮了⼀半以上	
•  參與⼈數被壓縮了⼀半以上	
•  有過分的技術要求	
•  必須儘早發現,⽤砍功能或是延
期來補救,不要補⼈
The	Joel	Test:邁向高品質的12個步驟
1.  你有使⽤原始碼控制系統嗎?	
2.  你能⽤⼀個步驟建出所有結果嗎?	
3.  你有沒有每天都重新編譯建⽴ (daily builds) 嗎?	
4.  你有沒有問題追蹤資料庫 (bug database)?	
5.  你會先把問題都修好之後才寫新的程式嗎?	
6.  你有⼀份最新的時程表嗎?	
7.  你有規格嗎?	
8.  程式⼈員有沒有安靜的⼯作環境?	
9.  你有沒有⽤市⾯上最好的⼯具?	
10. 你有沒有測試⼈員?	
11. 有沒有在⾯試時要求⾯試對象寫程式?	
12. 有沒有做⾛廊使⽤性 (hallway usability) 測試?
推薦書目
•  ⼈⽉神話:軟體專案管理之道 	
•  Peopleware:腦⼒密集產業的⼈才管理之道	
•  Joel on Software:約⽿趣談軟體	
《Peopleware》 和《⼈⽉神話》共同被譽為
軟體書中「兩朵最鮮豔的奇葩」。《⼈⽉神話》
關注的是「軟體開發」本⾝,⽽
《Peopleware》關注的是軟體開發中的「⼈」。
沒有銀彈:
軟體工程的本質性與附屬性工作
•  IBM ⼤型電腦之⽗佛瑞德·布魯克斯所發
表⼀篇關於軟體⼯程的經典論⽂	
•  軟體的複雜性本質,⽽使解決問題的有效
⽅法並不存在	
•  沒有任何⼀項技術或⽅法可使軟體⼯程的
⽣產⼒在⼗年內提⾼⼗倍	
•  有些⼈持相反的意⾒
開源精神
為什麼開源?
•  受別⼈的恩惠,回饋到社群	
•  從厲害的⼈那邊獲取意⾒、跟厲害的⼈合
作,強化⾃⼰的技能	
•  接觸最新技術、認識同好	
•  最重要的還是⼈,學習與⼈相處	
•  成⻑!
擁抱社群讓其他的人幫你
的忙,才能長長久久
每一次看程式的原始碼,
看完之後都要讓他變得更
好一點。
現政務委員	唐鳳
的開源之道演講
-	https://www.youtube.com/watch?
v=A6bBcvSyg0k
不是只有軟體能開源	
•  開源硬體	
•  開源設計	
•  開源⽂件	
•  開源資料	
•  等等…
g0v	零時政府
The End
Thanks for Listening

More Related Content

Similar to 軟體專案管理與開源精神

Djt22 justinliu djt.qq.com
Djt22 justinliu djt.qq.comDjt22 justinliu djt.qq.com
Djt22 justinliu djt.qq.comdrewz lin
 
Djt22 justinliu djt.qq.com
Djt22 justinliu djt.qq.comDjt22 justinliu djt.qq.com
Djt22 justinliu djt.qq.comdrewz lin
 
2012/05/23 AU Talk - 讓事情發生
2012/05/23 AU Talk - 讓事情發生2012/05/23 AU Talk - 讓事情發生
2012/05/23 AU Talk - 讓事情發生
appuniverz
 
Pair Programming (结对编程)
Pair Programming (结对编程)Pair Programming (结对编程)
Pair Programming (结对编程)
Josh Chen
 
Running a Service in Production without Losing Your Sanity
Running a Service in Production without Losing Your SanityRunning a Service in Production without Losing Your Sanity
Running a Service in Production without Losing Your Sanity
Poga Po
 
我要活下來 - Ruby Junior 工程師的存活術
我要活下來 - Ruby Junior 工程師的存活術我要活下來 - Ruby Junior 工程師的存活術
我要活下來 - Ruby Junior 工程師的存活術
Li Hsuan Hung
 
簡報規劃與技巧
簡報規劃與技巧簡報規劃與技巧
簡報規劃與技巧
基欽 劉
 
從乙方PM的角度看敏捷
從乙方PM的角度看敏捷從乙方PM的角度看敏捷
從乙方PM的角度看敏捷
KC Liu
 
102.05.31 台灣女性創業研究發展協會-詹翔霖教授-企劃書格式與撰寫2-簡報與教學技巧-行銷與連鎖加盟經營管理訓練
102.05.31 台灣女性創業研究發展協會-詹翔霖教授-企劃書格式與撰寫2-簡報與教學技巧-行銷與連鎖加盟經營管理訓練102.05.31 台灣女性創業研究發展協會-詹翔霖教授-企劃書格式與撰寫2-簡報與教學技巧-行銷與連鎖加盟經營管理訓練
102.05.31 台灣女性創業研究發展協會-詹翔霖教授-企劃書格式與撰寫2-簡報與教學技巧-行銷與連鎖加盟經營管理訓練文化大學
 
Developer vs designer
Developer vs designerDeveloper vs designer
Developer vs designerRobert Luo
 
不為人知的前端人生
不為人知的前端人生不為人知的前端人生
不為人知的前端人生
拉拉 羅
 
有效面對技術債
有效面對技術債有效面對技術債
有效面對技術債
Kirk Chen
 
超越敏捷开发(成就敏捷企业之道)
超越敏捷开发(成就敏捷企业之道)超越敏捷开发(成就敏捷企业之道)
超越敏捷开发(成就敏捷企业之道)
Weijun Zhong
 
在生命轉彎的地方 - 從軟體開發職涯,探索人生
在生命轉彎的地方 - 從軟體開發職涯,探索人生在生命轉彎的地方 - 從軟體開發職涯,探索人生
在生命轉彎的地方 - 從軟體開發職涯,探索人生
Rick Hwang
 
專案管理概念介紹與實務應用 20190515 v4_final
專案管理概念介紹與實務應用 20190515 v4_final 專案管理概念介紹與實務應用 20190515 v4_final
專案管理概念介紹與實務應用 20190515 v4_final
Chris Cheng-Hsun Lin
 
如何使用工具提高PHP项目的生产力
如何使用工具提高PHP项目的生产力如何使用工具提高PHP项目的生产力
如何使用工具提高PHP项目的生产力
Scourgen Hong
 
Ppt的制作与应用
Ppt的制作与应用 Ppt的制作与应用
Ppt的制作与应用
zzk1974
 
DevOps的神鬼奇航
DevOps的神鬼奇航DevOps的神鬼奇航
DevOps的神鬼奇航
Edward Kuo
 
專案管理理論基礎
專案管理理論基礎專案管理理論基礎
專案管理理論基礎
黑狗 大
 
2020DDDTW-如何逐步導入敏捷精神,創造願意接受失敗的開發團隊?
2020DDDTW-如何逐步導入敏捷精神,創造願意接受失敗的開發團隊?2020DDDTW-如何逐步導入敏捷精神,創造願意接受失敗的開發團隊?
2020DDDTW-如何逐步導入敏捷精神,創造願意接受失敗的開發團隊?
棋文 鄭
 

Similar to 軟體專案管理與開源精神 (20)

Djt22 justinliu djt.qq.com
Djt22 justinliu djt.qq.comDjt22 justinliu djt.qq.com
Djt22 justinliu djt.qq.com
 
Djt22 justinliu djt.qq.com
Djt22 justinliu djt.qq.comDjt22 justinliu djt.qq.com
Djt22 justinliu djt.qq.com
 
2012/05/23 AU Talk - 讓事情發生
2012/05/23 AU Talk - 讓事情發生2012/05/23 AU Talk - 讓事情發生
2012/05/23 AU Talk - 讓事情發生
 
Pair Programming (结对编程)
Pair Programming (结对编程)Pair Programming (结对编程)
Pair Programming (结对编程)
 
Running a Service in Production without Losing Your Sanity
Running a Service in Production without Losing Your SanityRunning a Service in Production without Losing Your Sanity
Running a Service in Production without Losing Your Sanity
 
我要活下來 - Ruby Junior 工程師的存活術
我要活下來 - Ruby Junior 工程師的存活術我要活下來 - Ruby Junior 工程師的存活術
我要活下來 - Ruby Junior 工程師的存活術
 
簡報規劃與技巧
簡報規劃與技巧簡報規劃與技巧
簡報規劃與技巧
 
從乙方PM的角度看敏捷
從乙方PM的角度看敏捷從乙方PM的角度看敏捷
從乙方PM的角度看敏捷
 
102.05.31 台灣女性創業研究發展協會-詹翔霖教授-企劃書格式與撰寫2-簡報與教學技巧-行銷與連鎖加盟經營管理訓練
102.05.31 台灣女性創業研究發展協會-詹翔霖教授-企劃書格式與撰寫2-簡報與教學技巧-行銷與連鎖加盟經營管理訓練102.05.31 台灣女性創業研究發展協會-詹翔霖教授-企劃書格式與撰寫2-簡報與教學技巧-行銷與連鎖加盟經營管理訓練
102.05.31 台灣女性創業研究發展協會-詹翔霖教授-企劃書格式與撰寫2-簡報與教學技巧-行銷與連鎖加盟經營管理訓練
 
Developer vs designer
Developer vs designerDeveloper vs designer
Developer vs designer
 
不為人知的前端人生
不為人知的前端人生不為人知的前端人生
不為人知的前端人生
 
有效面對技術債
有效面對技術債有效面對技術債
有效面對技術債
 
超越敏捷开发(成就敏捷企业之道)
超越敏捷开发(成就敏捷企业之道)超越敏捷开发(成就敏捷企业之道)
超越敏捷开发(成就敏捷企业之道)
 
在生命轉彎的地方 - 從軟體開發職涯,探索人生
在生命轉彎的地方 - 從軟體開發職涯,探索人生在生命轉彎的地方 - 從軟體開發職涯,探索人生
在生命轉彎的地方 - 從軟體開發職涯,探索人生
 
專案管理概念介紹與實務應用 20190515 v4_final
專案管理概念介紹與實務應用 20190515 v4_final 專案管理概念介紹與實務應用 20190515 v4_final
專案管理概念介紹與實務應用 20190515 v4_final
 
如何使用工具提高PHP项目的生产力
如何使用工具提高PHP项目的生产力如何使用工具提高PHP项目的生产力
如何使用工具提高PHP项目的生产力
 
Ppt的制作与应用
Ppt的制作与应用 Ppt的制作与应用
Ppt的制作与应用
 
DevOps的神鬼奇航
DevOps的神鬼奇航DevOps的神鬼奇航
DevOps的神鬼奇航
 
專案管理理論基礎
專案管理理論基礎專案管理理論基礎
專案管理理論基礎
 
2020DDDTW-如何逐步導入敏捷精神,創造願意接受失敗的開發團隊?
2020DDDTW-如何逐步導入敏捷精神,創造願意接受失敗的開發團隊?2020DDDTW-如何逐步導入敏捷精神,創造願意接受失敗的開發團隊?
2020DDDTW-如何逐步導入敏捷精神,創造願意接受失敗的開發團隊?
 

軟體專案管理與開源精神