close

 

 

 


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.最後一點,就是不要用網路上來路不明的片段程式碼

我常常聽到: "這段是你自己寫的嗎"這句話,別問我怎麼聽到的,很可怕。

其實我覺得,身為一隻專業的工程師,在網路上剪剪貼貼也是無可厚非的一件事情,

但是,就像咱們台灣有一位很有名的侯傑老師所說 : 萬丈高樓平地起, 勿在浮沙築高台,

你在你的程式裡面埋了那麼多你自己也不知道他有沒有問題的炸彈,你不覺得很可怕嗎....

這也是一位曾經帶過我的前輩( 強哥 )和我說過的話,現在想想也是,與其追求交差速度,不如看懂看好。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

arrow
arrow
    創作者介紹
    創作者 Eric 的頭像
    Eric

    一個小小工程師的心情抒發天地

    Eric 發表在 痞客邦 留言(0) 人氣()