1. 程式人生 > >《軟體開發者路線圖—從學徒到高手》讀書筆記

《軟體開發者路線圖—從學徒到高手》讀書筆記

該書並非一本關於如何設計軟體的書,而是一本關於如何設計軟體開發職業生涯的開端併為你在該領域創造成績的書。該書是以模式語言的形式組織的。模式語言是針對特定領域中常見的問題的一組相互關聯的解決方法。

模式都包含一個“情景分析”、一個“問題描述”和一種“解決方法”,然後是一組單一或多重的行動。在每種模式接近尾聲的地方都有一個“行動指南”的小節,這一小節描述了你可以立即付諸實踐的具體事情。

任何模式都應包含給定情景中一大類問題的一攬子解決方案,記住這一點很重要。模式是用來修正以適應具體情形的,而不是用來生搬硬套的。

做軟體學徒意味什麼?

1、必須學會自我成長,學會如何學習。對自身的關注和提高自身技能的要求。

2、空杯心態,已有的經驗越多,你就越需要更多的努力進入到“空杯”狀態,清除思想中的壞習慣,放下對技能水平的自鳴得意,敞開自己,從更有經驗的同行那裡學習不同的而且常常是違反直覺的新方法。

學徒期做什麼贏得新團隊的信任?

主動完成簡單無趣卻又必須完成的任務。因為這表明你能完成高質量的工作。
這類任務包括維護構建系統,產品支援,響應維護需求,bug修正,程式碼複查,消除技術債務(technicaldebt),搭建專案wiki,更新文件,為其他人的想法充當傳聲筒,等等。通常,你會關注風險更低的系統邊緣部分,而不是常常帶有大量依賴性和極高複雜度的核心。

摘要

1、定期更新簡歷,定期面試。要養成定期把自己的簡歷審查一遍的習慣。一邊看一邊把具體技能提取到一份單獨的列表中。定期到去外面面試,看看自己處在什麼位置,與市場需求由什麼差距。看看
自己的簡歷技能項還差什麼。

2、寫下跟工作有關,而且自己不甚瞭然的五件事。將這份列表放到自己經常可以看到的地方。然後隨工作內容的改變養成不斷更新這一列表的習慣。

3、要在程式設計方面真正擅長需要一生的努力,還有不斷學習實踐的進取心。

4、老闆付你工錢是讓你構建能為客戶解決問題的東西。

5、做你自己喜愛的事,錢自然會來。

6、準備描述自己的職位頭銜,確定它反映你實際的工作內容和技能水平。準備自己打算晉升職位的要求

7、學會那些本來不會做的事情,常常比去做已經會做的事情更加重要。

8、為[成為一名程式設計師]做準備,最好的方法就是寫程式,並學習其他人寫過的優秀程式。我當初所做的是:到電腦科學中心的垃圾筒中,去尋找他們作業系統的清單。

9、使用開源專案,閱讀分析開源專案原始碼

10、在軟體開發領域做一名會思考的從業者。這包括經常反思自己的工作狀況。考慮一下自己的實踐是新穎的,創新的,還是過時的。對那些團隊中其他人都想當然的事情,多給自己畫幾個問號。如果
覺得目前工作中有一些讓人特別痛苦或開心的事情,問問自己事情是怎麼變成這個樣子的,如果問題是負面的,如何能改善它?我們的目標是通過將每一種經驗拆分開,然後再以新的、有趣的方式組合起來,從其中提取最多數量的教育價值。

11、記錄所學,不要低估寫作的力量。寫部落格

12、分享所學,呈現自己出來,擴大自己影響力。

13、維護一張待閱讀清單,用它來跟蹤你打算讀過的書,並記下已經讀過的書。閱讀清單裡要包含經典名著和現代的、注重實效的圖書

14、堅持閱讀,即使每兩個月讀一本程式設計相關的書,每週也就35頁,用不了多久,你就會對IT行業由深入的瞭解,並使自己不同於周圍人。

15、拿出一本筆記簿,開始簡單記錄你對於本書的想法,或者它所激發的任何思想。所做的筆記一定要有個日期。讀完這本書以後,針對所學的其他東西,繼續按同樣的方式使用這本本子。經過一段時
間,記下的條目就會成為部落格、雜誌文章,甚至一本書的基礎。

16、Brooks法則,FredBrooks1975年在他的《The MythicalMan-Month》(人月神話)一書中提出:向進度落後的專案中增加人手,只會使進度更加落後。Brooks還打過另外一個有趣的比方:一
個女人可以用九個月時間生產一名嬰兒,但九個女人卻不能用一個月時間生產一名嬰兒。

17、深入瞭解挖掘一些工具、技術。知其然,更要知其所以然。

18、學習一個新概念,要去理解它的背景、歷史上下文、它要解決的問題。這是個好習慣。

19、寫下自己的常用工具列表,提升工作效率。定期考察是否有更好更強大的工具替代當前工具箱的工具。

本書附錄,模式列表:

  1. 另闢蹊徑(A DifferentRoad) : 你發現自己想要去的那個方向跟通往軟體技能的道路並不相同。
  2. 只求最差(Be theWorst): 當快速超越了周圍的每一個人,你的學習速度下降了。
  3. 質脆玩具(BreakableToys): 你工作在一個不允許失敗的環境中,卻需要一個安全的環境來學習。
  4. 具體技能(ConcreteSkills): 你想到一個優秀的團隊中工作,然而你掌握的實用技能很少。
  5. 正視無知(Confront YourIgnorance): 你發現了自身知識中的許多漏洞,而你的工作需要你理解這些主題。
  6. 技重於藝(Craft overArt): 你需要向客戶交付解決方案,你可以選擇採用一種更簡單且已證明有效的方案,也可以利用機會來創造一些新奇和美妙的東西。
  7. 建立饋路(Create FeedbackLoops): 你不知道自己是否正遭受“無意識的無能”(unconsciousincompetence)之苦。
  8. 深入挖掘(DigDeeper): 你只擁有許多工具、技術和方法的膚淺認識,在嘗試解決更困難問題的時候,不斷地遇到障礙。
  9. 自定路線(Draw Your OwnMap): 老闆提供給你的職業道路全都不適合你。
  10. 提高頻寬(Expand YourBandwidth): 你對軟體開發的理解較為狹隘,只關注日常工作中的低層次細節。
  11. 暴露無知(Expose YourIgnorance): 你發現了自身知識中的許多漏洞,擔心人們會認為你根本不明白自己所做的東西。
  12. 常用工具(FamiliarTools): 你發現很難估算自己的工作,因為你的工具集和技術棧總是在快速變化。
  13. 找人指導(FindMentors): 你發現自己花費大量的時間在發明輪子,然後不斷遇到障礙,但卻不清楚到哪裡找人指導。
  14. 同道中人(KindredSpirits): 你發現自己無人指導,束手無策,而且周圍氣氛看起來與自己的期望不一致。
  15. 學會失敗(Learn How YouFail): 學習能力提高了你的成功機率,但失敗和弱點依然存在。
  16. 培養激情(Nurture YourPassion): 你工作在一個不好的環境中,它扼殺你對軟體工藝的激情。
  17. 不斷實踐(Practice,Practice,Practice): 日常程式設計活動不會給你通過犯錯來學習的機會。
  18. 堅持閱讀(ReadConstantly): 雖然你快速掌握了許多東西,你尚未搞懂的更深入、更基本的概念卻源源不斷地出現。
  19. 閱讀列表(ReadingList): 需要閱讀的書籍數量快速增加,你不可能讀完它們。
  20. 記錄所學(Record What YouLearn): 你一遍又一遍地學到同樣的經驗。似乎沒有一樣能持續下來。
  21. 以退為進 (Retreat into Competence): 當你發現了自己的大片無知領域時,你感覺自己要被淹沒了。
  22. 密切交往(RubbingElbows): 你感覺有更高階的技術和方法而自己卻抓不住。
  23. 分享所學(Share What YouLearn): 周圍的人學習起來沒有你快,你感到失望了。
  24. 堅守陣地(Stay in theTrenches): 你獲得一次提升的機會,組織想把你提升到一個不再程式設計的職位上。
  25. 鑽研名著(Study theClassics): 你周圍更有經驗的人們不斷地引用一些書中的概念,他們以為你已經讀過那些書了。
  26. 持續動力(SustainableMotivations): 你發現自己工作在一個令人失望的世界裡,做著含糊不清的專案,面對著客戶不斷搖擺而且相互衝突的需求。
  27. 打掃地面(Sweep theFloor): 你是個缺少經驗的開發者,需要贏得團隊的信任。
  28. 深水區域(The DeepEnd): 你開始擔心自己的職業並沒有處在穩定水平,而是陷在了泥溝中。
  29. 漫漫長路(The LongRoad): 你渴望成為一位軟體師傅,而你的抱負同人們的期待不一致。
  30. 白色腰帶(The WhiteBelt): 你正在奮力學習,因為已有的經驗似乎使新技能的學習更加困難了。
  31. 釋放激情(Unleash YourEnthusiasm): 你發現自己為了適應團隊而壓抑自己對軟體開發的興奮和好奇。
  32. 使用原始碼(Use theSource): 如果你周圍的人沒有能力區分好程式碼和壞程式碼,你如何能認識到自己工作中哪些地方做得好呢?
  33. 使用頭銜(Use YourTitle): 當你在職業場合介紹自己的時候,你都會覺得自己必須道歉或者專門解釋一下自己技能水平和職位描述之間的差異。
  34. 入門語言(Your FirstLanguage): 你已熟悉了幾門語言,但任何一門用得都不流暢。