Normal view

There are new articles available, click to refresh the page.
Before yesterdayMain stream

閱讀摘要:人月神話:軟體專案管理之道

5 December 2024 at 19:00

簡介:本書是經典軟體專案管理書籍,特別是對於大型、複雜專案的管理提供了深刻的見解。書中的內容來自作者在IBM System/360系列電腦以及其搭配的大型操作系統OS/360專案中的實際經驗,為軟體開發者和專案管理者提供了寶貴的教訓和建議。書中的觀點Brooks法則:增加人手只會讓專案更加落後,作者指出當軟體專案進度延遲時,加入更多人手並不會加快進度,反而會因為工作重新切分、團隊溝通和新進人員的訓練而增加複雜性,進一步拖慢專案進度。本書強調,良好的時程規劃對於軟體專案的成功至關重要,提出了一個經典的專案時間分配模式:1/3的時間用於規劃、1/6用於寫程式、1/4用於組件測試、1/4用於系統測試,提醒管理者必須謹慎分配和預估各階段所需的時間。此外,書中還探討了軟體開發的四大特質:複雜性、配合性、易變性和隱匿性,並提出應對這些挑戰的方法,如自上而下的設計、結構化程式設計、規格審查等。本書揭示了軟體開發中的許多原則,即使技術不斷進步,書中的理念仍具有高度的適用性,對軟體專案管理和開發具有持久的啟發性。

心得:在閱讀本書後,深刻認同書中討論的許多觀點,特別是在軟體專案管理和系統設計中的經典理論。作為軟體開發者和專案經理打交道,隨著工作經驗的慢慢累積,愈發體會到本書中的智慧,強調人際和管理問題依然是每個專案的核心挑戰。書中提到的系統設計的概念整體性對於任何專案都是至關重要的。在之前的一個小型軟體專案中體現得淋漓盡致。我們需要設計一個輕量的後台管理系統,團隊成員各自負責不同的模組,若不保持整體設計的一致性,會導致每個模組的接口和風格不統一,進而增加後期整合的困難。主管採用專制設計方法,讓架構師確保整體設計的統一性,而每個開發者在具體實現上有自由發揮的空間,這樣既保證了系統的整體性,又讓開發者在實作過程中充分發揮,這種方法不僅提高了專案的協作效率,也減少了因溝通不良而產生的錯誤和返工。

本書強調重用既有的軟體模組,這點對於小型專案尤為重要。許多時候,開發新功能時我們並不需要從零開始,而是可以重用現有的解決方案,我在專案中採用了多個開源庫,而不是自己編寫,這樣的重用不僅節省了開發時間,也提高了系統的穩定性和可靠性。這也與作者提到的「以現成模組提高生產力」的觀點不謀而合,隨著開源與ai生態系統的日益成熟,熟悉並善用這些工具已成為軟體開發中的一個關鍵優勢。我也切身體會到書中提到的人月迷思。在一個進度落後的專案中,增加人手往往不僅無法解決問題,反而會拖慢進度。在另一個進度延遲的專案中曾犯過這樣的錯誤:為了加快進度,臨時增加了兩名新成員。然而,這導致原有團隊不得不花更多時間去訓練新人和協調工作,最終不僅沒有提升生產力,反而讓專案更加延遲,專案的成敗不僅取決於人數,而是團隊的協作效率和任務切分的合理性。當需要提高效率時,優化現有流程和工具,避免不必要的溝通障礙,是更有效的方法。

在實務經驗中,發現書中提到的時程規劃原則蠻實用的。特別是關於測試時間的規劃,我曾低估測試的重要性,在編寫程式時分配過多時間,導致測試時間不足,造成了些問題差點無法在交付前解決。經過這次教訓,我現在更重視在專案初期就制定合理的測試計劃,並確保系統從早期階段開始就進行測試。書中提到的外科手術團隊理念,在小型專案中也很適用,每個專案都應有明確的決策者,而不是讓每個人都參與每個決策。這樣既能保持專案的決策速度,也能讓每個人各司其職,在專案中採用了這種模式,由一名技術負責人統一決策,團隊其他成員專注於各自的工作,這有效地減少了不必要的討論,專案的進展也更加順暢。保持組織的靈活性也至關重要,軟體專案會隨著需求變化和技術進步不斷調整,因此組織結構必須具有彈性,以應對這些變化,每次專案變更後,能夠快速調整團隊結構和分工,這樣可以保持專案的動力和效率。本書提供了軟體專案管理的深刻洞見,這些原則在參與的專案中得到了驗證,無論是保持概念整體性、合理分配人力資源,還是重視時程規劃與測試,這些經驗法則都在現代軟體開發中具有重要指導意義,對於任何與軟體開發相關的工作者來說,這本書的智慧依然歷久彌新。

  1. 時程預估:1/3規劃、1/6寫程式、1/4組件測試、1/4系統測試。
  2. 在一個時程已經落後的軟體專案中增加人手,只會讓它更加落後。
  3. 欲增加人手,必須付出三個代價:工作重新切分本身所造成的混亂與額外工作量、新進人員的訓練、新增加的相互交流。
  4. 把工作切分給更多人造成的額外溝通代價:訓練和相互的交流。
  5. 軟體專案不順利的大部分肇因於缺乏良好的時程規劃。
  6. 資料呈現的方式是程式設計的本質。
  7. 把必然的一次失敗納入正式計畫之中。
  8. 避免發生錯誤的方法:做好定義以防止誤解、規格審查、由上而下的設計方式、結構化程式設計 文件:為使用者而寫(目的、環境、輸入輸出值域、演算法、輸出入各式、執行過程指示、執行時間、選項、輸出結果精確度與檢驗方式);為建立對程式的信心而寫(主案例、罕見合法案例、罕見不合法案例);為修改程式而寫(流程圖、完整描述的演算法及運用到的檔案設計說明)。
  9. 軟體系統的特質:複雜性、配合性、易變性、隱匿性 軟體的創作包括本質性和附屬性工作。

書名:人月神話:軟體專案管理之道(20週年紀念版)
作者:Frederick P. Brooks, Jr.
出版:經濟新潮社

AWS證照準備經驗分享

21 December 2023 at 16:00

前陣子項目比較清閒,想說幫履歷加分並完成公司年度評鑑需要的IT證照,順利在1個多月從稍微有點雲端知識的小白通過AWS Certified Developer – Associate,簡單分享一下準備方法:

  1. 了解考試(1~2天):可以先去官網收尋考試指南,大致了解需要準備的內容,也可以發現一些免費的官方學習資源如:AWS Skill Builder。
  2. 制定讀書計畫及學習(1~2週):有參考網上的計畫了解哪些知識是重要的(考試比重高),重點學習這些章節,使用的教材有Udemy的Ultimate AWS Certified Developer Associate 2022、A Cloud Guru的AWS Certified Developer – Associate (DVA-C01)及Github的itsmostafa/certified-aws-developer-associate-notes,網上蠻多免費資源,建議挑1-2個看的下去的認真理解一遍內容即可,感覺上班後要靜下心來準備考試或是在書桌上唸書需要蠻大毅力的。
  3. 做題(2週):以結果導向來說,個人認為從題目學習是最有效率的,網上有許多免費及付費的模擬考供選擇,我使用的教材為免費的examtopics網站,因為每題底下的網友討論都可以讓我再次複習觀念,題目也會更新,基本上大約450題都跑過一遍(同事也有練習約200-300題左右通過的),也有紀錄易錯的題型供考前加強觀念。
  4. 總結及心得:考試剛開始時有點緊張想說題目會不會太難及時間不夠,實際上寫到最後發現基本考點都有讀過、作答也蠻順利的,考完試當下就有結果,但老實說通過考試後真的不代表實務上就會操作這些服務(只是聽到討論時比較容易理解不會說什麼都不懂),還是要實際工作中有使用及持續不斷的學習精進,希望此分享可以幫助正在準備IT證照的職場人。

❌
❌