如果你也是從事軟體相關工作的人,一定會遭遇突然需要你去學習一套你不熟悉的程式語言狀況吧,此時你會怎麼做呢? 是趕快去買書來看嗎? 還是趕快找一門程式課來上? 又或者乾脆去找會的同事來教學? 採用這些方式的不便之處也很明顯,買書緩不濟急、外面課程花了錢還不一定對你的任務產生幫助,找同事來教要需要支付一筆人情債… 那有沒有更簡單有效方式可以讓我們快速幫助自己掌握一套新的程式語言的基本特性來趕快發揮戰力呢? 答案是有的,就是用 Sample Code 來學習。
前陣子我收到了要驗證 C API 功能的任務,要完成這個任務前提是會寫 C 語言,當時我正在苦惱要不要去買 C 語言程式書回來看,同時也一邊翻看著產品使用手冊,翻著翻著就發現裡面有一段教人如何這些使用 API 的 Sample Code,這次任務時間有限我決定暫時先放下書本改用 Sample Code 的方式學習 C 語言。我的目標很簡單就是先不管 Sample Code 裡面寫甚麼,先讓程式碼跑起來後再根據需求來應用修改程式碼就好。
一個好的 Sample Code 不是書上教學用的那種,也不是在網路上隨便找一段複製貼上就可以,一定是針對你想解決的問題設計且能正常執行的一個「樣板」:
// main 是 C 語言的特殊函數是程式的進入點,這點學校都有教
int main()
{
/*
這裡用到一個 read_tag 函數,看起來是要去讀取一個叫做 "A" 的 tag?
tag 的型態應該是自定義的 tag_info 結構。暫時不知道細節沒關係
*/
tag_info *tag = read_tag("A");
/*
接下來這句話的寫法有點嚇人,大概知道是用 get_value 來取得 tag 裡面的某個值吧。
印象中沒看過 uint16_t,反正看起就像一個整數就先把它當作某種整數吧。
PS: 如果 tag_info 裡有其他的型態的資料的話,應該可以替換 uint16_t 來取值
*/
unit16_t data = *((unit16_t *) get_value(tag));
unit16_t cmd = 0;
/*
哦!! 原來 read_tag, write_tag 是一組的!!
稍微注意一下 write_tag 的用法就好,讀寫的資料型態應該要一樣
*/
write_tag("B", &cmd, sizeof(unit16_t));
/*
記得釋放用完的記憶體,才不會 memory leak.
*/
free(tag);
/*
main 宣告要求回傳一個 int, 回傳 0 通常代表程式順利結束
*/
return 0;
}
從上面的「Sample Code 樣板」你一定也發現了,為什麼說一段寫的清楚、功能正確的 Sample Code 很重要,因為它除了能節省接下來解任務時間,還能讓你站在一個 overview 的點來學習這個程式語言的基本樣貌。
假設你是只學過 python 的人,最直觀的語法差異就是 C 的程式碼區塊必須用大括號 {} 包起來,每一句話都要分號 ; 做結尾,要使用變數前就必須宣告正確型態,存取特殊的結構變數就會用到指標技巧等等,這些關鍵的語法差異之處就是我們要立即畫線特別關注的地方。另外像是釋放掉不用的變數的記憶體這種眉角,主程式也要回傳值的特性也可以順便學習到。
有這個「健康」的 Sample Code 做為基礎,就算我還沒完全搞懂裡面語法的細節,我也很快就改出了符合這次任務需要的程式碼了。這種以 Sample Code 來快速學習並且馬上切入實作來完成任務的方式,滿足投資 20% 力氣達成 80% 的效果真的相當划算。如果你剛好對某一個程式語言有基本的觀念,那麼用 Sample Code 來快速學習一門你不熟悉的程式語言就是非常適合的一種方式。