程式碼整潔之道——程式設計師的職業素養
很難想象我在讀這本書的時候是除夕的晚上,早晨在公司的書架上無疑翻到這本書,讀了幾個章節就被深深的吸引住了, 吸引我的並不是我很迫切的需要提高自己的職業素養,而是發現作者描述的場景和自己碰到的情況何其的相似,在某些 情況下甚至是直擊內心的。在家人都休息的時候,我在深夜一點鐘看完了這本書,而且我覺得有必要做一下筆記,我相信 在之後的工作中,我會不止一次的碰到類似的問題。
什麼是程式設計師的職業素養?
說起職業素養或者職業道德,我們首先想到的就是醫生、律師、教師這樣的職業,我們可以在網上看到太多從事這樣職業的人做出違背職業道德的事情而被口誅筆伐,但我們很少聽說程式設計師缺乏職業道德,就算是刪庫跑路的事件發生,我們也是在同情之餘當做談資一笑了之,而我一直覺得程式設計師是缺乏職業素養的一個群體,原因並不在於大家對自己的要求不高,而是我們內心並沒有把“程式設計師”當做一種職業,而是一種賺錢養家餬口的工作或手段而已,也就是所謂的“搬磚”。很多人認為我們和搬磚工的區別也就是人家付出的是體力,我們付出的腦力,但這種想法顯然是過於片面的,我覺得適合和程式設計師或者軟體工程師作對比的最合適的職業是建築工程師或設計師,我們開發設計的是軟體系統,建築工程師建造設計的是建築物。
而現實中建築工程師的地位明顯要高於程式設計師,為什麼會這樣呢?試想一下,一棟建築設計的不好,出現嚴重的質量問題,關乎的是財產和性命,你也很少在家裡會因為擔心房子坍塌而憂心忡忡。而現實中的垃圾軟體比比皆是,甚至在你躺在床上的時候還在為專案裡面的 bug 而憂心忡忡,而且我們也很少聽到因為軟體 bug 導致有人丟了性命,頂多是公司破產、老闆跑路而已!由此而見,有質量問題的軟體比有質量問題的房屋導致的直接危害要小的多(當然軟體問題導致火線發射失敗這樣的情況的危害也不小),這也就導致了程式設計師這個群體對職業素養這個問題還不夠重視,程式就算有 bug 又能怎麼樣呢,再提交幾個 pr 修復下或者乾脆回滾程式碼!
我在大學畢業的時候進入了一家外企工作,因為專案需要,我參加了軟體測試工程師的資質培訓,裡面有一個案例讓我至今印象深刻:有個人因為在取款的時候取款機多吐了錢,由於沒有經受住誘惑將多吐的錢據為己有而被送進了監獄。這樣的事件並不是個例,我們經常在網上可以看到類似的事情。我並不覺得將多出的錢佔為己有是多麼大的罪過,貪財是人性的弱點,如果換做是我,沒有拿多出的錢並不是因為我道德高尚,而是因為規則約束,拿了會讓我付出更高的代價或風險,這是我不願意承受的。在遇到類似問題的時候,我通常會在想,開發這個系統的程式設計師內心會是怎樣的感受?他會因此感到內心不安?我在當前工作的專案也遇到類似問題,一位家長反饋孩子通過我們的學習系統上傳不了作業而傷心落淚,聽到這個訊息的時候我內心是極其的愧疚,立馬和其他工程師一起優先解決這個問題。醫生一次手術的失誤可能會導致病人丟掉性命,而我們一次軟體的 bug 無非就是丟失一些使用者,至於損失多少是不好衡量的,程式設計師幾乎都會有這樣的共識:軟體有 bug 是難以避免的!我同意這樣的說法,我上線的 bug 也不在少數,但怎麼去減少 bug,除了問題怎麼及時的去彌補是一個持續思考和改進的過程,如果我們不重視,那麼我們就是缺乏職業素養!
書中對於職業素養的關鍵定義就在“專業主義”。專業主義就意味著擔當責任,專業主義的精髓就在於將公司利益視同個人利益。能做到這個程度的程式設計師是少之又少,我碰到過的用一隻手就能數的過來,大多數人的想法都是給多少錢做多少事情。我們不能說這種想法有問題,正常的人都會這麼想,憑什麼給我一萬塊的工資去做兩萬塊錢的事情,就算是市場上也是講究一分錢一分貨,沒人願意做虧本的買賣,而對於軟體行業來說,怎麼衡量這個事情做好沒有呢?標準很難界定!按期上線麼?很有可能,但是留給接手人的程式碼很可能是一坨翔!bug 導致的公司損失可能是你幾個月的薪水,但一般公司並不會因此讓你賠償(不排除有這樣的公司),而你會覺得存在 bug 在所難免嘛,誰叫你工期排的這麼緊呢,我天天加班到晚上12點才回家!我見過的程式設計師很少因為 bug 或者是給別人開發帶來麻煩而覺得內心不安,會去主動改進的,通常都是:時間緊,先這樣幹吧!線上出現問題也是事不關己的態度,反正有人處理,反正不是我寫的 bug…如果警察看見有人搶劫而置之不理、如果醫生見死不救一定會被千夫所指,而程式設計師不會因為寫出 bug 或者不去處理別人遺留的 bug 而被譴責,難道只是因為問題沒有那麼重要麼?我看不是,本質在於我們並沒有把程式設計師作為職業來看待,沒有覺得公司的利益和自己有多大的關係。“勿以善小而不為,勿以惡小而為之”,這樣的生活中的基本準則都沒有應用到我們養家餬口的工作當中,怎麼能夠體現職業素養呢!