如何自學程式設計






您亦可在 Google Play 購買此本電子書。


調整心態


想要學習程式設計 (programming) ,不外有兩種途徑


  1. 學校課程、補習班、家教;
  2. 自己找書、上網查資料、跟人討論。

第一種方式的優點是有老師教,自己有問題也能直接問老師,真的對程式設計很有興趣也較能直接打破沙鍋問到底,老師可能丟資料或功課讓自己有個方向繼續深入研究,缺點可能是老師只教老師懂的東西。第二種方式的優點是完全自己學習,想要學什麼或知道什麼都自己弄清楚,無限延伸,缺點不外是自己得要有持續下去的動力。


總歸兩類學習方式,學習者都要有強烈的好奇心,其次


動手實作


無論書上怎麼寫,網頁展示什麼樣的範例,又或著網路上的教學影音怎麼說,只有在自己動手實作,也就是打開電腦,把例子輸入電腦,實際執行之後,也就是要自己親身體驗才會對相關內容有所感覺,不然那些解釋或程式碼始終會跟自己保持距離。


這個距離就是都嘛看得懂,問題是實際著手開發卻毫無頭緒,或是大概知道要怎麼做,真的要做了又做不出來做不好。


因此一開始由第一種方式入門程式設計會比較得心應手,這樣就出現了第二個問題,就是程式設計這一領域進步跟改變的速度太快,不要說幾年,可能幾個月內就有太多新的東西需要學習,最後都會導向第二種學習方式,也就是自己找書、上網查資料、跟人討論等等。總而言之,想要吃程式設計這行飯,最關鍵的技能反而不是程式設計本身,而是對自學抱持的心態,永遠有新的東西要學,而且得要保持熱忱。


所以記在心裡一個重點,不要以為看一看資料,然後想一想就可以弄懂,雖然電腦科學背後的原理很簡單,可是晶片設計越來越複雜,只用簡單的模式處理反而很累贅,於是歷來很多電腦科學家用不同的轉換方式來進行電腦工作,這就是下一個話題 --------- 抽象化。


抽象化


電腦也稱為計算機,廣義而言就是計算裝置,現在的電腦就是數位化的計算裝置,至於講到數位化是依電壓的高低來記錄數字 01 ,電壓趨近於 0 之時就是數字 0 ,而電壓趨近於預設電壓之時為數字 1 。那要怎麼進行計算工作呢?就是在晶片的電路設計工作了,像是邏輯閘 (logic gate) 、加法器 (adder) 、乘法器 (multiplier) 等等。


如果要直接控制這些邏輯閘、加法器、乘法器等需要使用機器語言 (machine language) ,寫出來的程式碼叫做機器碼 (machine code) ,像是


00100001010010100000000000000001

上面是 32 位元的機器碼,倒是開發大型軟體動輒數百萬行的程式碼,如果換成機器碼可能上億行,試想開發或維護都得看數億個 01 ,這是件非常辛苦的事,而且辛苦到難以讓軟體、遊戲、動畫等產業蓬勃發展說。


因為只有 01 太過於艱澀難以理解,所以很快地就有電腦科學家發明組合語言 (assembly language) 取代,例如以上的機器碼轉換成組合語言如下


addi $t2, $t2, 1

共分成四個部分,所以該機器碼也可分成四個部分來看,這裡不細究組合語言與機器語言之間的聯繫,倒是已經可以看出相對機器語言的具體,組合語言已經跨出抽象化的小小一步,也就是讓機器碼變成我們直接看得懂的指令。


機器語言跟組合語言因為直接跟機器相關,因此歸類為低階語言,進一步抽象化就是用高階語言來寫程式,像上面的程式可能會是以下 C 程式碼的一部分


i++;

i 是變數, ++ 是運算子,這個運算子讓變數 i 遞增 1 ,也就是 i 加上 1 ,最後的分號 ; 則是程式碼一行的結束符號。


只是寫 C 程式可能還需要規劃記憶體使用,使用變數 i 得先宣告 (declare) 型態 (type) ,好讓編譯器 (compiler) 預留記憶體空間,更複雜的程式像是資料結構 (data structure) 之類,需要妥善的進行記憶體管理,這還是很麻煩,所以後來的程式語言如 Python 、 Ruby 等都不讓程式設計師操心,像以下 Python 的程式碼


i += 1

同樣是變數 i 遞增 1 ,不過 Python 不支援 ++ 運算子,然後使用變數前也不須先宣告,簡單說, Python 的記憶體管理就交給直譯器 (interpreter) 處理,程式設計師不太需要關心這些細節,除非真的有效能考量的需求。



事實上現在所有高階語言寫的程式想要在數位機器上執行,都必須翻譯成該平台機器語言的機器碼才可執行,像 C 使用編譯器 (compiler) 先行編譯程式碼, Python 使用直譯器 (interpreter) 在執行時同步翻譯程式碼。


這是進一步的抽象化,更進一步的抽象化是讓程式設計師可以依自己的需求定義需要的型態,新的型態加上其他程式碼組合成程式庫 (library) ,這讓其他程式設計師可以直接運用裡頭的程式,無需重頭自己開發。


什麼是程式設計?


什麼是程式設計?


我們先回到這個最根本的問題,要回答這個問題,就得從什麼是程式 (program) 談起。簡單講,程式的基本功能就是執行一些指令,並有如下圖的輸入 (input) 及輸出 (output)



凡是程式一定有輸入跟輸出,輸入可能只是使用者打了啟動程式的指令,作業系統給該程式起動的訊號,然後程式執行結束再回傳作業系統結束的訊號,啟動訊號跟結束訊號就是最基本的輸入跟輸出。像是作業系統好比一個龐大的程式,按下電腦的電源開關開機,就是傳遞啟動訊號給作業系統,執行關機程式也就是傳遞給作業系統結束的訊號。


講到作業系統有點太複雜,先以下圖的簡單程式說明輸入輸出的概念,此程式計算十個數字的平均值,因此輸入為十個數字,輸出則是一個數字



也可以改成十個任意數字,像是提供輸入介面要求使用者輸入十個數字,再由程式計算出平均值後,顯示給使用者看,如下圖



有沒有發現所謂的「程式」跟數學函數的觀念很接近,兩者都可輸入數個數字,然後輸出一個數字。是的,程式最早就是為了計算,因此很多觀念跟用詞都直接從數學轉移過來,不過換作程式進行工作,因需求而能有不同的彈性。


知道程式設計是什麼了嗎?


早期的電腦不外是單純的算術,時至今日,大量的資料都被數位化,無論是數據、文字、圖像、聲音、影片等等,所有處理這些數位化資料全都是透過計算。現在更是進一步把各種計算付諸各種應用,例如相機的人臉對焦,這是利用感光元件感測到的圖像資訊進行資料比對,只要該區域的圖像比對出跟人臉一樣,或相似達到一定的百分比,就會判斷那時不是人臉,再來對焦元件就跟著該人臉對焦。


實際上人臉對焦需要頗複雜的演算法 (algorithm) ,演算法也就是固定一套的計算模式,換言之就是程式,兩者在絕大多數場合的意義並沒有差很多,我們先需要瞭解兩個詞彙大致同義即可。


該從哪一種程式語言著手?


依據 TIOBE 網站在 2016 年 3 月1的調查,最熱門程式語言的前兩名為


Java



C


兩者就佔了三分之一強,其他依次為


C++, C#, Python, PHP, Visual Basic .NET, JavaScript, Perl, Ruby ....


以上看到的程式語言都是通用型語言,也就是這些程式語言可以做任何想做的工作,當然前提是電腦能完成的。


那要挑選哪一種語言入門呢?


這是個最簡單的問題,但也可能是最難回答的問題。如果是跟著老師學,就照著老師的吩咐去學即可,也就是說,老師教 C 就學 C ,老師教 C++ 或 PHP 或 Perl 就跟著老師學,不管這語言的適用性如何,像是要拿 C 開發手機 App 很不容易好了,老師教 C 就先學 C 囉,因為這些通用型程式語言背後基本的道理都一樣,先要學會基本的道路,接下來才會觸類旁通,才能很快地學會其他種程式語言。



話說直接拿 C 開發手機 App 是個艱鉅的任務,雖說不是不能,相較沒有 Java 、 Objective-C 或 Swift 容易跟簡單,還有就是 Objective-C 是 C 的擴充, C 程式可以直接放到 Objective-C 的環境中執行,但反之不可,所以進入 Objective-C 後,切記兩者不是一樣的。



換用方言的角度來看, C++ 、 C# 、 Java 、 JavaScript 、 Objective-C 、 PHP 、 Swift 都可看作是 C 的方言,因為這些語言的基本選擇、迴圈的語法都很類似,或是說幾乎完全一樣,可是方言就是已經有所不同才叫方言,像是英國、美國、澳洲、印度、加拿大、菲律賓、新加坡等等儘管都用英語當官方語言,可是英國人碰上美國人幾乎從腔調就能分辨從哪裡來,何況美國東岸、西岸已有不少不同了。講到此點是因為很多人仍然喜歡把 C/C++ 或 C/Objective-C 混在一起講,但 C/C++ 其實是指 C++ , C/Objective-C 指的是 Objective-C ,C 程式若加上 C++ 或 Objective-C 語法的程式,往往無法通過 C 編譯器的編譯。


如果是完全自學,就看手邊容易取得哪一種程式語言的資源了,像是用 Mac 電腦,可以下載免費的 Xcode ,用 Xcode 的環境可以學習 Swift ,用 Linux 電腦,預設安裝 Python 或 Perl 或 Ruby 的直譯器,就能直接執行這幾種已安裝直譯器的程式,而用 MS-Windows 電腦的話,也能找 Visual 系列的免費版,藉此學 C# 或 Basic 等等。


或是特別想先學哪一方面的應用,就挑選想學的那一方面的先學,像 PHP 多是做網站伺服器, JavaScript 做網頁應用, Java 做 Android App , C 寫作業系統或硬體控制等等,自學的好處就是想學什麼就學什麼,就自己決定囉!以下開始談些程式語言所具有的共通元素,首先,最引人注目的就是關鍵字 (keyword) 了。


關鍵字


關鍵字是程式語言中語法相關的保留字 (reserved word) ,意思就是關鍵字都有特定用途,因此關鍵字不能拿來當變數 (variable) 名稱或識別字 (identifier) 來用。通常入門程式語言,也都是由基礎的關鍵字開始。


關鍵字分成以下六大類


  • 常數
  • 型態
  • 定義
  • 運算子
  • 修飾詞
  • 陳述

當然每一種程式語言細分大都不只這六大類,只是說幾乎每一種程式語言都有這六大類,所以就分這六大類來介紹關鍵字,其中定義、運算子 (operator) 跟陳述 (statement) 在下文介紹,這裡把常數、型態、修飾詞 (modifier) 各舉一個關鍵字當例子,然後介紹在 Visual Basic 、 C 、 C++ 、 C# 、 Java 、 JavaScript 、 Python 、 Swift 適用的情況。


首先,常數舉以下的關鍵字 true 當例子


true


true 屬於布林值 (Boolean value) ,同英文意思,就是邏輯上的「真」,因此程式裡面只要出現 true 就代表「真」,也可用條件成立來解釋,相對「真」是「假」,採用的關鍵字為 false ,也就是條件不成立的意思。


Visual Basic 、 C++ 、 C# 、 Python 、 Swift 都把 true 當關鍵字,須留意在 Visual Basic 跟 Python 是首字母大寫的 True,而 Java 、 JavaScript 把 true 當字面常數 (literal) 。



所謂字面常數就是直接寫出來的數值,像是 123.56 等數字,或是 'c' 之類的字元 (character) 、 "abc" 之類的字串 (string) 。


型態舉以下的關鍵字 int 當例子


int


int 是 integer 的縮寫,就是整數的意思,表示這個型態是整數。 Visual Basic 、 C 、 C++ 、 C# 、 Java 等程式語言在使用變數前都需要先宣告 (declare) 變數所屬的型態,所謂宣告就是在程式中明確標示該變數的型態,像是


int i;

注意 int 跟變數 i 中間要空一格,結尾以分號結束。至於 Visual Basic 的語法比較不同,它是


Dim i As Integer

Dim 為 dimension 的縮寫,意思就是指定變數 i 的尺寸。而 JavaScript 跟 Swift 則是用關鍵字 var 宣告,例如


var i;

var 為 variable 的縮寫,意思同英文字面,其後指派什麼數值,該變數 i 就屬於所指派數值的型態。最後 Python 更簡單,完全不用宣告,要用變數就直接設定就好,例如


i = 0

同時 Python 也取消了變數的型態專屬的限制,給程式設計師更大的彈性空間。



有沒有發現以上受歡迎的程式語言,很多基礎的方面都很相似,只是寫法或是關鍵字不太一樣。是的,以上除了 C 之外都是物件導向程式語言 (object-oriented programming language) ,而多數都是衍生自 C 的設計方式。雖有其他採用不同概念設計的程式語言,但為數不多,接下來我們繼續討論的也都是這些語言的相似點。


修飾詞舉以下的關鍵字 public 當例子


public


public 的中文是公開的意思,這主要是用來修飾物件權限的關鍵字,因為物件導向程式設計是以設計物件為主,需要詳細規範各個物件之間的關聯,也就是現在設計的物件能否被其他物件再利用,用術語來講就是繼承 (inheritance) 機制。


除了不是物件導向語言的 C 跟物件導向語言的 Python 外,其他都有關鍵字 public ,而 Python 沒有這個關鍵字的原因也很簡單,因為 Python 預設所有物件都是 public 的,所以相對要設定 private ,就採用了特殊的標記方式。


接下來繼續討論運算子的部分,除了有些關鍵字被當作運算子外,鍵盤上眾多的符號也都拿來當成運算子用。


運算子


最常見的運算子就是四則運算用的加、減、乘、除了,這些都直接採用鍵盤上的符號,例如加為


+


減為


-


乘比較特別,用的是星號


*


除也比較特別,用的是斜線


/


這四個運算子在以上八種程式語言中都相同。也有程式語言如 Basic 、 C++ 、 Python 直接拿關鍵字當運算子,例如布林運算中的「且」


and


換作符號則是


&&


這在 C 、 C# 、 Java 、 JavaScript 、 Swift 中都適用。


有些特殊用途的運算子難以用特定符號或符號組合,就直接用關鍵字來標記了,例如 C 有


sizeof


sizeof 用來計算變數所佔的記憶體空間,其他 C++ 、 C# 都沿用了這個運算子。而 Java 、 JavaScript 因為需求也有


instanceof


instanceof 用來判斷特定物件 (object) 是否是某個類別 (class) 的子類別 (subclass) 。其他還有很多,這裡就不討論了,接下來繼續討論陳述,挑兩種以上八個程式語言都具有的陳述來討論,首先是選擇。


選擇


所謂的選擇 (selection) 就是讓程式依條件 (condotion) 而有不同的執行選項。我們直接以實例來說,上述八種程式語言都有以下關鍵字 if


if


else


else


以 C 程式為例,簡單的例子如下


int condition = 1;
if (condition) {
   printf("The condition is true.\n");
}
else {
   printf("The condition is false.\n");
}

if 後面小括弧中的變數 condition 就是條件,條件基本上是一個運算式 (expression) , if 會依運算式回傳的值進行判斷, C 的 if 陳述只會判斷條件為 0 或非 0 的數字, 0 就是邏輯上的假,所有非 0 的數字都是真。


上面的例子由於 condition 等於 1 ,屬於非 0 的數字,因此條件為真,所以程式會執行 if 底下大括弧圍起來的程式碼,大括弧的範圍稱為程式區塊 (block) 。反而條件為假的話,會執行 else 底下大括弧圍起來的程式區塊, else 也是關鍵字之一,會跟 if 連用,代表一個程式執行分流。


如果有多個條件, C 可以把 elseif 放在同一行,例如


else if (condition) {

加入上面完整的 if-else 複合陳述,改寫成另一個例子如下


int i = 5;
if (i > 10) {
   printf("The first condition is true.\n");
}
else if (i < 10) {
   printf("The second condition is true.\n");
}
else {
   printf("All above is false.\n");
}

Visual Basic 中需要額外加上 Then ,而 else if 須連寫成 ElseIf ,例如


ElseIf (condition) Then

Python 的 else if 變成 elif ,條件後須加冒號,例如


elif condition:

Python 只有 if-elif-else 一種選擇結構, Visual Basic 還有多重選擇的 Select-Case ,其他則有 switch-case ,至於細節請看實際學習哪一種語言再深入研究囉!下面繼續討論另一種常見的陳述,也就是迴圈 (loop) 。


迴圈


所謂的迴圈 (loop) 是指重複執行固定的程式區塊,這八種程式語言都有關鍵字 while 構成的 while 迴圈


while


以 C 程式為例,簡單的例子如下


int i = 0;
while (i < 5) {
   printf("Hello!\n");
   i++;
}

此程式會印出 5 行 Hello! ,直到控制變數 i 遞增到 5 為止,屆時條件不成立,便會結束執行迴圈。



迴圈是程式設計中很重要的概念之一,因為很多地方需要迴圈,就像打開電腦後所看到的畫面,就是好幾個不斷重複執行的迴圈維持顯示在螢幕上的。


除了 while 迴圈外,以上八種程式語言還有 for 迴圈,至於 for 迴圈的用法不盡相同,也就留待學哪一種程式語言再深入研究囉!下面繼續討論定義方面的關鍵字,如何模組化 (modularity) 提供程式的重複利用。


模組化


一般而言,軟體開發用到模組 (module) 一詞,通常是指軟體架構中具有完整功能的元件,此元件通常是指已編入程式庫的程式檔案,至於每一種程式語言開發程式庫 (library) 的方式都不太一樣。這裡,我把模組化一詞的意義縮小,僅指可重複利用的程式碼。


C 的執行單位為函數 (function) ,也就是說 C 程式是一個函數接著另一個函數來執行,程式執行的起點為 main() 函數,如下例


int main(void) {
   task1();
   task2();
   task3();
   return 0;
}


程式設計用函數的英文原文跟數學用的函數英文原文相同,兩者都是 function ,某些作者或講師為了表彰程式設計的函數與數學的函數是不一樣的意思,所以把程式設計的 function 稱作「函式」,這跟沒什麼對跟錯,就不同人的習慣用詞而已。


假若執行以上的 C 程式,作業系統先呼叫函數 main() ,接著呼叫 task1()task1() 執行結束後再呼叫 task2() ,同樣的, task2() 執行結束後呼叫 task3() ,等到 task3() 執行結束, main() 的最後一行用關鍵字 return 回傳整數 0 給作業系統。


由上可知 task1()task2()task3() 三個函數都可重複利用,並可依次呼叫安排執行順序。 C 亦可定義陣列 (array) 、結構 (structure) 、聯合 (union) 等衍生資料型態,這些資料型態的定義放在函數定義以外,能被各個函數重複利用。以下為結構定義的例子


struct dmeo {
   int i;
   int j;
};

定義結構使用關鍵字 struct ,結構可包含多個型態的數值,此例的 demo 只定義兩個 int 型態的整數。如果結構中有定義指標 (pointer) 的話,就可讓指標指向相同識別字名稱的結構,使此結構能一個接一個,變成一種可資利用的資料結構 (data structure) 。


如何定義各種資料結構是進階課程了,話說很多程式語言都有已經定義好的資料結構,讓程式設計師可以直接利用,像是 Python 有串列 (list)


a = [1, 2, 3, '4', 5.0]

串列的字面常數 (literal) 為中括弧,所有在中括弧以逗號間隔的數值都是串列的元素 (element) ,取出或重新設定元素也是用中括弧,例如以下將 a 的第 2 個元素重新設定為 123


a[1] = 123

之所以為第 2 個元素,這是因為串列的索引 (index) 是從 0 開始的。


像串列這樣的資料型態是用關鍵字 class 來定義的,以中文來說就是類別 (class) ,類別也是定義物件的藍圖,除了可定義內含的屬性 (attribute) 外,也可定義像是函數的方法 (method) 。簡單的 Python 類別例子如下


class Demo:
   a = "9527"
   def do_something(self):
      print("Hello, " + self.a + "!")

此例定義了 Demo 型態的類別,其具有屬性 a 及方法 do_something() ,使用例子如下


a = Demo()
a.do_something()

結果就是印出 Hello, 9527! 囉!



屬性一詞在不同程式語言用了不同的英文詞彙, C++ 稱之為 data member , JavaScript 、 Python 用 attribute , C# 、 Swift 用 property , Java 用 field ,其實這也是各自開發團隊的習慣用詞不同而已。


除了類別外,每一種語言或多或少還可訂一些額外的內容,不過這些包括類別是模組化的進一步,再進一步就是怎麼組織程式檔案為程式庫 (library) 了。


銜接到程式庫


無論藉由哪一種程式語言學習程式設計,熟悉基本的語法後,接下來就是學習利用程式庫裡已經定義好的內容了,像是在 C 用到 printf() 函數,這在標準程式庫 (standard library) 中的 stdio.h 中,使用前要先用前置處理器指令 #include 引入,例如


#include <stdio.h>

標準程式庫是程式語言官方制定的標準,像是 C 最新標準為 C11 ,舊標準為 C99 ,不過這由提供直譯器或編譯器的團隊實作,因此不同開發團隊的直譯器或編譯器中可能會有不完全一樣的內容,倒是絕大部份相同,所以初學程式設計不太需要擔心。



學習使用程式庫是一項基礎課程,至於學習開發程式庫則是較進階的課程,就像是學習使用工具跟學習製造工具的不同,不管怎麼樣,想要製造工具或對既有工具進行改善,得先熟練已有的工具,



其實絕大多數的功能都可在標準程式庫中找到,或是有其他的第三方程式庫,因此無論想開發什麼,不妨先從程式庫找找有沒有相對應的功能。


不同程式語言定義程式庫的方式不太一樣,以 Java 為例, Java 用關鍵字 package 定義套件,編譯後每個套件的位元組碼 (bytecode) 都在特定的資料夾(路徑)中,例如下面定義了 classdemo 套件


package classdemo;

假設 classdemo 中定義了 ClassDemo 類別,要在其他類別檔案中重複利用 ClassDemo 類別,就要利用關鍵字 import 引入


import classdemo.ClassDemo;

以上提到的程式語言各層面都淺嚐即止,真實開發情況可能會很複雜,最後再來談談開發囉!


開發二三事


大致上開發分成兩大類,人力銀行中找到程式設計的相關職缺大致上也分成這兩類


  • 開發核心部分;
  • 開發應用程式。

以遊戲為例,核心部分好比遊戲引擎,其中又包含了很多部分,像是


  • 視覺效果引擎 (rendering engine) ;
  • 音效引擎 (audio engine) ;
  • 物理引擎 (physics engine) ;
  • 人工智慧 (artificial intelligence) 。

裡頭又涵蓋非常多部分,基本上開發遊戲引擎就是開發一個大型程式庫,之後這個程式庫是給遊戲開發者用的。


至於應用程式部分好比遊戲的主程式,也就是遊戲的進行方式,除了美工之外,著重在玩家介面、畫面控制、遊戲進程等等,簡單講,這部分是跟使用者直接相關的,開發應用軟體或手機 App 也都屬於這個部分。


開發核心或應用程式,兩者有什麼不同呢?最大的差別是從事開發核心部分必須對所用的程式語言非常精熟,像是用 C++ 的話,對 C++ 的各個細節都得非常熟悉,因為目的是開發 C++ 的程式庫,就必須完全用 C++ 的思考方式工作。


反倒開發應用程式部分,所關注的焦點在使用者上頭,因此熟悉使用者介面及應用程式介面 (application programming interface) 變成首要之務,例如開發 Android 手機遊戲,核心部分交給遊戲引擎,開發者著重在遊戲本身的內容,所以得掌握 Android API 或遊戲引擎所提供 API 的各個細節,思考方式不外就更接近 API ,而非特定程式語言本身了。


就像很多人說 Qt 雖然是 C++ 的第三方程式庫 (third party library) ,卻跟 C++ 很不一樣,無論如何,倒是 Qt 還不錯用就是了。


結語


每一種語言都有很多細節需要學習,每一細節可能都有一些範例跟練習,跟著範例與練習都能寫些小程式,或是自己也能稍作修改,改成自己想要的執行結果,無論如何,會需要花不少時間跟直譯器或編譯器打交道,只要執行不如預期,程式中就有錯誤 (bug) ,修正這些錯誤是學習程式設計重要的經驗之一。


進一步來說,每個練習最好都當成可發展的專案,也就具有完整功能的小型軟體,可自己完成或是跟同在學習程式設計的同學或同好一起完成,學習團隊合作也是程式中重要的一環喔,而之後除錯 (debug) 也是發展專案中的重要環節,總之,專案中的每個部分都得分開測試無誤,最後再把每個部分組裝起來變成功能完整的軟體,再進行測試,確定一切都能順利運行後就發佈囉!


討論到這裡告了一段落,總之想要自學程式語言到從事程式設計的工作只有


不斷練習


程式設計本身就是一項知識技藝,想要成就這項技藝,學習基本知識後,就只有不斷的練習,讓大腦跟雙手打程式碼時能完全同步,面對任何問題或困難才能處變不驚,深入了解問題或困難,冷靜思考應對解決的對策唷!


註解


  1. TIOBE 的程式語言調查網址為 http://www.tiobe.com/tiobe_index ,隨每一個月更新調查結果。回到原處

2 則留言:

孫守真 提到...

感恩先生不吝指導分享後學,敬慎拜讀之後,僅以一愚之見,助先生校訂小疵如下:
就會判斷那時不是人臉>就會判斷那不是人臉
條件 (condotion) > 條件 (condition)
沒什麼對跟錯,就不同人的習慣用詞而已> 這沒什麼對跟錯,就只是不同人的習慣用詞而已

感謝先生 南無阿彌陀佛

匿名 提到...

嗨,很感謝你做了這麼多的城市語言教學,未來也請繼續加油!
在 struct 的部分有個小錯字:
dmeo > demo