`
izuoyan
  • 浏览: 9224051 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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

阅读更多

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

——WPF实例分析

金旭亮

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

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

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

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

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

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

1 七巧板

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

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

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

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

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

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

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

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

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

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

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

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

2 MyFileBrowser的最初版本

这是最终成品:

3 MyFileBrowser的最终版本

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

4 MyFileBrowser10个里程碑

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

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

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

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

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

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

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

载MyFileBrowser示例源码及相关文件

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

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

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

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

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

分享到:
评论

相关推荐

    UNIX编程艺术(中文).pdf

    在UNIX环境中,Shell脚本是一种强大的工具,用于编写自动化任务、批处理操作等。通过Shell脚本,用户可以轻松地组合多个命令和程序,实现复杂的功能。掌握Shell脚本的基础语法和技巧对于任何UNIX程序员来说都是必不...

    unix编程艺术

    Unix系统的编程艺术,体现的是一种简约高效的设计哲学,即“做一件事,并且做好”。 Unix编程的艺术主要体现在以下几个方面: 1. 简洁性:Unix哲学强调简单明了的设计和编码。在Unix编程中,一个程序通常只做一件...

    unix 编程艺术

    3. **Makefile与构建管理**:Makefile是一种用于自动化构建过程的脚本文件,可以简化软件项目的编译和链接步骤。 4. **版本控制系统**:如Git等版本控制系统在Unix环境中非常普及,帮助开发者管理代码变更历史,支持...

    Unix编程艺术.pdf

    unix是什么,它是一个...有一种很好的方式来验证API是否设计良好:如果试着用纯人类语言描述设计(不许摘录任何源代码),能否把事情说清楚?养成在编码之前为API编写一段非正式书面描述的习惯,是一个非常好的方法。

    计算机编程艺术第一卷

    4. **递归与分治**:Knuth强调了递归作为一种解决问题的强大工具,并用它来解释许多算法,如快速排序和归并排序。同时,他也介绍了分治策略,这是一种将大问题分解为小问题的解决方法。 5. **算法设计与分析**:书...

    UNIX编程艺术 - 扫描版 - 书签

    管道是一种用于连接两个或多个命令的标准方法,其中一个命令的输出可以直接作为下一个命令的输入。这种机制极大地增强了命令行工具的灵活性和功能性。 例如,通过使用`ls | grep "txt"`命令,我们首先执行`ls`命令...

    Java编程艺术 PDF

    Herbert Schildt 和James Holmes两位编程大师通过将Java应用于某些有趣、实用的计算机问题和编程任务中,全面展示了Java语言的强大功能、敏捷性、多样性和艺术性。本书各章内容分别涉及到Java精髓、递归下降的表达式...

    《C++编程艺术》教程+代码

    1.7 一种简洁精练的对象模型 4 1.8 C++发展史 4 第2章 简单的C++垃圾回收器 5 2.1 两种内存管理方法的比较 5 2.1.1 手工内存管理的优缺点 6 2.1.2 垃圾回收的优缺点 6 2.1.3 两种方法都可以使用 7 2.2 在C++中创建...

    unix编程艺术中文版

    此外,还会涉及Unix域套接字(Unix domain socket),这是一种在本地机器上进程间通信的高效方法。 最后,书中还会讨论Unix程序的调试技巧和测试方法,包括使用gdb调试器,以及如何编写良好的测试用例以确保代码...

    unix编程艺术英文

    通过阅读《Unix编程艺术》英文版,读者不仅可以掌握Unix编程的技能,还能了解到一种系统级编程的思维方式,这对于提升软件开发的效率和质量至关重要。此外,配合中文版的PDF,读者可以更加方便地理解和学习书中的...

    组合语言之艺术.rar

    在计算机科学中,汇编语言是一种符号化的机器语言,每一条指令对应于计算机硬件能够直接执行的一条微操作。通过学习组合语言,开发者可以更有效地理解和优化程序性能,这对于系统编程、设备驱动开发以及对速度和内存...

    程序员编程艺术系列之经典算法研究 电子书【高清中文带书签】

    遗传算法是一种模拟生物进化过程的全局优化方法,常用于解决组合优化问题。 **详细知识点:** - **基本思想:** - 基于自然界中物种进化的过程,采用自然选择、交叉和变异等操作,从随机产生的初始种群开始,逐步...

    机器码编程世界编程大赛第一名用

    这样的成就不仅是对个人技能的肯定,也是对编程艺术的一种赞美。通过研究这位冠军的作品,我们可以学习到如何在资源有限的环境下编写高效、精简的代码,这对于嵌入式系统开发、游戏引擎优化等领域的工程师来说,具有...

    程序员编程艺术

    本书不仅是一部技术指南,更是对编程本质的一次深刻探索,强调了编程不仅仅是解决技术问题的工具,更是一种追求高效、优雅的艺术。 ### 一、核心理念与目标 #### 1. **提高编程能力** - 强调提升初学者乃至资深...

    UNIX编程艺术

    《UNIX编程艺术》不仅仅是一本书籍,它更是一种思维方式的体现。通过学习这本书中的理念和技术,开发者们不仅能够更好地理解和利用UNIX系统本身,还能将其作为一种指导思想应用于任何编程项目之中。无论是对于初学者...

    行业分类-物理装置-一种实物化编程系统及方法.zip

    《一种实物化编程系统及方法》的文档详细阐述了在IT行业中,如何通过物理装置实现编程的创新方式。实物化编程是一种将编程概念转化为可触摸、直观的实体,旨在降低编程学习的门槛,提高编程教育的趣味性和实践性。...

    组合语言艺术

    【组合语言艺术】是一种计算机编程领域中的特殊概念,它涉及到低级别的编程语言,通常被称为汇编语言。汇编语言是机器语言的一种抽象表示,每条指令对应于计算机硬件可以直接执行的机器码。这种语言的艺术性在于它...

    计算机程序设计艺术(第4卷)第4册 (双语版)生成所有树组合生成和历史

    树是一种重要的数据结构,广泛应用于编译器设计、数据库索引、图形算法等领域。生成所有树的算法不仅有助于理解树结构的本质,还能为解决实际问题提供基础。 首先,书中会讲解基本的树概念,包括树的定义、术语(如...

    程序员编程艺术第一 ~二十七章

    - 提供了一种高效的数组排序算法,时间复杂度为O(N),空间复杂度为O(1)。 #### 3. 作者态度 - **精益求精的态度**:作者团队对于已发表的内容始终保持谨慎和严谨的态度,力求达到最佳效果。 - **开放合作的精神**...

Global site tag (gtag.js) - Google Analytics