寫程式的好習慣

About Coding

每個程式設計師都有一些寫程式的習慣,有好的也有不好的,多看看一些別人的習慣,好的可以學習,不好的可以改進。以下我只有擷取原文部份的內容做翻譯,方便日後再次閱讀。星號表示我自己的一些想法。
原文連結:Programming magic: Rituals and habits of effective programmers

5個寫程式的好習慣(5 Good Programming Habits)

1.寫故事

The best trick I have is to type the sequences/use cases like a story before I write any code. The outline I create is read over and over, tweaking as I go. -- Dan Douglas
在寫任何程式之前,先用寫故事的方式寫下程式依序執行的流程,可以使用 use case 來做,重覆的閱讀來建立程式的輪廓。
*備註:可以把自己想像成使用者,以使用者會如何使用來思考,把整個流程重覆看個幾遍,確定沒有任何不流暢的地方。

2.切割問題

Solve small, individual problems (The rule of 'encapsulation'). If I try to make one part of my code do too much, then I've invited trouble. -- Sean Devlin
使用"封裝"的原則:一次解決一個小的、單獨的問題。如果試圖讓一段程式碼做太多事,那將會帶來許多麻煩。
*備註:讓每個函式只做一件事的好處,當程式出錯時較容易找到出錯來源。

3.寫程式碼前先寫偽程式碼

I like to write a routine first as pseudocode in comments, then translate the comments into source code. I find that this is a much faster method for me than writing the source code first. Any mistakes I make in the pseudocode are more easily fixed there than if I wrote the code first. As a bonus, I have accurate and useful comments when the routine is completed. -- Jeffrey Henning
先在註解裡寫假程式碼(虛擬碼)當作每次寫程式時的例行公事,然後再將這些註解裡的假碼轉成真正的程式碼。這個方法的速度比直接寫程式碼來得快。任何在假碼裡可能發生的錯誤都可以很容易的找到並修正。另外有一個好處是,當我每次完成撰寫註解中的假碼後,我就有了一個正確的和有用的註解。
*備註:很多人不喜歡寫註解,可是這樣非常不好,一段時間後真的會看不懂自己在寫什麼,或是要花些時間才能進入狀況。所以用假碼來離清思緒又可以當成註解,是一個非常好的習慣。

4.改善舊程式碼可以讓能力進步

Make improvements often -- even if they are small -- so you are always making some progress. -- James Stauffer
即使改善幅度很小,還是要經常改善程式碼。這樣子你的程式總是在進步。
*備註:不斷思考目前的程式碼要如何改進,可以提升程式設計的能力。

5.充足的睡眠

I make sure that I get a reasonable amount of sleep and that I come back to each piece of code/design/etc. after 'sleeping on it' so that I see/think about it from different angles and states of mind. This helps with everything. -- John Mitchell
要有適當的睡眠,才能用不同的角度去看或思考,對每件事都是有幫助的。
*真的,睡眠不足真得會影響思緒,太勞累只會惡性循環。

6.大部份時間都在思考,最後才是寫程式

Issac Kelly, Lead Developer at Servee.com, explains it this way: "To me, programming is really the 'last mile' to getting something done. When I do the planning and specifications, I go on lots of walks, take lots of time with my wife, and really do as little work in front of the computer as possible. The more I plan (in my head, on paper, on a whiteboard) the less I program; and all of my rituals are to that end." Before sitting down to a coding session, he gets a big glass of water, takes everything off of his desk, and closes out all programs and e-mail, keeping open only his code editor. The office door is shut, and some sort of music is playing ("typically an instrumental only, like my 'Explosions in the Sky' pandora station," says Kelly).
讓事情完成的"最後一哩"才是寫程式,當我在做一個計劃或制定規範時,我會出去散步,花很多的時間和我太太相處,而真正在電腦前工作,可能只有花一點點的時間。我大部份在思考一個計劃時,都是在我的腦中、紙上或是白板上來做,很少寫程式。當我要坐下來寫程式之前,我會拿一大杯的水,清空桌面,並且關閉所有的電腦程式和e-mail,只打開程式編輯器,接著關上辨公室的門,音樂給他放下去。
*備註:就是不要一邊思考一邊寫程式,思考的時候不是只能坐在電腦前,和親友聊天也是可以幫助思考的,在腦中規劃其實是最快的但點子也容易消失,所以最好還是隨身帶個筆記本,隨時記錄靈光一現的點子。

最近看的一本書「程式設計師提升生產力之秘笈」,也有講到一些可以幫助寫程式有效率的一些方法或工具。
本文網址:http://blog.tonycube.com/2009/05/blog-post_21.html
Tony Blog 撰寫,轉載時請註明出處及文章連結,謝謝 😀

8 則留言

  1. 寫的不賴,btw 我覺得第四點的small不是指程式碼,參考看看

    回覆刪除
  2. 謝謝~~你的看法是什麼呢?

    回覆刪除
  3. 可能是這個意思:
    即使程式碼"改善"得很小

    回覆刪除
  4. 很棒的分享。對於"small"的看法跟樓上一樣。第四點我試著翻譯如下,請參考:即使改善幅度很小,還是要經常改善程式碼。這樣子你的程式總是在進步。

    http://dragonspring.pixnet.net/blog

    回覆刪除
  5. 屋... 我是因為最後一點徹底落實而被開除的.....

    回覆刪除
  6. 看不太懂「假程式碼」的意思,請問大概的呈現方式是…?

    回覆刪除
  7. 正確說法應該是「虛擬碼」
    wiki:又稱為偽代碼,是高層次描述演算法的一種方法。它不是一種現實存在的程式語言(已經出現了類似虛擬碼的語言,參見Nuva);它可能綜合使用多種程式語言中語法、保留字,甚至會用到自然語言。

    中文Wiki:
    http://zh.wikipedia.org/wiki/%E4%BC%AA%E4%BB%A3%E7%A0%81
    英文wiki:
    http://en.wikipedia.org/wiki/Pseudocode
    另一中文說明
    http://nthucad.cs.nthu.edu.tw/~yyliu/personal/nou/05ct/pseudo_code.html

    搜尋關鍵字:Pseudocode
    簡單的說就是用比較口語的方法先把程式流程"說"出來,不要被程式邏輯打斷思考(不管任何程式語言如何實作),之後才依虛擬碼來寫程式(依各程式語言的語法規則來寫出可執行的程式碼)。

    回覆刪除

留言小提醒:
1.回覆時間通常在晚上,如果太忙可能要等幾天。
2.請先瀏覽一下其他人的留言,也許有人問過同樣的問題。
3.程式碼請先將它編碼後再貼上。(線上編碼:http://bit.ly/1DL6yog)
4.文字請加上標點符號及斷行,難以閱讀者恕難回覆。
5.感謝您的留言,您的問題也可能幫助到其他有相同問題的人。