一、概论
将一个想法与人共享,就等于大脑里有两个想法。
迫于时间和预算的压力,只能解决问题的某个特定的部分。
即使是世界上最好的软件,也只有当人们对它产生了解并认识到它的真正价值时,才会为人所用。(人们总是以为付费
的软件比免费的好)
unix哲学
1)小即是美。它们可以以独特有效的方式结合其它小事物,并且容易被开发者预见。
2)让每一个程序只做好一件事情。减少冗余代码,避免不必要的复杂性,更灵活。
3)尽快建立原型(prototyping)
4)纯文本存储数据,增加可移植性。
5)充分运用杠杆原理(代码重用)
6)程序从不创建数据,而是修改数据。
次要
1)尽可能使操作系统内核小而轻巧。
2)并行思考。大多数任务都能分解成更小的子任务。而且有些可以并行运行。
3)1+1>2
4)寻找90%的解决方案。百分百完成任何事是很困难的。故意忽略掉那些代价昂贵、费时费力、难以解决的项目。
5)层次化思考。
二、人类的一小步
1)一个小的程序,只完成一项工作,更利于维护。理解程序是维护程序的第一步。
2)小程序占用更少系统资源,利于长驻系统。
3)对明天的唯一预测将是它将与今天不同。变化不可避免。小程序利于组合应用,更灵活。
三、建立原型
1)世界复杂多变,人们不可能学会所有的事物。每一个软件都是在不断试验,犯错,返工修正中形成的。
变化不可避免。认得知识总是有限的。现实经验告诉我们不会随随便便成功。
对目标了解的越充分,越能降低修改的成本。
永远没有做完的软件,只有发布的软件。(人们会不断的为软件添加功能)
2)建立原型,使目标具体表象化。
利于发现设计的错误。
演示给用户,获得反馈。你想到的不一定和用户想到的一样。
每一个正确的设计的背后都有着数百个错误的设计方案。尽量在早期剔除不良设计方案。
3)生老病死,世界不变法则。
第一系统:在压力下研发,只实现主要的功能,初级阶段,忽略一些细节,拥有高的执行效率,但是欠缺某些
功能。
第二系统:在第一系统上不断添加新功能,修正。由于功能添加过多,导致效率低下,而且添加过多无用或者
基本不用,少用的功能,导致系统臃肿。
第三系统:中和一二系统,具有较高的效率,必要的功能,删除无用或少用的功能。更精简,有效。有些特殊
功能可以以附件的形式提供给用户。(是一二系统的平衡点)
A、大多数传统软件的编写过程:
1)思考系统的设计
2)建立一个原型来测试既定目标
3)撰写详细的功能和设计规范
4)编写代码
5)测试软件
6)修复现场测试中发现的bug和设计缺陷,并随时更新软件规格文档
传统主义者喜欢记录所有的要点,好像反复撰写规格文件就能保证他考虑到了所有的设计因素。现实是这样只
会过分的将精力放在写文档上,而且开发时间是有限的,导致软件无法成品。所以,在写第一行代码之前,就应该有完
成90%的设计工作的期望。
B、unix开发人员开发过程:
1)撰写一份简短的功能规格文件。包含要点即可
2)编写软件
3)迭代的软件测试/重新编写代码,直至完成全部功能。
4)如果有必要的话,再写一份详细文档。
1、多数人并不真正知道自己想要的功能是什么:2、人们很难去描述那些还不存在的事物。所以记下一些与目
标直接相关的事情,然后构建系统,并完善它.(根据最终用户反馈)
有人认为B方法适合小型系统,而A方案适合大型系统。
四、可移植性的优先权
1、舍高效率而取可移植性(高效意味着使用了一些特殊的硬件功能,可移植意味着能有广泛的市场)
软件开发过程涉及无数选择,每个选择都意味着各种妥协。程序员总要在一大堆方案中做出取舍,尽量去满足
那些往往自相矛盾的目标。
最强大的计算机并不是有着最快cpu、最大磁盘和最强软件的机器,而是使用最频繁的那台。
硬件系统更新很快,性能速度都飞快增长。
五、杠杆原理
关键词:金字塔营销、杠杆的支点、让别人来帮你做大量工作
1、无论你你有多么聪明、精力充沛或是锐意进取,在人生的漫漫长途中,一个人的精力就只有那么多。如果想
取得非凡成就,你就必须放大自己对这个世界的影响力。就算你智商或是能力高道能在夏威夷出售冬季的皮大衣,这也
远远不够,你需要一些运营良好的业务实体,
2、NIH综合症:认为自己的程序是独一无二的杰作,而拒接使用他人现有的代码,自己从新开发。(独一无二
成为枷锁、浪费时间精力)
善于利用一切可利用的资源。如果有一个好的基础程序模板,最有效的是增值,而不是从0开始。
潜在用户及用户只关心软件能为他们做些什么,而不关心开发的过程。
六、让电脑自动化,人类反应速度远比不上计算机
1、避免功能控,不断的往程序里添加功能,却不考虑用户的需求,最后偏离目标市场用户。少用,几乎不用的
功能不做考虑。
2、所有软件都是为了达成某个或多个目的。而一个单一软件达成多个目的会使它变得十分臃肿。
3、每一个程序都是数据过滤器。输入数据-->算法过滤-->结果数据输出。
4、永远不要自以为是的认为所有用户会遵从你的设计意图使用软件。
十、linux vs windows
1、新手总是希望软件能很快上手。windows试图满足新手易于使用的倾向。
2、内容为王,不管图形界面多么花俏,真正有价值的只有有价值的“内容”。万维网和英特网只是传输信息的
一种手段。三种传输媒介:视觉,听觉,文字。
3、文本至上。视频,音频如果没有文字说明就难以检索,同时存放它们需要很大的空间。而人们可以高效的对
文本进行索引和查找,相同信息却占用更少空间。(有人认为文字更能精确的表达更多的内容,文字表述抽象)
4、图形界面在开始时帮助人们克服对电脑的恐惧(新事物的恐惧),可随着数据量的增加,却阻碍了新手成为
高级用户。(封装过多,让人们开不到事物的本质)
十一、你无法总是得到你想要的东西。
1、世界上任何一种语言都具备与其他不同文化的语言对接的能力,而且他做的事情就是连接。将我们名为生活
的集市连接。
2、windows,闭源,只有少数人可以改造,不那么具有多样性。Linux开源,任何人都可以将其改造,使其更具
有适应性和应用价值。(linux更具有多样性,更利于在自然法则下生存。适者生存)但是不可否认微软的闭源的确为其
发展做出了贡献。如果微软开放源代码,很快就会有第二个类微软的山寨出现。
3、人们常常喜欢华而不实的“闪光点”,出于无知。
4、出众的营销策略,“酒香不怕巷子深”在这个日益复杂,竞争激烈的软件世界里已经行不通了。
5、在加密的世界里,部分人采用封闭源代码及加密算法的方法来保护信息的安全,但是unix却采用另一种方法
,就是将源代码和算法开源,鼓励人们去破解它,并将其破解方法及解决方案提交给开发者,再将其纳入unix的安全体
系之中。(第二种方法拥有更大的概率提高系统的稳定性,发挥人民群众的力量,不过也将冒着风险)
结论:完全闭关锁国必将国破家亡。开放与封闭共存,合理组织将发挥更大的作用。
最后,看完本书后,发觉作者对windows持有很大的偏见。不管是windows,还是linux都有其存在的理由和特点。windows
主要面向于一般普通用户,那些用电脑只是为了上网、看视频、听歌等休闲活动的普通大众。对其内在进行封装是很合
理的一件事。而至于不开放源代码,我只想说在一个“山寨”横行的年代,作为一个商业系统,为保护自身利益不收非
法损害,这也是一件合理选择。而对于那些作者提出的哲学思想,其实并不是unix最先提出来的,他们早在unix出现时
就应该存在与世界,只不过是在不同的领域而已。准确的来说,不是unix创造了这些思想,而是unix利用了这些思想。
同时我也很同意开源的伟大力量,它把世界各地,不同人的思想集中起来,并把软件改良的更好,更具有应用价值。开
源很大程度增加了软件的多样性,使其在竞争中存活的概率增大。(进化论的观点)