前言
在程式設計和軟體開發的圈子中,有幾本經典的書籍即便 在資訊科技快速變遷的時代中仍歷久彌新(你第一個在腦海中浮現的可能是人月神話等書)。上次為讀者們介紹的是筆者最近又重新閱讀的 Joel on Software 約耳趣談軟體這本書(有中文譯本,但已停止出版),這次我們接著介紹續集 More Joel on Software 約耳續談軟體。More Joel on Software 約耳續談軟體,主要是討論軟體開發人員的職涯規劃和發展以及軟體企業的經營管理等議題。兩本都是值得軟體開發人員一讀的好書。
在介紹這本書的內容之前,我們先來介紹這位作者 Joel Spolsky。有些讀者可能沒有聽過 Joel 的大名,但事實上 Joel 是知名程式設計問答平台 Stack Overflow 和看板軟體 Trello 的共同創辦人,也曾參與 Microsoft 的 Excel 應用開發,同時也是早期非常知名的技術部落客和作者,特別的是他後來移居紐約開創事業而非傳統的加州矽谷灣區,同樣跳脫了一般人的思考框架。
書中的內容主要是整合 Joel on Software blog 部落格的內容並額外新增一些新的主題。書中使用輕鬆詼諧的文筆介紹軟體開發人員職涯發展和軟體企業經營管理的相關議題討論,除了有些技術探討的章節外不會覺得太過生硬。接下來本文會摘錄一些書中重要的內容和觀念以及加入筆者個人自己的一些心得進行分享。
給未來開發人員的提醒
有可能是因為本書有許多內容是從網站上整理而成,在內容排序上各自章節分別獨立,沒有特別的次序排列。給未來開發人員的提醒這個主題不是放在書中的最前面,但若能在從開發者個體出發再邁向人力資源管理和軟體開發管理會比較有循序漸進的感受。當然這個主題主要是給還是學生的讀者但也適合已經成為開發人員的讀者再次回顧和反思。
- 學習如何溝通寫作:溝通寫作能力是作者一再強調的基礎能力。對於程式開發人員來說,寫出良好的程式和文件其實是一體兩面的事情,寫程式和寫文件一樣不單只是自己要能看得懂,重點是要讓其他工作人員也能理解並閱讀。此外,在進行一個軟體專案時,時常會需要非同步的溝通,此時文字表達能力就變得十分重要。
- 學習 C 語言:雖然目前有許多新的程式語言不斷推陳出新,但學習 C 語言會讓我們更理解電腦軟硬體間的互動關係和底層的運作原理。
- 非專業的領域課程不要一開始就排斥:學習不同領域的事物對於建立領域知識和理解這個世界會有幫助。
- 修習會有大量程式實作的課程:唯有透過不斷實作才能磨練好程式設計這項技能。
- 學習個體經濟學:雖然經濟學和技術實作沒有太大關係但卻是解釋這個世界運作的重要理論基礎之一,可以幫助我們去增加個人附加價值並理解這個世界。
- 去找一個程式實習工作:只有在真實環境下才能理解軟體專案管理和軟體開發流程和課程理論的差異並從真實的軟體開發中鍛鍊開發除錯能力。
- 持續學習:技術變化日新月異,唯有保持持續學習的心態才能在軟體開發領域持續進步。
人力資源管理
軟體開發的本質是人,如何尋找並管理好軟體開發人員一門重要的課題。然而開發人員往往不喜歡被管理和約束,也很容易對於不當的管理方式和不舒適的開發環境進行反彈。書中提到常見的幾種管理方式以及優缺點提供我們參考借鏡。
- 指揮與控制管理方法:由上而下的管理模式,看似井然有序,然而卻隱藏著許多風險。例如:第一線的工程師和客戶支援工程師往往比上層管理者更了解產品細節和客戶需求。但透過指揮與控制管理往往會造成微管理(micromanage)以及與實際市場和問題脫節等問題。
- 經濟管理法:透過額外的激勵獎金或是報酬來激勵開發人員。看似短期有效但若是時常使用外部誘因來激勵成員,等到外部因素消失後就會造成動力不足等問題。
- 認同管理法:授權並讓開發人員認同以及營造良好的開發環境是比較推薦的管理方式,但在實際實行上也會有許多挑戰,重點還是讓成員能敞開心胸一起討論怎麼樣的環境和管理方式是適合組織運作。
軟體開發管理
軟體開發管理從開始規劃設計專案到真正開工到維護及客戶支援(support)是軟體開發管理常見基本的流程循環。作者建議開發人員和專案管理人員需要具備大局觀,在開發軟體專案前一定要確認好需求再開始寫程式,並權衡投入的資源的商業價值取捨。例如:若是沒有用的功能,產品的使用介面再好,也沒有人會使用。
此外,作者也分享了在進行產品客戶支援(support)的幾個建議:
- 客戶支援可以有兩套解法:先解決表面問題,再研究是否有辦法徹底處理
- 承擔指責:客戶發怒有時只是需要有情緒的出口,不建議直接和客戶直接發生衝突
- 和顏悅色:適度表達歉意並承諾改進方案
- 適度讓利:營造讓客戶覺得有解決問題或是賺到的感覺
總結
以上簡單整理了約耳續談軟體(More Joel on Software)導讀書摘,接下來筆者會持續透過閱讀分享更多經典的軟體開發和程式設計、專案管理以及產品設計書籍與讀者分享。優秀的開發人員除了持續鑽研技術外,若能持續學習關於軟體人員職涯規劃和經營管理相關知識,將對於。若讀者有建議提醒或是新的想法也歡迎一起交流討論!