CleanCode 無瑕的程式碼-番外篇

無瑕的程式碼番外篇其實可以看作是現代版的人月神話,談到了現在軟體開發的核心觀念,無論是資訊和觀念都較為新穎,當然人月神話是不可否認的經典,但比起來,我更推薦這本人月神話-番外篇的觀念。

無瑕的程式碼 CleanCode

作者:Robert C. Martin
譯者:戴于晉、博碩文化
審校:陳錦輝
出版社:博碩文化

CleanCode 無瑕的程式碼 (上篇)
CleanCode 無瑕的程式碼 (下篇)


專業主義

書中談論到何謂尊重自己的專業,專業並不是單純維持自己的技術能力,或擁有高超的程式撰寫技巧。作者所言的專業是,穩定並細心地完成工作,在遭遇到問題時能冷靜地解決。專案開發的過程中不可避免的會有延宕、或不可預期的狀況發生,專業的開發者應該扛下這個責任,並確實的跟主管或客戶說明情況,不僅是需要優秀的溝通技巧,更需要的是能承擔責任的心。承擔開發的錯誤也是專業的一環,從錯誤中學習不僅重要,不要給對方超出實際狀況的期待並忠實告知情況是對自己專業的負責。

換個角度來說,這份專業主義含有大量職業道德的成份,除了正確的匯報工作狀況之外,堅持學習、練習、與他人合作等等都是屬於專業領域中需要維持的部分,而並不是單單的只有寫程式敲鍵盤而已。最終作者說道:謙遜,謙遜屬於職業道德中的一部分,除了能妥善地跟人溝通,謙遜的對人是相當重要的,這並不是管理技巧或是溝通技巧,而是身為個程式設計師該有的樣子,對自己謙遜也對別人謙遜,越是強大越需要謙遜。

承諾與拒絕

承諾與拒絕與前一章節談到的專業息息相關,非技術專業的客戶或是主管可能提出無法實現的需求,或是該需求可能要付出極大的代價,對方卻完全不自知。此時告知整體情況是工程師的責任,有必要告訴他們這個需求對應的風險和成本,而不是單純的用曖昧的回答來拖延開發時間:”我試試看…”、”那可能需要更多的時間”,無意義的拉長開發時間或用曖昧的字詞肯定這份需求之類的。明白的告知對方這是不可能、無法進行開發,避免資金和時間浪費,保護資方的利益。正確的檢視自己的工作和開發過程,了解自己能做出什麼樣的承諾,當然可以在中間預留風險管控的時間,但給予需求方客觀且確切的狀況是工程師的職責,不要浮誇的虛報工作時間換取更多安全感或信任。也可能這整個開發過程需要仰賴對應的團隊完成,我們才能接手,那工程師在答應對發這個功能時,就應該一並告知需求方。

而相反的狀況,當我們在承諾對方時,給出確切的承諾是對自己的責任表態,應該避免用曖昧的口吻來迴避失敗的風險,我們應該將程式設計看為工具,我們能達成什麼,就老實的說明出來,而不是利用狀況不明的方式來答應對方,避免自己在事後開發遭遇問題時可以否認,尤其是 “我試試看” 這種說法,成功時當然沒有問題,失敗時卻以當初沒有完全答應、嘗試性的答應來迴避失敗,這種逃避的心態除了對工作上不負責任之外,也是對自己專業的一種羞辱,甚至是放寬對自己的自我要求。

測試

測試在 CleanCode 1 中被大大地強調過數次,用測試來保證自己程式碼的品質,並同時對自己的程式碼負責任。測試是在為自己工作負責的同時,也是給予其他人信心,我們親手測試過的程式碼,在繳交給別人如果仍然出現錯誤,那會比完全沒有測試過還來來得能容忍。當然最好的狀況是完全沒有錯誤。

時間管理

時間管理不單單是自己工作的效率。工程師需要意識到自己工作的範疇,高階工程師的薪資相當可觀,相當可觀的數字代表著當工程師每浪費的一點時間,對企業來說都是一筆巨大的支出。什麼東西對公司來說是無形的內耗成本?包括無意義的會議、明顯會失敗的計畫、不合理的需求等等,工程師要能提出來並且解決這些狀況,對自己的薪資負責,釐清工作中的繁忙是否有真正的價值。在這部分的章節,作者也提出一些輔助的方式來提高工作效率,包括喝咖啡、音樂、短暫的睡眠等等,工程師增加自己的工作效率也是工作的責任之一。

小結

書本後半段談論比較多關於工具、和工作小細節的東西,基本上都類似於工作效率的問題。我認為核心是自我反省,工程師的工作是大量消耗腦力的,在一整天高強度的思考之後,很有可能覺得很扎實的工作,覺得自己是個高效率的開發者。而這時是我們能不能在這個時候審視自己,自己是否有沒做好或是欠下技術債的地方,甚至是虛晃了時間,以為自己很努力。這中間也包括是否能簡化自己開發的流程、提高溝通效率,就如同常聽到的一句話:工程師的工作就是讓自己失業。做的好壞明顯地由此而知。

整本書核心的內容我自己分類成兩大觀念:自省和溝通。自省包括了檢討自己的錯誤、自我成長、誠實,而溝通則是對外的應對、承諾、交換資訊的效率率、工作匯報等,重複加上自省的觀念之後就是找出讓自己更有效率的方式,能讓對方更快速的理解現狀。透過這兩大觀念,將原先的專業技術領域拓展到更全面的專業開發者,專業的溝通與信任,而不是當一個難以溝通的技術怪咖。

分享到