理解系统底层的概念是多么重要

                               ——趋势科技邹飞评《程序员的自我修养》

 

关于《程序员的自我修养》这本书,最初是在和博文的周筠老师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++程序员,我如是推荐。

此外,从书籍的装裱上,博文一贯的高标准让此书不论是封面、纸张,还是排版,都堪称一流,当属一本可撑台面的书架点缀。:)

原贴地址:http://www.douban.com/review/2032438/

《程序员的自我修养——链接、装载与库》新书热卖

《程序员的自我修养——链接、装载与库》作者序(潘爱民)

《程序员的自我修养——链接、装载与库》作者序(俞甲子)

《程序员的自我修养——链接、装载与库》作者序(石凡)

《程序员的自我修养——链接、装载和库》作者访谈录

转载于:https://www.cnblogs.com/bvbook/archive/2009/06/01/1493380.html

理解系统底层的概念是多么重要相关推荐

  1. 深入iOS系统底层之CPU寄存器介绍

    一弹指六十刹那,一刹那九百生灭. --<仁王经> 组件 计算机是一种数据处理设备,它由CPU和内存以及外部设备组成.CPU负责数据处理,内存负责存储,外部设备负责数据的输入和输出,它们之间 ...

  2. 理解mysql 底层原理

    理解mysql 底层原理 mysql 关系数据库的一种,开源免费,支持百万级的存储性能.性能稳定.社区活跃 鉴于 本人半路出家,对于一些原理的东西都不怎么了解,正好 无所事事的情况下,翻博客,吸取知识 ...

  3. LINUX驱动、系统底层

    就业模拟测试题-LINUX驱动.系统底层工程师职位 本试卷从考试酷examcoo网站导出,文件格式为mht,请用WORD/WPS打开,并另存为doc/docx格式后再使用 试卷编号:143921 试卷 ...

  4. 理解五个基本概念,让你更像机器学习专家

    理解五个基本概念,让你更像机器学习专家 https://www.jianshu.com/p/ca37ea88a757 摘要: 这篇文章主要讲述了机器学习的相关内容,阐述了机器学习的主要意义和形成过程. ...

  5. Linux学习之CentOS(八)--Linux系统的分区概念

    不知不觉已经记录了8篇Linux学习随笔了,虽然还是漂浮在Linux系统的表面,还有很多很多没有学,但是坚持学下去.坚持写下去就是成功的!!!! 在讲Linux系统分区之前,首先得介绍一下硬盘分区的知 ...

  6. 深入理解 MySQL 底层实现

    本文来自作者 默默 在 GitChat 上分享 「深入理解 MySQL 底层实现」,「阅读原文」查看交流实录. 「文末高能」 编辑 | 哈比 MySQL 的常用引擎 1. InnoDB InnoDB ...

  7. 理解操作系统的进程的概念就如吃饭一样简单

    进程作为操作系统基础,想要学好操作系统的理论知识,首先要掌握进程的概念.进程的理解可以抽象的思维来理解,也可以直接去挖掘 Linux 的源码来看看林纳斯大神是怎么用数据结构来描述进程的.对于大部分初学 ...

  8. 深入理解正则表达式环视的概念与用法

    在<深入理解正则表达式高级教程-环视>中已经对环视做了简单的介绍,但是,可能还有一些读者比较迷惑,今天特意以专题的形式,深入探讨一下正则表达式的环视的概念与用法. 深入理解正则表达式环视的 ...

  9. .中英文系统底层编码导致乱码问题

    转载:http://blog.sina.com.cn/s/blog_6ae7a3960100sc7h.html 标签: it 分类: 技术点滴 在程序中,若使用涉及到编码的方法,如getBytes() ...

最新文章

  1. this is incompatible with sql_mode=only_full_group_by
  2. Android - MVP个人愚见
  3. 【如何利用idea提交本地代码到git远程仓库,史上最详细教程,建议收藏!】
  4. 【iCore4 双核心板_FPGA】例程十一:FSMC总线通信实验——独立地址模式
  5. Android中用OpenGL ES Tracer分析绘制过程
  6. 基于JAVA+SpringMVC+Mybatis+MYSQL的宠物寻回系统
  7. js合并对象中有相同key值的_js 深比较和浅比较
  8. 关于更新内容次序问题
  9. Windwows7 下安装mysql5
  10. Oralce UTL_SMTP发送邮件的发送时间处理
  11. OSChina 周三乱弹 —— 九招助你工资秒长(干货哟)
  12. 【c++算法】《c/c++实现SM4加密解密算法》
  13. springcloud入门——config分布式配置中心
  14. SQL摘录笔记 --分组数据(5)
  15. 勒让德函数C语言编程设计,用递归方法求n阶勒让德多项式的值
  16. 济南python工资一般多少-济南十大python编程培训机构排行榜
  17. Python正则表达式中的‘r‘
  18. 锚点的作用是什么?如何创建锚点?
  19. Execution failed for task ':app:processDebugGoogleServices'. No matching client found for package
  20. 树莓派开机黑屏问题解决

热门文章

  1. 避免成为垃圾邮件_如何避免犯垃圾
  2. react 错误边界_React with GraphQL和错误边界中的自定义错误页面
  3. 数据通信技术(一:IP划分)
  4. 微博polg什么意思_贾磊:广东发微博给CBA造成了负面影响 方硕的意思可能没表达清楚...
  5. 用D3.js 十分钟实现字符跳动效果
  6. Metasploit攻击Oracle的环境搭建
  7. 模板方法模式与策略模式的区别
  8. 概念被滥用 你真的了解云计算吗?
  9. 炎热夏天到底如何让自己更凉快? - 生活至上,美容至尚!
  10. ASP.net 2.0中水晶报表迁移部署问题