附录二. 编程之道 ********** 人生历练之道 ------------ 种瓜得瓜,种豆得豆 种瓜得豆,种豆得瓜 失之东隅,收之桑榆 绳锯木断,水滴石穿。 山重水复疑无路,柳暗花明又一村。 十年磨一剑,霜刃未曾试。今日把试君,剑气冲牛斗。 有志者,事竞成,百二秦关终属楚。 苦心人,天不负,三千越甲可吞吴。 阿基里德:我找到了。尤里卡! 昨夜西风凋碧树。独上高楼,望尽天涯路。 为伊消得人憔悴,衣带渐宽终不悔。 众里寻她千百度,蓦然回首,那人却在灯火阑珊处。 软件人本之道 ------------- 以人为本 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:解析极限编程-拥抱变化 天下皆知美之为美,斯恶已;皆知善之为善,斯不善矣。 按照流行标准设计程序, 不会有大的效益, 必须有一些东西是与众不同的才行。 有无相生,难易相成,长短相形,高下相盈,音声相和,前后相随,恒也。 难易相成: 你认为难的,别人可能认为容易。 你过去觉得很难的,现在可能发现它很容易, 现在觉得很容易的,将来反倒可能会觉得很难。 计算机难做的,人很乐于去做,计算机容易做的,人做起来很难, 计算机实现的时候很艰难,是为了让人用起来很容易。人艰难的去研究,是为了让计算机很容易的实现。 长短相形: 系统的长处,可能正好孕育着他的短处,在这方面有长处,可能就导致它在另一方面有短处 我在窗口看风景,风景里的人在桥上看我。 程序与数据 硬件与软件 生产者与使用者 不要手里有把锤子,见到什么都是钉子。 手里有把锤子,什么都可以当成钉子。 需要敲钉子,什么都可以当场锤子。 需要敲钉子,不见得什么东西都适合当锤子。 不要重复发明轮子。 试试重新发明轮子。 技术修炼之道 ------------ 天下皆知美之为美,斯恶已;皆知善之为善,斯不善矣。 好的理论,工具最初必然只被少数人理解,一旦为大众所理解运用,则必然有新的更先进的理论,工具在萌芽,在发展。 圣人不积,既以为人己愈有,既以与人己愈多。 与人交流,无保留地表达自己的想法,设法使人理解,受到启发,对方反过来也会对自己有启发,帮助和促进。 圣人常无心,以百姓心为心。善者吾善之,不善者吾亦善之,得善。信者吾信之,不信者吾亦信之,得信。 没有成见,海纳百川。 自见,故明; 不自是,故彰; 不自伐,故有功; 不自矜,故长。 不要只看到自己,看不到别人,自以为是,以势压人,孤芳自赏 当然也应该不自蔽,不自非,不自弱,不自卑。 不要盲目从众,人云亦云,随波逐流,被强势所压倒,自暴自弃。 人法地,地法天, 天法道,道法自然。 上士闻道,勤而行之;中士闻道,若存若亡;下士闻道,大笑之。 天道酬勤 天行健,君子以自强不息。