大道至简第二章读后感
关于大道至简的第一章我们了解到了,程序等于算法加结构,对于愚公的做法,经过分析之后变成了一个简单的程序,一个循环,一个判断语句即可将移山这个问题解决完。但是愚公是人,人的精力终归是有限的,愚公可以多吃点饭,多加点班,但是突破不了人的精力极限。随后来到第二章的内容。。。
——懒人造就了方法。
“ 僰蘭道有蜀王兵 ,亦有神作大滩江中。其崖崭峻不可破, (冰)乃积薪烧之。 ”——《华阳国志》
从李冰的积薪烧之和愚公的“碎石击壤” ,我们已经看出了事物的进化了。愚公固然勤快,或许在在愚公的项目计划案的首页里就写着朱笔大字“吾今胜昨倍许,明胜今倍许,而山不加增,何苦而不快。 ”,但也是这份勤快,愚公并没有看到解决问题的方法,只是单纯的去用最简单的思想去做这件事。反观李冰,如果李冰也象愚公那样日复一日地督促着他的团队凿石开山, 那他一定没有时间来学习、寻找或者观察,当然也不会发现“烧”这种方法可以加快工程进度,使得一大座山短时间就被哗啦哗啦地给“碎”掉了。这么大的项目中如果忙起来,必定是“夙夜忧叹”,而李冰却有时间闲到去看火烧石头,那么李冰一定是个懒人,但是正是“懒”让他发现了解决事物的方法,反而是问题的解决变得更加事半功倍。对于一个软件开发人员来说,良好的方法是解决一个问题的关键,对于同一个问题可以向愚公一样“碎石击壤”,也可以像李冰那样“积薪而烧之”,人是有惰性的,如何能用更少的力气去做更多的事,往往是我们一个程序开发人员应该思考的。
——一百万行代码是可以写在一个文件里的。
据书中说道早期的汇编语言里,GOTO 语句是用得非常非常频繁的,将一个语句 GOTO到另一个文本文件里去,既不现实也不方便。所以大家习以为常,便统统地把代码写到一个文件里。从那时起将代码写的一个文件中成为了程序员们的习惯,再后出现了Delphi 1.0,然而在Delphi 1.0编译器出现了一个最大的bug让无数的程序员崩溃,就是Delphi 1.0 的编译器居然不支持超过 64K 的源代码文件。64K的文件是个什么概念1 行代码大概(平均)是 30 字节, 64k 的源代码是 2184行,如果代码风格好一点,再多一些空行的话,差不多也就是 3000 行上下。也就是说,在 Delphi 1 的时代(以及其后的很多很多时代),程序员把 3000 行代码写到一个文件里,是司空见惯的事了。按照这一部分人的逻辑,一百万行代码其实是可以写在一个文件里的。不单可以,而且编译器、编辑器等等也都必须要支持。这才是正统的软件开发。直到“单元文件(Unit)”的出现才有了单元文件, 也就很快出现了一个新的概念: 模块把一个大模块分成小模块, 再把小模块分成更细的小小模块,一个模块对应于一个单元。于是我们可以开始分工作了, 一部分人写这几个单元的代码, 另一部分则写那几个。这都要归功于那些懒人们,在敲击到5001page down突然崩溃的懒人程序员们。也就是说勤快人有勤快人的方法,懒人有懒人的方法,懒人们更会想着去花很少的力气去做事但还要把事情做好。
——你桌上的书是乱的吗
看完这节之后,书是否是乱的,表面显示的是一个生活是否有规律,然而,我觉得对于程序员来说,是一种逻辑思维分析的能力,对遇到的问题通过分析分类进行解决。也要对所学的知识进行分类的,向对书的分类一样,将常用的放在手边,把不常用放在书柜里。条理的分析能力也是程序员应具备的素质。
——程序=算法+数据结构
所谓“面向过程开发” ,其实是对“结构化程序设计在代码阶段的一个习惯性的说法。原先的程序设计是面向过程的开发,而现在主要的程序开发用的是面向对象的程序设计,这是一种进步,也就是将一个文件代码敲到“死”的做法,将程序分为各个模块,一人负责一部分分工解决,也是凸显了懒人造就了算法这点