附录二. 编程之道

人生历练之道

种瓜得瓜,种豆得豆

种瓜得豆,种豆得瓜

失之东隅,收之桑榆

绳锯木断,水滴石穿。

山重水复疑无路,柳暗花明又一村。

十年磨一剑,霜刃未曾试。今日把试君,剑气冲牛斗。

有志者,事竞成,百二秦关终属楚。

苦心人,天不负,三千越甲可吞吴。

阿基里德:我找到了。尤里卡!

昨夜西风凋碧树。独上高楼,望尽天涯路。

为伊消得人憔悴,衣带渐宽终不悔。

众里寻她千百度,蓦然回首,那人却在灯火阑珊处。

软件人本之道

以人为本

By people, Of people, for people

民治,民有,民享

人制作的,人所有的,人使用的

天地不仁,以万物为刍狗;圣人不仁,以百姓为刍狗。

天地对待万物不存偏私, 圣人对待百姓不存偏私。

lisp的能力是强的,但是违背了以万物为刍狗,它没有让简单的事情简单,比如加减乘除这些东西应该有很方便的表示;违背了以百姓为刍狗,没有考虑广大的普通程序员,他们不熟悉函数,递归,宏这些概念,只是想解决手边的问题,而没有掌握理论的愿望。掌握理论能够更好更多更广泛地解决问题,但是掌握理论是要花时间的。c的效率高,但是它没有让文本处理等这些任务简,也没有让函数编程等等简单;没有考虑那些非系统程序员的情况。所以lisp语言, c语言等等不是天地, McCarthy和Ken.Tompson 和Dennis.Riche等也非圣人。

我们设计的软件, 应该考虑各种功能,不管是常用的还是不常用的,不管是容易实现的还是难以实现的。要考虑各种用户,不管是水平低的还是水平高的,不管是专业的还是非专业的。

软件评价之道

大道废,有仁义;智慧出,有大伪;六亲不和,有孝慈;国家昏乱,有忠臣。

不要复杂,要简单。用户发明的技巧越多, 说明系统本身存在的的问题越多。

五色令人目盲;五音令人耳聋;五味令人口爽;驰骋畋猎,令人心发狂;难得之货,令人行妨。是以圣人为腹不为目,故去彼取此。

华而不实的编程技巧,界面装饰和功能容易败坏软件,软件应该专注于最基本最实用的功能。

天长地久。天地所以能长且久者,以其不自生,故能长生。是以圣人后其身而身先,外其身而身存。不以其无私邪?故能成其私。

程序员在编程序时应考虑如何使用户方便, 而不是自己编程方便。使用软件的人越多,程序员的价值就越大。

上善若水。水善利万物而不争,居众人之所恶,故几于道。

软件应该解决人们的困难,而不是为了表现自己。

太上,不知有之;

其次,亲而誉之;

其次,畏之;

其次,侮之。

信不足焉,有不信焉。

悠兮,其贵言。

功成事遂,百姓皆谓:“我自然”。

对各种语言的评价

太上: 不知有之: 各种系统应该追求这种境界。

其次,亲而誉之: 用户喜欢它,赞赏它的各种特性。python ruby lisp scheme perl php c++ java smalltalk

其次,畏之: 用户小心翼翼地使用,非常担心违反它的某些规则。smalltalk lisp scheme c++ java cobol fortran asm

其次,侮之: 不能完成用户的任务,用户弃之如敝屣。

信不足焉,有不信焉。它不值得信任,用户当然就不会信任它。

悠兮,其贵言。好的系统总是默默地工作,它很少显示自己的存在。

功成事遂,百姓皆谓我自然: 用户感觉自然而然就顺利完成了任务,根本没感觉到系统起了什么作用。这种系统是最好的系统。

软件设计之道

道可道,非常道。

名可名,非常名。

道,可道,非常道:

已经归纳出来的规律,都不是世界终极的普适的规律。

软件,程序反映了某种现象,都不是终极的,固化的,

世界总是在变化,软件也会要变化。

名,可名,非常名。

任何名称的涵义都局限在一定环境之中,没有名称能超然的指示固定的对象。

符号,模式指示了某种东西,并不是无论何时何地都能够用来代表那个东西,而且那个东西也不是总是要用同样的符号或模式来代表。

道的变化

计算机: 机械式计算机,电子管计算机,大型机,小型机,工作站,桌面计算机,笔记本电脑,掌上电脑,智能手机,平板电脑。

局域网,互联网:体现了计算机硬件的变化

操作系统: MSDOS,Windows3.1,Windows 95, Windows NT, Windows2000, WindowsXP, Unix, Linux, MacOS,体现了操作系统原理的变化

数据库:Dbase,FoxBase,FoxPro,Access,SQLServer, Oracle,……

程序设计语言理论: 编译原理 结构化程序设计,面向对象程序设计,函数式程序设计

名的变化

机器语言,汇编语言, 高级语言

高级语言:Fortran, Lisp, C, C++,Java,C#,Pascal,Haskell,Php,Perl,Python,XML: html,MathML…

一千多种高级语言

万物皆易。易者变也。

子在川上曰:逝者如斯乎,不舍昼夜!

尼采说:重估一切价值。

Kent Beck:解析极限编程-拥抱变化

天下皆知美之为美,斯恶已;皆知善之为善,斯不善矣。

按照流行标准设计程序, 不会有大的效益, 必须有一些东西是与众不同的才行。

有无相生,难易相成,长短相形,高下相盈,音声相和,前后相随,恒也。

难易相成:

你认为难的,别人可能认为容易。

你过去觉得很难的,现在可能发现它很容易,

现在觉得很容易的,将来反倒可能会觉得很难。

计算机难做的,人很乐于去做,计算机容易做的,人做起来很难,

计算机实现的时候很艰难,是为了让人用起来很容易。人艰难的去研究,是为了让计算机很容易的实现。

长短相形:

系统的长处,可能正好孕育着他的短处,在这方面有长处,可能就导致它在另一方面有短处

我在窗口看风景,风景里的人在桥上看我。

程序与数据

硬件与软件

生产者与使用者

不要手里有把锤子,见到什么都是钉子。

手里有把锤子,什么都可以当成钉子。

需要敲钉子,什么都可以当场锤子。

需要敲钉子,不见得什么东西都适合当锤子。

不要重复发明轮子。

试试重新发明轮子。

技术修炼之道

天下皆知美之为美,斯恶已;皆知善之为善,斯不善矣。

好的理论,工具最初必然只被少数人理解,一旦为大众所理解运用,则必然有新的更先进的理论,工具在萌芽,在发展。

圣人不积,既以为人己愈有,既以与人己愈多。

与人交流,无保留地表达自己的想法,设法使人理解,受到启发,对方反过来也会对自己有启发,帮助和促进。

圣人常无心,以百姓心为心。善者吾善之,不善者吾亦善之,得善。信者吾信之,不信者吾亦信之,得信。

没有成见,海纳百川。

自见,故明;

不自是,故彰;

不自伐,故有功;

不自矜,故长。

不要只看到自己,看不到别人,自以为是,以势压人,孤芳自赏

当然也应该不自蔽,不自非,不自弱,不自卑。

不要盲目从众,人云亦云,随波逐流,被强势所压倒,自暴自弃。

人法地,地法天, 天法道,道法自然。

上士闻道,勤而行之;中士闻道,若存若亡;下士闻道,大笑之。

天道酬勤

天行健,君子以自强不息。

Table Of Contents

Previous topic

附录一. “Hello world!” 之 道名变

This Page