專業程式設計師的標準,你達到了嗎?

程式碼灣發表於2017-12-13

作者:SexyCode

“專業”,在百科裡有下面這三種解釋:

  • 學校裡的學科
  • 生產部門裡的業務部門
  • 知識修養的專門職業者;職業畫家[演員等],職業選手;內行,專家

標題中的“專業”,指的是第三種解釋。請注意這個詞——“有知識修養”,有知識還不夠,還要有修養

職場裡各行各業,唯有“專業人士”,才能夠受人尊重;人們尋找幫助時,首先想到的也是對應領域裡的“專業人士”。我們說一個醫生很專業,除了他醫術精湛之外,還有他心繫患者、盡心盡責的醫德,同樣的,對於程式設計師,我們除了要有犀利的技術之外,還要有對應的職業修養

業餘選手 vs 專業主義

面對同樣一件事情,業餘程式設計師(Amateurs)和專業程式設計師(Majors)往往有不同表現:

1)看到爛程式碼時
A:WTF!!! 這程式碼誰寫的!
M:讓我來重構它

2)專案進度緊張
A:哎,時間那麼緊,考慮不了那麼多了,先把功能做了再說
M:我得找經理商量,這麼短時間是不可能把這個功能完全做好的

3)被同事打斷時
A:要麼馬上被從工作中帶走,“啊,怎麼啦”,要麼很不耐煩,“少煩我,沒看我這正忙麼”
M:“稍等一下哈…”,然後記下當前工作的上下文資訊,讓自己重新回到工作時,能儘快進入狀態

4)業餘時間
A:終於有時間好好睡個懶覺了
M:終於有時間學習新知識了

……

最近閱讀了一些關於程式設計師職業素養的書籍,發現專業的程式設計師,大都有下面這些特質:

主動學習

專業的程式設計師懂得不斷精進自己的專業技能,抽出時間來學習。就像《歡樂頌》裡的趙醫生一樣,帶上你的Mac,找一家安靜的咖啡廳,待上一個上午,看最新的醫學文獻。程式設計師也要這樣做,必須不斷地更新自己的技能,提高自己的“基線”。
這裡的基線是一個很重要的概念,用吳軍老師的話來說就是:

每個人的基線都不一樣,民間科學家的基線,決定了他們就算奮鬥一生,最多也只能到達中科院科學家的基線。

我們只有通過不斷地學習,才能用知識把自己墊高,站的更高,才能看的更遠。

個人品牌意識

《軟技能——程式碼之外的生存指南》裡,作者提到,程式設計師要學會自我營銷,在業界打造自己的個人品牌。而在工作中也一樣,對公司和同事來說,你的名字就是一個品牌。別人一提到你的名字,就會想到這人的程式碼寫的怎麼樣、看他的程式碼累不累、實現的功能質量怎麼樣、Bug多不多…

專業的程式設計師會努力打造和維持自己的個人品牌,在同事心目中樹立一個品牌的形象。

程式碼潔癖

專業的程式設計師不會僅僅滿足於實現功能,他們還會主動優化自己的程式碼。

他們會聞到自己程式碼裡的壞味道,對變數命名、函式、註釋等進行重構優化。

專業的程式設計師遵守童子軍軍規——“讓營地比你來時更乾淨”,他們知道“破窗”的危害,他們有程式碼潔癖。

不畏懼任何程式碼

專業的程式設計師在開發之前,會閱讀相關模組的程式碼,因為他們知道,文件會撒謊,但是程式碼不會。不管程式碼寫的多難看,他們都知道,那才是反映系統真實運作機制的“文件”。

如果程式碼寫的非常一般,他們會對其進行一小步一小步的重構,每次重構之後都會執行單元測試,以確保自己的改動沒有對原先功能造成影響。
如果這個模組之前沒有足夠的單元測試,那麼在開始重構之前,專業的程式設計師會主動補充測試用例,因為他們知道,如果自己連測試用例都寫不出來,就根本談不上理解了這個模組,也就根本沒資格去動這塊程式碼。
如果程式碼根本無法正常執行,在很多情形下都有Bug,那麼專業的程式設計師不會浪費時間去重構,他們會選擇重寫

重構,是在不改變程式碼外在行為的前提下,對程式碼作出修改,以改程式序的內部結構。 —— 《重構》,Martin Fowler

在這裡牆裂推薦大家,把《重構》這本書放在自己座位旁邊,你不必一下子把這本厚厚的“重構字典”看完,因為它就是一本字典,在你需要重構的時候,去裡面檢索就好,有興趣的同學可以前去看看我對怎麼使用這本書的一些感受。

敢於說不

專業的程式設計師懂得主動掌控自己的工作,如果有一個需求最早也要在週五才能完全,但是領導要求必須在週三之前,他們不會說,“好,我儘量”,因為那不僅是在欺騙自己,還是在欺騙經理,最後傷害的是整個團隊。他們會跟經理商量,如果要在週三之前完成,哪些功能是無法實現的,讓經理作出取捨。
與此相反,不專業的程式設計師,往往會屈服於經理的權威,最終交付一個程式碼質量極差、還帶有很多Bug的功能。

《程式設計師的思維修煉》中提到了德雷福斯模型,這個模型對“新手”的定義就是——只會按照指令列表做事,如果你不懂得說不。把別人交給你的每一件事都接下來,那你和“新手”也沒什麼區別了。
不要以為你說“不”會辜負了經理的期望,相反,答應一件自己完成不了的事情才是對經理最大的辜負。學會說不,恰恰是你靠譜的表現。人們都喜歡真實的人,經理也不例外。

謹慎承諾 言出必行

專業的程式設計師不會輕易許下承諾,如果承諾,那必定是他自己能夠完全掌握的事情,而不是承諾需要依賴他人的事情
比如你的模組需要依賴Peter的模組,你就不能承諾既把自己的模組開發完成,還可以跟Peter的模組完成對接,因為對接可以完成地前提是Peter能夠按時交付他的模組,而這不是你能控制的。你能承諾的只有跟Peter一起坐下來,討論一下對接的方案,然後每天互相彙報一次各自的開發進度。

專業的程式設計師還懂得及時彙報風險。有些事情確實很難預測,這時候你就要去調整別人對你的預期,儘早向你的承諾物件發出預警,跟他溝通有沒有更好的解決方案。Peter就經常幹這種事,每當工作被堵塞時,他會主動地跟專案經理說,“Bob,幫忙看個問題”,“Bob,感覺週三之前完成有很大風險啊…”

不在狀態不好的時候寫程式碼

剛和老婆吵了一架,然後回去公司,心煩意亂地寫程式碼?
通宵定位問題,然後在疲憊不堪時打算修改程式碼解決這個Bug?
專業人士不會這麼做,他們知道,在狀態不好的時候寫程式碼,只會寫出一堆Bug。

善於對付中斷

程式設計時總免不了被同事打斷,一個突如其來的電話會議,右下角突然冒出來的聊天資訊,還有Peter突然從背後過來的擁抱…
面對“打斷”,專業的程式設計師懂得說,“稍等一下…”,然後他們會在記下當前工作的上下文資訊,讓自己重新回到工作時,能儘快進入狀態。
當然,如果你在跟別人結對程式設計,或者你用了TDD,那麼儲存上下文資訊就變得非常簡單。

重視單元測試

專業的程式設計師知道單元測試的重要性,他們會把測試程式碼和產品程式碼看的一樣重要,他們還會使用TDD。

關於單元測試的重要性和TDD,我在之前的文章中有介紹過,歡迎閱讀:如何說服你的同事使用TDD

管理時間

專業的程式設計師對待會議的三項原則:

  • 拒絕那些與自己無關的會議;
  • 如果進入會議後發現自己沒必要參加,那麼安靜的離席;
  • 尊重對方的時間。只召集那些必要的同事參加會議,並且會在會議前整理好會議的主題和議程。

管理精力

專業的程式設計師能夠讓自己精力充沛地投入到工作中
他們知道保持充足的睡眠,知道通過一些體力活動,來放鬆自己的大腦。

管理壓力

專業的程式設計師會儘量避免壓力,他們謹慎承諾,不答應做不到的事情;他們保持程式碼的整潔,方便問題定位和重構程式碼;他們堅持著自己的編碼原則,對自己交付的功能有很大信心,就算有Bug,也能很快定位處理。
而當壓力來臨時,專業的程式設計師不會驚慌失措,因為他們瞭解他們負責的程式碼的邏輯,如果有不懂的地方,他們會及時溝通,向他人求助。

不固執

專業的程式設計師不會在一條道上耗費太多時間,一旦發現這是個死衚衕或者泥潭,就會及時抽身,往回走。

程式設計之外的技術

專業的程式設計師不會是“離開了編輯器就渴死的魚”,他們具備計算機原理、TCP/IP協議這些計算機學科的基礎知識,他們對常用的Shell命令牢記於心,他們還善於使用各種工具的快捷鍵來提升他們的工作效率。
我的同事Peter就是這樣一個專業的程式設計師,作為一個前端工程師,他對網路方面的知識非常熟悉,VLAN、閘道器、掩碼、信任域等等,簡直就是一本網路百科全書,他操作起Linux命令列也是相當熟練,出現問題了,需要定位,他會說,“給我環境資訊,我上去看看”,然後就是各種查詢日誌、抓包分析,他敲鍵盤的速度也是賊快賊快,我想,這大概是我見過最完美、最酷炫、最專業的程式設計師了吧。

以上就是我總結出來的專業程式設計師的特質。你心目中專業的程式設計師還有哪些好的職業素養呢?歡迎在評論區裡和大家一起分享!讓我們一起做一隻既有技術,又有修養的程式猿!

參考

  • 專業 – 百度百科
  • 《程式設計師的職業修養》
  • 《程式設計師的思維修煉》
  • 《軟技能——程式碼之外的生存指南》
  • 《程式碼整潔之道》
  • 《重構》

相關文章