这本书不是我的茶_系统程序员成长计划书评-查字典图书网
查字典图书网
当前位置: 查字典 > 图书网 > 编程 > 系统程序员成长计划 > 这本书不是我的茶
[已注销] 系统程序员成长计划 的书评 发表时间:2010-05-05 00:05:06

这本书不是我的茶

看作者自序里的目标读者群,也许我不能算在其中。不过,这本书我是怀着一种追星族的心态买的,我可以说是在李先静老师的影响下才进入移动开发这个行业的。我毕业后,一直是做windows桌面app的,后来天天在google reader上看李老师的blog,感觉是发现了一片令人激动的新天地,咬咬牙,离开了那个猪圈似的外企,进入了移动开发的行业。

所以,我几乎是第一时间就在china-pub上购买了这本书,每天晚上睡前读一读,今天算是读完了。不过,我却感觉到有点小失望,可能这本书并不是我的茶吧。

这本书有很多优点,语言流畅,全面地覆盖了系统开发的要点部分,该讲的都讲到了,重点也很突出,着力写了状态机的应用这样的关键点。总之,这本书和李先静老师人给我的印象一样,就是两个字,靠谱。

另外一面是,我是个看书不大仔细的人,也发现了几处有点可疑的地方,有些自己的意见。

p45,对assert的使用,我一直认为,assert用于断言绝不可能发生之事,所以有assert,就不应该再用运行时检查。发布版本中不打开assert,就是因为开发人员至少再把他认为绝不可能发生之错误全部排除掉。

 p57,快速排序不是不需要额外的空间的,递归时在栈上保存状态也是空间消耗,我觉得这个只是看的角度的问题,但是如果定位是初学者,也是写清楚为好。

p75,最下面单线程版本和多线程版本两个序号写反了吧。

第十章那个xml解析器,我看到几个if ... else 中的 else 是写的 else {},我想,虽然大家都知道这里应该放错误处理(后来我下了随书代码,这里的确写了错误处理),但是还是加个注释说明吧,这样空在那里,多难看。

最后还有一点我最不满的,就是整本书里附带的例子代码,缩进都十分混乱。我最讨厌看没有格式的代码,所以我开始还读得比较认真,后来就没有什么心情了,我理解这是把代码直接粘贴到word文档的结果,但是编辑同学,你这是出书啊,麻烦专业点好不好。

最后说下这本书的整体感受,国人写的技术书大多是这个范儿,有点料,但是又不是太多料。你可以学到一些东西,但是又不可能学到很多东西。整本书是一个经验传授+知识点滴的结构,也不方便拿来当字典。不过李先静老师已经说了他的书是面向初学者,是给那些最早一行程序也写不出来的同学的培训材料,我买来看明显是自作多情了。

展开全文


推荐文章

猜你喜欢

附近的人在看

推荐阅读

拓展阅读

对“这本书不是我的茶”的回应

泊泉 2010-08-20 00:26:35

我也倾向于书上的,其实assert用来表示绝对不可能发生的事没错,不过有的时候,我们在软件发行的时候也不敢拍着胸脯打包票说,“嗯,我们已经测试过了,这里绝对不会出现这样的情况”,所以为了保证程序的正确运行,最好还是加上错误处理,而assert则是帮我们在开发测试阶段即使发现那些导致不应该不可能的情况

[已注销] 2010-05-06 16:25:30

嗯,我觉得不应该再加检查,我的理解是assert和if (...) {...}这样的检查不能并存。

只有malloc这样的情形才可以用if (...) {...} 来检查

broncho 2010-05-06 10:13:55

”使用断言来断言关于代码结构的条件式,而不要断言关于运行期行为的条件式“ 呵,坦白的说,我看不懂这句话。
你是说书中不该调用assert,还是说assert后面不应该再加一个检查?
malloc的返回值,是可能为空的,当然不能用assert来检查。但assert(thiz != NULL);是对函数参数的检查,是检查不应该出现的情况,为什么不能用?

[已注销] 2010-05-05 19:33:01

感谢作者亲自的回应。

我对断言使用的认识最早来自<Imperfect C++>的1.4节,中文版p21的建议”使用断言来断言关于代码结构的条件式,而不要断言关于运行期行为的条件式“。

回到你书上的例子,assert(thiz != NULL);我觉得这里就不应该有运行时检查,除非你认为thiz == NULL这种情况是运行时可能出现的,比如下面这种情况。
thiz = malloc(...);
if (thiz == NULL) // 这里就不能用assert了
return ErrorCode;
assert的理念就是,发生了不可能发生的事,那么就让程序崩掉。我认为这种情况下让自动测试停止也是情有可原的。assert我觉得并没有相像的那么有用,所以你后面也弃用了assert。同样,assert也不是异常的替代,只是种调试机制,C中可以用setjmp和longjmp来实现异常机制,可以参考《c接口设计与实现》和lua的源代码。

broncho 2010-05-05 10:43:32

呵,先谢谢你非常中肯的意见。
p45: 对于assert的使用,我偏向于保留书上的意见。
p57:这个确实是考虑问题角度不同,我说的额外的空间是指用来存放数据本身的空间,这没有在书中说清楚,希望以后有机后改正。
p75:这是错误,在这次重印中已经修改了。
else {}的问题确实不应该,当时只考虑了如何把原理讲清楚,没有往这方面想。
至于排版的问题,都我怪了,第一次出书,我不知道编辑对代码排版一无所知,结果搞成这个样子。在这次重印做了一些修改,比第一次印刷好很多(仍然有些问题)。
你方便的话,等重印版出来,寄一本新书给你吧。
再次感谢!
已知错误请参考:http://code.google.com/p/spexamples/issues/list