这本书有一个长长的中文名字:《只是为了好玩:Linux之父林纳斯自传》,所以博客标题我就用英文书名了。

  读罢此书,不禁想起一位长者的名言:“一个人的成功当然要靠自我奋斗,但也要考虑历史的进程”。可以说Linux到的成功不完全是Linus有意为之,但在Linus身上(如同我之前读过的理查德·斯托曼的传记《若为自由故》一样),我能看到那个时代所有伟大黑客的特质。那些所有计算机天才共有的,又或者Linus独有的,感谢上大学来读过的书,让我都有所洞见。

  1.良好的熏陶

  从冯·诺依曼到林纳斯,无不在少年时代就接受了良好的技术熏陶,冯·诺依曼自不必说,林纳斯也是从十岁起就帮着自己的外祖父(赫尔辛基大学的一个统计学教授)输入计算机程序,大多数人到了大学才接触计算机编程,相比之下,林纳斯这类人已经领先我们十年身位了。想想我们10岁的时候,又在干什么呢。十年意味着他们有足够的试错机会,而留给一个20岁程序员的试错机会就不多了。自古英雄出少年,其实还是很有道理的。

  单就拿冯·诺依曼和林纳斯来说,他们虽然都是计算机领域的大师,但童年也后很多不同之处。冯·诺依曼出身家境优渥的犹太家庭,自幼接受良好的家庭教育,而那个时代的匈牙利教育也堪称现代教育的典范,培育了无数诺奖获得者,而林纳斯除了外祖父是统计学教授外,和普通家庭没什么两样,但正是这个良好的启蒙以及自由的成长环境,让他有足够的空间肆意生长。而不是把时间浪费在应试教育上。

  2.黑客精神

  不想多解释什么是真正的黑客,一个黑客当然要像斯托曼那样,用他亘古绝今的编程匠艺为计算机世界带来GCCEmacs这样伟大的作品,又或者是GPL这样非凡的创造,以一己之力推动时代的巨轮。林纳斯身上当然也有这些品质,但他更像一个现实的人,他说自己很懒惰,所以才有了Linux开创性的协作开发方式。他对钱不感兴趣。相比于其他两位大佬,盖茨很伟大,但他对基尔代尔做的事情可真不地道;乔布斯更像是一个伟大的推销员,一直都是。

  黑客的懒惰是指他们不愿意花时间在无聊重复的事情上,又或者用技术改变自己不满意的现状。在林纳斯身上,这种懒惰尤为典型,他不愿修补Linux的每一个补丁,所以开源了Linux,让全世界优秀的程序员一起来开发,他受够了集中式版本管理系统的弊端,所以开发了Git这个分布式代码版本管理系统。Linux或Git,二得其一,即可名扬天下,林纳斯一个人就做了。

  3.一个我的观点

  没有人说,书里也没有提及。但我不记得哪本书里面看过。芬兰(以及很多东欧国家)的人均阅读量高居世界前列,很大程度上跟东欧的气候有关,尤其是冬天,天气寒冷,白天很短,几乎没有什么户外运动的消遣,再适合林纳斯这样的黑客鼓捣电脑不过了。所以我看,东欧以及俄罗斯盛产黑客和伟大的数学家,和这一地区的气候也不无关系。

  4.这是编程的好时代吗

  值得一提的是,美国,尤其是硅谷(车库文化和斯坦福大学)一直是计算机世界前进的重要动力,但是,在遥远的东欧,远离技术中心的芬兰(或许这么说也不准确,诺基亚曾是这个国家的骄傲,芬兰是电子通信的先驱),林纳斯却凭一己之力缔造了Linux帝国的开端。堪称奇迹,看看我们这个时代,信息爆炸,获取方便,传闻牛顿提出三大定律的时候,已经掌握了那个时代所有的知识,而近一百年来,知识以指数形式爆炸增长,虽然信息变多了,但有用信息的比例一定增加了吗,我不知道。

  林纳斯提到了那本把他“推向生命巅峰的书”:《操作系统:设计与实现》,我上大学以来,目前已经借了200多本书,很多没仔细看,但仔细看过也不算少了,可能超过一些人大学四年的借书量(而我还有一年半时间来继续提高这数字),但我必须承认,我还没遇到那本会改变我生命轨迹的书,至少现在没觉得。某种程度上,我们被信息淹没了。对于阅读量高于平均水平的我来说,感受尤为深刻。

  这是,编程的好时代吗?那个时代肯·汤普森弄个说明手册也要高兴好一阵,盖茨甚至到垃圾桶去找资料文档,信息甚至匮乏,但他们的丰功伟绩却令后人难以望其项背了。不过话又说回来,林纳斯最后还是去了美国,去了硅谷,确实,他怎么能把一辈子浪费在赫尔辛基呢。就像现在的中国,多少人奔向北上广深杭这样的大城市,谁会喜欢人多嘴杂空气差呢,但只有在这样的一线城市,才能看到最牛的技术、遇见最强的人。我记得大一选修的时候,一个老师说过,“人这一辈子,一定要去北上广这样大城市生活过才算完整”。不一定是为了情怀,而是拥有格局。格局真的很重要,记得从农村初中录取到县城最好的中学之后,我看到了前所未有的差距,如果不努力爬更高的山,渡更宽的河,那么你的眼界就已经注定了这一生只能庸庸碌碌。

  其实,零零散散还有很多感想,奈何文笔拙劣。以书中一段话结束吧:

  他是Linux和Git的缔造者,它是一个传统的黑客,与沃兹一样,少年成名,崇尚自由,一生只为寻找欢笑,他,是一名真正的程序员。

  

《Just for Fun》读后感的更多相关文章

  1. 《DevOps软件架构师行动指南》读后感

    从软件架构师视角讲解了引入DevOps实践所需要拥有的技术能力,涵盖运维.部署流水线.监控.安全与审计以及质量关注,这是本书一开始内容简介的开头,本书的作者是伦恩·拜斯(Len Bass).英戈·韦伯 ...

  2. nodejs开发指南读后感

    nodejs开发指南读后感 阅读目录 使用nodejs创建http服务器; supervisor的使用及nodejs常见的调式代码命令了解; 了解Node核心模块; ejs模板引擎 Express 理 ...

  3. DevOps:软件架构师行动指南(文摘)

    第一部分 背景 第1章 DevOps是什么 第二部分 部署流水线 第三部分 横切关注点 第四部分 案例研究 第五部分 走向未来

  4. 2020年DevOps工程师入门指南

    DevOps兴起于2010年代,到现在DevOps已经在行业中拥有了一席之地,并在继续发展壮大. 有兴趣成为一名DevOps工程师吗?如果想要成为一名DevOps工程师,需要做到以下五点: 要有开发者 ...

  5. 5月29日 Java性能调优指南 读后感

    并行垃圾收集器 串行垃圾收集器 并发标记清除(CMS)垃圾收集器 Garbage First(G1)垃圾收集器 没有深入的学习G1的原理,只是看了大概的思想; SA工具:待学习

  6. 敏捷开发、DevOps相关书籍——书单

    自己瞎整理的一些书单,都是豆瓣评分比较高的书,可以作为选择的一个参考. 书名 豆瓣链接 持续交付:发布可靠软件的系统方法 https://book.douban.com/subject/6862062 ...

  7. 有奖试读—Windows PowerShell实战指南(第2版)

    为什么要学PowerShell? Windows用户都已习惯于使用图形化界面去完成工作,因为GUI总能轻易地实现很多功能,并且不需要记住很多命令.使得短时间学会一种工具成为可能. 但是不幸的是,GUI ...

  8. [转载]你所不了解的DevOps

    DevOps开发运维训练营 一旦建立了创新的文化,即使那些并非科学家或者工程师的人——诗人.演员.记者——也能以团体的形式,接受科学文化的意义.他们信奉创新文化的概念.他们以促进这种文化的方式投票.他 ...

  9. 给 DevOps 初学者的入门指南

    当我们谈到 DevOps 时,可能讨论的是:流程和管理,运维和自动化,架构和服务,以及文化和组织等等概念.那么,到底什么是"DevOps"呢? 什么是DevOps 随着软件发布迭代 ...

  10. CI Weekly #3 | 关于微服务、Docker 实践与 DevOps 指南

    CI Weekly 围绕『 软件工程效率提升』 进行一系列技术内容分享,包括国内外持续集成.持续交付,持续部署.自动化测试. DevOps 等实践教程.工具与资源,以及一些工程师文化相关的程序员 Ti ...

随机推荐

  1. HTML5的新语义化的标签

    在HTML5之前采用HTML+CSS文档结构写法 [ID选择器说明 id选择器——用于标识页面上特定元素(比如站点导航.页眉.页脚)而且必须唯一; 也可以用来标识持久结构性元素(如主导航.内容区域)] ...

  2. css和@import区别用法

    css和@import都是调用外部样式表的方法. 一.用法 (1)link: <link rel="stylesheet" type="text/css" ...

  3. Android Studio多渠道打包

    本文所讲述的多渠道打包是基于友盟统计实施的. 多渠道打包的步骤: 1.在AndroidManifest.xml里设置动态渠道变量 <meta-data android:name="UM ...

  4. Git 少用 Pull 多用 Fetch 和 Merge

    本文有点长而且有点乱,但就像Mark Twain Blaise Pascal的笑话里说的那样:我没有时间让它更短些.在Git的邮件列表里有很多关于本文的讨论,我会尽量把其中相关的观点列在下面. 我最常 ...

  5. Oracle组合索引与回表

    回表 简单来说就是数据库根据索引找到了指定的记录所在行后,还需要根据rowid再次到数据块里取数据的操作. "回表"一般就是指执行计划里显示的"TABLE ACCESS ...

  6. .NET和JAVA中BYTE的区别以及JAVA中“DES/CBC/PKCS5PADDING” 加密解密在.NET中的实现

    场景:java 作为客户端调用已有的一个.net写的server的webservice,输入string,返回字节数组. 问题:返回的值不是自己想要的,跟.net客户端直接调用总是有差距 分析:平台不 ...

  7. Oracle插入日期格式出现 ORA-01843: not a valid month的解决办法

    Oracle 在插入时间类型的时候如果不注意插入的格式就很容易出错,基本上只要转一下时间格式就可以解决. DateTime转成特定格式的字符串: var dateString = DateTime.N ...

  8. kettle中参数和变量的区别

    图一: 图二: 何时使用'?'何事使用${}应当根据情况: 在图二中使用的是${}因为此时没有"作为参数的字段",所以只能用el表达式直接获取其值,在图一中有"作为参数的 ...

  9. 【repost】JavaScript 事件模型 事件处理机制

    什么是事件? 事件(Event)是JavaScript应用跳动的心脏 ,也是把所有东西粘在一起的胶水.当我们与浏览器中 Web 页面进行某些类型的交互时,事件就发生了.事件可能是用户在某些内容上的点击 ...

  10. CodeAtlas For Sublime Text

    CodeAtlas is a plugin of SublimeText, which allows one to explore the call graph conveniently. The p ...