Chinaunix

标题: 麻辣教材——论C语言技术书籍的等级 [打印本页]

作者: starwing83    时间: 2012-06-24 21:56
标题: 麻辣教材——论C语言技术书籍的等级

    恩,好多人吵架,貌似大家对哈希表神马的不太感兴趣哈,那我也来开个吵架楼好了
~~哈哈

    其实我发现,争吵一般是这么开始的:

        A: 这本书不错
        B: 这本书是垃圾,完全不通
        A: 谁说的,虽然有小问题,但是瑕不掩瑜嘛
        B: 第xxxx页有个错,第xxxx页还有个错……
        ……

    然后争吵就开始围绕着错儿了。

    以前我说过我对好教材的理解,但是看来仅仅发表对“好”的理解是远远不够的,所
以这里说说我教材等级的理解。

    首先当然复述一下我对最好的教材的理解了~

* 神级/圣经级教材

    语言幽默不是必要的,必要的是概念的清晰和准确。就是说,这本书能回答你这样的
问题:C语言是什么?为什么要发明C语言?为什么C语言是现在这个样子的?C语言内部一
脉相承的**精神**是什么?

    回答了这些问题的教材本身是有“主心骨”的,意味着,这本教材的作者本身对C语
言有着庖丁解牛般的了解,这样的教材肯定不会有脑袋长屁股上的这种大错误,也许有些
小毛病,但是瑕不掩瑜,这种教材的缺点也特别明显:因为语言十分精确,所以看的时候
会觉得很不好玩。这不要紧,你可以按照逻辑的顺序,将这种教材当作**侦探小说**来读
。学习C语言的时候,推荐阅读这种教材。当然如果你不太希望侦探小说的话(额,不喜
欢逻辑那学计算机干嘛?早点转销售吧= =),下面还有几个类别可以给你选择。

    这样的教材,额,虽然我没看过,不过应该是的吧,K&R的《C编程语言》。其实如果
说Lua的话,PiL基本上就是这种教材了。不过只是个“次神级”,因为你要花很大的功夫
才能挖掘出其中对Lua哲学的态度。这方面可以看Lua的 reference manual(额,我怎么
开始推荐Lua教材了= =)。C++的话,《C++模板完全指引》就是模板类的圣经。

* 圣器级/后天灵宝级教材

    这个等级的教材就不如神器级别的大而全了,但是他的“器灵”依然是神器级别的。
即这个教材的作者对C语言的理解依然是正确的(至少大方向是正确的)。这种教材的语
言开始比较幽默的,逻辑性也不会特别强,他们通常阐述语言的某些方面的知识。优点在
于深,而不是广。但是因为有了正确的大局观,阅读这些教材也有一定的几率能领悟C语
言的哲学,只是没有圣经级的那么显著罢了。

    这种教材优点就是开始比较好玩了,不那么枯燥,而缺陷自然就是对C语言哲学的阐
述开始暧昧不清——这主要是广度原因造成的。他就像悬疑小说,引人入胜而逻辑性就没
有那么强了,不过总的来说还是可以看的。这个级别的教材应该有《C专家编程》,《C陷
阱与缺陷》这些,也都是好书。

* 法器级/灵器级教材

    这个等级的教材的作者对C语言的理解大局观上可能是正确的,然而因为其他语言经
验的混杂,作者对C语言的理解有一些其实是和C语言哲学相悖的。这个系列的教材无论是
广泛型的,还是深邃型的,都感觉有些偏离C语言的本质了,在这方面给人以暧昧不清的
感觉。对广泛型的书来说,这种教材容易让人陷入到无穷尽的语法迷宫当中,而对于深邃
型的教材来说,又容易让人误入歧途。不过既然作者在C语言的理解上没有下工夫,那么
这个教材本身就是比较易读的了。然而论语言幽默性肯定是不及圣器级的教材,论精确度
的也不及神器级别的教材,属于鸡肋虽小,食之无味型的。实在是……额……

    这类教材倒是可以当做词典来读,总所周知,词典读起来可不舒服,但是如果你真的
啃完了一本词典那你也就很牛逼了。如果非要用小说举例子的话——额,最近看了一本《
唐笑》,勉强可以代表这种教材的风格吧。就是特别特别纠结的言情类小说(当然,《唐
笑》我没看完,不过原因倒不是感情剧纠结,是对作者的炫富文风忍无可忍了……)

    反正,蚊子腿虽小,但是也是勉强及格的。如果要举例的话,键盘农夫的《狂人C》
,或者《Linux C一站式学习》勉强可以算吧。说勉强的意思是,《狂人C》算是法器级的
极品了,只是其中对于C的原理级的东西描述过少,理论性不够。而Linux C则是勉强达标
,主要是没有犯什么常识性的错误。其实这个层次的教材说白了,就是缺少对语言原理级
的描述,这是最大的缺陷了。

* 凡品级/普通级教材

    欢迎来到人类的世界~恩,凡品级的教材,从级别上来说,基本上已经算是“不合格
”了。不过也不是完全不能看,以小说举例,这种教材基本上就是属于那种散文型的小说
,可能有一些小资情调,但总的来说看起来不爽。

    凡品级的教材的作者因为运气好,大方向没错,但是也有一定的偏差,这种偏差出现
在两个方面:要么是对原理级的东西理解过浅以至于很多东西自己都不知道,更别提描述
了。要么是根本把原理理解错误了(什么说C语言是汇编式的语言什么的),这一类就是
属于走火入魔型的。能到凡品已经很不错了。

    凡品级的教材基本上很难举例子,因为这个级别基本上是“幸运”的代名词,对原理
级的东西理解不对,却能写出无大错的书,这只能说作者运气好了。市面上没有犯大错的
《C语言案例分析》什么的这种书应该勉强算。其实我觉得这种书有小资情调的看看也行
,拿来混饭吃那是害人害己,还是免了吧。

* 次品级教材

    恩,重点来了……

    是的,今天主要就是想说说次品级的教材。为什么会有次品级别呢?因为作者的
**自以为是**,教材作者本身对原理级别的东西完全不理解,却排资论辈宣扬自己做过多
少多少年开发,卖出去过多少多少本BASIC书什么的。我不得不说,您如果想混着,在IT
行写十年的Hello World都没什么问题,出书还是免了吧。之前做一跨平台的手机网游,
技术层面最复杂的一个算法居然是排序,你可以想象真正的产品级的东西技术是多么贫乏
了。不是说做出产品就是技术牛人,我现在是越来越感觉到,技术好坏和产品好坏真没多
少关系,你代码写的再难看,人家最终用户也未必会看你的代码。(咳咳,好像扯远了…
…)

    恩,总的来说这类人有两种,一种是走火入魔了还以为自己站在康庄大道上的,我将
其划分为“心魔入侵”型的,另一类直接就是为了赚钱而写书,纯粹属于商业行为。至于
哪类人分别代表是谁我就不说了,大家自己对号入座~~

    我觉得,怀疑精神是一个ITer最重要的东西,你得怀疑那些规则,既然有怀疑,就会
去理解,理解本身就是一种学习。最后你一定能得到一种原理级的东西,你会去追求写
native style的C或者Lua或者Python或者Scheme,而不是写C++式的C,或者Java式的Lua
。你会慢慢去了解一门语言做出的哪些取舍,他们的哲学和文化。也许语言是工具,但是
工具本身也有工具的风格。是医生都希望有把金手术刀,拿着菜刀上手术台的……额……
自己去想象吧。

    让自己和编程语言达到一种天人合一的地步,培养自己对语言的“语感”,了解语言
的风格。这些也许不会对产品有什么直接帮助,但是这些能极大地提高你解决Bug和制造
可维护代码的本领。这些可是对升职很有用的哦。除了有怀疑精神以外,你还需要一颗不
浮躁的心。要记住,你活着就已经是奇迹了,那些压力都是浮云。保持真正的你,别被别
人影响。不以物喜,不以己悲。金子无论发不发光现在都得200多一克,总有一天你会把
自己卖给对的人(呸呸呸我都在说些神马……)

    恩,好吧,诸位来拍砖吧~哈哈哈哈

召唤群雄:@mirnshi @KBTiller @OwnWaterloo @pmerofc@三月廿七@wwwsq@zylthinking@塑料袋


作者: starwing83    时间: 2012-06-24 22:08
5555555555我发的吵架帖似乎都没啥效果………
作者: pmerofc    时间: 2012-06-24 22:10
提示: 作者被禁止或删除 内容自动屏蔽
作者: 三月廿七    时间: 2012-06-24 22:12
回复 2# starwing83

之前做一跨平台的手机网游,
技术层面最复杂的一个算法居然是排序


哈哈, 我很久以前就发现了   
作者: pmerofc    时间: 2012-06-24 22:17
提示: 作者被禁止或删除 内容自动屏蔽
作者: starwing83    时间: 2012-06-24 22:23
回复 3# pmerofc


    人家比较矜持嘛……

语言太过极端了很容易被人抓痛脚的……(比如说你……)
作者: starwing83    时间: 2012-06-24 22:24
回复 4# 三月廿七


    额,你就关注了这个么……
作者: pmerofc    时间: 2012-06-24 22:26
提示: 作者被禁止或删除 内容自动屏蔽
作者: starwing83    时间: 2012-06-24 22:28
本帖最后由 starwing83 于 2012-06-24 22:29 编辑

回复 8# pmerofc


    额……具体哪/里/有/理解困难呢?太过抽象了?

为什么哪/里/有变成**了??
作者: pmerofc    时间: 2012-06-24 22:42
提示: 作者被禁止或删除 内容自动屏蔽
作者: OwnWaterloo    时间: 2012-06-24 22:46
回复 1# starwing83

C++喜欢写成C式的飘过……

starwing83 发表于 2012-06-24 21:56
你可以想象真正的产品级的东西技术是多么贫乏了。不是说做出产品就是技术牛人,我现在是越来越感觉到,技术好坏和产品好坏真没多少关系,你代码写的再难看,人家最终用户也未必会看你的代码。(咳咳,好像扯远了……)

有人中枪么?

作者: 三月廿七    时间: 2012-06-24 23:22
只用C++ STL 的 map, vector, set 的飘过
作者: OwnWaterloo    时间: 2012-06-24 23:27
回复 12# 三月廿七

STL这么搓:http://bbs.chinaunix.net/thread-3734540-1-1.html
表用表用。
作者: 三月廿七    时间: 2012-06-24 23:30
OwnWaterloo 发表于 2012-06-24 23:27
回复 12# 三月廿七

STL这么搓:http://bbs.chinaunix.net/thread-3734540-1-1.html

别人都用 STL,我没必要搞的那么特殊...
作者: 三月廿七    时间: 2012-06-24 23:39
本帖最后由 三月廿七 于 2012-06-25 00:01 编辑

我见过有些人用 STL 还看过很多书
11.  泛型编程与stl                    介绍了STL的实现原理
22.  STL源码剖析                      STL剖析下也无防
31.  STL扩展技术手册                  STL的境界就是使用,剖析,扩展。
21.  C++ template中文版               STL的使用
纯傻B一个,

+// C++喜欢写成C式的飘过……
+你干吗不直接写 C ?, 脱裤子放屁很好玩吗?,是不是直接一点,你看的那些C++书都一文不值了
+你还想用 C++ 挽回一点优越感吗?

作者: pmerofc    时间: 2012-06-25 00:38
提示: 作者被禁止或删除 内容自动屏蔽
作者: OwnWaterloo    时间: 2012-06-25 01:35
回复 15# 三月廿七

因为C有不足的地方。不过对于你这种只靠TIOBE来评价语言的人来说,是没资质体会到了。

至于C++的书,我倒是没兴趣炫耀自己看过多少,因为我个人不认为看的书多能代表什么。实话实说,非炫耀,确实看过不少。
倒是你经常鄙视那些喜欢开书单子的。
你将这个看得很重?因为自己没悟性兴趣看懂这么多,所以其他看懂了的人一定是傻x?嫉妒能不这么露骨吗,好酸哦。

至于优越感,在你面前从没丧失过,挽回又是从何说起?
作者: 三月廿七    时间: 2012-06-25 07:37
OwnWaterloo 发表于 2012-06-25 01:35
回复 15# 三月廿七

因为C有不足的地方。不过对于你这种只靠TIOBE来评价语言的人来说,是没资质体会到了 ...

C 是最近才排到第一的,以前是Java,

作者: huxk    时间: 2012-06-25 09:54
好文--我喜欢。
作者: 狗气球    时间: 2012-06-25 10:22
总觉得什么地方写得有点拖沓累赘。
作者: 塑料袋    时间: 2012-06-25 11:01
starwing83 发表于 2012-06-24 21:56
召唤群雄:@mirnshi @KBTiller @OwnWaterloo @pmerofc@三月廿七@wwwsq@zylthinking@塑料袋


我以后不没事就跑C版来打架来了,你也别再让我讨论了,别再提我了。

我不想和以pmerofc为代表的那些人相提并论。
我这些年一直苦练真材实料,而标准派众小丑一个个不学无术,我和他们争论,无异自取其辱,事实也证明了这点。

作者: starwing83    时间: 2012-06-25 11:14
回复 20# 狗气球


    诶?提点意见?
作者: 狗气球    时间: 2012-06-25 11:18
回复 22# starwing83


    我想了想,应该不是你的文章写得不好。
   看过头两级讲好书的部分之后往下就看不下去了。
   估计是我的问题,既然知道了好书如何为好,就不大想看不好的书如何不好了。
作者: mirnshi    时间: 2012-06-25 12:56
很惭愧,没有完整地看过一本C编程的书。不是觉得自己对C掌握的非常熟练,而是觉得没有什么值得关注的。至于代码和程序,代码是给程序员看的,程序是给用户看的。计算机对代码风格、冗余之类不在乎,在乎的是人。

C实在是太灵活了,每个人写程序,时间长了,都会或多或少的带有自己的风格,很多情况下这种风格没有什么优劣之分的。比如纠缠memcpy和strncpy的使用。如果按照某人打假的思路,混用bcopy和memcpy一定不是一个人写的代码,

只会C的语法,将表达式分析的来去自如,对于编程来讲还是不及格。C的语法很简单,但熟练使用各类函数,尤其是POSIX的尤为重要。如果写C程序不考虑计算机资源的使用,也只能说明这个人不会写程序。写程序不是代码的堆砌,而是能够写出有所为而且有所不为的程序。
作者: mirnshi    时间: 2012-06-25 12:59
回复 1# starwing83

hash其实没啥好讨论的。不是搞数学的,hash的算法也只能拷他人的研究成果。怎么用hash就是不同的场景用不同的结构而已。
   
作者: chinesedragon    时间: 2012-06-25 13:14
我发现近两年没有看过书了
作者: KBTiller    时间: 2012-06-25 13:51
starwing83 发表于 2012-06-24 21:56
恩,好多人吵架,貌似大家对哈希表神马的不太感兴趣哈,那我也来开个吵架楼好了
~~哈哈

神级/圣经级中
我觉得Plauger的《C标准库》应该有一个位置
作者: zylthinking    时间: 2012-06-25 13:59
starwing83 发表于 2012-06-24 21:56
恩,好多人吵架,貌似大家对哈希表神马的不太感兴趣哈,那我也来开个吵架楼好了
~~哈哈


秋风吹拂离别时节, 远去的人平安
作者: KBTiller    时间: 2012-06-25 14:19
回复 1# starwing83


《狂人C》算是法器级的极品了,只是其中对于C的原理级的东西描述过少,理论性不够。

承蒙缪赞
不胜惶恐
多谢您的宝贵意见
在下一定努力改进
作者: mirnshi    时间: 2012-06-25 14:44
KBTiller 发表于 2012-06-25 14:19
回复 1# starwing83


没注意到这句话
《狂人C》算是法器级的极品了,只是其中对于C的原理级的东西描述过少,理论性不够。


《狂人C》倾向于初学者的,KBTiller对吧?
语言的原理,难道要弄编译原理?还是拆开揉碎,分析表达式如何用底层实现的?

《狂人C》,建议再版:
1. 不妨仔细构思习题,通过这些习题能够使初学者融会贯通各个知识点。
2. 不妨增加一些不同的开发环境的使用,编程技巧和常识,比如函数的使用,内存泄漏的注意,后台程序的写法。

这样是不是可以帮助初学者比较容易地进入到某个开发环境,写一些程序?
作者: KBTiller    时间: 2012-06-25 14:56
mirnshi 发表于 2012-06-25 14:44
《狂人C》倾向于初学者的,KBTiller对吧?

《狂人C》的一个出发点确实是假定读者为0基础

《狂人C》,建议再版:
1. 不妨仔细构思习题,通过这些习题能够使初学者融会贯通各个知识点。
2. 不妨增加一些不同的开发环境的使用,编程技巧和常识,比如函数的使用,内存泄漏的注意,后台程序的写法。

1.的建议很好,应该说和我的想法不谋而合。习题的构思很重要,但也很搭功夫
2.同样是很好的建议。但我目前感觉有点难度,当时用DEV-C++也是经过反复权衡的。究竟增加哪些开发环境我现在心里没数,你有什么好的建议?
“编程技巧和常识,比如函数的使用,内存泄漏的注意,后台程序的写法”,这几条也不错,我回头再仔细考虑考虑内容上如何进行组织
作者: mirnshi    时间: 2012-06-25 15:24
回复 31# KBTiller

选择DEV-C++,更多的考虑是开发环境的搭建问题吧?windows上相对容易的就是DEV-C++了,个头小,容易上手。其实,还有些集成开发环境,比如微软的Express版本,好像是可以免费下载使用的,另外还有Eclipse。初学者使用这些IDE上手比较快,不妨都介绍一些。

如果能增加一些篇幅介绍GnuMake,就可以增加Linux的开发环境,最差可以增加Cygwin了,Cygwin安装也非常简单的。只有Makefile才能体现出工程的概念,单个文件是无法体现的。
   
作者: starwing83    时间: 2012-06-25 15:27
回复 27# KBTiller


    恩~值得考虑~我去看看,不过这本书并不是那种以广为主的书,所以算圣器级吧。其实第一和第二没有啥区别。仅仅是深度和广度的区别而已,其实他们都是好书~
作者: www1862    时间: 2012-06-25 15:29
各位大牛推荐基本书呗 C++ 的,感觉还在门外啊。
作者: starwing83    时间: 2012-06-25 15:37
回复 30# mirnshi


    不不不,其实这里我没说清楚,我说的是语言的原理,而不是编译器的原理。其实就是说故事。说明这门语言看中的是什么,比如c语言是一种低层友好的通用高级编程语言,那么他哪方面体现了其低层友好的特点?哪方面说明c语言是通用的?哪方面说明他是高级语言?这些都是可以解释的原理级别的东西,比如你可以说明c语言的为什么要有类型系统,为什么要用现在的方式声明等等,就是说,以原理为主心骨将知识串起来讲。
作者: 三月廿七    时间: 2012-06-25 20:52
塑料袋 发表于 2012-06-25 11:01
我以后不没事就跑C版来打架来了,你也别再让我讨论了,别再提我了。

我不想和以pmerofc为代表的那些 ...

认输了,?
作者: 三月廿七    时间: 2012-06-25 20:55
本帖最后由 三月廿七 于 2012-06-25 21:13 编辑

如果 c 教材不和面向对象挂钩,基本上已经失去意义了.
哦,还有数据结构. 其他老调重谈的知识真没什么好讲了.

可能你的细节把握的比谭浩强好,但是呢,没有人愿意记住这些细节,人们都喜欢从宏观上看待程序
从本质上说,楼主列举的这些书我觉得没有什么区别,有的只是谁更靠近标准而已

所以,一本合格的c教材一定要有两样东西:面向对象 + 数据结构
这样,才好和Java/C#抗衡, 拿着 if/else 去拼,谁鸟你啊 ,!
作者: starwing83    时间: 2012-06-25 23:48
回复 37# 三月廿七


    哥哥……首先你对语言的“感觉”要对,其次才是作文。

类比英文。首先是练习你对英语的“语感”,让你能感觉出来”恩,这句话好像不太自然“,然后才是作文。这时才去学什么描写叙述什么的。你语感都没有,写出来的自然不像英语,你作文技术再好,看上去的也是Chingish
作者: gotojyh    时间: 2012-06-26 10:13
C++ primer
programming principles and practice using c++

属于哪类
作者: starwing83    时间: 2012-06-26 11:47
回复 39# gotojyh


    额,其实这里主要说的是C方面的书籍。C++嘛……哈哈今天天气真好……
作者: KBTiller    时间: 2012-06-26 12:34
回复 37# 三月廿七


    是在说我的书么?三月廿七网友也看过我的书?
作者: 三月廿七    时间: 2012-06-26 12:58
回复 41# KBTiller

你的书那么有名气, 肯定看过啊 ,
   
作者: KBTiller    时间: 2012-06-26 14:14
回复 42# 三月廿七


    不胜荣幸,欢迎多提宝贵意见
作者: lwf_software    时间: 2012-06-26 15:54
C语言程序设计现代方法  这本书入门怎样
作者: nketc    时间: 2012-06-26 23:00
在我看来《狂人c》很不错了。
作者: nilgod    时间: 2012-06-27 01:18
今天在最后离开成都之前去了春熙路,结果是身中剧毒,差点被秒,估计一时半会是没法解毒了。

一句话:绿衣白裙春熙路,那人是件艺术品。



作者: nilgod    时间: 2012-06-27 01:30
你们这些人,都是笨蛋。唉,绿衣白裙春熙路,去多少次都不为过,这是一个bug。。。
作者: 三月廿七    时间: 2012-06-27 07:46
nilgod 发表于 2012-06-27 01:18
今天在最后离开成都之前去了春熙路,结果是身中剧毒,差点被秒,估计一时半会是没法解毒了。

一句话:绿 ...

怎么回事 ?
作者: nilgod    时间: 2012-06-27 10:18
回复 48# 三月廿七


    我一说解毒,立马就想到pm的帖子,而非其他,看来中毒已深。

完全不能理解生活中那么美好的存在
作者: KBTiller    时间: 2012-06-27 12:09
nketc 发表于 2012-06-26 23:00
在我看来《狂人c》很不错了。

谢谢        




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2