程式設計初學指南

這是一篇沒有任何程式碼的程式設計初學指南……目的是期望作為一種具普遍性的指引。撰寫本文的起因是最近在工作上涉及到有關於程式設計學習路線的討論,使得 DR 開始思考有沒有一種具概括性卻仍是有效的指引,可以讓任何程式設計的初學者不論具體是想要走哪一種領域,都能夠從中獲益。

 

於是 DR 便在這裡將一些想法記錄下來,日後也有可能會因著想法有所更新而修訂本文的內容(甚至是整個砍掉重來?)。

 

首先要先聲明的是,DR 未曾真正擔任過程式設計師的職務(或任何不同職稱、但份內工作等同於程式設計師的職務),而且在可預見的將來,DR 大概也不會從事這類的職務。不過最至少 DR 還是會不時寫到一些程式(目的則不一而足),所以寫寫跟這類議題有關的東西應該還不至於太過突兀。

 

由於本文很大程度是參考 DR 個人的學習經歷,因此這裡會先簡單交待一下 DR 當年的程式設計學習路徑,讓本文的觀點能夠更容易被理解。

 

Visual Basic 6(以下簡稱 VB6)是 DR 最先學習的第一門程式語言(以及開發環境),時間是在高中。當時選擇 VB6 的原因很單純,因為學校提供的教材及軟體就是 VB6。後來則開始學習 C 語言,而改用 C 語言的主因是 DR 希望可以學習到跨平台的程式設計方案,因為當時 DR 也有接觸 Linux(事實上 DR 開始接觸 Linux 的時間點還略早於程式設計),然而 VB6 則是限定在 Windows 平台的開發方案。

 

如果略過 C++ 跟 C# 不談的話(略過它們的原因是 DR 自認沒有認真的學習或使用過它們),Python 則算是 DR 的第三門程式語言。不過其時間點相較於 VB6 和 C 就晚了許多,DR 到了大學才開始接觸 Python。當時使用 Python 的原因是想要一種簡便的開發方案,而 Python 確實也不負期望,許多需求都能用嚇死人簡單的方式來完成。

 

也因此後來 Python 就成了 DR 撰寫程式的優先選項。

 

OK,接下來便進入正題。其實用於入門學習的程式語言跟實際用於生產(工作用)的程式語言可以是兩回事,初學者並不一定得直接學習準備要用來工作的程式語言。相反的,初學者的第一門程式語言應該可以擁有非常自由的選擇,只要能從中學習到程式設計的最基本概念即可。

 

程式設計最基本的概念是:

  1. 變數宣告(variable declaration)
  2. 輸出入(input/output)
  3. 運算子(operator)
  4. 條件式(conditional)
  5. 迴圈(loop)
  6. 函式(function)

 

舉例來說,只要你能夠使用任一語言寫出類似於 find_prime_number.c 這般求質數的程式,基本上便表示你對上述的基本概念應該已經具備一定程度的瞭解。而在習得基本概念之後,初學者便可以根據實務需求選擇其它的程式語言,或是在相同的程式語言中繼續深入。

 

此外在基本概念中,DR 甚至將陣列(array)概念排除在外,這是因為 DR 認為陣列在不同語言之間可能會有較大的落差,在最入門的階段中接觸它或許不是那麼必要。

 

所以乍看之下 DR 並不限定初學者應該接觸那一門程式語言,不過只有一點例外。如果想要走的領域並非高階應用,而是基礎的計算機科學(computer science),那麼以現況來看,DR 會認為 C 或 C++ 是必學,若不是作為入門語言,之後也應該要有所熟悉才行。因為若要深入計算機科學,至少還是得熟悉一門需要自行控制記憶體管理、並且能夠編譯出原生執行檔的程式語言。

 

接著則要來談談那些可能入門書沒寫、老師沒教,但在實務上卻是重要的事物。

 

首先是程式碼的撰寫風格(coding style),也就是對於程式碼中的命名、縮排、斷行以及空格的使用等規範。尤其在具協作性的專案中,依循具合理性及普遍性的撰寫風格是至關重要的。某些程式語言有其官方所提倡的撰寫風格,而某些程式語言則否。就後者而言,則可以參考採用該語言的大型開放原始碼專案,通常裡頭所透露出的撰寫風格都是值得依循的。

 

因不同的處境而異,撰寫風格並不一定會成為很硬性的要求,但若能夠在這個環節上有所留意並保持紀律(無論是自我設立還是由外部所施加的),則對程式碼的品質來說都是好事。DR 自己的撰寫風格也歷經了許多階段的調整,而不是在一開始就做得很適當。

 

再來是關於註解(comment)的使用,有關註解的使用與否以及註解的內容為何總是能夠找到很多種意見,但在這裡 DR 只舉出一項自己認為最具普遍性的有效建議:註解不應用於解釋做了什麼,而是應用於解釋為什麼這麼做。

 

最後則是提醒備份的重要性,當你從未曾接觸程式設計、到開始寫起程式來,你手上的電腦便除了照片、影片、文件等雜七雜八的東西外,又多了一項需要備份的項目(而且可能更重要)。請為你的程式碼擬定可靠的備份方案,不要犯下當只有一部電腦或一顆硬碟損壞時,所有程式碼就直接人間蒸發的錯誤。

 

因處境而異,DR 並不認為所有人都一定得使用版本控制系統(version control system)。但若在擬定備份方案時將諸如 Git 這類的版本控制系統納入考量,或許你會發覺這至少是很不錯的備份方案。

 

Tags: