记得沈向洋(微软杰出工程师)在《编程之美》中说过:它经常出的一道面试题是展示一段自己觉得写过的最好的程序。一段好的程序是一个人编码功底的最好体现,类似,一本由优美的程序组成的教程是教授这门语言的最好方式。在我的阅读经历中有三本书给了我这样的感觉:《The C programming language》《Classic Shell Scripting》《effective c++》。
TCPL这本书给了我很多思考感悟。简单的说,这本书用C语言讲解了unix接口、unix编程文化、编译原理、数据结构与算法。每说明一个语法特性,都用了一个短小精悍的程序来展示Unix-style的编程方法、编程风格。在第6章关于BST的使用(第121页)让我印象很深刻。它先提出一个应用的场景(统计各个单词的出现次数),然后设计相应的数据结构(BST树),再写算法解决该问题。在第8章用C语言实现了三个实用程序:C库函数fopen,getc的实现,目录列表(ls的简化)的实现,内存分配器malloc/free。其中内存分配器的实现有点意思,它用了空闲块链表管理空间存储空间,当申请内存时,malloc会扫描空闲块链表,直到找到一个足够大的空闲块(即循环首次适应算法)。这段代码是最精简的malloc/free实现,如果对内存管理(或者想写一个小型的内存分配器)感兴趣,也可以看看tcmalloc,jemalloc,dl malloc,ptmalloc(Glibc中的默认分配器)实现。
C语言不像C#、Java那样的高层语言,它没有强大、丰富的类库,所以自己学习研究轮子、造轮子是修炼C语言的必经之路。我觉得真正的C语言高手应该实现过一些实用、高效的基础库,或者基于C的infrastructue,写过编译器,掌握linux汇编,理解C程序编译、链接、加载的整个过程。
C语言提供的直接操纵机器的抽象,但使用时也会有一些陷阱。比如字符数组的处理,运算时的数据类型提升。推荐看看《C陷阱和缺陷》《C专家编程》。
学好C语言,必须理解计算机的运作原理。推荐两本好书:《深入理解计算机系统》《程序自我修养-链接、装载、库》。
TCPL是一本值得珍藏的好书,值得阅读多遍。小心仔细阅读,模仿其中的代码风格、体会其中的解决思路,做习题,多实践,会收获很多。
展示好的C语言实践
《C程序设计语言》热门书评
-
K&R的世界
388有用 6无用 sandorf 2007-10-04
B5纸的开本,除去附录,这是一本不到200页的小书。根据我20年的读书经验,图书分类上最大的缺陷之一就是没有首先把书分为两类:可以睡前躺在床上看的书和不能躺在床上看的书——因为很多书太重。绝大多数计算机类书籍属于后者,这本书则属于前一类,传递着一种简单、优雅、平实和闲适。难以置信的是,这样一本C语言...
-
请看C语言圣经!--- 浅谈我个人的阅读体会
154有用 12无用 一笑 2006-04-16
如果你是一个完完全全的编程新手,本书不适合于你---- 你应该先看一本国内的C语言教材,他们虽然泛泛而谈,但至少可以让你了解具备一点最基本的C语言知识,而且不会让你感到太困难---比如潭老师的书(虽然被很多人唾弃)---何况国内的作者最适合写计算机方面泛泛而谈的书籍..呵呵。...
-
K&R
90有用 5无用 shuaiye 2005-09-26
把谭老师的书丢到废纸篓里是唯一正确的选择。科尼汉的书简洁明晰到了极致。我买了能买到的科尼汉所有的书,从《unix编程环境》到《程序设计实践》,没有一本让我失望。伟大的作者,简洁风格的代表,永远的K&R....
-
配套此书的习题集一起看,可功力大增.
59有用 2无用 compactset 2008-07-18
其实第一本c语言书是不是它要看各人功力.要是不会吸星大法, 纵然有高手注入n股纯阳真气, 也练不出九阳神功. 第一遍读此书, 悟性如我这样的, 觉得没有什么收获, 因为自己体质太弱, 突然进补此等无色无臭的高级鸡汤, 实在吸收不了其中的高级营养, 只能...
-
C语言的圣经
39有用 1无用 hcwang 2007-12-05
拿到这本薄薄的书,很多人开始怀疑,C语言是这么几百页能讲清楚的么。看完这本书,我想答案已经很明了,却真的让人感到震憾。什么是好书?无法删减的书才是真正的好书。K&R的书一如C语言的设计理念:简单而高效里面的习题建议都认真做一遍,而且是在linux下用vi来做,用makefile来编译,用sh...
书名: C程序设计语言
作者: [美] Brian W·Kernighan
出版社: 机械工业出版社
原作名: The C Programming Language
副标题: (英文版·第2版)
出版年: 2006-8-1
页数: 272
定价: 35.00元
装帧: 平装
丛书: 经典原版书库
ISBN: 9787111196266