大道至简 (求道于盲)

       大道至简  求盲于道

读完大道至简这本书,我印象最深的一句话是韩愈回答陈生书的一句话“足下求速化之术,不于其人,乃以访愈,是所谓借听于聋,求道于盲。”这句话虽是韩愈说来批评其学生陈生书,跟他求速成之术,就好像向聋子打听消息,向盲人问路一般。但是其相对于软件工程来说,却恰恰相反,因为软件工程要搞的就是所谓“借听于聋,求道于盲”。

众所周知软件工程的本质是编程,编程的本质即使完成人机对话,让计算机明白人的用意。这就好比是借听于聋,求道于盲”,计算机只是一台机器他怎么会理解人的用意呢,如今我们都已经知道这是通过人来编写程序然后让计算机去编译,从而实现的。但如果我们直接这样去解释,这就有些不符合发展的顺序了。

先辈们首先是提出这个问题,可能开始想得和韩愈一样怎么可能借听于聋,求道于盲”呢,但是我们试想一下聋子难道就不能获取消息了吗,瞎子就不识路了吗,答案是否定的,要知道盲人并非不知道路如何走,只是他不能象常人 一样描述他所知道的路。因此“问道于盲”是没有错误的, 真正错误的是你睁着眼睛问,所以我们要想去向瞎子问路,那就先熟悉他的认路习惯,我们需要在正常人与盲人之间建立一种沟通的方式, 既然盲人不能睁开眼睛,那么你就闭上眼睛好了。编程也是如此,既然计算机无法直接理解我们的语言,那么换一种方式,用程序表达给计算机就行了。

至此编程的本质已经解决,他就好比把我们解决一件事的方法,用编程的语言翻译给计算机。

书中提到了编程的精义:程序 = 算法 + 结构+方法。

算法就好比书的第一章愚公移山,“虽我之死,有子存焉;子又生孙,孙又生子;子又有子,子又有孙。子子孙孙,无穷匮也。而山不加增,何 苦而不平?”其算法就是一个分支和一个可实现循环。愚公的程序很简单,单是凭着自己和后代的勤劳想“扣石垦壤,箕畚运于渤海之尾 。毕力平险,指通豫南,达于汉阴”,这个程序虽可实现但是却是耗费大量时间,编程还要有方法,这或许就是智叟嘲笑他的原因吧。与他同时代的李冰已经把程序运用上了方法“僰 蘭 道有蜀王兵 ,亦有神作大滩江中。其崖崭峻不 可破,(冰)乃积薪烧之。”我们已经看到事物的进化了。同是战国时代,《列子·汤问篇》里的愚公就要“碎石击壤”,而李冰就已经懂得“积薪烧之”了。“烧”这种方法可以 加快工程进度,使得一大座山短时间就被哗啦哗啦地给 “碎”掉了。这就是方法带来的进步,李冰为蜀地太守手里劳力肯定很多但他并没有像愚公那样去凿,证明方法胜过勤劳的愚公。结构,顾名思义就是一个程序的框架极其思路,写程序之前一定要先明白这点,才能写出程序。

看完这本书我若有所思,我之前写程序纯粹是为了完成作业而写,没有思考过为什么程序的结构,运用什么算法、方法简单,只是照着书本上的内容生搬硬套,写不出来就去问同学,老师,没有自己如何去解决问题,怎样把自己解决的思路以编程语言的方式告诉计算机。

我这样做就好比书中的愚公,只是学了一个最简单的编程,没有理解编程的精义,换个问题,依旧不会解决而且还耗时费力,况且我还没有愚公那么勤奋做不到“今是昨倍”,以此下去肯定不行。我以后写程序要先在脑中想好我是怎么解决这个问题的,然后在想好程序的结构,有没有什么好的方法,算法使程序简便,最后把程序编作编程语言输入到计算机内。

posted @ 2019-07-18 16:29  烈日灼心h  阅读(226)  评论(0编辑  收藏  举报