學習C語言的教材、如何成為一名優秀的C程式設計師、激發程式設計師創意的6本書、國外程式設計師推薦:每個程式設計師都應讀的書
學習C語言的教材
我的C語言是自學的,這些年看過不少教材。
下面,我對其中一些教材做個點評。
1. How to Think Like a Computer Scientist: C version
這是我讀過最易懂的C語言教材。
雖然它只講解最基本的語法,但是寫得特別好懂,深入淺出,讀起來不覺得累,而且它還允許免費下載。我認為,這是C語言的首選入門教材。
上面這兩本,都是著名的C語言初級教材,都是厚厚的大部頭。
我通讀過它們,感覺都寫得不錯,都值得推薦。但是因為這兩本書定位類似,內容重複,相比之下,我覺得可能更適合中國讀者的思維,更易讀一些。
3. C Programming Language (2nd Edition) (《》)
這是最著名的C語言書籍。
但是,它不是寫給初學者看的,更偏重C語言的程式設計技巧和演算法思維。我讀過兩遍,還是覺得很多地方沒讀懂。
4. 國產教材
通常來說,國產教材質量不高,不值得推薦。但是有兩本,我想特別提一下。
,康莉等著,機械工業出版社,2009。
這本是我在圖書館裡偶然撿起來的,翻了幾頁,發現是原創的,而且寫得比較認真,程式碼解釋詳盡,行文錯誤少,就把它讀完了。我認為,在國產教材中,這本書的質量很高,值得推薦。
這本書在國產書籍中罕見地採用了GFDL許可證,
但是,正如前言所說,它的主要資料來源是兩本英語教材《How To Think Like A Computer Scientist: Learning with C++》和《Programming from the Ground Up》,以及一些教師的上課講義,然後拼在一起,做成一本書。所以,造成它的體系比較生硬,缺乏整體感,銜接得不好,很多地方沒有做到由潛入深、循序漸進。所以,我覺得這本書不適合初學者,可以當做手冊查資料。
5. Beginning Linux Programming / 《》
這是我現在正在閱讀的書。我看它在Amazon上排名Linux C程式設計的第一位,就選了它。
它主要講解如何用C語言呼叫Linux的系統API,偏重基本概念的解釋,我已經讀了兩章,感覺還不錯。
下面想聽聽大家的意見。
我現在的C語言,到了這樣一個水平:語法已經基本掌握了,可以獨立開發一些小程式。下一步,我想進一步提高C語言水平,主要用於Linux開發。
大家能不能推薦一些C語言的中級教材?
如何成為一名優秀的C程式設計師
問題的提出
每過一段時間我總會收到一些程式設計師發來的電子郵件,他們會問我是用什麼程式語言來編寫自己的遊戲的,以及我是如何學習這種程式語言的。因此,我認為在這篇博文裡列出一些有關C語言的最佳讀物應該能幫到不少人。如果你知道其它的優秀讀物,請給我發郵件或者直接在評論欄中告訴我吧。
問題的解答(你可以略過這部分)
我在之前的一篇博文中已經提到過了,目前為止,所有我所編寫的商業3D引擎95%都是C89(也稱作標準C,或ANSI C)。我之所以選擇C89而不是C99是因為有些編譯器仍然不能完美支援C99標準。而且從第一天起,我就強制規定遊戲需要能在iOS、Windows和Xbox 360平臺上都能編譯。根據我所選擇的編譯平臺,剩下5%的程式碼是Objective-C(iOS)或者C++(Windows,Mac OS X),這是為了將引擎繫結到原生的輸入/輸出裝置上。沒想到的是,選擇C還是C++這個主題在reddit曾上引發了很大的爭議。我選擇C的兩個真正原因是:
● 我寫引擎時對C++掌握的並不算好。平臺資源非常有限(iPhone 2G),而且我知道我得對我的工具(程式語言)相當熟悉才能使遊戲達到每秒60幀的速度。
● 因為我研讀過id Software(著名遊戲製作公司,Doom系列、Quake系列是其代表作,開創了FPS型別遊戲的先河)釋出過的原始碼,用純C完成一個商業遊戲是我的夢想。
這算是“好”的選擇嗎?我想,到最後唯一合理的問題是:“你的遊戲釋出了嗎?”以及“它跑的夠快嗎?”看看那令人難以置信的幀速吧(有人提到在玩Shmup時會有眩暈的感覺),我想我做了正確的選擇。
糟糕的C讀物(不要忽略這一段)
我將以一些我認為不必太認真的讀物說起:網路教程,部落格以及大部分Google上得到的東西都算(沒錯,也包括我這篇)。通常我認為這些資料來源是不可信的,而且有潛在的危害。和這一行裡大部分人一樣,我曾是重度Google搜尋使用者。過了一段時間之後,我發現不準確的答案反而對生產力的提高有反效果。這讓我有了一種速度上的錯覺:答案找的越快,活幹的越慢。沒有什麼網站會比一本好書更有價值,沒有什麼好書比反彙編輸出更有價值。
優秀的C讀物
《C程式設計語言》,又稱 K&R C。這是你應該首先去看的有關C語言程式設計的經典著作。讀這本書會很輕鬆,它只有272頁,386幅插圖。由C語言之父Kernighan和Ritchie親自編寫的短小且有清晰解釋的程式碼示例遍佈全書各個角落。在剛開始的幾周裡,所有你需要了解的有關C語言的知識都在這裡。這本書讀起來很有趣,主題都比較短小,而且可以使你很快上手。你可能會跳過附錄A(有關C語言中比較晦澀的陰暗角落,比如型別提升、 型別轉換、型別退化以及其它一些無用的東西)以及有關C標準庫的附錄B。我認為剛開始學習C語言時,這些就足夠了。這本書使C顯得很嬌小、簡潔,因此強烈推薦學習這本書。
如果你繼續學習並堅持練習,很快你就會觸到一些詭異的情況,比如下面的例子:
1 2 3 4 5 6 7 8 9 10 11 12 |
unsigned
int
ui_one = 1;
signed
int
i_one = 1;
signed
short
s_minus_one = -1;
if
(s_minus_one > ui_one)
printf (“-1
> 1 \n”);
if
(s_minus_one < i_one)
printf (“-1
< 1 \n”);
#./run
#
#
-1 > 1
#
-1 < 1
|
在上面的程式碼示例中,由於整型提升的緣故,-1先被計算為大於1,然後又小於1。C語言裡有很多這種陰暗面,此時將產生不正確的結果。
這裡還有許多細節之處:
1 2 3 4 5 6 |
extern
void
foo( void );
void
(*f)();
f
= &foo; //
合法
f
= foo; //
同樣合法!(語法糖)
f();
//
呼叫f
|