1. 程式人生 > >(精)戲說高質量程式碼

(精)戲說高質量程式碼

對於什麼高質量程式可謂是仁者見仁,智者見智,今天也說說我理解的高質量程式碼。以下人物和場景均為假想,請勿對號入坐。

1. 正確、穩定執行。
2. 架構清晰、可擴充套件性強。
3. 可讀性強,有必要的註釋,程式碼風格保持一致。

這三條必須按其順序排列,第一條看似簡單,其實非常的難。
就以一小公司GS為例,公司初創,要為一套儀器緊急開發程式,為了控制成本,直接外包出去,當外包人員開發出程式碼v1.0時,能基本正常運行了。王老闆看過演示,覺得不錯,為了早點實現盈利,這套程式碼立刻投入生成。

程式碼最基本的特點就是能夠正確執行,以達到人們想要的結果,所以“正確”排在第一位。不管是驅動程式碼、使用者空間程式碼還是app程式碼,在掌握基本業務邏輯之後,編寫正確不算困難。

產品出了不久,被客戶投訴,說在處理某些問題時,儀器重啟了,,,要求趕快解決。王老闆頓時頭大,還好外包公司承諾三個月類免費維護,感覺電話聯絡那邊。但外包公司說,你們有原始碼,可以自己解決。王老闆心想,能解決還找你?經過不少於10個電話和5封Email,終於在拖拉了兩週後,外包公司說解決了,程式進入了一個異常分支,會引起重啟,並將補丁發了過來。王老闆長舒一口氣,感覺對外邊的儀器進行了升級。

正常的程式碼不難,難就難在穩定執行,即能處理各種特殊情況。這就需要程式開發人員對邏輯分析吃得很透,在發現有邏輯錯誤時,能快速定位,加以解決。

有了第一條作為基礎,其實你的程式碼就可以用於實際的軟體產品了。又過了幾個月,有客戶反映到,希望增加幾個功能,這用起來很不方便。王老闆想了下,是啊,客戶是上帝,但現在如果又讓外包公司來做,肯定要被狠宰一筆。想想心裡很不是滋味,如果當初不是這麼急,肯定不會找這些外包公司,錢一但收到,再讓幫個忙簡直跟裝孫子一樣。唉,沒辦法,要不招幾個程式設計師吧,反正現在公司有餘錢,自己的員工,做起事來也放心。
於是在各大招聘網站高調喊出,來來來,c程式開發工程師這裡看過來,月薪3456,各種補貼,績效獎金等。。。
沒想到過了幾天,還真有幾個人來面試,王老闆心裡頓時有了一種成就感,嗯,不錯,來投靠我王老闆是你們的運氣。但是看了看對面坐的應聘者A,背一雙肩黑包,頭髮略長,還有點油,穿了件白色圓領T恤,胸前還映上一串外文,褲子是一條7分舊的牛仔,搭配一雙不知名的波鞋。心裡大喜,很有程式設計師的風範,於是問到:“畢業沒問題吧”?
A說,“有點惱火,還有好幾科有補考,但我的技術是沒問題的,要不這樣,拿不到畢業證,你就給我3k吧!!”
“嗯”,王老闆看著A很有當年自己的風範,心裡一笑,“OK,下週就來上班,沒問題吧?”
“絕對沒問題。”

A進入公司,意氣風發,想要大幹一場,主管說你就負責公司核心業務的程式碼維護和開發。不懂的可以問題工程師B。A說好,立即請教B開發環境和程式碼下載,B卻面露點難色,“我也剛來不久,還不太清楚,不過環境倒是沒問題”。
A終於把程式碼拉到自己的PC上,然後聽產品經理講了需求,就開始hack了,這在以前學校是經常做的,應該不困難。但是當A開啟程式碼後,感覺有點傻眼。上千個.c和.h檔案,甚至不知道從哪個檔案開始看。長出一口氣之後,開始從makefile看起,頭昏腦漲,看了好幾天後,發現還是無從下手,於是向主管報怨,這程式碼太垃圾了,沒法修改。
王老闆自己也去看了下,確實惱火,就不要為難自己員工了。沒辦法只好花高價請專家進行重構,專家說重新弄一套框架吧,至於新增的功能,可能要等上幾周了。王老闆說能快就快點,外邊客戶催得緊,但一看專家臉色不對,馬上又陪笑到,“時間可以放寬,但必須保證質量”,F你去和客戶解釋解釋。

軟體架構清晰,具有很強的擴充套件性。可以在以後的業務擴充套件、修改上節省人力和時間成本。

當架構問題清楚了,A也從中學到不少東西,現在只需要簡單修改幾處,新的功能就可以正常使用了。於是A迅速的複製、貼上,很快就完成了這個功能。然後git push到庫上,並告知CI可以出版本了。版本出來後,驗了下功能,不錯,還湊合。
又過了不久,測試發現A實現的功能出現了一個bug,A趕緊看了看,暫時查不出原因。沒辦法,只有向B求助了。B好歹工作過兩年,有些經驗,B直接開啟code review網頁,開始檢視A提交的程式碼。然後眉頭一緊,心裡暗想這shit程式碼也拿得出手?一會兒TAB,一會空格,版面亂糟糟的,有時兩行程式碼間空了3、4行。再一看,函式名f1、f2…變數名num1,here…本想直接爆粗口,但良好的職業修養抑制住了這股衝動。
便說道:“我認為你程式碼格式和命名上有些問題,導致幫你debug很費勁,要不你先修改一下。”
A疑惑,“在學校就是這樣的啊,能跑通,沒太大問題。”但沒說出口,而是反問道:“怎麼改。”
B說,“這樣吧,我直接給你改了,順便幫你debug,以後就照著這樣做。”

可讀性強,有必要的註釋,程式碼風格保持一致。這樣別人在最短時間內可以給你最大的支援,同時有助於找出錯誤。

A看了改版本後的程式碼,覺得是比自己寫得漂亮些。不禁想起了讀書寫的作文,明明自己寫的不錯,就是字有些難看,但就是拿不了高分。再一想,日記之類的自己看寫得潦草了無所謂,只要能認識。而試卷、作業這是需要給別人看的,必須要注意書寫規範,搞不好,做對的也被閱卷老師改錯了。好像是這麼回事。
A把這段時間的經歷仔細想了想,嗯,寫程式其實不難,難的是寫出高質量的程式。這難度有點大,但是有信心能做到。隨後吟頌出:路曼曼其修遠兮,吾將上下而求索。