编程是一种“组合的艺术”

来源:互联网 发布:加拿大大学gpa算法 编辑:程序博客网 时间:2024/04/28 04:57

 

编程是一种“组合的艺术”

 

——WPF实例分析

金旭亮

        

         有这么一句名言——政治是一种妥协的艺术。这一规律同样适用于软件技术。就我个人的观点,软件开发在一定意义上是一种“组合的艺术”,优秀的软件工程师类似于优秀的厨师,能将一些常见的原料变成一盘色香味俱全的美味佳肴。

         为何说编程是一种“组合的艺术”?且让我慢慢道来。

         众所周知,在软件开发过程中,每名软件工程师都要掌握大量的编程知识,比如如何访问数据库,如何控制线程的推进顺序等,掌握这些知识是顺利进行开发的必要条件。然而,仅有这些就够了吗?仅仅掌握了这些编程知识就足以开发出优秀的软件?

         在我看来,开发者还需要掌握“组合”的艺术,你必须知道在某个完成特定功能的程序中,你可以组合哪些基本的构造块,而这些基本的构造块又以何种方式优雅地组合在一起,构成一个有机的整体。

         基本的构造块不仅仅指可以直接拿来复用的软件组件(或者是SOA中的Service),还包括可以在不同项目间复用的典型代码(比如如何将一个double类型的数字保留两位小数的典型代码段)、技术解决方案(比如各种设计模式)或软件架构(比如成熟的多层分布式组件化系统框架、基于管道的系统架构)等等。

         我喜欢将软件开发中用到的构造块称为“七巧板”,而每一个成形的程序都是用这些七巧板拼出的图形。

 

 

1 七巧板

 

         如何开发出好的软件,不取决于你基于什么平台,使用什么技术,甚至也不完全取决于你的技术能力和对技术内幕的深刻把握,而取决于你是如何组合这些基本构造块的。

         在某项软件技术的学习过程中,你实际上完成的是“形成软件构造块”的任务,而在软件项目实际开发过程中,你实际上完成的是“使用现有软件构造块”拼“七巧板”的过程。

         这个有效并且成功地“拼图”的过程,就是我们软件工程理论中有关软件开发过程与方法部分的内容。

         明了这些思想,能指导我们更有效地学习软件技术。

         自学的过程,就是“形成软件构造块”的过程。

         开发的过程,就是“将软件构造块”组合为完成某一特定功能的程序的过程。

         作为一名教师,我很关注如何帮助学生更高效地学习软件技术,培养软件技能,就将这个思想进一步地推广与拓展了:

         软件技术教学的过程,就是将“软件构造块”组合为真实软件的过程展示给学生的过程,先让学生进行模仿,然后他就学会了创造

         重要的是学会方法,而非掌握知识。

         下面,我以WPF技术为例,展示一个教学实例。

         这是一个类似于Windows“资源管理器”的程序,完全采用WPF进行开发。

         先看一下最初的“原型”:

 

 

 

2 MyFileBrowser的最初版本

        

这是最终成品:

 

 

3 MyFileBrowser的最终版本

 

         可以看到,原始版本与最终版本实在是差异巨大,整个开发过程我设定了10个里程碑:

 

 

 

4 MyFileBrowser10个里程碑

 

         在整个开发过程中,每个里程碑都在前一个的基础上增加功能和更正发现的BUG

         整个项目用到了多项具体WPF编程技术(此即“软件构造块”),以下是最重要的几项:

         数据模板、资源、值转换器、数据触发器、平台调用、数据分组与排序、多线程。

         解剖这样一个程序的开发过程,就能基本掌握WPF开发中最重要最常用的技术,并对软件“拼图”的方法与过程有直观了解。通过模仿这种迭代的开发方式,学生就能逐步掌握有效的开发方法,掌握组合的艺术,培养出必要的开发技能,最终成长为一名优秀的软件工程师。

         只有在战争中才能学会战争,同样的,只有在实践中才能增长能力。

         动手“拼图”吧,期待着看到能让人眼睛一亮的优秀软件作品!

        

=====================

         下载MyFileBrowser示例源码及相关文件

(注:上传了三次,第一次上传的压缩包不知什么原因损坏了,我就第二次上传。但第二次上传的文件久久不能在首页出现,也不知跑哪去了,更郁闷的是它现在不允许我重新上传了,一上传就说:此文件已上传过!晕,不让上传你得给出原有的链接啊!现在又看不到,又不让重新上传,也不允许 上传者删除自己上传的文件……

没办法,从压缩包中移除一个文件,然后改名,修改资源描述,第三次上传。

过两分钟刷新,第二次上传的文件链接出现了,但其字节数居然为0,点击下载,报告找不着文件!

还好第三次上传的可以正确下载和解压。

上传个小文件,折腾了我近1小时。CSDN的下载频道设计得太让人郁闷了!!!