posts - 103, comments - 1864, trackbacks - 6, articles - 0
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

从事编程工作这么多年,经常会有人问我什么样的程序是好程序,有的甚至把程序给我看,让我给程序提提意见。而我从编程开始就踏上寻觅好程序之路。“路漫漫其修远兮 吾将上下而求索。”这好象正是我心历的写照。可以说追求编写好程序是我不变的目标。

好的程序?好的程序?什么样程序是好的?为什么这样程序是好的?中国人从小就被“好坏”教育。面对任何事物,他们都能给评出好坏来。评出结果出来,无非让复杂事物简单化,让人在第一时间能判别这件事好不好,这件事能不能做,好的就给与支持和赞美,好的就想去做就想做好。反之。我就不说了。

但是,好坏两个字好写,但是事物好坏的理由和标准却是绝对的复杂,有时甚至绝对的对立。从某种意义上来说,人类就是在事物的好坏上不断争斗中延续着自己。

“白日依山尽,黄河入海流,欲穷千里目,更上一层楼。”我们从小到大,经历过无数次教育,读过不知道多少本的书,看过不知道多少篇文章,能够记忆出来的,能够背诵出来的,能够打动自己心扉的,那就是诗了。诗成了生活的浓缩、提炼和升华。而诗人则成为历代百姓文人追捧的对象。虽然现代诗处于动荡和衰败过程之中,但是经过历史长河沉淀下来的名诗依然脍炙人口,让人永生难忘,几乎找不到一个连一句诗都不会说的人,可见诗的魅力无穷。

编写程序如同写文章,有的人会写成报告,有的人会写成小说,有的人会写成杂文,文体不限各显神通。但是我以为,好的程序如同一首诗,读起来行云流水,韵味十足。诗中或工整对仗,或错落有致,或排比拟人,或比喻夸张在程序中也能表现出来。

程序和诗歌都有内容和形式两个部分。内容是本质,反应了程序的功能,反应了程序的设计水平。形式是表现,反应了内容表述。好的程序应该象一首诗,有好的内容,有好的表现形式。我发现好程序和好诗歌一样都有一些要素,这些两者要素有相当的共同点:其要注意如下:

第一要素是要有逻辑。程序的逻辑从大的方面来说是反映了程序的结构,结构清晰明了,才能引人入胜!例如,有诗的格律,如五言、七律等,诗歌只能按照格式填写,诗的格律就是诗的逻辑构架。程序的逻辑结构往往体现在时序上,例如:初始化处理、功能处理、结束处理。如此设计将使得程序更显逻辑。从小的方面来时是反映程序构架下的流程,流程次序井然、前接后续,才能使得程序执行顺畅。

第二要素是用词。程序的用词一方面是指各种变量的命名方式,另一方面是函数命名的方式。程序的用词应该用英语,变量命名和函数命名其英文单词无论是用缩写还是全写都要符合大众的读者的习惯,避免用生词、偏词、自造词。我们看到古今中外的名诗大都是用通俗易懂的词汇进行艺术组合而形成的。很少有非常用字出现。编程中要特别注意函数名中的主谓宾搭配,让读者读起来更加上口。

第三个要素是短小。编程如同编写文章,好的文章如歌如诗,其特点就是短小,一般的五言、七绝只有四行就能包含一个很深刻的主题了。编写程序也是相同的道理,要尽量让程序的行数减少。一方面要考虑在总的程序行数减少,另一方面要增加函数,使得函数里的语句行数减少。

第四个要素是精炼。一首好诗能在几句话中就激发读者的情绪、鼓舞读者的斗志、展示大自然的美景,揭示各种人生哲理。其中主要原因是诗人的能用精炼的词汇来表达诗的内容。对于编程来说,精炼就是多用函数,多用系统函数,让各种功能都浓缩在函数之中。

第五个要素是一致。一首好诗往往能读到排比、读到对仗这样的修辞手法。说到底者都是诗歌的一致性的要求。编写好的程序同样要注意一致性的要求,例如,我们尽可能采用相同的语句结构、相同的语句的缩进、相同的命名规则、相同的动词、相同长度的语句、相同计数变量、相同缓冲区变量、相同的处理函数、相同的处理流程等等。这些相同使得程序各个层次和各个方面看上去非常规范和一致。

 

当我们能用写诗的要求去编写程序,当我们能用诗朗诵的感觉去阅读程序,我们的程序员将不再机械地编写那毫无生命的代码,我们的程序员将充满激情谱写出一曲动人的乐章,感动着自己,也感动着读者。每一个代码充满着活力,是跳跃的艺术音符,无数个代码的组成却是流淌的诗,一段一段,一行一行,给人以诗的享受。我们可能永远不能写出传世之诗,我们却能够要求自己编写如诗的程序,享受那种写诗的过程和情趣。 不断地追求诗的境界将会让我们的程序更加精炼、编程工作更加美好。

 

下篇:《优秀程序员应该具备那些素质

Feedback

#1楼  回复 引用 查看   

2010-02-09 08:58 by 匡有为      
左手程序,右手诗

#2楼  回复 引用 查看   

2010-02-09 10:17 by ξ箫音ξ      
程序=算法+结构,我还是比较赞同瑞士Pascal语言之父--尼古拉斯提出的这个公式。
算法是对一个程序的逻辑实现的描述,而结构是逻辑实现所依附的数据实体。例如,你去上海之前计划是做飞机还是火车,是具体什么地点和时间到目的地一样。
从总体程序员技术能力模型上看:编程语言30%+抽象能力(数据结构50%+对现实事实的抽象理解能力10%+设计模式能力10%)

如果没有结构的编程,有可能别人看你的程序就不一定像诗歌:)

#3楼  回复 引用 查看   

2010-02-09 10:52 by 卡通一下      
好的文章,段落清晰!

好的程序,逻辑清晰!

只有这样,才能象诗!

#4楼  回复 引用 查看   

2010-02-09 10:54 by 深蓝医生      
期待作者给一段像诗一样的程序!

#5楼  回复 引用 查看   

2010-02-09 11:02 by 布尔      
打油诗
而且还是通俗的诗比较好一些,太难懂了,也闹心

#7楼  回复 引用 查看   

2010-02-09 15:10 by 大气象      
你是想说你懂诗,而不是懂程序。
完全是牵强附会之作。

#8楼  回复 引用 查看   

2010-02-09 15:34 by 道法自然      
从文章看确实感觉很牵强附会,我倒是更加喜欢简单的代码,能简单就尽量简单,而不是追求诗意,将其复杂化。就像设计模式一样,好多人第一眼看设计模式都觉得这代码看起来不错,而实际上,我认为这玩意应该是需要时再用,别过度设计,别将代码复杂化,或者诗一样的抽象化。

#9楼  回复 引用 查看   

2010-02-09 16:02 by 卡通一下      
引用道法自然:从文章看确实感觉很牵强附会,我倒是更加喜欢简单的代码,能简单就尽量简单,而不是追求诗意,将其复杂化。就像设计模式一样,好多人第一眼看设计模式都觉得这代码看起来不错,而实际上,我认为这玩意应该是需要时再用,别过度设计,别将代码复杂化,或者诗一样的抽象化。

是这样,有时几条曲线交织起来就很美,能引起很多的遐想......

很多人都说简单就是美,不知大家是否想过,要把汉字写得漂亮,简体字要比繁体字难写的多。

简单的美是要很深功力的!

#10楼  回复 引用 查看   

2010-02-09 16:07 by chunchill      
呵呵,路过。

#11楼  回复 引用 查看   

2010-02-09 17:26 by 梅桦      
1 对于oo来说,符合oo的设计原则就是好程序
2 对于算法来说,实现的算法高效就是好程序
3 对于要臭美的来说,写完程序后,点一下自动化格式,然后就是好程序

楼主所说的诗一样的代码,只能在有限的范围之内。
想想你的二进制,打印到你的A4纸张上,怎么能看出美来?

而且,美不是评定程序员的唯一标准,可能连必要条件都算不上。

#12楼  回复 引用 查看   

2010-02-09 19:59 by ccw604      
把程序当作诗一样书写,那是需要一定境界的。那是在编写了成千上万条语句后才能到达的境界。这并非程序员必须达到的境界,但是,如果你能具备这样的心境,你会感受到一种别样的乐趣,你会为自己感到骄傲和自豪。

#13楼  回复 引用 查看   

2010-02-09 22:59 by 道法自然      
引用卡通一下:
引用道法自然:从文章看确实感觉很牵强附会,我倒是更加喜欢简单的代码,能简单就尽量简单,而不是追求诗意,将其复杂化。就像设计模式一样,好多人第一眼看设计模式都觉得这代码看起来不错,而实际上,我认为这玩意应该是需要时再用,别过度设计,别将代码复杂化,或者诗一样的抽象化。

是这样,有时几条曲线交织起来就很美,能引起很多的遐想......

很多人都说简单就是美,不知大家是否想过,要把汉字写得漂亮,简体字要比繁体字难写的多。

简单的美是要很深功力的!


和你想法不同,程序不是追求美,有时候我认为更是一个系统工程,需要考虑多个因素,因此才需要追求简单。一个软件相当于一台机器,这台机器有很多零件组成,不是单纯只有一个或者几个程序员,故程序员不能简单的从自己考虑。简单了自然就能美了。当然,简单没有那么容易。

#14楼  回复 引用 查看   

2010-02-10 08:23 by 卡通一下      
@道法自然:

对于美感来说,是因人而异的!

就我而言,一直有一种强迫症似的,就连哪一句放在什么位置,都是非常的在意,久而久之就行成了自己的风格。

程序美与不美应当与大小无关,它们都是由一个个的“小程序段组成”,关键是每个程序段逻辑是否清晰,写得是否规范,应用得是否恰当,组织得是是否合理等等。

美自然就在其中了!

道法应当是规范;自然应当是应用!

规范的应用就是一种美!

呵呵!

#15楼  回复 引用 查看   

2010-02-10 11:38 by 恒星的恒心      
推荐

#16楼  回复 引用 查看   

2010-02-11 11:37 by pmerofc      
标题很好
内容不丰满

#17楼  回复 引用 查看   

2010-02-17 21:53 by euler      
佩服作者的这番联想对比。
作为写程序的最高目标,有空闲了,就对刚写的代码雕琢一番,很是享受!

#18楼  回复 引用 查看   

2010-02-17 21:55 by euler      
引用ξ箫音ξ:
程序=算法+结构,我还是比较赞同瑞士Pascal语言之父--尼古拉斯提出的这个公式。
算法是对一个程序的逻辑实现的描述,而结构是逻辑实现所依附的数据实体。例如,你去上海之前计划是做飞机还是火车,是具体什么地点和时间到目的地一样。
从总体程序员技术能力模型上看:编程语言30%+抽象能力(数据结构50%+对现实事实的抽象理解能力10%+设计模式能力10%)

如果没有结构的编程,有可能别人看你的程序就不一定像诗歌:)

#19楼  回复 引用 查看   

2010-02-23 13:02 by 陛下      
如果人们在生产的过程中加入自己的审美,像艺术创作那样,确实是一种享受呢,不管是对自己,还是消费者抑或外人。

#20楼[楼主]  回复 引用 查看   

2010-02-23 23:32 by n216      
引用匡有为:左手程序,右手诗

左右开弓!厉害!

#21楼[楼主]  回复 引用 查看   

2010-02-23 23:33 by n216      
引用ξ箫音ξ:
程序=算法+结构,我还是比较赞同瑞士Pascal语言之父--尼古拉斯提出的这个公式。
算法是对一个程序的逻辑实现的描述,而结构是逻辑实现所依附的数据实体。例如,你去上海之前计划是做飞机还是火车,是具体什么地点和时间到目的地一样。
从总体程序员技术能力模型上看:编程语言30%+抽象能力(数据结构50%+对现实事实的抽象理解能力10%+设计模式能力10%)

如果没有结构的编程,有可能别人看你的程序就不一定像诗歌:)

一个问题可以从不同的角度去诠释!

#22楼[楼主]  回复 引用 查看   

2010-02-23 23:36 by n216      
引用卡通一下:
好的文章,段落清晰!

好的程序,逻辑清晰!

只有这样,才能象诗!

逻辑清晰还不够,用词要准确,要新颖,这样的诗才是好诗!

#23楼[楼主]  回复 引用 查看   

2010-02-23 23:37 by n216      
引用深蓝医生:期待作者给一段像诗一样的程序!


等待更多的掌声!有掌声才会“诗兴大发”!

#24楼[楼主]  回复 引用 查看   

2010-02-23 23:39 by n216      
引用布尔:打油诗

先写成诗!打油诗不错呀!至少是诗呀!而且还押韵呢!

#25楼[楼主]  回复 引用 查看   

2010-02-23 23:40 by n216      
引用吉日嘎拉>不仅权限设计:而且还是通俗的诗比较好一些,太难懂了,也闹心


是的!通俗!通俗!

#26楼[楼主]  回复 引用 查看   

2010-02-23 23:41 by n216      
引用大气象:
你是想说你懂诗,而不是懂程序。
完全是牵强附会之作。


我可能即不懂诗,又不懂程序的!乱写呗!

#27楼[楼主]  回复 引用 查看   

2010-02-23 23:44 by n216      
引用道法自然:从文章看确实感觉很牵强附会,我倒是更加喜欢简单的代码,能简单就尽量简单,而不是追求诗意,将其复杂化。就像设计模式一样,好多人第一眼看设计模式都觉得这代码看起来不错,而实际上,我认为这玩意应该是需要时再用,别过度设计,别将代码复杂化,或者诗一样的抽象化。


千万不要把诗复杂化,诗应该是最抽象最简单的!我们可以不会写诗,但我们不可以不会读诗,不会读不懂好诗!

#28楼[楼主]  回复 引用 查看   

2010-02-23 23:45 by n216      
引用卡通一下:
引用道法自然:从文章看确实感觉很牵强附会,我倒是更加喜欢简单的代码,能简单就尽量简单,而不是追求诗意,将其复杂化。就像设计模式一样,好多人第一眼看设计模式都觉得这代码看起来不错,而实际上,我认为这玩意应该是需要时再用,别过度设计,别将代码复杂化,或者诗一样的抽象化。

是这样,有时几条曲线交织起来就很美,能引起很多的遐想......

很多人都说简单就是美,不知大家是否想过,要把汉字写得漂亮,简体字要比繁体字难写的多。

简单的美是要很深功力的!

同意!越是简单越是不简单!

#29楼[楼主]  回复 引用 查看   

2010-02-23 23:46 by n216      
引用道法自然:
引用卡通一下:
引用道法自然:从文章看确实感觉很牵强附会,我倒是更加喜欢简单的代码,能简单就尽量简单,而不是追求诗意,将其复杂化。就像设计模式一样,好多人第一眼看设计模式都觉得这代码看起来不错,而实际上,我认为这玩意应该是需要时再用,别过度设计,别将代码复杂化,或者诗一样的抽象化。

是这样,有时几条曲线交织起来就很美,能引起很多的遐想......

很多人都说简单就是美,不知大家是否想过,要把汉字写得漂亮,简体字要比繁体字难写的多。

简单的美是要很深功力的!


和你想法不同,程序不是追求美,有时候我认为更是一个系统工程,需要考虑多个因素,因此才需要追求简单。一个软件相当于一台机器,这台机器有很多零件组成,不是单纯只有一个或者几个程序员,故程序员不能简单的从自己考虑。简单了自然就能美了。当然,简单没有那么容易。

你们都同意简单是不简单的!

#30楼[楼主]  回复 引用 查看   

2010-02-23 23:47 by n216      
引用卡通一下:
@道法自然:

对于美感来说,是因人而异的!

就我而言,一直有一种强迫症似的,就连哪一句放在什么位置,都是非常的在意,久而久之就行成了自己的风格。

程序美与不美应当与大小无关,它们都是由一个个的“小程序段组成”,关键是每个程序段逻辑是否清晰,写得是否规范,应用得是否恰当,组织得是是否合理等等。

美自然就在其中了!

道法应当是规范;自然应当是应用!

规范的应用就是一种美!

呵呵!

写的很好!

#31楼[楼主]  回复 引用 查看   

2010-02-23 23:48 by n216      
引用恒星的恒心:推荐


谢谢!

#32楼[楼主]  回复 引用 查看   

2010-02-23 23:54 by n216      
引用chunchill:呵呵,路过。

走两步,走两步!

#33楼[楼主]  回复 引用 查看   

2010-02-24 00:01 by n216      
引用梅桦:
1 对于oo来说,符合oo的设计原则就是好程序
2 对于算法来说,实现的算法高效就是好程序
3 对于要臭美的来说,写完程序后,点一下自动化格式,然后就是好程序

楼主所说的诗一样的代码,只能在有限的范围之内。
想想你的二进制,打印到你的A4纸张上,怎么能看出美来?

而且,美不是评定程序员的唯一标准,可能连必要条件都算不上。


美的含义深刻,有外在的美,有内在的美!
1、同样一个功能,都符合OO原则,他们都是一样好程序吗?符合OO的各种设计差距之大,让你不敢想象!
2、同样高效,可能有不同的算法,他们都是好程序吗?
3、自动化格式,只能是一般性臭美!
不管怎么说,只要追求美,就是好事!

#34楼[楼主]  回复 引用 查看   

2010-02-24 00:02 by n216      
引用ccw604:把程序当作诗一样书写,那是需要一定境界的。那是在编写了成千上万条语句后才能到达的境界。这并非程序员必须达到的境界,但是,如果你能具备这样的心境,你会感受到一种别样的乐趣,你会为自己感到骄傲和自豪。


是的!因为你成了诗人了!能不骄傲和自豪吗?

#35楼[楼主]  回复 引用 查看   

2010-02-24 00:03 by n216      
引用pmerofc:
标题很好
内容不丰满


标题很好已经很满足!
内容不丰满我会继续努力!

#36楼[楼主]  回复 引用 查看   

2010-02-24 00:05 by n216      
引用euler:
佩服作者的这番联想对比。
作为写程序的最高目标,有空闲了,就对刚写的代码雕琢一番,很是享受!


人生在世就是追求享受!感觉很不错吧!

#37楼[楼主]  回复 引用 查看   

2010-02-24 00:07 by n216      
引用euler:
引用ξ箫音ξ:
程序=算法+结构,我还是比较赞同瑞士Pascal语言之父--尼古拉斯提出的这个公式。
算法是对一个程序的逻辑实现的描述,而结构是逻辑实现所依附的数据实体。例如,你去上海之前计划是做飞机还是火车,是具体什么地点和时间到目的地一样。
从总体程序员技术能力模型上看:编程语言30%+抽象能力(数据结构50%+对现实事实的抽象理解能力10%+设计模式能力10%)

如果没有结构的编程,有可能别人看你的程序就不一定像诗歌:)



没有看到回复,所以无法给出回复!

#38楼[楼主]  回复 引用 查看   

2010-02-24 00:09 by n216      
引用陛下:如果人们在生产的过程中加入自己的审美,像艺术创作那样,确实是一种享受呢,不管是对自己,还是消费者抑或外人。

是的!是的!非常赞同!好像是一个性情中人所言呀!

#39楼  回复 引用 查看   

2010-02-24 15:12 by 梅桦      
@n216
用不着全用叹号吧——!这么强的语气,我也不是绝对的说。

#40楼[楼主]  回复 引用 查看   

2010-02-24 20:47 by n216      
引用梅桦:
@n216
用不着全用叹号吧——!这么强的语气,我也不是绝对的说。

不好意思,我没太注意标点符号的使用。应该用更优美的诗句来表述我的观点,但是我的才能不够呀。请理解。
但是我还是要说,美无处不在,当你能格式你的程序,还有你的程序表述行云流水,你就无法不感觉程序是诗在流淌。而这个过程则是十分享受的。

#41楼  回复 引用 查看   

2010-02-25 09:30 by 梅桦      
引用n216:
引用梅桦:
@n216
用不着全用叹号吧——!这么强的语气,我也不是绝对的说。

不好意思,我没太注意标点符号的使用。应该用更优美的诗句来表述我的观点,但是我的才能不够呀。请理解。
但是我还是要说,美无处不在,当你能格式你的程序,还有你的程序表述行云流水,你就无法不感觉程序是诗在流淌。而这个过程则是十分享受的。

呵呵。其实我们都在追求美,不管是哪个方面的美。程序代码,程序架构,程序效率等等都想有美的体现。当然我是极力赞同这一点的。但这点是统一上有矛盾。因为美是主观的,大众化的美是大家都接受的,像碧水蓝天,青青草原,明媚阳光,山林湖泊……
但有些内容范围就比较狭窄。且对于审美自然的,大众的,以大众的审美能力与层次来言是知道美。但对于那些艺术家的作品来说,我们大众大多时候并不能休会它的美,或不能知性的美。还有那些所谓的行为艺术!(我从来不认为行为艺术是一种美,更不认为向墙上泼碗酱油就是美)
所以我觉得
美的体现要符合大众的审美能力,获得大众的认可,认知,程序的任何方面,如程序代码,工整简洁就是一种美。
美要认知,要有对它认知的程度。对于《蒙娜丽莎的微笑》我们当然可以看到它很不错。但为么不错,可能仅仅停留在她微笑的瞬间。如果不是审美大师的评说,还能看出什么美呢?(我可看不出来)(毕加索的公牛头我也看不出美来——!)
诗一样的美,诗当然很美,尤其是我们的唐诗,(近体诗我不太喜欢)。诗是好的,但做诗就难了,一句话:得有那水平。这个水平可是多方面素质的体现,多个矛盾的焦点才能有诗。同样的,程序不是说会打字,懂语言,懂UML,懂架构……就能写诗一般的程序。当然这些应该是必要条件吧。所以如果能写出诗一般的程序,那么真是高高手了。但对于大众化的程序作者来说这点尤其难,文字很多,人很多,诗人没多少。
追求美,追求诗一般的美,追求达到做诗的美……

菩提本无树,明镜亦非台