學徒模式是由數十個在不同情境下可以用的模式所組成
每個模式都會分為情境、問題、解決方案、行動四個部分
模式之間彼此可能有一些關聯,但並非順序性的
所以這本書並沒有必要照著順序閱讀
讀起來的感覺跟 The Clean Coder 有點像
在職涯的不同階段閱讀都可能有很不同的感受
前言
- 有些讀者發現需要讀本書兩次
- 第一次快速瀏覽,在腦中建構所有內容的印象
- 第二次建立各模式間的互相連結
我覺得我自己就是幾乎什麼書都得讀兩次的人 XD
Ch2 - 倒空杯子
你的第一個語言
- 選一個語言,精通它
- 和專家一起工作
- 參加該語言愛好者舉辦的本地聚會(或網路論壇),評估自己是不是願意屬於這個社群
- 盡快閱讀如 Effective Perl Programming, Effective Java 這類書籍,加速學習並減少犯下常見錯誤的機會
- 但不應該與任何特定的技術白頭到老,應該尋求廣泛而足夠的基礎知識與經驗,才能針對任何特殊的狀況挑選合適的方案
具體技能
- 「如果我今天雇用你,下星期一你能對團隊帶來什麼好處?」
- 對第一個語言的深入了解能幫你建立可靠度,證明對團隊的幫助
- 變成工匠後,聲望、過去的工作經驗,以及對團隊帶來更深層的影響將更為重要
- 到這個時間點之前,你必須盡可能地擁有更多技能
- 收集你嚮往的人的履歷資料,從每份履歷中挑出五個不同的技能,評估是是否夠用在你想加入的團隊中,利用挑選出來的技能建立一個能夠展現你擁有這些技能的小專案
- 養成定期維護個人履歷的習慣,將具體技能獨立為個別的清單
Ch3 - 走在漫漫長路
量身繪製地圖
- 列出三個目前工作之後可以做的工作,之後再為每個工作列出三個後續的工作
- 思考這些是否包含接下來幾年你生命中期望的職務
Ch4 - 正確的自我認知
成為菜鳥
- 問題: 學習的機會慢慢減少
- 解決方案: 讓自己被比自己優秀的開發人員圍繞
- 行動
- 列出所有你知道的團隊(e.g., 開放原始碼專案、其他部分、以及其他公司)
- 將這些團隊一技術能力好壞排列,然後找出其中正在找尋新成員加入的團隊
- 可能得加入好幾個 mailing list ,向許多人詢問才能弄清楚這些團隊彼此的技術能力
打掃地面
- 問題: 不確定自己在團隊中的位置,團隊對你的認識也不多,你希望找到為團隊貢獻的方式,獲得團隊的信任,並成長成工匠
- 解決方案
- 自願去做簡單、枯燥、又非做不可的工作
- 初期為團隊的成功做出貢獻,展現出即使在小事上也能維持高品質的成果
Ch5 - 終身學習
拓展你的頻寬
- 在 Twitter 上追蹤一些傑出軟體人員,持續關注他們在進行的工作
- 訂閱高流量的 mailing list ,重新產生他人詢問的問題,並試著回答他們
- 加入新成立、以最新科技為主題的本地使用者群組,向負責人自我介紹,並提供需要的幫助
- 每讀完一本書,寄信給作者表達謝意與提問
- 作者、講者與傑出人員也許看起來很嚇人或忙碌,但他們通常很樂意與讀者互動
邊工作邊反省
- 情境
- 有足夠能力的人,都會在幾年後爬上升職的階梯。如果你不為那個晉升準備,你會發現自己成為「彼得原理」的受害者,被晉升到不能勝任的位置
- 解決方案
- 經常反省自己的工作方式
- 建立 Personal Practices Map (Ref: My Personal Practices Map)
分享個人所學
- 這對初學者可能是不容易跨過的心理障礙,但正因為知道的不多,你的解釋會最簡單、直接,而不需要其他知識,這會讓他們成為更好的解釋
- 行動: 回想你上次學到重要知識的過程,寫一篇相關的文章,提供你當初希望已經存在的訊息
建立回饋迴路
- 情境: 你無法知道自己是否限於 unconscious incompetence
- 解決方案
- 定期取得關於自身表現的外部客觀資料
- 學徒也許不該太早致力於減少錯誤,而是致力於如何辨認自己犯的錯
Ch6 - 安排自我課程
閱讀清單
- 問題: 你需要閱讀的書籍大量增加,遠遠超過你的閱讀速度
- 解決方案
- 維護閱讀清單,紀錄你計畫要讀跟已經讀完的書
- 考慮將閱讀清單公開出來,這能讓其他人也從你的學習受益 (Ref: BookShelved)
- 反省過去的學習習慣
- 你可能會發現有些書持續出現在參考書目中,應該將這些書移到前方
- 閱讀清單應該要是一個 priority queue
- 維護閱讀清單,紀錄你計畫要讀跟已經讀完的書