2011年12月11日 星期日

C 語言入門 - 前言

何謂程式語言?它能做什麼?為什麼要學習它?

  在現今資訊發達的時代,猴子都知道電腦的運算能力之強大。但是電腦不如人腦擁有意志,能夠溝通,所以不會主動為人類做任何事。幸運的是,我們可以命令它們做任何事,而不會受到拒絕或是反抗。它們不會變通,不會做你沒下令的事情,所以能夠信賴。因此將那些單調枯燥繁瑣的工作交給電腦來做,將困難複雜需要思考的工作交給人來做,會是較有效率的分工方式。

  而程式語言,就是對電腦下命令用的語言。只要將希望電腦做的事情,使用程式語言,寫成程式並命令電腦執行,即可讓電腦為我們做事。所以若要讓電腦按我們希望的方式,為我們處理掉許多麻煩事,就必須學會程式語言。一旦學會了,就能夠靈活運用電腦的計算能力,輕易完成許多人力難以辦到的事情。這也是它的魅力所在。


學習程式語言需要會些什麼?

  最基本的能力是 26 個字母大小寫全部認得,找得到所有鍵盤上存在的符號,擁有一台電腦並且知道基本的使用方式。最好具備一些數學底子,至少要到國中數學,但不算必備;最好具備英文能力,但若能像筆者初學時,語法全部一個個字母硬記,也不算必備。學習並不需要太多基礎,但要學到精通卻極為困難,不論是否具備上述基礎。


何謂程式?

  程式就是以程式語言所撰寫的一套明確的指令流程。執行此程式時電腦將依上面的流程,依序來執行指令,完成一條後前進到下一條。所有我們使用過的軟體都算是一個程式,雖然它們通常複雜得多,但仍沒有脫離這個範圍。如此一來,我想應該可以了解程式能做的事情有多麼廣。


為何選擇 C 語言?

  其它還有好多程式語言,為何我們選擇學習 C 語言?程式語言大致分成兩種,低階語言與高階語言。低階語言非常貼近實際電腦所執行的動作,但是對於人類而言相對困難。高階語言則相當貼近人類的語言,寫起來如同一篇文章一樣。

  舉例來說,你今天聘請了四位女僕來為你工作,協助你生活。你想試試他們的打掃能力來決定讓誰打掃。所以你佈置了四個一模一樣的房間讓他們公平競爭。

  你對第一位女僕說,請打掃這個房間。接著他花了十個小時將這房間打掃得無可挑剔,一塵不染。

  你對第二位女僕說,請打掃這個房間。接著他花了兩個小時將這房間大致打掃過,看起來一塵不染,仔細檢查仍有些地方沒打掃乾淨,但是對於生活而言已是相當乾淨。

  你對第三位女僕說,請打掃這個房間。他露出一副困惑的眼神,恭敬地向你詢問各種打掃細節,例如是否要拖地,窗戶要擦哪幾個,等等。並按照你的要求,在半小時內將其全部完美地完成了。但是你發現他並沒有做任何你沒要求的事,比方說你忘了要求的擦桌子。

  你對第四位女僕說,請打掃這個房間。他開始顯得手足無措,你努力了半天後決定開始一步步教他如何打掃,並將如何做各種打掃講得非常詳盡,包括拿掃把的方式、使力的方法以及打掃順序等等。接著你驚人地發現這位女僕用著完美而毫無冗餘的動作,只花了五分鐘便完成了你所教導並下令的所有掃除工作。

  在這個例子中,前兩位女僕便是不同的高階語言。只接受了「打掃」這個曖昧不清的命令,以及「房間」這個不夠詳細的目標對象,便用他們各自的想法猜測你想要的是什麼樣的結果,然後為你工作。他們可能不會想知道你的詳細要求,也不必知道。

  你也可以選擇要求,或是下達比「打掃」更精密但更繁瑣的指令。但他們各種周詳的考慮,可能會使他們做些你預期外的事,也會影響他們工作的速度。你難以預估他們做了什麼樣的考慮。他們可能怕你下的命令會打破花瓶而拒絕或改變做法,但你若對他們了解不夠深入,你會難以預期結果。

  第三位女僕則像是 C 語言,這個比較接近低階語言的高階語言。他無法接受打掃這樣過於籠統的命令,你必須詳細指定各種細節。但是這讓你能夠更深入地控制他們的打掃方式,讓他們做的事情更貼近你詳細的需求。代價就是命令會比較繁瑣、麻煩。

  同時他不會為你考慮太多事情。例如你要求的打掃方式可能會打破花瓶,他只會在時候到時毫無顧慮地打破它。所以他的打掃會更快更簡潔,但你必須更加細心,更加留意小細節。他只會在你的命令使他的生命受到威脅時對你發出警告,若你並不在乎或你認為沒那麼嚴重,他也會老實接受並確實執行,即使會死也做到至死方休。他只會在你提出超出規格的要求時拒絕你,例如要他從原地將硬幣扔到美國之類的。

  第四位女僕就是低階語言了。他們幾乎只學會了最最最最低限度的動作,但是舉手投足之間所有細節,幾乎完全在你的掌控之下。若你對掃除有獨到的心得,可以讓它用最適合你房間的打掃順序與方式,在完全無任何多餘的動作與考量下,可以針對性地獲得最佳的結果。但是若你不那麼熟悉時,你可能必須花相當多時間下指示,而他會用比他人更笨拙的動作,花上更多的時間獲得更差的結果。

  總結來說,這些語言至今仍能並存,主要是因為在各種方面均各有優劣,無法完全取代彼此。優點同時也是兩面刃,必須因應需求做出取捨。

  C 語言雖然入門的門檻較高,但若有心學習,會是相當合適的語言。它在語法上相當嚴謹,寫法上卻又相當寬鬆。正因為寬鬆,你必須考慮更多其它語言不用考慮的事。這些細節你應該知道,然而學習其它高階語言將無法學習到這些事,因為它們幫你處理掉了。因為比較接近低階語言,會更貼近電腦實際的運作,同時不會提供你太多偷懶的指令,你會被要求親自處理,而這能讓你學習更多。

1 則留言: