Linux 之父自传《just for fun》读书笔记
一次偶然的机会,看到了阮一峰老师关于这本书的介绍,当时我就觉得这本书相当有趣。
在没有读这本书之前,我觉得 linus 作为发明 Linux 系统的人,应该是一个比较严肃的人,就像我的老师一样。但事实跟我想象的相反,他跟程序员一样,风趣幽默,各种自嘲(他已经在书中不少于一次说自己的鼻子大了),专注于技术问题,还有不修边幅。。。就如王思聪在网友的眼中只是一个十分有钱的屌丝,linus 在我们眼中大概就是一个有钱、技术十分高超的程序员吧!
在正是因为这种原因,这本书读起来十分轻松,有些地方观点更是十分独特,让人拍掌叫好。而他跟 Andrew Tanenbaum 的论战,更是十分精彩!
以下是我的一些读书笔记。
生命的意义。。。
我们可以在第一章里对人们解释生命的意义何在。这样可以吸引住他们。一旦他们被吸引住,并且付钱买了书,剩下的章节里我们就可以胡扯了。
哈哈,这里可以看到linus这个人相当有意思吧。
生活的意义是什么?
有三件事对生活是有意义的,他们是生活中所有事情的动机
- 第一就是生存
- 第二就是社会秩序
- 第三就是娱乐
生活中所有的事都遵循着这个顺序,娱乐之后就再无其他了。所以从某种意义上说,生活的意义就是要你达到第三个阶段。一旦达到了第三个阶段,这辈子你就算成功了。但是你得先超越前两个阶段。
技术最初也是为了生存,为了生存得更好。现在技术大体上还处于社会的层面,但正在朝娱乐的阶段发展。......为人们提供了依靠兴趣与热情而生活的机会。与世界上最好的程序员一起工作,是一种无与伦比的享受。
关于样貌!
没错,鼻子比人还显眼。。。而且戴眼睛可能会让我的大鼻子显得小一点,所以我就戴了,而且从不摘下来。
关于芬兰的诺基亚!又黑我大诺记!
芬兰人都比较沉默,你几乎找不到话痨子。他们只是聚在一起,但个个沉默寡言,不怎么聊天。。。因为芬兰人不乐意面对面交谈,所以我们这儿自然就成了移动电话的理想市场。我们对这种新鲜的玩意有种特殊的依赖感,这股热情其他国家都无法匹敌。
关于 unix 的简单哲学
几乎所有你在 unix 系统上做的事情都是由6个基本操作完成。通过这6个基本的系统调用,你几乎可以在 unix 上完成所有事情。
unix 系统有一个 fork (创建子进程)的概念,这也是 unix 系统的基本操作之一。当一个进程调用 fork 指令的时候,它就把自己给复制下来了。这样你就有两个一样的进程,新建的子进程一般用来执行另一个进程——用新的程序替换掉它自己。这就成了系统的第二个基本操作。接着就是另外的4个系统调用——打开(open)、关闭(close)、读取(read)、写入(write),都是用来访问文件的。这6个系统调用组成了 unix 的基本操作,从而构成了 unix 系统。。。
只要你明白这6个基本的系统调用,你就能掌握 unix 系统。unix 系统的美妙之处在于,就算你要创建复杂的任务,也不需要特别复杂的接口。只要用一些简单进程之间的交互,就可以创建任何复杂的任务。你要做的,就是在简单进程之间,创建它们的交流渠道——管道(pipe)
在一个讨人厌的系统中,你想做任何事情,都需要一些特殊的接口。而 unix 系统恰恰相反,它直接把建筑构件给你,而这些构件足以用来执行任何任务。这就是所谓的”干净的“设计!
这大概就是《unix编程艺术》中所说的“提供机制,而不是策略”和“kiss原则”。但是设计简单干净并不代表容易,设计简单干净比设计得复杂难得多!
第一个看到 Linux 系统的人
对我这次了不起的壮举,妹妹莎拉倒是知道,不过我把终端仿真程序演示给她看时,她在显示器上看到一长串字母A一长串字母B,看了大概五秒钟,然后说了一句“挺好的”就转身走了,显然没觉得有什么大不了的。我意识到这确实不像什么了不起的事。只不过,有些东西表面上可能看起来没什么,但背后却包含了大量繁杂的工作。
linus 的妈妈对儿子的评价
linus 是一个什么样的儿子,我想我已经是回答了——养大他一点都不辛苦,真的。他就喜欢挑战难题,只要遇到一个问题,接下来的事情他都会自己处理了。当他年少时开始专注于电脑后,他就更不需要什么额外的养育和教导了。就像以前我和莎拉经常说的那样,只要把 linus 和一台能用的电脑关进一个黑乎乎的小屋里,再时不时扔点面条进去,他就会非常满足。
Minix 与 Linux 之争,宏内核与微内核
在90世纪80年代末90年代初,微内核理念十分盛行,而 Linux 系统的成功对它造成了威胁,于是安德鲁不断地在网上发贴抹黑 Linux。
微内核理论认为,操作系统非常复杂,所以必须通过模块化来降低其复杂性。微内核理论的原则是:内核作为操作系统的基本核心,本身的功能越少越好,它的主要功能应该只是通信。电脑所提供的各种不同服务,都要通过微内核之间的通信渠道来实现。所以,采用微内核方法,就得尽量分割操作系统的问题空间,让每个问题空间都尽量简单。
我觉得这种方法很愚蠢。没错,每个模块可以做得很简洁,但比起让内核负担所有功能来说,模块间的交互可就复杂多了。Linux系统采取的就是负担所有功能的做法。想想人的大脑就知道了。大脑中每一个单独的部分都不复杂,但是它们之间的相互作用使大脑成为一个高度复杂的系统。这是一个 “1+1>2”的情况。举个例子,把一个复杂的问题一分为二,然后就认为这个“半问题”的复杂程度都只有原先的一半了,但你忽略了一个事实:这两个“半问题”之间的联系你还没有考虑呢!于是问题又复杂起来了。微内核原理是要把内核分割为50个独立模块,每个模块承担 1/50 的复杂性。但这些人都忽略这个事实:各独立模块之间的联系比原来系统要复杂得多,更何况,每个模块也并不那么简单。
相比之下,Linux 系统则小巧得多,运行起来也十分简单。它并不采用微内核所倡导的那种强制的模块化结构,所以 Minix 比起来,Linux 执行什么任务都更为直截了当。早些时候,我就发现 Minix 有一个毛病,比如说当系统上同时有5个程序运行,它们分别要读取5个不同的文件,那么这 5 个任务得一个一个执行。换句话说,5 个进程会向文件系统发送 5 次请求:“我能读取一下某个文件吗?”而文件系统的后台程序是这样工作的:先接受一个请求,作出回应,然后再接受下一个请求,再作出回应。。。。。
Linux 系统是个宏系统。在 Linux 下,这5个进程会分别向内核发起一个系统调用。内核必须非常仔细才不会混淆了这几个调用,但是它会有条不絮地将资源分配给这些进程,让它们能同时顺利地执行各自的任务。这个优势让 Linux 系统用起来更加快捷和高效。
对于编程的方法论
还记得学校里那个总能答对问题的家伙吗?他的答案总比其他人来得快,恰恰是因为他没有刻意去寻找正确答案。他并不知道问题本该以什么样的标准思路来解决,只是以一种合理的思路来考虑问题。因此别人一听到他的答案,就觉得合乎逻辑。
编程也是如此。你可以用蛮劲解决问题,跟问题慢慢磨蹭,知道它不再是问题为止,看谁磨得过谁。不过这是个愚蠢的办法。或者你也可以找到正确的方法来解决问题,这样问题就会立马消失。换一个角度看问题,你会突然灵光一闪:问题之所以成为问题,只是因为我原先看问题的方法不对!
伟大的数学家不会采用既繁琐又无趣的方法解决问题,因为他们能理解问题背后的真正的内涵,并且利用这个内涵找到更为简便的方法,从而得出答案。
我还是很难解释清楚,闭门三天冥思苦想却徒劳无功,找不到一个漂亮的好方法来解决难题,这编程到底有什么好着迷的?其实,一旦找到了解决问题的哪个漂亮方法,那种感觉就会无与伦比。
编程必经阶段!
如何领导 Linux 开发
我很早就认识到,作为领导者,最好最有效的做事方法,并不是让下属去完成领导吩咐的工作,而是让他们做真正想做的工作。好的领导者自己出了错的时候能够随时自知,并且懂得如何及时补救。此外,他们还会听取他人意见,把决策权交给他人。
我换个说法吧。Linux 之所以能成功,大部分都该归功于我的个人缺点:首先,我很懒;其次,我喜欢占别人劳动成果的便宜。要不然,”Linux 开发模式”就只能局限在6个书呆子的小圈子里,只是日常用邮件交流一下开发心得罢了。
linus 与乔布斯
我和乔布斯的世界观存在根本分歧。史蒂夫就是史蒂夫,跟媒体描述的没什么两样。他只对自己的目标感兴趣,尤其市场这一块,他极为看重。而我则对技术有兴趣,所以他的目标和言论打动不了我。他一直强调,要是我想进入台式机市场,就应该与苹果联手。但我心想:我不在乎啊!为什么我就应该对苹果的事情感兴趣?我就是觉得苹果没意思。我的人生目标可不是卫莱抢占台式机市场。
当他知道我一点儿也不关心 Mac 市场的大小,也不关心微软市场大小时,确实非常惊讶。但是,他事先并不了解我有多讨厌Mach内核,所以我不怪他
尽管我基本上并不认同他的观点,但却还挺喜欢这个人的。
Linux 系统的传播
从我的卧室里发布0.01版本开始,Linux 系统就没有太大的变化。比起外头的其他操作系统,Linux 更加灵活。在 Linux 里面,你就是自己的老板。而且,至少在web服务器里,它不会像那些互相竞争的操作系统那么“臃肿”,有那么多多余的功能设计。
它也流进每一处对它感兴趣的地方。Linux 倒是不占什么利基市场,但它小巧而灵活,很多地方都用得上它。超级计算机里有它,还有一些非常非同一般的地方,如美国政府的费米实验室,NASA,也能找到它的身影。不过,Linux 在这些地方,充其量只能算作是服务器的 Linux 系统的一种延伸,而桌面电脑 Linux 系统就是我起步的地方。同时,在一些嵌入式设备中,比如在某些防抱死刹车系统和手表中,你也能看到 Linux 系统。
关于超时工作
Linux 不是靠牺牲宝贵的睡眠时间换来的。事实上,如果你想听真话,那我就要说,我更喜欢睡觉。
老实说,我也讨厌加班。软件开发是一门艺术,并不是流水线。不是投入人月就能取得收成的!
关于攻击者
有人声称,作为 Linux 领头人所产生的压力,已经使我从一个电脑迷变成了一个混蛋。他错了,实际上我一直是一个混蛋。
关于 GPL 许可证
GPL 为每个人都提供了机会,成绩卓著,这是人类的一个巨大的进步。可是,所有创新都应纳入 GPL 吗? 这他妈的完全不可能,应由开发者自行决定是使用 GPL 还是使用其他保护版权的方法。令我几乎发疯的是,理查德·斯托曼认为非黑即白,别无它途,由此产生了不必要的政治划分。
领导与员工
狗为什么会这么喜欢人类?
那可不是因为主人每六个星期就带它们趣宠物美容,也不是因为偶尔在路边帮它们拾粪便。狗喜欢人类,是因为狗喜欢被人使唤,这是让它们活下去的理由。作为人类,你是狗的主人,自然就由你来告诉狗它们应该做什么。听从你指挥是它们的情感依托,而且它们就好这口。
不幸的是,人类的天性也是如此。他们总想有人能告诉它们做什么,这是我们的内核。任何社会性动物的本性都是如此。
但这并不意味着你就该卑躬屈膝。这只能说明,你比较喜欢和那些指挥你做事的人待在一起。
当然,一些人很有主见,坚定的信念使他们在某些场合敢于这样表达自己:”少来了,我凭什么要听你的?“这样一来他们就成了领导。成为领导不是难事。而那些缺乏主见的,就会倾向于让别人来为他们作决定,听别人的指挥做事。
一语道破码农与工程师的区别!
对理查德·斯托曼的态度(开源运动的创始人、Emacs、gcc 等开源软件的创始人)
我对理查德非常反感,我之所以对他反感,完全是因为他总是不停抱怨别人不使用 GPL 。我对理查德敬而远之,这我随口就能说出一大堆理由。我认为自己倾向于敬重那些像理查德一样有强烈道德感的人。但是他们为什么就不能把这种观念摆在心里呢?我最讨厌别人告诉我该做什么不该做什么。我尤其憎恶别人自认为有资格把他们的观点凌驾于我的个人决定之上。
关于知识产权
对很多人,知识产权与人类的创造能力相关,与那些使我们成为人类而不是禽兽的东西相关。在这个背景下,”知识产权“这个名称本身就是一种冒犯:这不是财产,不能像卖动产那些随便就拿去卖。这可是一种创造性的活动,是人类能做到的最伟大的事情。不过它也是漫漫长夜编写出来的程序,是能令程序员特别骄傲的东西。它实在太宝贵,轻易不会拿去卖:它可是你赖以证明自己的不可或缺的东西。
那种创造力,不管在什么方面,绘画、音乐、雕塑、写作,或者是编程,都是神圣不可侵犯的!
许多要求加强知识产权立法的讨论是基于这样一种观点,即给创造者和艺术家以更多的"保护"。而人们似乎不曾、或者说是从未意识到,这样一种强有力的权利导致一些人剥夺了另一些人的权利。如果你得出我认为版权实际上是有害的结论,那么你错了。恰恰相反,我热爱版权。我只是认为没必要将版权所有者的权利无限扩大。不要扩大到将消费者的权利都被剥夺殆尽
关于控制欲
当娱乐行业还在贪婪地试图用技术控制顾客的时候,DVD加密技术就被破解了——还不是被那些想要翻录 DVD 的人破解的呢,是被那些想要在 Linux 系统上看电影的人破解的。这些才是真正想要买 DVD 的人,但买了也没用,因为那些 DVD 光盘根本就无法在它们的设备上使用。娱乐产业的那些人想要保护自家封地的行为就这么失败了:加密技术不仅阻碍了市场的扩张,还激发了人们去想方设法破解 DVD 加密技术,目光短浅的短期策略又一次坏了事。
关于Java语言
不要试图以技术来控制用户,那是决不可能成功的,最终要对公司造成损害,而且也会阻碍人们对于该项技术的接受。Java 就是一个例子,它现在已经远没有其初期那么富有吸引力了。Sun 公司原本想要控制 Java ,但却基本上已经失去了它。Java 现在依然运行得很好,然而却显然没有充分发挥其潜力
关于开源开发模式
人们头一回听说开源模式时,都觉得不可思议。单靠其背后的开源理念,这种模式是无法传开的,只有当人们开始注意到开源模式原来是发展和完善最佳质量的技术的最好方式,它才能逐渐获得人们的青睐。
开源运动如此神奇,其中最令人费解的一点,就是为什么会有这么多聪明绝顶的程序员愿意在完全无报酬的情况下屈尊工作。用一个动机来概括这一切,最合适不过了。在生存已经或多或少得到保障的社会,金钱不是最大的动机。众所周知,人们被热情驱使的时候,就能把工作做到最好。要是他们能享受工作的乐趣,更是如此。
对于名声和财富
醒醒吧,谁不想出名,谁不想有钱?反正我想。十几岁的时候,我就梦想能成为一个著名的科学家。想爱因斯坦那种,甚至要成为更厉害的。谁不想呢?不做科学家也行,那就赛车手啊!要不然摇滚明星也行。能成为特蕾莎修女那些的,或者美国总统也不错。
社会为什么会进步呢?
作为一个技术专家,却人为科技其实什么也没推动。应该是社会改变科技,而不是反过来。科技只不过限制了我们做某件事能达到的程度,以及我们完成某件事的最低成本。
科技,和它创造的所有产品一样,就目前而言都是愚蠢到家的东西。科技唯一有意思的地方,就是你能用它来干什么,而且它背后的驱动因素实际上就是人类真正的需要和兴趣。如今人与人之间面对面的沟通已经很少了,因为我们有了新的沟通方式。新的沟通方式能够得到广泛的普及,他们想要交流;就算没有沟通的渠道,他们也会去创造。诺基亚就是这么来的。
生活的意义
毕竟,我对”生活的意义“的这点看法并不能真正指引你去做应该做的事,它顶多是说:”是的,你应该奋斗,但生活的最终目的是为了享受乐趣“
当然了,我说得不一定对!
人云亦云的人太多,有自己的主见的人才是难得!
Linux 之父自传《just for fun》读书笔记的更多相关文章
- 《Linux内核设计与实现》 Chapter4 读书笔记
<Linux内核设计与实现> Chapter4 读书笔记 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行态进程之间分配有限的处理器时间资源的内核子 ...
- linux内核分析 1、2章读书笔记
一.linux历史 20世纪60年代,MIT开发分时操作系统(Compatible TIme-Sharing System),支持30台终端访问主机: 1965年,Bell实验室.MIT.GE(通用电 ...
- 《Linux内核分析》第六周 读书笔记
<Linux内核设计与实现>CHAPTER3阅读梳理 [学习时间:3hours] [学习内容:进程的描述:进程的生命周期(包括创建.终结)] 一.进程(任务)描述 1.进程是处于执行期的程 ...
- 《DevOps故障排除:Linux服务器运维最佳实践》读书笔记
首先,这本书是Linux.CN赠送的,多谢啦~ http://linux.cn/thread-12733-1-1.html http://linux.cn/thread-12754-1-1.html ...
- 《Linux内核分析与设计实现》读书笔记一
第一章 Linux内核简介 1.1 Unix的历史 Unix的特点: Unix很简洁,仅仅提供几百个系统调用并且有一个非常明确的设计目的: 在Unix中,所有的东西都被当做文件对待. Unix的内核和 ...
- 2013337朱荟潼 Linux&深入理解计算机系统第七章读书笔记——链接
第七章--链接 0.总结 链接编译时可以采用静态链接或动态链接. 连接器主要任务:符号解析和重定位. 多个目标文件可定义相同的符号,可以被连接到一个单独的静态库. 链接器可以生成部分链接的可执行文件 ...
- Linux内核设计与实现第四周读书笔记
第5章系统调用 5.1与内核通信 主要作用: 为用户控件提供了一种硬件的抽象接口. 保证了系统稳定性与安全性. 为用户空间&系统提供公共接口. 5.2API.POSIX和C库 一般情况,应用程 ...
- 《Linux内核分析》第七周 读书笔记
<深入理解计算机系统>CHAPTER7阅读梳理 [学习时间:3hours] [学习内容:链接需要的代码&数据:链接机制:链接生成的目标文件] 一.链接概述 1.链接 定义:链接是将 ...
- 《linux内核》课本第五章读书笔记
随机推荐
- mysql 开发基础系列20 事务控制和锁定语句(上)
一.概述 在mysql 里不同存储引擎有不同的锁,默认情况下,表锁和行锁都是自动获得的,不需要额外的命令, 有的情况下,用户需要明确地进行锁表或者进行事务的控制,以便确保整个事务的完整性.这样就需要使 ...
- Linux笔记总结
标签: Linux 1. 库 库是一种可执行代码的二进制形式,可以被操作系统载入内存执行.库有两种:静态库(.a..lib)和动态库(.so..dll). a. 静态库 之所以称为[静态库],是 ...
- centos7编译linux的内核源码
昨天编译了一个linux 内核源码,遇到一些问题, 今天把我遇到的问题和解决方法分享给大家.希望可以帮助到需要的人. 1.检查是否安装了相应的包 我第一次编译的时候只安装的“Development T ...
- Kubernetes 弹性伸缩全场景解析 (一)- 概念延伸与组件布局
传统弹性伸缩的困境 弹性伸缩是Kubernetes中被大家关注的一大亮点,在讨论相关的组件和实现方案之前.首先想先给大家扩充下弹性伸缩的边界与定义,传统意义上来讲,弹性伸缩主要解决的问题是容量规划与实 ...
- JVM中对象的回收过程
当我们的程序开启运行之后就,就会在我们的java堆中不断的产生新的对象,而这是需要占用我们的存储空间的,因为创建一个新的对象需要分配对应的内存空间,显然我的内存空间是固定有限的,所以我们需要对没有 ...
- 使用meterpreter让没有安装python解释器的肉鸡设备执行任意python程序
目标设备不需安装python解释器就能让其执行python程序 # 需要在与目标meterpreter的session中加载python模块 meterpreter > load python ...
- 使用NetworkX模块绘制深度神经网络(DNN)结构图
本文将展示如何利用Python中的NetworkX模块来绘制深度神经网络(DNN)结构图. 在文章Keras入门(一)搭建深度神经网络(DNN)解决多分类问题中,我们创建的DNN结构图如下: ...
- Response.Redirect()和Response.RedirectPermanent()区别
备注:这里我用到了Response.RedirectPermanent()用于做301跳转, 如:我希望访问网站的url访问地址为:http://m.shop/abc.html ,用户输入的访问地址: ...
- Spring Bean的生命周期,《Spring 实战》书中的官方说法
连着两天的面试 ,都问到了 Spring 的Bean的生命周期,其中还包括 昨晚一波阿里的电话面试.这里找到了Spring 实战中的官方说法.希望各位要面试的小伙伴记住,以后有可能,或者是有时间 去看 ...
- 【Java每日一题】20170310
20170309问题解析请点击今日问题下方的“[Java每日一题]20170310”查看(问题解析在公众号首发,公众号ID:weknow619) package Mar2017; public cla ...