1.寫Code之前,必須先觀察與動筆先釐清問題
簡單來說,人家叫你寫一個功能你就馬上去寫,這是一種很浪費時間的事情,這就好比今天你寫一篇文章,你必須先弄清楚你這篇文章的主題、概述,甚至你必須要先擬稿,從而保證文章是有深度和意義的,如果不這麼做,你可能會發現,你邊寫邊跑題,想到什麼加進去什麼... (像我一樣)。
在紙上書寫有助於找到解決問題的方法,並且能夠證實該方法的有效性和合理性,甚至在流程上面都會比你直接開始還來的好多了。
所以,畫個圖吧 ! 用上一切能夠表達你想法的符號和箭頭,在你開始敲擊你的鍵盤前,先在紙上順一次你的想法吧,這樣做真的能讓你早點下班的。
(PS: 我一定是我們公司RD裡面,紙量用的最驚人的傢伙.....,我的紙量 = 一個月需要用一盒Pentel HB0.5的筆心 + 四分之一枝PILOT HI-TEC-C的筆心)
2.使用文字將程式具體化
什麼是具體化,為什麼要用文字來描述?
有時候我們在寫一些算法或者是說在釐清一些邏輯,我們很常會搞到最後自己都不知道自己在寫啥 (不要說你沒發生過)。
在以前剛出社會的時候,我真的很常這樣,這也是我認為新手很容易犯的錯。
舉個例子來說明吧,假設我們要寫一個演算法 (Selection Sort),那我們可以這樣在紙上先寫 :
什麼是Selection sort ? 選擇排序法 ,
- 從資料裡面找出最小(最大)的那一筆,然後將這筆資料 "放"到當前正確的位置。
- 一直重複,直到所有的資料(Element)都排序完畢。
3.寫一些偽代碼(Pseudcode)
在寫演算法或學習的時候,千萬不要吝嗇於寫Pseudcode,其實寫pseudcode可以幫助我們釐清想法,
pseudcode並不是真實的代碼,但是它和代碼的結構很像。
void Pseudcode_Selection_Sort(IN array , IN Length)
{
for i = 0 to Length-1 do
min = i
for j = i + 1 to j < Length do
if array[min] > array[j]
let min = j;
swap array[i] and array[min]
}
4.將程式碼完成吧
如果問題真的很簡單,你也可以3和4一起完成,但,你也可以像我一樣。
Version # 1
void main()
{
int Number[] ={0,8,4,9,8,7};
int Len = sizeof(Number)/sizeof(Number[0]);
int i,j,min;
for (i = 0 ; i<Len-1;i++)
{
min = i;
for (j = i+1;j<Len;j++)
if (Number[min] > Number[j])
min = j;
swap(Number[i],Number[min]);
}
for (int i =0 ;i<Len;i++)
{
cout<<Number[i]<<endl;
}
}
覺得上面的看起來不爽,於是改成大部分的人會寫的方式
Version # 2
void Selection_sort(int arr[],int len)
{
int i,j,min;
for (i = 0 ; i<len-1;i++)
{
min = i;
for (j = i+1;j<len;j++)
if (arr[min] > arr[j])
min = j;
swap(arr[i],arr[min]);
}
}
void main()
{
int Number[] ={0,8,4,9,8,7};
int Len = sizeof(Number)/sizeof(Number[0]);
Selection_sort(Number,Len);
for (int i =0 ;i<Len;i++)
{
cout<<Number[i]<<endl;
}
}
這樣的寫法看起來乾淨多了,但是還不是我自己最喜歡的寫法,
於是我這邊提供我自己的寫法 :
#include <iostream>
using namespace std;
#define SIZE_OF_ARRAY(IN_ARRAY) sizeof(IN_ARRAY)/sizeof(*IN_ARRAY)
void Selection_sort(int arr[],int len)
{
int i,j,min;
for (i = 0 ; i<len-1;i++)
{
min = i;
for (j = i+1;j<len;j++)
if (arr[min] > arr[j])
min = j;
swap(arr[i],arr[min]);
}
}
void main()
{
int Number[] ={0,8,4,9,8,7};
int Len = SIZE_OF_ARRAY(Number);
Selection_sort(Number,Len);
for (int i =0 ;i<Len;i++)
{
cout<<Number[i]<<endl;
}
}
5.最後一點,就是不要用網路上來路不明的片段程式碼
我常常聽到: "這段是你自己寫的嗎"這句話,別問我怎麼聽到的,很可怕。
其實我覺得,身為一隻專業的工程師,在網路上剪剪貼貼也是無可厚非的一件事情,
但是,就像咱們台灣有一位很有名的侯傑老師所說 : 萬丈高樓平地起, 勿在浮沙築高台,
你在你的程式裡面埋了那麼多你自己也不知道他有沒有問題的炸彈,你不覺得很可怕嗎....
這也是一位曾經帶過我的前輩( 強哥 )和我說過的話,現在想想也是,與其追求交差速度,不如看懂看好。
留言列表