推荐linux c/c++程序员一读

2009-05-20 14:10:40   来自: Fly
程序员的自我修养的评论   4 star rating4 star rating4 star rating4 star rating


  关于《程序员的自我修养》这本书,最初是在和博文的周筠老师MSN上谈起,当时听周老师提及这本书是一本关于链接和装载等系统软件知识的书籍,当时就很感兴趣,因为这方面的书在国内真的见得很少,一方面这种书似乎跟做应用开发的有距离,毕竟如果只是用用C#、Java,似乎没什么必要关心编译器、链接器在做些什么,特别是那么“老土”的C编译器、链接器,另一方面关于这块的知识水比较深,既要有理论深度(得对操作系统、编译原理等有一定了解和学习),又要有工程基础(得实实在在地去研究过GCC、OS,甚至得去读读它们的源码),同时还得有足够的开发经验,至少得有一定在linux上开发系统软件的基础,这样也就难怪很难见到这种“曲高和寡”的书了。
  
  所以当周筠老师最初推荐我读一遍这本书稿,并告知这本书是两个在校读研的学生写出来的,所以第一感觉对这本书并不抱太大期望,担心这本书又会是一堆理论的堆垒。但在我初初翻看这本书、特别是翻到第二、第三部分时,很是惊讶于其中描写的细致,单是看中间用objdump/readelf分析ELF以及用实际案例来分析和解释符号解析和重定位,就会明白这本书绝不是一本只讲“理论”的形而上,于是决定静下心来仔细阅读,并完成周老师布置给我的“任务”(写些对此书的审阅意见)。
  
  仔细阅读后,深感这本书是一本联系理论和工程的桥梁,本书深入浅出地对系统底层机制进行了拨丝抽茧,让读者清晰地洞悉程序的前世今生,作为程序员,作为喜欢刨根问题的程序员,读这本书我想至少有两个好处,其一自不必说,一本让你洞悉系统如何链接、装载的优秀图书总是可以让你学到很多东西的,其二则在于,本书作者在写作本书中反映出的认真、执着,以及从小处着手的分析阐述方法,委实让我等值得学习,看书中若干的实例和图表,就可以明白作者在写作过程中的心血(听周老师提及这本书是俞甲子等花费两年时间原创)
  
  或许有人会说这本书有点太底层了,对于普通程序员的日常工作好像没什么价值,这里我想举个自己的例子来证明理解系统底层的概念是多么重要。当时我们项目(linux平台,gcc开发)中使用到一个第三方library(没有source code),我们的项目是在RHAS4(gcc3.4)上编译的,而library是在Redhat9(gcc2.96)上编译,但library的接口都是标准的C接口,而且按理说gcc的C++对象模型在不同版本间也没什么差异,所以应该可以安全地使用这个library,但结果很不幸地程序crash了,而且是crash在奇怪的STL string函数中,事后的分析证明了那是由于STL模板的弱符号导致符号解析错误,不同的STL库(主程序和library调用了不同的STL)中的函数被覆盖而导致。如果不对linux里弱符号(本书3.5.5,弱符号与强符号)、符号表(本书7.5.3,动态符号表)、符号解析(本书4.2.3,符号解析)等有足够的了解,遇到这样的crash我想一定会抓狂的。此外像soname、动态链接器等,这些对于在linux下开发都是些很必备的知识。
  
  最后还是说点对这本书的一些负面意见吧;-)
  
  首先就是书名了,个人不是太喜欢这个主标题,似乎有点太高了,其实我觉得周老师最初给我看的那个书名《深入理解计算机系统软件》要更贴切些,不太明白为什么最后会改名;-)
  
  其次,从个人角度来看,我觉得这本书对windows部分的介绍不是太必要,其实我更希望这本书能够更深入更全面地对linux的链接和装载进行介绍,比如在多加些linux进程管理、C++及template对编译和链接的影响、gcc的c library更详尽的分析(本书第四部分的crt看起来还是更偏“教学”目的了)等等,可能这样会更专注,当然也可能会丢失一些windows读者,不过也可以把windows的内容另成一书;-)呵呵,这些说来容易,但那又是何等地心血。
  
  好吧,从内容上,这本书一定值得你一翻,就算你不通读,把第二、第三部分仔细读读一定会很有收获,如果你对系统的机理感兴趣,特别是,如果你是linux C/C++程序员,我如是推荐。
  
  此外,从书籍的装裱上,博文一贯的高标准让此书不论是封面、纸张,还是排版,都堪称一流,当属一本可撑台面的书架点缀;-)
  

2009-05-20 16:21:28 hacker47

   其实我觉得周老师最初给我看的那个书名《深入理解计算机系统软件》要更贴切些,不太明白为什么最后会改名;-)
    -------------------------------------------------------
    个人认为那是因为还有一本巨牛无比的书,叫做
    《深入理解计算机系统》

2009-05-20 16:26:10 杨文博

  但是《深入理解计算机系统》这个名字翻译得就有点儿太意译了...
  根本让人对原来的书名摸不着头脑,我觉得有点儿过

2009-05-20 17:20:15 hacker47

  国内翻译书名有不“过”的么?
  
  在我看来那书名起的都是程序员必读的味道。
  
  

2009-05-20 19:58:48 smile

  因为这是在kuso《演员的自我修养》吧
  向周星星致敬。。。

2009-05-20 20:21:17 栀子花开

  这书不错!

2009-05-20 20:43:49 thinkinnight

  没看过的书不评价,不过链接什么的,有本linker and loader不错

2009-05-21 08:44:34 yolanda

  不错的一本书。

2009-05-21 13:09:16 feuvan

  kuso《演员的自我修养》+1

2009-05-25 19:00:38 j4ckl1u

  个人认为那是因为还有一本巨牛无比的书,叫做
      《深入理解计算机系统》
  ——————————————————————————————————————————
  还有一本书叫《linkers and loaders》

2009-06-05 13:27:41 大企鹅

  想想应该不错的,一直很想了解这些知识,我想结合图片,效果会更好的,一定要去看的

2009-06-27 15:25:55 hanyuxinting

  昨天在同事那看到这本书,回去好好瞅瞅~

2009-09-11 00:35:34 百合随风

  我们的项目是在RHAS4(gcc3.4)上编译的,而library是在Redhat9(gcc2.96)上编译,但library的接口都是标准的C 接口,而且按理说gcc的C++对象模型在不同版本间也没什么差异,所以应该可以安全地使用这个library,但结果很不幸地程序crash了
  ==================
  这个就是为什么我讨厌c/c++的原因。

2009-09-23 22:05:06 魏理布赫

  这个就是为什么我讨厌c/c++的原因。
  -----------------------------------------------
  这个其实不是C++最大的问题,最大的问题是编译性能。比起Java等其他语言,编译速度太慢了,因为 #include 不但耗时,而且无法并行

2009-10-05 22:08:30 pem

  我也觉得对windows介绍部分不太必要


>程序员的自我修养

程序员的自我修养
作者: 俞甲子, 石凡, 潘爱民
副标题: 链接、装载与库
isbn: 7121085119
书名: 程序员的自我修养
页数: 459
定价: 65.00
出版社: 电子工业出版社
装帧: 平装16开
出版年: 2009-4

Fly的其他评论   · · · · · ·