成為更加優秀的程序員的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();
}</pre>
但是現在,我們既可以將上述代碼重構成函數,也可以使用委托重寫:
/// <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
});
}</pre>
2.注意不要分心
當你發現自己在刷非死book和推ter——不能專注于解決問題了,那么這往往意味著你需要稍作休息了。不妨離開辦公桌去喝杯咖啡,和同事聊上個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;
}</pre>
8.編寫自文檔化的代碼
注釋是編程的一個非常重要的組成部分,但是自文檔化的代碼之所以能更勝一籌,是因為只通過閱讀代碼就能讓人理解。通過巧妙選擇函數名和變量名,再聯系語言語義,就能夠使得代碼變得可讀,哪怕閱讀者是非編程人員。例如:
void DamagePlayer(Player player, int damageAmount)
{
if (!player.m_IsInvincible && !player.m_IsDead)
{
player.InflictDamage( damageAmount );
}
} 不過,自文檔化的代碼并不能替代注釋。使用注釋來解釋“為什么”,用自文檔化的代碼來描述是“什么”。
9.不要使用奇奇怪怪的數字
光是將數字插入到代碼中是不對的,因為沒人能理解它們代表了什么。這會混淆我們——當相同的數字用于代碼中多個不同地方的時候。有的地方可能會因此而導致變化,也有的會因此而產生bug。盡量使用命名的常量來描述要表達的值,即便它僅用于一個地方。
10.自動化
當我們在做一連串的動作時,是很容易犯錯的。如果你的部署進程不只一個步驟,那么你出錯了。我們應該盡可能地自動化,以減少人為犯錯的機會。如果你需要執行很多任務的話,自動化就顯得尤為重要了。
11.避免過早優化
一旦你開始優化已經可以成功運行的代碼,那么就會有破壞功能的風險。優化應該只響應于性能分析,在項目結束的時候進行。提前于分析階段的優化不但浪費時間,還會導致bug。
是的,沒錯,我的題目中說的的的確確是“10點”,最后的“第11點”是我免費奉送的親!
我希望這些要點,將有助于提高你的編程和開發過程。
期待大家的指正!
</div>
譯文鏈接: http://原網站已經失效/article/10-tips-to-better-programmer.html
英文原文: 10 steps to becoming a better than programmer
翻譯作者: 碼農網 – 小峰
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!