約耳趣談軟體:來自專案管理的現場實錄 
  • 英文書名: Joel on Software: And on Diverse and Occasionally Related Matters That Will Prove of Interest to Software Developers, Designers, and Managers, and to Those Who, Whether by Good Fortune or Ill Luck, Work with Them in Some Capacity (2004)
  • 作者為 stackoverflow & trello 創辦人
  • 中文書已絕版了,需要的人可以去圖書館借或直接看原文 blog 
  • 中文譯者的 web 公開全書翻譯 (少了2,3 chapters) https://www.csie.ntu.edu.tw/~p92005/Joel/x.html, 但跟中文書的有時會有一點翻譯差異 (可能書中有再次潤飾過)。下面的章節摘要 copy 自此網頁。

章節

Part 1 位元與位元組:程式設計的實踐
CH01 選擇一種語言
CH02 回歸簡單原則 
  • 我認為電腦科系一年級學生應該由基礎開始學起,使用C並由CPU開始一路建立觀念,這正是最重要的。 很多電腦科學計劃認為Java很「容易」,不用碰無聊的字串/記憶體配置就能學習最酷的物件導向技術,能讓你的大程式更加模組化, 所以很適合當作入門學習的電腦語言。我對這種想法其實非常的反感
CH03 約耳測試:邁向高品質程式碼的12步驟
  • 步驟
  • 你有使用原始碼控制系統嗎?
  • 你能用一個步驟建出所有結果嗎?
  • 你有沒有每天都重新編譯建立(daily builds)嗎?
  • 你有沒有問題追蹤資料庫(bug database)?
  • 你會先把問題都修好之後才寫新的程式嗎?
  • 你有一份最新的時程表嗎?
  • 你有規格嗎?
  • 在設計階段發現問題時,只要改幾行就能輕易修正。等程式寫出來之後,修正的代價就高得多了,代價包含了情感(人們討厭拋棄程式碼)和時間,所以會抗拒修正問題。通常未依據規格製作的軟體 最後的設計都很糟,而且進度完全無法控制
  • 程式人員有沒有安靜的工作環境?
  • 有大量的文件記載,為知識工作者提供空間安靜及隱私可以提昇產能。軟體管理經典Peopleware大量記錄了這種產能上的增益。
  • 你有沒有用市面上最好的工具?
  • 你有沒有測試人員?
  • 有沒有在面試時要求面試對象寫程式?
  • 有沒有做走廊使用性(hallway usability)測試?
  • 如果你正在決定是否接受一份程式設計的工作,可以問問未來可能的雇主他們能拿幾分。如果分數太低時要先確定你有權修正這種問題。否則你將會灰心喪氣而且一事無成。
CH04 每位開發人員至少且絕對要會的Unicode及字元集必備知識
CH05 無痛的功能規格1:何必麻煩?
  • 不寫規格是軟體專案中一個最大且不必要的風險
  • 所有重要的專案(寫程式時間超過一週或一個以上的程式員)都一樣,如果沒有規格,絕對會耗時更久並且寫出品質低劣的程式。理由如下。規格最重要的功能是要設計程式。即使你是自己一個人寫好所有的程式,而且寫了規格也只是自己在看,寫規格這個動作(詳細描述程式運作)還是能迫使你實際設計程式。
  • 那些不訂規格直接寫程式的程式員和軟體工程師都會自認是神槍手,可以朝背後開槍。才怪。他們根本沒有生產力。他們寫出爛程式並做出低劣的產品,而且還讓專案承受完全可以避免的極大風險。
  • 更糟糕的是,某段程式可能只花程式員2週就寫出來,可是他會一直死抱著那段程式
  • 當你以人用的語言設計產品時,只需要花幾分鐘就能考慮多種可能並且修訂及改進自己的設計。沒有人會覺得在文書處理器裡刪掉一段有啥大不了的…所以這就是寫規格的天字第一號理由。天字第二號是節省溝通時間。當你有寫規格時,對於程式應有的作用只需要講解一次。團隊裡其他人只要讀規格就好了。品保人員讀了規格就知道程式的動作同時也知道如何測試
  • 寫規格的天字第三號理由就是沒有詳細規格就無法訂出時程
  • (不寫規格) 我認為真正原因是多數人都不喜歡寫東西
CH06 無痛的功能規格2:規格是什麼?
  • 人們對被指派的工作應該要同時有責任和所有權
  • 第一版的規格有未定義項目是正常的… 你可能認為,先讓程式員從簡單的項目做起,你稍後再把未定義項目定清楚。這是個壞主意。光是處理程式人員實作程式時出現的新問題就夠了,根本不會記得還有些舊問題有待處理。另外解決重大項目時所用的方法也可能會嚴重影響到程式的寫法
  • 規格必須是活的: 很多人都對我說:「規格根本沒用,因為沒有人會照著做。規格總是過時而且從來無法反映產品。」→因為沒有常常更新
CH07 無痛的功能規格3:但是…該怎麼做?
  • 你要如何雇到一個產品經理呢?(→ 原文 program manager )
  • 不要把程式員升為產品經理