看到有人说是入门的书,有人说一定要有一定基础才能接触的书。花了一周的时间算是读完了,也做了书中的一些习题。
结论,尽管看上去简单,但这确实并非是一个供人入门的书籍。并且有效治理各种眼高手低。
fopen, fwrite, getchar, strcmp... ...众多耳熟能详函数的实现思路。第一次让人觉得Linux内核近在眼前不是吗(可能有些夸张了= =),剥开神秘外壳,解密了编程语言的内在构成。
请写一个比较两个字符串是否相同的函数。
一个无数次被提出过的面试题。作为一个Java出身的人,看此书之前,如果让我用C语言实现起来就像是让我用关公的大刀切西瓜。
反问之,用Java怎么实现呢,String.equals()无误。但是仔细一想这和直接用strcmp有什么不同... ...题目就是让人实现一个strcmp啊。
上周的时候和一个朋友争论,制作项目使用的底层框架时是彻底封装做的简单易用还是尽量让框架对外接口表现出核心实现时的模样?
我想,所有人,所有的教科书几乎都会选择前者。
为什么我要提出这样的问题呢。
过多的使用开源库,框架,已有模块,开发人员的技术要求越来越低,当然了,这是好事。但是就像是很多人开始反对Google搜索式学习一样,有时候也需要唱一唱反调。技术人员被封装好的实现蒙蔽了双眼,在我看来,计算机软件开发的基础就像是巴别塔一样越磊越高。高到了人们已经开始遗忘最底层的基石是如何一块一块累积起来。
眼高手低便是如此吧,认为自己会了,实际上不过是一个会用工具的猴子而已。(其实coder都是猴子的说法应该就有如此的影射意味,不过起码也做一个厉害一点的有自知的猴子好了= =)
数年前我十分反对面试的时候问诸如如何实现一个strcmp的问题。如何实现有什么意义?在现在的工作经历里我也从来都没有涉及到。
现在我的观点稍有改变。虽然观点一样是反对,但反对的原因改变了:这对于一个学生来说太难了。难并非难在实现,寥寥几行而已。难点在于在职者都往往没有这种探寻源码的觉悟,如何来要求一名学生。能答出来也无非就是看了诸如面试宝典之类的书籍而已。技术面试变成唐诗背诵。
看到有人写到,此书让人看的倍感充实。没错的我十分同意,就是这种求根溯源的充实感。不自信来源于心中存在疑问,此书以及习题可以有效弥补心中的疑问。