重讀《代碼整潔之道 - 程序員的職業素養》有感

程序員的職業素養《The Clean Coder》一書是Bob大叔代碼整潔之道《Clean Code》姐妹篇,代碼整潔之道一書從編碼本身的技藝影響了一代又一代的軟件開發人員,它強調函數,命名,單元測試,異常測試,代碼格式等,告訴程序員們怎麼寫出高可靠和可維護性的代碼。

前言

代碼整潔之道 : 程序員的職業素養一書從跳出編碼本身去審視程序員工作以及如何更好的寫出符合用戶期望的產品,這本書是Bob大叔對自身編程職業生涯的深刻反思和經驗沉澱,通過不同時期的想法和實際的例子來告訴所有的軟件行業從業人士,一個合格程序員怎麼做正確的事。讀完全書你會發現除了務實性的意見背後,隱隱體現出一種奮力突破自己的積極態度。

關於作者

作者Bob大叔是有40多年的編程經驗的老革命,他在40多年的職業生涯中經過開除,表揚, 晉升,跳槽,做過普通員工, 小組長, 主管,和CEO。他在40多年的職業生涯中開發過不同類型的系統,也使用過不同的開發語言,如COBO, PDP, BAL, C/C++,Java, Ruby和Smalltalk,不同公司任職期間,他在數十載職業經歷裏見過混工資的傢伙,也見過許多無可挑剔的專業人士,正是這些無可挑剔的專業人士影響着Bob大叔,使他知道真正專業的程序員,需要什麼樣的態度,原則和行動。他在此書中毫無吝嗇的奉獻給讀者。

什麼是軟件專業人士

“專業主義”不但象徵着榮譽和驕傲,而且明確意味着責任和義務,兩個密切相關,因爲你不可能從無法負責的事情上獲得榮譽和驕傲。

  • 非專業人士不需要自己所做的工作負責,把事情搞砸後他們大可把責任推給僱主,收拾爛攤子一定還是僱主,但是專業人士犯了錯必須自己收拾殘局。作者曾因不負責任而嚐盡了苦頭,所以才明白盡職盡責的重要意義。書中提到他在職業生涯早期爲了趕工期忽略了部分程序的測試工作,不幸就是未經測試那部分程序出現問題,讓他意識到沒有對所有功能進行測試就交付軟件是不負責任的,爲了如期交付產品,忽略了測試環節,整個過程只考慮了自己交付的及時性,而沒有估計客戶和僱主的聲譽,從而造成了更大問題。

  • 作爲一個有抱負的專業人士,我們該如何承擔責任呢? 有什麼一原則可以參考? 作者援引“希波克拉底誓言”中不行損害之事,但是作爲軟件開發人員能做出什麼壞事呢? 從純軟件的角度看,他可以破壞軟件的功能和架構。

  • 嚴格不要破壞軟件功能。我們所有的程序員都知道,開發的軟件有bug會損害軟件的功能,會影響用戶的軟件使用,因此要做得專業,就不能留下bug. 或許大多人都會說軟件系統太複雜,不可能完全沒有bug, 相同道理醫生就不能身體的複雜性而拒絕發誓不傷害病人。 或者還會說,我們是要追求完美嗎?作者的肯定表達專業人士要對自己不完美負責,代碼中難免會出現bug, 但這並不意味着你不用對它負責; 專業人士就是能對自己犯下錯誤負責的人,哪怕那些錯誤實際上在難免。所以專業人士要練習的第一件事就是“道歉", 道歉是必要的,但還不夠,我們不能一而再,再而三的犯相同的錯誤,職業經驗多了之後應該減少失誤,失誤率不能等於零,但是有責任讓它無限接近於零。

軟件專業人士如何行事

  • 瞭解你的領域, 近幾十年來,各種觀點、實踐、技術、工具和術語在我們這麼領域層出不窮,我們對這些瞭解多少呢?一位專業的開發者,除了面對自己日常的工作,還應該對其中的大部分技術有所瞭解,並不斷的擴展知識面,就如常說的在埋頭拉車時也要擡頭看看路。書中Robert還着重提到每個專業開發人員都必須精通的事項,這些方法論在過去幾十貫穿整個軟件開發行業,經久不衰,具體如下:
    a. GOF書中的24種設計模式
    b. 設計原則的SOLID原則
    c. 常見的軟件開發的方法,如XP, SCRUM, 精益,看板,瀑布開發,結構化分析及結構化設計。
    d. 必須掌握測試驅動開發,面向對象設計 ,結構化編程,持續集成和結對編程
    e. 必須瞭解如何使用UML圖,DFD圖,結構圖,PETRI網絡圖,狀態遷移圖表、流程圖和決策表
  • 堅持學習,衆所周知軟件行業飛速發展,意味着軟件開發人員必須堅持廣泛學習纔不至於落伍。讀書,看相關文章,關注博客和微博,參加技術大會,訪問用戶羣,多參與讀書與學習小組。不懂就學,不要畏難。如果你是Java程序員,就去學習Python, Spark等大數據處理技術。
  • 長期練習,真正的專業人士往往是勤學苦幹的,以求得自身技能的純熟精煉。只完成日常工作是不足以稱爲練習,那隻能算是種執行性質的操作,而不是練習。練習,指得是在日常工作之餘專門練習技能,以期自我提升。我們有幸在生活在這個時代,基本所有的課程和技能在互聯網上都唾手可得,只要你想練習,都能輕鬆獲得。
    思考題,我們多長時間沒有學習日常工作之外的技能了?
  • 合作,與他人合作是學習的一種有效途徑。專業軟件開發人員往往會更加努力地嘗試與他人一起編程、一起練習、一起設計 、一起計劃,這樣可以在彼此身上學到更多東西,也能在更短的時間內更高質量地完成更多的工作。
  • 輔導,想起我的前領導告訴我的一個方法,想迅速牢固地掌握某些技術和能力,最好的辦法就是與負責指導的人交流這些內容,或者主動分享這方面的知識,在傳道授業的同時,導師也會從中受益。
  • 瞭解業務領域,每位專業軟件開發人員都有義務瞭解自己開發的解決方案所對應的業務領域,如果編寫財務系統,你就應該對財務領域有所瞭解。用一句網絡用語來說,凡是不談業務場景的技術方案都是刷流氓。本中Bob提到一個反例就是,簡單按照產品設計說明書來編寫代碼,但卻對爲什麼那些業務需要那樣的規格定義不求甚解。相反,專業人士應該對這一領域有所瞭解,能辨別,質疑產品設計說明書中的錯誤。
  • 與僱主/客戶保持一致 開發人員或者同行同級之間互相認同是容易的,但把一方換成僱主或者客戶,人們就容易產生“彼”“此”之分,專業人士會盡全力避免這樣的狹隘之見。僱主和客戶的問題就是我們的問題,必須弄明白這些問題,並尋求最佳的解決方案,每次開發設計系統,都應該站在公司或者客戶的角度來思考,確保開發出來的產品是對企業或得客戶有益的。
  • 謙遜 編程是一種創造性活協,寫代碼是無中生有的創造過程,我們自信地發佈準確無誤的指令,稍有差錯則可能造成無法估量的損失,因此編程也是極其自負的行爲。專業人士都知道自己自負,我們熟知自己的工作,並引以爲榮,對能力充滿自信,勇於承擔有把握的風險。但是專業人士必須清醒的認識到自己也會摔跟頭,對待他人的犯錯引以爲鑑,懂得從他人的錯誤中學習。

軟件專業人士如何處理衝突,如交付工期,管理溝通以及技術方案。

  • 每一個團隊都可能存在這樣和那樣的矛盾,存在各種的對抗關係,面對艱難決定,直接不同角色衝突是最好的辦法。
  • 每位經理都承擔着工作職責,其中一部分的工作職責,便是要竭盡全所能追求和捍衛他們設定的目標,同樣絕大多數程序員也知道該如何出色地盡職盡責。如果他們是專業程序員的話,他們就會竭盡所能地追求和捍衛自身的地目標。
  • 直接衝突最好結果,便是你和你的經理,合作伙伴形成共同追求的目標。那麼最關鍵的是要找到那個共同的目標,而這往往有賴於協商。

軟件專業人士何時應該說“不”? 怎麼說?

  • 專業人士敢於說明真相而不屈從於權勢。專業人士有勇氣對他們的客戶或者經理說“不”。書中Bob通過自己實際經歷中的例子告訴我們,在明知不可爲的情況迫於權力或者其它壓力而倉促上線帶來的損失遠大於延期的損失,專業人士應該明確的告訴管理層或者客戶爲什麼不,潛在的風險,以及實際情況。
  • 在說”不“的時候,解釋爲什麼過不如事實重要,提供太多的細節,只是招致更多的微觀的管理。關於這一點,老王我持保留意見,當你和你的合作夥們都是專業人士,提供更多的細節可能對方能夠有不同的方法更有效的解決這個問題,通過協作找到共同的目標。
  • 具備團隊精神,意味着恪守盡職守,意味着當其它隊員遇有困境時伸出援手相助,頻繁與大家交流,關心隊友,竭力做到盡職盡責,同時也意味着承擔。
  • 說”不“的障礙有時來自於專業人士的個人英雄主義,某些專業人士一門心思想成爲風雲人物和救世主。作者文中提到的John Blanco的故事,John認爲成功的唯一途徑就是打破專業習慣,爲此他只能自食其果。

軟件專業人士如何應對壓力

在面對壓力時,專業開發人員也能冷靜果斷,儘管壓力不斷增大,他仍然會堅守所受的訓練和紀律,這是專業人士賴以戰勝由最後期限和承諾所帶來的壓力感的最好方法。作者Bob在20世紀80年代有過一段相信很多開發人員都有過的經歷。爲了某一個項目,整個團隊在辦公室度過了無數的不眠之夜,週末一直盯着電腦屏幕工作,看着幾千行的SQL文件,同事之間關係因爲壓力變得疲憊不堪,有人重拳擊打牆壁,憤怒的把筆扔在黑板上,但是壓力和憤怒從未消失。後來Bob幡然醒悟,決心通過高質量的工作,停止了長時間的瘋狂工作狀態,改變了高強度的生活方式。Bob從避免壓力和應對壓力兩個角度去分享他的壓力管理方法。

避免壓力

  • 避免對沒有把握能夠達成的最後期限做出來承諾,專業人士要做的就是使用風險定量化並將它們陳述給業務方,以便他們能做好相應的準備,做不切實際的承諾會阻礙目標的實現 ,對公司和個人都沒有好處。對於某些不可抗力的做出來的承諾,出於責任感我們必須主動幫助合作伙伴找到方法來兌現這些承諾。專業人士總會千方百計的幫忙業務夥伴找到達成目標的方法。
  • 保持整潔,快速前進確保最後期限的方法,便是保持整潔,快而髒是自相矛盾的說法,髒亂只會導致緩慢。讓系統,代碼和設計儘可能的整潔,就可以避免壓力。在此不是畫蛇添足般去清理代碼,只是不要容忍混亂,混亂會降低速度,導致工期延誤,承諾失信。因此要盡力保持輸成成果整潔乾淨
  • 堅持正確的紀律原則。在困境降臨時,也不要改變專業的行爲。如果你遵守的紀律原則是工作的最佳方式,那麼即使在巨大的壓力下,也要堅決秉持這此紀律原則。比如說在平常的時候你會注意代碼整潔交付質量,在危機時刻你卻會產出混亂的代碼,就說明你並不真正的相信混亂會導致速度下降。選擇那些你在危機時刻依然會遵循的紀律原則,並在所有工作中都遵守這些紀律,遵守這些紀律原則是避免陷入危機的最好途徑。

應對壓力

  • 正確應對壓力,不要驚慌失措。長夜漫漫無心睡眠,無助於更快地解決問題,呆坐着煩躁也無濟以事,甚至你會犯最嚴重的錯誤,魯莽倉促。多少次因爲要解決一個問題,快速上線代碼反而帶來更多更嚴重的問題,都是血淚的教訓。 讓自己的放鬆下來,對問題進行系統化的分析思考並努力尋找最好結果的途徑,然後以合理穩定的節奏前進。
  • 保持下面溝通,讓你的隊友和主管知道你的困境,告訴他們走出困境的計劃,請求支援和指引,避免產生驚恐,驚恐會使壓力增大。
  • 依靠你的長期堅守的紀律原則拜託壓力,當事情十分困難時,要堅信你的紀律原則,它們可以指引你度過高壓時期。作者舉例TDD,如果你平時堅持寫單元測試,經常進行重構,那麼此時就應該大膽重構,寫出更多的單元測試覆蓋更多的場景,讓代碼更加的整潔,交付物更高的質量。
  • 主動尋求幫助,當頭腦發熱時,找一個願意和你一起結對編程的夥伴,你會前進得更快,而缺陷更少。同樣地,當你看到其他要身處壓力之下時,可以伸出援手,結對工作,幫助你的夥伴走出困境。

後記

Bob 在本書還提到更多的軟件開發技能相關的經驗,比如說如何做好測試,如何進行編碼,如何練習,還有持續集成,時間管理,項目管理以及溝通協作方面的技巧,留待下回分解。

Bob 從高中畢業入行,通過不斷的學習精進,成爲一個大神,他的學習經驗和工作經歷都能給大家帶來啓發,每一位軟件開發專業人士都能以此作爲參照,讓自己變得得更加專業。

關於我們

一支有文化,有思想,有原則團隊,無論戰鬥力還是顏值爆表的隊伍。
作者:王雲 - 中年微胖不稱職碼農

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章