小弟看到很多软件开发的书后参考文献都有这本书, 就觉得很奇怪怎么会有摩托车维修技术的书. 后来又看到很多犇人(Code Complete2中也有)都推荐这本书(Joel和Plauger的推荐在文末), 于是找来看了. 读后觉得不愧是经典, 不光研究形而上,思考人生意义的人可以读,而且从实用主义的角度看, 对技术人员(不光是软件开发人员)甚至任何有工作的人都有很大的启发作用.
Pirsig说,要把工作变为艺术,选择良质. 正如一本投资经典书里作者告诉我们, 投资者投机者(市场本质上是需要理性和非理性的人群, 因此本书中的非二分法的思维方式很有用)要把交易视为一种艺术, 如果仅仅看到了盈利和损失, 是不能成为好的trader的,好的trader应该专注于他/她的交易艺术, 这点做好了,自然能带来好的回报.
下面是小弟带了软件开发的有色眼镜来读这本书的笔记:
p229. 摩托车的组件和功能分析. 从组件来看一辆摩托车,要了解这些组件的作用, 必须进一步解释它的功能.
p233. 你必须先压制住自己的看法,否则你就无法读下去, 它是一个比沟里的死水还要沉闷的东西, 你会读到化油器, 齿轮, 压缩里等等,活塞,火花塞,进气等等, 如果从浪漫的角度来看就会觉得非常沉闷,丑陋而且十分笨拙,浪漫的人很少能突破这一点.
[软件框架的api文档, 锁, 线程池, 实体, 关系, nLn(n), 抽象代数中的群环域, 初读都很枯燥, 难怪文科的人大都理工不行(如钱钟书数学很差),浪漫过头了. 达芬奇这种文理通吃的是天才. 很枯燥,读不下去的时候要控制住自己的厌倦想停下来的念头. 站桩也类似, 要继续站下去, 甜头就会来了.]
但是一旦你能控制最初的反应,就会继续发现其他的内涵. [先苦后甜]
p251. 如果你直接面对一个疯子,你所了解的就是他疯了, 这等于是根本不了解他. 要了解他,你就必须从他的角度看事情.
[要用好框架, 要了解它, 就必须从框架的角度来看程序]
p281. 不可以在大太阳下直接修理车子,或者在你累了一整天下来脑筋不清楚的时候修理.
[要在脑子清醒和好的环境下进行软件调试]
p287. 精确的仪器是为了表达一种理念而设计的.约翰认为我接触到的是各种零件,实际我接触的是各种观念.
[程序员面对的类库或code base并不是一砣砣代码, 而是各种观念]
p290. 所有相互牵动的结构整体地被称为系统.摩托车也是一种系统,一种真正的系统.
p292. 这就是所谓的摩托车,它是由一组钢铁制的零件所组成的观念体系, 其中任何一部分, 任何一种形状都是由人所设计出来的.
p298. 我说:"他要把这些零件组合起来,一定对摩托车有相当的了解" 比尔笑着说:"这也是最好的学习方式"
[深入源代码, 是最好的学习方式]
p306. 在这里要提到逻辑的两种方法,归纳法和演绎法.
要解决一般思维无法解决的难题,就要通过你的观察和手册当中所提供的结构, 不断交替运用归纳法和演绎法,如此才能找到解决之道.这种交织混杂的正确程序,如果正统化,就是所谓的科学方法.
p309. 你先拿出一个笔记本, 把所有的状况都写下来,这样你就知道情况如何,问题要怎么解决.
[相当于在调试卡住时, 跟同事或玩具熊闲聊,把问题讲给他/它听]
p310. 要把问题正确的写下来,起码要兼顾到六方面:
(1) 问题是什么.
(2) 假设问题的原因
(3) 证实每个问题的假设
(4) 预测实验的结果
(5) 观察实验的结果
(6) 由实验得出结论
p784. 用这种二分法来修理摩托车,听起来似乎错不了, 因为我们已经很习惯它了.但是这不是正确的态度.
p789. 所以,一个人在修理摩托车的时候,对车子的了解分分秒秒都在改变,因而得到了全新知识,其中蕴涵了更多的良质.
p790. 如果你想修一辆摩托车,不会发生被卡住的情形,那么古典的二分法,虽然必要,但是不足以满足你的需要.你必须对工作的品质有某种情感,你必须能判断什么才是好的,注意点才能促使你行动.
[如果调试中充满对bug的痛恨心理,是不好的]
p794. 你的心灵中就会很自然的找到解决的办法,除非你非常容易被卡住.其实怕被卡住是不必要的,因为被卡住越久,你就越能看清楚让你脱困的良质.
[软件调试过程被一个bug卡住很久, 也不是坏事]
要想了解良质,不论是在技术工作上或是其他方面,无私的接纳这种被卡住的现象是各关键.无师自通的技术人员就是因为常常被卡住,才比接受学院训练的人员更了解良质.
[例如John Carmack, Jamie Zawinski]
p797. 现在为了要把螺丝拿下来,你对它究竟是什么已经不感兴趣了.它的功能才是你研究的重点.于是你会提出有关功能方面的问题,由你的问题就可以知道你对良质的分辨能力.
p808. 当然,提升自己的精神层次并不一定要接触摩托车,单纯到磨一把菜刀,缝一件衣服或是修补一张坏掉的椅子,它们背后的问题都是一样的.你做任何一件事都可以把它做的很漂亮,或是很丑陋.如果你想要有高水平的表现,就必须具备鉴赏力和达到目标的方法,也就是同时具有对良质的古典和浪漫的认识.我们的文化只会给你古典的认知方法,然而它把鉴赏力给忽略了.
[斯宾诺莎磨镜片也算吧? 程序员喜欢做木匠活(The Pragmatic Programmer作者之一)也是出于这个?]
p810. 你得经常跟上流行而不厌倦,所以你落入了流行的陷阱之中.
[在技术上喜欢跟风, 学习各种流行的类库, 框架]
p813. 解决之道就在裴德络的论点当中.古典的认知不应该仅套上浪漫的外壳.古典和浪漫必须从根本上融合在一起.
p815. 保持内心的宁静在机械工作上并不是一件小事,它是工作的核心.能够使你平静的就是高级的手艺,反之就是低级的.而最后真正重要的,就是要达到内心的平静,除此之外别无它物.因为只有内心平静,我们才能觉察到良质的存在.它超越了浪漫和古典的认知,将两者融合为一.要想具有鉴赏力,了解如何完成高级的工作,体会和工作融为一体的感觉,就要培养内心的宁静.
[在敲Quick and Dirty的代码的时候就会觉得很厌烦; 而在重构的过程中能体会到笔记本,键盘,手指和大脑融为一体的宁静感觉]
p820. 优秀的技术人员就不会如此.如果他对手中的工作很感兴趣,他就会沉浸在工作之中,而不会产生主客观之间的对立.
[就像好的和尚念经肯定也能沉浸进去, 老太念经时就未必了]
p822. 所以在维修摩托车的时候,最重要的就是要培养内心的宁静.
这一点做到了,其他的一切都会变得很自然.内心的平静会产生正确的价值观,正确的价值观就会产生正确的思想,正确的思想就会产生正确的行动,正确的行动的工作就可使别人从中看到做事人内心的平静.
[在浮躁的软件开发环境里, 在项目压力下, 不当的项目管理下, 还能保持内心的宁静吗?]
[好的技术人员在工作时大都很安静, 听耳机敲代码的程序员和书里开着录音机瞎修摩托的修理工一样具有破坏力]
p837. 如果你想要修理一部摩托车,那么充足的进取心是最重要的工具.如果你还没有足够的热忱,你最好收拾工具暂放一边.因为它们不会对你有任何帮助.
进取心是精神的补给品,能够推动事情的进行,如果你没有它,就不可能修理摩托车.但是如果你有了它,你就可会知道如何运用它,那么无论如何一定能修好这部摩托车.所以在开始之前,最重要就是要有热忱.
p839. 在你修理机器时,经常会出现劣质的状况:关节生锈了,零件无法组合. 这些意外都会消耗一个人的进取心,减少你得热忱,让你觉得十分沮丧,以至于想放弃.我称这些为进取心的陷阱. 维修摩托车容易让人受挫,也容易让人愤怒,但这正是它让人觉得有趣的地方.
[软件开发调试中也容易让人受挫, 遗留代码, 需求变化...]
p841. 进取心的陷阱可以定义为,因无法意识到良质,从而使人丧失做事的热忱.陷阱主要有两种:第一种是因外在的环境使你放弃了良质,称为挫折;第二种是你内在的因素引起的,称为忧虑.
p844. 第一次拆卸部件可能会有许多不利,因为你要花更多的时间和金钱去应付意外的损害.但是毫无疑问,下一回你就会远远超过专家了.虽然这个过程很辛苦,但是你对它已经有了感情, 这是专家不可能拥有的. 避开陷阱的第一个技巧是拿出你的笔记本,写下拆卸的每一个步骤,然后记下以后重新组合时可能产生的问题.第二个技巧是在地上铺一张报纸,把所有的零件由左到右,由上到下排列整齐.
[维护代码的技巧]
p852. 最后,如果你和我一样吃过零件的不少苦头,而且又有投资的能力,那么你也可以学着自己制造零件.自己制造不但不会破坏进取心,反而会激励自己,有一种特殊的感觉. 内心因素的陷阱有三个:价值陷阱, 真理陷阱, 肌肉陷阱.
[开发自己的类库]
p863. 在修理机器这方面,如果你得自我太强,往往无法把工作做好.
[做程序员,要Humble]
p866. 为了减轻自己的焦虑不安,你可以告诉自己,没有哪一个技术人员不会犯错的. 如果你自己犯了错,你最起码还有学习的机会.当你觉得厌倦的时候,放下手中的工作去看场表演,打开电视机或者和朋友联络一下,暂时离开那台机器. 医治枯燥的最好方法就是睡觉,第二个选择是喝咖啡.
[开发,调试累了,应该休息, 但是像华为那样在桌子下面放铺盖太过分了点]
p869. 我听说有两种焊接工:生产线上的和维修的.前者不喜欢复杂的事,喜欢重复同样的动作,而维修焊接工却很讨厌重复相同的动作.
[coder和developer的区别]
p871. 摒除烦躁最好的方法,就是增加工作时间,如果要赶时间,那么尽可能增加预定的时间,然后降低过高的期望.
p880. 在维修摩托车的时候,往往你提出的许多问题,都会碰到无法解决的状况,因而你就可能丧失信心.其实大可不必如此.
如果你一时找不到答案, 就表明你设计的问题无法替你找到你想要的答案,因而你对问题的了解必须更广泛. 所以你要做的是进一步研究你的问题,而不是摈弃这些无法回答的状况,它们和是与否的答案同样重要,甚至更重要,它们能够让你成长!
p889. 你想知道怎样画一张完美的画吗?很简单,你先让自己变得完美,然后再顺其自然画出来.这就是所有专家的方式.如果一周当中有六天你都很懒散,不去照顾你得摩托车,那么有什么方法能够使你在第七天突然变得敏锐起来呢?
[要勤拂拭, 技术领域顿悟几率很低吧. 像鸠摩罗什他妈怀他的时候突然无师自通会梵语简直是天上掉馅饼.McGrady这样的天才训练懒散, 能力也会下降.所以要勤敲键盘, 少上网]
p950. 理性是指建立我们对世界的了解的方式,而神话则是指史前人类的世界观.
p972. 造成这种寂寞的主要原因就是科技.真正的祸首并不是科技本身,而是科技所带来的一种趋势,物化了人与人之间的关系.
p973. 如果有的人工作很枯燥,为了让自己过得愉快些,他就会开始选择良质,然后悄悄地为自身着想而追寻这个目标,使自己手中的工作变成一种艺术.
[很多应用软件或工具软件都是这样来滴, 典范是Unix Shell下的工具]
Joel推荐书目( http://www.joelonsoftware.com/navLinks/fog0000000262.html)里有这本书,下面是他的评价:
Some people's attitude towards programming is that it's a nifty way to pay the bills. For others, that's not enough... our work is a significant a part of our lives, and we need a philosophical understanding to make sense of it. This book goes a long way towards relating engineering and philosophy.
P. J. Plauger的评价(Programming On Purpose I page 174):
I have yet to find a good book on debugging computer
programs. Until one comes along, you should read this one, which has next to nothing to do with computers. It is, just as its title says, about Zen and maintaining motorcycles. If you happen not to enjoy reading essays, or if you don't get caught up in inner quests by introspective people who happen to be good writers, then you may find this book heavy going. If you find that to be the case, please don't put the book down unfinished.
At the very least, skip to the chapter on debugging motorcycles. You will learn more about the process of debugging software there than anywhere else I can point you.
Don't put the book down until you understand what Pirsig means by
"gumption traps," or until you accept the fact that a 59-cent bolt can be
worth far more than the contents of your wallet. Particularly if you strip its
threads alongside the road, 50 miles from civilization in either direction.
If you finish the book, you will also get a first-rate sermon on Quality
(with a capital Q, by all means). After all that has been written in recent
years about how the Japanese are beating us on quality this and quality
that, Pirsig can put you back in touch with Quality.
还有一个是amazon上一个读者的评价:
Whenever I interview someone I ask them what book has most influenced the way they develop software. If they answer "The Pragmatic Programmer" (or "Zen and the Art of Motorcycle Maintenance") then they have the job!
原文地址:https://book.douban.com/review/2541870/