作者 主題: 給想在 Linux 下學習 C 的初學者  (閱讀 9467 次)

0 會員 與 1 訪客 正在閱讀本文。

被騎上班的老

  • 酷!學園 學長們
  • 活潑的大學生
  • ***
  • 文章數: 360
    • 檢視個人資料
給想在 Linux 下學習 C 的初學者
« 於: 2007-09-19 05:06 »
很痛,對吧. 四處碰壁、找不到答案。逛遍了書店,查遍了 Google, Yahoo 還是沒辦法解決你的疑問。別灰心,我也是一樣。更慘的是,我唸書的時候還是網路剛剛起飛的 1994 年。我畢業後一年中華電信才開放個人申請撥接上網,或許現在已經沒有人知道什麼叫做撥接上網了。

寫這篇文章主要是給初學者一個概念,有了概念之後才能知道力氣要出在什麼地方,或者說有了目標之後才不會往空氣上揮空拳,最後落得精疲力盡、意興闌珊然後絕口不再提 C。

1. 什麼要在 Linux 或 UNIX 下寫程式?

這個網路上很多討論我也不在這裡多做解釋。我只是提一點我自己的理由;那就是程式的壽命很長,十年前的程式拿出來在新機器上重新編譯後,幾乎不需修改就可以用了。像 ls 這個指令已經 30 幾歲,從1970 UNIX 誕生時這個指令就存在了,到今天還可以用。

2. C 的範疇

UNIX 就是用 C 寫的,所以 UNIX 系統上的範圍幾乎就是 C 的範圍。我簡單分成下面幾塊: 基本程式、系統程式 和 硬體程式(例如 核心、驅動程式)這三個大類。

3. 學習路程 ROADMAP 第一步

所謂 基本程式 指的是使用到標準函式庫的程式。例如印出 99 乘法表,最常見就是列印出 Hello, C 這個初學者第一個程式。

所以初學者第一步就是找一本初學者的書然後照書打程式、編譯、除錯。

這個階段主要目的有幾個;熟悉 關鍵字、程式架構、語法、輸/出入以及編譯器的使用。當然最重要就是除錯,除錯除了需要經驗的累積之外,錯誤訊息 100% 是英文。所以英文能力不好的,會遇到很多挫折。不過以我的經驗,不要怕那些英文訊息,咬著牙,翻翻字典了解它的意思之後,編譯器會說的就是那幾句,不會比鸚鵡說的還多

4. 學習路程 ROADMAP 第二步

當你可以編譯程式成功之後,你需要熟悉有哪些工具可以用,也就是需要一本 標準 C 函式庫。想要什麼功能的時候,先翻翻看函式庫有沒有。像我上廁所的時候就是我看函式庫的時候。所以有人說上網看就好了,但是如果你有心要學程式不妨買一本放在身邊。當然,要切忌一開始就買這本書,這是第二步才需要買的書。

5. 學習路程 ROADMAP 第三步

用大學教育來看,前面所說的就像是 共同科。不管你是哪個系所,都要修的。從現在開始就是 專業科目,也就是看你的興趣或者目標在什麼地方。但是你知道的,專業科目就是原文書比較多,所以基本上英文不好的只能參考中文的書籍。要是你有興趣的那個科目沒有中文書的話,就是請你加強你的英文能力。以我的經驗,如果對一個主題很有興趣的話,語言通常不是問題。

如果你是想寫一些 UNIX 或 LINUX 系統程式,我那時代用的是 Advanced Programing in UNIX Environment,簡稱 APUE。如果想寫網路程式,我們用的是unix network programing。這兩本書都有個特色;就是循序漸進的介紹各個函數然後搭配小程式,只要照著打就可編譯成功。我強烈建議學的人自己打範例程式,不過有時候我也偷懶,去 APUE 的網站下載原始碼以縮短時間。

這兩本是程式設計的書,至於函式庫的書我是直接跟 GNU 買的,就是 GNU C Library Application Fundamentals, GNU C Library System & Network Application.

至於硬體嘛,我個人沒有接觸過,所以也不能做什麼建議。

6. 結論

我覺得老外真的有一套,對於學習的路程非常清楚,相對的在寫書的時候定位也非常清楚。對程式設計這個領域而言會有三種書 tutorial, programming guide, reference manual。 tutorial 用來協助初學者 step by step 迅速的入門。programing guide 用來全方位指導如何撰寫程式,而 reference mannual 用來查詢所有的函數。

但是中文書都是厚厚的一本,叫人望而生畏。有沒有人要依照上面的分類推薦一些書籍?特別是 tutorial 的書,因為對初學者來說這是最重要的一本書。

末了,我不是很有時間編排,如果有人可以編排的好看一些,重新編排或轉載都很歡迎。

kowala

  • 憂鬱的高中生
  • ***
  • 文章數: 123
    • 檢視個人資料
給想在 Linux 下學習 C 的初學者
« 回覆 #1 於: 2007-09-19 22:16 »
我覺得最難的是第一步吧
環境...
如何知道compiler, lib and ....
這些要先知道
能寫一行 "Hello World..."
能順利寫出來就很有成就感了...

stlee

  • 鑽研的研究生
  • *****
  • 文章數: 817
    • 檢視個人資料
給想在 Linux 下學習 C 的初學者
« 回覆 #2 於: 2007-09-20 05:15 »
嗯...初學的話找一本寫"如何操作"很多的(如何寫C的書太多了卻不適合入門)來看然後把他翻爛
(要真的翻到很爛喔..我初學的那本已經分屍X次了...爛了黏好再爛再黏...)
 tutorial就沒得介紹了...這應該自己到書局找因為網路的你看不到裡面的內容是不是你要的
所以去書局慢慢翻,找一本自認為能看得懂,如何操作也滿詳細的(要有10分之1的篇幅吧!!而不是3頁)
除了如何編譯外最好有介紹怎麼編出自定函數庫的而不是"教你怎魔寫C"的書比較適合入門

呼!!出到第三版了@@!--->我買的是第一版的...這本來入門範圍太廣了點所以應該算是programing guide
(裡面有介紹怎麼編出函數庫...寫得挺複雜的>"<)
http://www.books.com.tw/exep/prod/booksfile.php?item=0010269756

居然有這本...不過應該是換個封面而已吧(被這家出版社騙過一次;不過被騙的是系統的書)
http://www.books.com.tw/exep/prod/booksfile.php?item=0010344011
因為這本的日期比較舊(手上有的就這本啦)
http://www.books.com.tw/exep/prod/booksfile.php?item=0010186404

理論的書不可少(這本很像沒賣了...其實還一本姊妹作是說寫零錯誤程式的不過沒買)
如何進入程式設計的專業領域...旗標出版...STEVE McCONNELL著...施威銘研究室譯

值得思考的書也要有(這本居然還有再賣...感恩阿...不知道一不一樣呢)
http://www.books.com.tw/exep/prod/booksfile.php?item=0010202601
http://www.books.com.tw/exep/prod/booksfile.php?item=0010133300

順便說一下...我只去補習班上過一堂(不是一節,是一堂)C語言的課程...其他的...沒其他的了

代碼: [選擇]
編譯器會說的就是那幾句,不會比鸚鵡說的還多
呵呵...我英文也沒比鸚鵡說的還多,錯誤訊息只知道error這一句然後就從他指出的行號去找(不是那行的話真的就靠經驗啦...比如陣列溢位)
取變數名稱就找字典啦
哈...我英文真的不行所以都是一些中文書啦

一點點經驗,參考參考^^!
程式是人寫的,別讓工具的限制成為您想像力的極限
~程式中最重要的部份應該是註解而不是程式碼,這是因為解讀註解一定比解讀程式碼簡單
~程式寫好後約一個月就會忘的差不多了,所以花點時間把註解寫好至少能讓自己(或別人)看的懂當初在寫什麼

被騎上班的老

  • 酷!學園 學長們
  • 活潑的大學生
  • ***
  • 文章數: 360
    • 檢視個人資料
給想在 Linux 下學習 C 的初學者
« 回覆 #3 於: 2007-09-20 07:06 »
引述: "kowala"
能寫一行 "Hello World..."
能順利寫出來就很有成就感了...

沒錯,就是這樣。
至於對 complier lib 這些東西,對初學者而言最好不要告訴他們。我的意思是;只要程式編的出來,compiler 使用跟 ls 的使用沒什麼兩樣,就是打個指令就完成了。

一般來講,初學者的程式不會用到額外的編譯選項和引入特別程式庫。適度的過濾給初學者的內容有助於讓初學者集中精力在 C 程式的撰寫上。

elleryq

  • 區域板主
  • 鑽研的研究生
  • *****
  • 文章數: 908
  • 性別: 男
    • 檢視個人資料
    • Thinking more...
給想在 Linux 下學習 C 的初學者
« 回覆 #4 於: 2007-09-20 08:42 »
"如何撰寫零錯誤程式"

這本我有買,主要是告訴你為甚麼程式不要這樣寫,寫了以後會有什麼潛藏問題
個人覺得不錯的一本書
中文版已經絕版了

可以找原文書, Amazon.com: Writing Solid Code: Microsoft's Techniques for Developing Bug-Free C Programs (Microsoft Programming Series): Books: Steve Maguire
Plan your work, then work your plan.
我的首頁:http://blog.elleryq.idv.tw
351899by http://counter.li.org

stlee

  • 鑽研的研究生
  • *****
  • 文章數: 817
    • 檢視個人資料
給想在 Linux 下學習 C 的初學者
« 回覆 #5 於: 2007-09-20 17:12 »
所以建議初學的話最好去補習班上"一堂"課---->以看病來說就是一個療程不是去門診啦

然後呢...買書----->
挑一個比如進銷存的程式寫(哈!總要有個標的嘛)----->(我還真在一開始學就這麼幹了)
上機實做3個月,每天大概10個小時(每天都會有高潮出現)----->

當然寫出來的東西在以後看來一定是2266的
不過如果你還再去補習班上一堂課時大概聽個兩節(兩次門診)就心裡有數不會再去了

入門...說實在話補習班是個不錯選擇,因為環境問題看書不一定清楚
不過有老師一邊講你一邊做大概10分鐘搞定(能在老師身上多挖一些環境的問題就多挖一些因為有些書上真的不清楚)

比如編函數庫...
以前剛學時只是想能在兩個檔案同時寫一支程式--->老師在下完課臨走前花5分鐘跟我講TurboC的函數庫編法
那堂髁說實在的以當時程度來說都是有聽沒有懂,不過那一班很像只有我有學到編函數庫
(上課時問的不過老師趕進度等到下課後才教,可是大家都走光了)
(一堂課貴貴的,多花個幾百塊買個錄音機錄起來是一定要的)
現在...我自己看書做大概一個禮拜(目前在Linux下)...

以後的路真的是師父領進門修行在個人的階段了----->沒有那種大還丹喀下去增加一甲子功力的東西啦

不好意思!!!囉囉唆唆一堆還是沒講到如何入門>"<

ps."松崗"的書都滿適合入門的(個人感覺啦...書名有寫入門的喔)
程式是人寫的,別讓工具的限制成為您想像力的極限
~程式中最重要的部份應該是註解而不是程式碼,這是因為解讀註解一定比解讀程式碼簡單
~程式寫好後約一個月就會忘的差不多了,所以花點時間把註解寫好至少能讓自己(或別人)看的懂當初在寫什麼

ub901

  • 懷疑的國中生
  • **
  • 文章數: 45
    • 檢視個人資料
回覆: 給想在 Linux 下學習 C 的初學者
« 回覆 #6 於: 2010-10-15 17:26 »
前輩們說得都很有道理,
學習的心態很重要,
我自己要好好改正過來,
原本想說不是本科系,也想先去上課,
老闆說了
入門的,自己書看一看就會,
真正實際在企業用的,
外面和學校都學不到...
繼續埋頭苦幹~~~~~