慕课网吧 关注:29,275贴子:29,892

程序员的自我修养

只看楼主收藏回复

作者访谈录
针对俞甲子、石凡和潘爱民三位的新书《程序员的自我修养——链接、装载与库》的出版,博文视点对俞甲子进行了专访,现将博文的编辑与俞甲子的访谈对话整理成文,以飨读者。
博文编辑:
甲子,你好!能否向读者介绍你是如何对操作系统的底层机制和运行原理产生兴趣的?
俞甲子:
很大程度上是因为性格决定的吧,因为我是一个喜欢对技术问题寻根究底的人,不满足于仅仅了解一个技术的表面,而是希望能通过层层深入地挖掘,找出它背后最关键最核心的机理。我相信很多计算机技术都是相通的,它们的核心思想相对是稳定不变的。经常听很多人谈起,IT技术日新月异,其实真正核心的东西数十年都没怎么变化,变化的仅仅是它们外在的表现...


IP属地:山东1楼2015-09-19 19:18回复
    为了了解操作系统内核及装载、链接等这些关键的技术,我曾经自己从头写了一个很小的内核、装载器及一个简单的运行库,它们组成了一个可以完整运行在PC上的支持多进程、多线程的操作系统环境,并且支持虚拟存储、简单的文件系统、网络、鼠标键盘等,前后加起来花了两年多时间,大约有数万行代码,编译器和链接器使用的是GCC和LD。当然,如果继续写下去,可以让它的功能变得更加完整,但是我停止了对它的继续维护,因为我认为通过这个雏形系统,我已经了解了其背后的机理,如果再继续写下去更多的只是重复性的工作,因为现在已经有了很多很优秀的内核、装载和链接的相关软件和标准。


    月老
    每对新人结婚成功的那一刻,送礼最多的吧友可以获得本次求婚的“月老”称号和成就,去领取
    活动截止:2100-01-01
    去徽章馆》
    星座王
    点亮12星座印记,去领取
    活动截止:2100-01-01
    去徽章馆》
    IP属地:山东2楼2015-09-19 19:20
    回复
      博文编辑:
      介绍链接、装载与库原理的资料非常少,你在自己钻研的过程中,遇到的最大困难是什么?
      俞甲子:
      当然相关资料很少会给我们带来很多的困难和挑战,而且相关的源代码在经过多年的发展和锤炼后,变得非常注重性能和效率,而很少考虑可读性,这使得通过挖掘源代码理解机制变得更为困难。这些代码很多都是相关领域的黑客高手写的,他们对系统机制的了解已经到了很深刻的地步,一小段代码会用尽系统的各种机制和方法,经常让人看得不知所云。比如系统库在不同的链接和装载方式下对C++全局对象的构造和析构,就异常复杂。整个流程来回曲折,加上有些代码已经遗弃,还会造成误解。Glibc这种支持数十种平台的系统还要考虑到各个系统...


      月老
      每对新人结婚成功的那一刻,送礼最多的吧友可以获得本次求婚的“月老”称号和成就,去领取
      活动截止:2100-01-01
      去徽章馆》
      星座王
      点亮12星座印记,去领取
      活动截止:2100-01-01
      去徽章馆》
      IP属地:山东3楼2015-09-19 19:22
      回复
        博文编辑:
        你现在从事的工作和系统底层结合紧密吗?在系统运行机制上的积累对目前的工作有帮助吗?
        俞甲子:
        我目前从事的工作跟系统底层关系不是很大,现在最常用的都是Web前端、MySQL数据库等这些应用层面的系统。虽然不是直接与系统底层打交道,但是之前的积累无时无刻不在帮助我去深入理解应用开发。比如MySQL系统的内存和文件系统的优化,如果对操作系统的虚拟存储和文件系统机制没有深入了解,那么可能只能在配置参数上做一些“猜测”性质的调整,不断地尝试各种参数,或者参考网络上别人提供的配置参数,但不一定适合自己的应用情况。了解虚存如何运作,进程地址空间的分布等,将会对应用的优化甚至是构架设计上都会有更...


        月老
        每对新人结婚成功的那一刻,送礼最多的吧友可以获得本次求婚的“月老”称号和成就,去领取
        活动截止:2100-01-01
        去徽章馆》
        星座王
        点亮12星座印记,去领取
        活动截止:2100-01-01
        去徽章馆》
        IP属地:山东4楼2015-09-19 19:23
        回复
          序言一
          两年前,甲子跟我提起,他在考虑写一本讲述计算机程序基本工作原理的书,由于代码背后的许多细节现在难以找到完整而又实用的资料,因此,系统性地讲述这些技术要素一定非常有意义。这是我非常感兴趣的话题,因为最近几年来,我每次给学生讲课或作技术报告时,经常会提到程序背后的一些细节知识,而当有人请我推荐一些参考资料时,我很难想得出有什么恰当的参考书可供学习。我自己也曾想过要写一点这方面的书,只是一直下不了决心做这件事情。甲子的提议让我意识到,写这样一本书的机会来了。于是,我们认真规划了书的选题。按我的建议,这应该是三卷本的书,每卷独立,合起来成一体系。第一卷是基础篇,介绍程序的基本运行过程,即是您现...


          月老
          每对新人结婚成功的那一刻,送礼最多的吧友可以获得本次求婚的“月老”称号和成就,去领取
          活动截止:2100-01-01
          去徽章馆》
          星座王
          点亮12星座印记,去领取
          活动截止:2100-01-01
          去徽章馆》
          IP属地:山东5楼2015-09-19 19:23
          回复
            本书讲解的内容,涉及在Windows和Linux两个系统平台上,一个应用程序在编译、链接和运行时刻所发生的各种事项,包括:代码指令是如何保存的,库文件如何与应用程序代码静态链接,应用程序如何被装载到内存中并开始运行,动态链接如何实现,C/C++运行库如何工作,以及操作系统提供的系统服务是如何被调用的。每个技术专题都配备了大量图示和代码实例,力求将复杂的机制以简洁的形式表达出来。本书最后还提供了一个小巧且跨平台的C/C++运行库MiniCRT,综合展示了与运行库相关的各种技术


            月老
            每对新人结婚成功的那一刻,送礼最多的吧友可以获得本次求婚的“月老”称号和成就,去领取
            活动截止:2100-01-01
            去徽章馆》
            星座王
            点亮12星座印记,去领取
            活动截止:2100-01-01
            去徽章馆》
            IP属地:山东7楼2015-09-19 19:24
            回复
              关于写作这本书的功劳,我不敢掠美。在创作之初,包括拟定提纲及甄选内容方面,我跟甲子有过认真而细致的讨论;在写作过程中,我对甲子和石凡的初稿提出过一些建议,尤其在表述方面,同时我也协助他们与编辑进行了沟通和交流。对于正文的内容,我并无实质性的贡献,但基于我对甲子和石凡两位年轻人的了解,我相信他们自身的技术实践功底,以及足够的技术阐释能力。我期待这本书能够真正地提升程序员的自我修养,让程序员总是生活在“知其然,更知其所以然”的代码曼妙中。


              月老
              每对新人结婚成功的那一刻,送礼最多的吧友可以获得本次求婚的“月老”称号和成就,去领取
              活动截止:2100-01-01
              去徽章馆》
              星座王
              点亮12星座印记,去领取
              活动截止:2100-01-01
              去徽章馆》
              IP属地:山东8楼2015-09-19 19:24
              回复
                最后,我要感谢这本书的四位编辑,他们是何艳、方舟、刘铁锋和陈元玉,谢谢他们为这本书付出的努力。还要感谢博文视点团队的负责人周筠女士,谢谢她给予两位年轻作者的扶持和关爱。
                潘爱


                月老
                每对新人结婚成功的那一刻,送礼最多的吧友可以获得本次求婚的“月老”称号和成就,去领取
                活动截止:2100-01-01
                去徽章馆》
                星座王
                点亮12星座印记,去领取
                活动截止:2100-01-01
                去徽章馆》
                IP属地:山东9楼2015-09-19 19:24
                回复
                  序言二
                  两年前,我在浙江大学的一著名BBS的C++板块上担任版主,而俞甲子则是板上的资深版友(以及前版主)。那时候我对链接装载、运行库等内容比较感兴趣,自己摸索着在博客上写了一篇关于链接的入门文章,而这就是一切的开始。
                  我猜想俞甲子可能对写这么一本书早有想法,看到我的文章正好找到了同路人。他找到了我和潘爱民老师,我们一拍即合,就开始了这长达两年的写作历程。考虑到当时俞甲子已经在链接部分有了相当的积累,因此我不得不放弃最有兴趣的一部分转而在运行环境上做文章。我把glibc和msvcrt的源代码翻了个底朝天,了解到了许多平时不可能接触到的内幕和技术细节。事实上,这基本是一个现学现卖的过程,我一边学...


                  月老
                  每对新人结婚成功的那一刻,送礼最多的吧友可以获得本次求婚的“月老”称号和成就,去领取
                  活动截止:2100-01-01
                  去徽章馆》
                  星座王
                  点亮12星座印记,去领取
                  活动截止:2100-01-01
                  去徽章馆》
                  IP属地:山东10楼2015-09-19 19:26
                  回复
                    序言三
                    CPU体系结构、汇编、C语言(包括C++)和操作系统,永远都是编程大师们的护身法宝,就如同少林寺的《易筋经》,是最为上乘的武功;学会了《易筋经》,你将无所不能,任你创造武功;学会了编程“易筋经”,大师们可以任意开发操作系统、编译器,甚至是开发一种新的程序设计语言!
                    ——佚名


                    月老
                    每对新人结婚成功的那一刻,送礼最多的吧友可以获得本次求婚的“月老”称号和成就,去领取
                    活动截止:2100-01-01
                    去徽章馆》
                    星座王
                    点亮12星座印记,去领取
                    活动截止:2100-01-01
                    去徽章馆》
                    IP属地:山东12楼2015-09-19 19:27
                    回复
                      念书的时候,作为标准的爱好技术的宅男,每天扫一遍各大高校BBS的技术版面,基本好比一日三餐一样平常。我对计算机技术方面的口味很杂,从汇编版到C++到Linux内核开发、Linux应用开发、游戏开发、网络、编程语言、体系结构、移动开发、开源闭源我都会参上一脚。
                      我始终认为技术优劣取决于需求,与很多持有“编程语言血统论”的程序开发者不同,我不认为C++或Java本身有什么直接可比性,或者OOP与函数式编程谁优谁劣,我始终坚持认为作为开发者,MOP(Market/Money Oriented Programming)才是唯一不变的编程范式。于是我往往不参与那些技术、平台、语言教派之间的宗教战争,这种...


                      月老
                      每对新人结婚成功的那一刻,送礼最多的吧友可以获得本次求婚的“月老”称号和成就,去领取
                      活动截止:2100-01-01
                      去徽章馆》
                      星座王
                      点亮12星座印记,去领取
                      活动截止:2100-01-01
                      去徽章馆》
                      IP属地:山东13楼2015-09-19 19:27
                      回复
                        来才发现自己完全轻视了写书的工作量。书中的每一个章节、每一个小段、每一个例子甚至每一个用词有时候都要斟酌很久,生怕用得不恰当误导了读者。“误人子弟”这四个字罪名可不轻,大有推出午门斩首五遍以儆效尤之过。写书的时间的确很仓促,虽然我们都是在读研时写的,按理说相对于已经工作的作者来讲,已经是有很多闲余的时间了,但还是经常手忙脚乱。想到以前看书看到作者写的序里,经常使用“时间仓促,水平有限”的话,推想作者不过是出于谦虚不免要客套一下。现在轮到自己写序了,终于感觉到了这八个字的分量。即使到现在已近完稿,我们还是心里十分忐忑,因为还有不少地方的确写得不够完善。也听到了很多第一批读者的反馈意见,很多建议都...


                        月老
                        每对新人结婚成功的那一刻,送礼最多的吧友可以获得本次求婚的“月老”称号和成就,去领取
                        活动截止:2100-01-01
                        去徽章馆》
                        星座王
                        点亮12星座印记,去领取
                        活动截止:2100-01-01
                        去徽章馆》
                        IP属地:山东14楼2015-09-19 19:28
                        回复
                          关于本书的书名笔者们也讨论了很久,征询过很多意见,最终还是决定用“程序员的自我修养”作为书名,将“链接、装载与库”作为副标题。书名源自于俄罗斯的演员斯坦尼斯拉夫斯基创作的《演员的自我修养》,作者为了写这本书前前后后修改了三十年之久,临终前才同意不再修改,拿去出版。使用这个书名一方面是本书的内容的确不是介绍一门新的编程语言或展示一些实用的编程技术,而是介绍程序运行背后的机制和由来,可以看作是程序员的一种“修养”;另一方面是向斯坦尼斯拉夫斯基致敬,向他对作品精益求精的精神致敬。
                          在本书的创作过程中,很多人对我们的支持和帮助难以言表。这里我要感谢博文视点的编辑何艳、方舟、刘铁锋和陈元玉等,他们为本书...


                          月老
                          每对新人结婚成功的那一刻,送礼最多的吧友可以获得本次求婚的“月老”称号和成就,去领取
                          活动截止:2100-01-01
                          去徽章馆》
                          星座王
                          点亮12星座印记,去领取
                          活动截止:2100-01-01
                          去徽章馆》
                          IP属地:山东15楼2015-09-19 19:28
                          回复
                            导 读
                            你将学到什么
                            本书将详细描述现在流行的Windows和Linux操作系统下各自的可执行文件、目标文件格式;普通C/C++程序代码如何被编译成目标文件及程序在目标文件中如何存储;目标文件如何被链接器链接到一起,并且形成可执行文件;目标文件在链接时符号处理、重定位和地址分配如何进行;可执行文件如何被装载并且执行;可执行文件与进程的虚拟空间之间如何映射;什么是动态链接,为什么要进行动态链接;Windows和Linux如何进行动态链接及动态链接时的相关问题;什么是堆,什么是栈;函数调用惯例;运行库,Glibc和MSVC CRT的实现分析;系统调用与API;最后我们自己还实现了一个Mini CR...


                            月老
                            每对新人结婚成功的那一刻,送礼最多的吧友可以获得本次求婚的“月老”称号和成就,去领取
                            活动截止:2100-01-01
                            去徽章馆》
                            星座王
                            点亮12星座印记,去领取
                            活动截止:2100-01-01
                            去徽章馆》
                            IP属地:山东16楼2015-09-19 19:29
                            回复
                              顶顶这么好的文章。


                              星座王
                              点亮12星座印记,去领取
                              活动截止:2100-01-01
                              去徽章馆》
                              17楼2015-09-20 20:23
                              回复