成為更加優秀的程式設計師的10個要點
本文由碼農網 – 小峰原創翻譯,轉載請看清文末的轉載要求,歡迎參與我們的付費投稿計劃!
下面,我將作為一名有著多年程式設計經驗的專業程式設計師,分享一些精華——它們已經幫助我提高了我的程式碼質量和整體的工作效率,希望也能對你有所裨益 。
1.永遠不要重複程式碼
不惜一切代價也要避免重複程式碼。如果你有幾個不同的地方經常性地要使用某個程式碼片段,那麼可以將它重構成函式。程式碼重複不但會導致閱讀混亂,導致bug——修復了這裡的重複片段,卻遺漏了其他地方的,還會導致程式碼庫的臃腫和可執行檔案大小的膨脹。現在的程式語言,能大大改善這方面的麻煩,例如,下面這段示例程式碼在委託和lambda表示式出現之前很難解決:
/// <summary> /// Some function with partially duplicated code /// </summary> void OriginalA() { DoThingsA(); // unique code DoThingsB(); } /// <summary> /// Another function with partially duplicated code /// </summary> void OriginalB() { DoThingsA(); // unique code DoThingsB(); }
但是現在,我們既可以將上述程式碼重構成函式,也可以使用委託重寫:
/// <summary> /// Encapsulate shared functionality /// </summary> /// <param name="action">User defined action</param> void UniqueWrapper(Action action) { DoThingsA(); action(); DoThingsB(); } /// <summary> /// New implmentation of A /// </summary> void NewA() { UniqueWrapper(() => { // unique code }); } /// <summary> /// New implementation of B /// </summary> void NewB() { UniqueWrapper(() => { // unique code }); }
2.注意不要分心
當你發現自己在刷Facebook和Twitter——不能專注於解決問題了,那麼這往往意味著你需要稍作休息了。不妨離開辦公桌去喝杯咖啡,和同事聊上個5分鐘。不要以為這是在浪費時間,從長遠來看這能讓你更富有成效。
3.解決方案要三思
在高壓下想出的解決方案,修復的bug,很容易因為過於興沖沖,而將平時銘記於心的關鍵測試周期完全拋之於腦後。但是這往往會導致更多的問題,並且會讓你在老闆和同事眼中看起來顯得不那麼專業。
4.測試完成的程式碼
你知道你的程式碼應該做什麼,並且可能已經測試過了,但是,你需要證明這一點。分析所有可能的邊緣情況,並給出測試,以便確定你的程式碼在所有可能的條件下都可以正常執行。如果有引數,那麼傳送一些預期的範圍之外的值。還可以傳送null值。如果可以的話,不妨讓你的同事來搞搞破壞——單元測試是一條正規的康莊大道。
5.程式碼審查
在你將程式碼提交到原始碼控制之前,最好先將你所做的改動給你的同事解釋一下。有時候往往只需要這樣做,就能讓你意識到自己程式碼的錯誤,即使你的同事不發一言。這可比僅僅只是自己回顧自己的工作要來得高效得多了。
6.精簡程式碼
如果你用了大量程式碼來執行一些簡單操作,那麼很有可能是你走錯路了。以下對布林值的處理就是一個很好的例子:
if (numMines > 0) { enabled=true; } else { enabled=false; }
但其實你可以這麼寫:
enabled = numMines > 0;
程式碼越是精簡越好——除錯少了,重構少了,問題自然也少了。但是要注意的是:可讀性同樣重要。誰也不希望在精簡程式碼的同時影響了程式碼的可讀性。
7.努力寫出優雅的程式碼
所謂優雅的程式碼,不但具備極強的可讀性,還能以最少量的程式碼和機器操作來解決手頭的問題。要想在所有情況下都能夠做到程式碼的優雅,其實是相當難的,但是經過一段時間的程式設計之後,你會逐漸體悟到“優雅程式碼”應該是怎麼樣的。優雅的程式碼無法通過重構來做任何改進——為此自豪吧。下面這個計算凸多邊形面積的程式碼示例就是我認為的“優雅的程式碼”:
static public double GetConvexPolygonArea(Vector2[] vertices) { double area = 0; for (int i = 0; i < vertices.Length; i++) { Vector2 P0 = vertices[i]; Vector2 P1 = vertices[(i + 1) % vertices.Length]; area += P0.Wedge(P1); } return area / 2; }
8.編寫自文件化的程式碼
註釋是程式設計的一個非常重要的組成部分,但是自文件化的程式碼之所以能更勝一籌,是因為只通過閱讀程式碼就能讓人理解。通過巧妙選擇函式名和變數名,再聯絡語言語義,就能夠使得程式碼變得可讀,哪怕閱讀者是非程式設計人員。例如:
void DamagePlayer(Player player, int damageAmount) { if (!player.m_IsInvincible && !player.m_IsDead) { player.InflictDamage( damageAmount ); } }
不過,自文件化的程式碼並不能替代註釋。使用註釋來解釋“為什麼”,用自文件化的程式碼來描述是“什麼”。
9.不要使用奇奇怪怪的數字
光是將數字插入到程式碼中是不對的,因為沒人能理解它們代表了什麼。這會混淆我們——當相同的數字用於程式碼中多個不同地方的時候。有的地方可能會因此而導致變化,也有的會因此而產生bug。儘量使用命名的常量來描述要表達的值,即便它僅用於一個地方。
10.自動化
當我們在做一連串的動作時,是很容易犯錯的。如果你的部署程式不只一個步驟,那麼你出錯了。我們應該儘可能地自動化,以減少人為犯錯的機會。如果你需要執行很多工的話,自動化就顯得尤為重要了。
11.避免過早優化
一旦你開始優化已經可以成功執行的程式碼,那麼就會有破壞功能的風險。優化應該只響應於效能分析,在專案結束的時候進行。提前於分析階段的優化不但浪費時間,還會導致bug。
是的,沒錯,我的題目中說的的的確確是“10點”,最後的“第11點”是我免費奉送的親!
我希望這些要點,將有助於提高你的程式設計和開發過程。
期待大家的指正!
譯文連結:http://www.codeceo.com/article/10-tips-to-better-programmer.html
英文原文:10 steps to becoming a better than programmer
翻譯作者:碼農網 – 小峰
[ 轉載必須在正文中標註並保留原文連結、譯文連結和譯者等資訊。]
相關文章
- 成為優秀Java程式設計師的10個要點Java程式設計師
- 成為優秀高階程式設計師的10個要點程式設計師
- 成為優秀程式設計師的10點建議程式設計師
- 成為優秀程式設計師的10個有效方法程式設計師
- 成為優秀程式設計師的10個有效途徑程式設計師
- 成為偉大程式設計師的 10 個要點程式設計師
- 成為優秀程式設計師的十個有效方法程式設計師
- 成為優秀程式設計師的十個Tips程式設計師
- 如何成為一個優秀的 JavaScript 程式設計師JavaScript程式設計師
- 成為優秀Java程式設計師的10大技巧Java程式設計師
- 10個習慣助你成為一名優秀的程式設計師程式設計師
- 怎麼成為一個優秀的程式設計師 而不是一個優秀的碼農?程式設計師
- 你在成長為一個優秀的程式設計師嗎程式設計師
- 8個方法讓你成為更優秀的程式設計師程式設計師
- 成為優秀程式設計師的10條黃金法則程式設計師
- Java程式設計師如何成為優秀的架構師Java程式設計師架構
- 成為優秀程式設計師的最佳學習方式程式設計師
- [開發故事]成為優秀程式設計師的十個有效方法程式設計師
- 2019如何成為一個優秀的程式設計師程式設計師
- 初學者成為優秀Java程式設計師的8個步驟!Java程式設計師
- 如何成為一個優秀的高階C++程式設計師C++程式設計師
- 《轉貼》如何成為一個優秀的jsp程式設計師JS程式設計師
- 成為一名優秀程式設計師(&人類)的 101 個技巧程式設計師
- 優秀程式設計師都在注意的十個點程式設計師
- 成為一名優秀網頁設計師的10個建議網頁
- 成為優秀程式設計師需要知道的 15 件事程式設計師
- 怎樣把自己培養成為一個優秀的程式設計師程式設計師
- 結婚生子讓我成為一個更優秀的程式設計師程式設計師
- 能讓你成為更優秀程式設計師的10個C語言資源程式設計師C語言
- 優秀程式設計師必備的10個技能程式設計師
- 成為更優秀程式設計師的關鍵:更多的閱讀程式設計師
- 做好11條讓你成為更優秀的程式設計師程式設計師
- 成為明星程式設計師的10個提示程式設計師
- 優秀的程式設計師是怎麼煉成的程式設計師
- 優秀程式設計師的優秀歷程程式設計師
- 每一個程式設計師要遵守的一些優秀程式設計風格程式設計師
- 為了成為優秀的程式設計師,我需要擅長數學嗎?程式設計師
- 10個程式設計好習慣:優秀程式設計師的經驗分享程式設計師