程序设计是一种设计
2015-08-19 16:32
260 查看
作者:埃纳尔·兰德雷(Einar Landre)
发明面向对象程序设计方法和Simula程序设计语言的克利斯滕·尼高(Kristen Nygaard)博士曾经说过,程序设计是学习的过程。将程序设计——或者更准确地说,软件开发——看作发现和学习的过程,而不是生产和建造的过程。这种观点从根本上促进了软件实践方法的发展。传统的生产和建造理念不适合运用于软件开发。30多年来,软件行业的思想先驱不断就此发表观点,并且留下了许多文字记录。例如小费雷德里克·布鲁克斯(Fredric Brooks,Jr.)(译注1)曾在1987年的《国防科学委员会军用软件任务组报告》(Report
of thd Defense Sciense Board Task Force onMilitary Sotfware)中指出,以文档驱动的、照着说明依样画葫芦(specify-then-build)的方法引发许多软件问题的罪魁祸首。
如果要发展实践方法,软件行业应该到哪里去取经呢?不妨看看汽车、医药和半导体这些生产大众的精密行业。
来看看汽车行业的做法。计划推出新车型时,首先要决定设计概念和原型。这相当于设计架构的过程。以宝马X6为例,这款新车型结合了多功能运动车(SUV)和双门轿跑车(coupe)的特性,被宝马公司称为全能轿跑车。X6面市之前,宝马公司己经在车型设计和制造设计上投入了数千个小时和数百万的资金。宝马公司接到顾客的订单后,会启动某条流水线,根据顾客要求生产定制的X6.
我们从汽车的生产过程中可以获得什么启示呢?新车的生产过程包括两个阶段,第一阶段是创新的设计过程,包括建立投产必备的流水线;第二个阶段才是根据顾客的要求生产汽车。从许多方面看,软件行业也是如此,只是划分的界线不同。
杰克·里夫斯(Jack Reeves)在《什么是软件设计?》(What is software design?)这篇文章里提到,在软件工程里,与传统行业的设计文档具有相同地位的只有源代码。软件的生产则是自动化的,由编译器、构建工具和测试代码共同完成。
如果把编写代码看成是设计行为,而不是生产行为,我们就能采用一些己经被证明有效的管理方式。这些方法过去用于管理具有不可预测性的创新工作,比如研发新车、新药、新的电脑游戏。我所指的是敏捷的产品管理方法和精益生产方法,比如SCRUM,它们关注如何为客户实现最大的投资收益。
如果软件行业希望从这些方法中获益,我们必须记住,程序设计属于设计范畴,而不是生产范畴。
译注1:费雷德里克·布鲁克斯因担任IBM的在型机System/360及其操作系统OS/360的开发项目经理,被称为“S/360之父”,著有《人月神话》(The Mythical Man-Month:Essay on SoftwareEngineering)、《计算机体系结构:概念与发展》(Computer Architecture:Concept and Evolution)等。
发明面向对象程序设计方法和Simula程序设计语言的克利斯滕·尼高(Kristen Nygaard)博士曾经说过,程序设计是学习的过程。将程序设计——或者更准确地说,软件开发——看作发现和学习的过程,而不是生产和建造的过程。这种观点从根本上促进了软件实践方法的发展。传统的生产和建造理念不适合运用于软件开发。30多年来,软件行业的思想先驱不断就此发表观点,并且留下了许多文字记录。例如小费雷德里克·布鲁克斯(Fredric Brooks,Jr.)(译注1)曾在1987年的《国防科学委员会军用软件任务组报告》(Report
of thd Defense Sciense Board Task Force onMilitary Sotfware)中指出,以文档驱动的、照着说明依样画葫芦(specify-then-build)的方法引发许多软件问题的罪魁祸首。
如果要发展实践方法,软件行业应该到哪里去取经呢?不妨看看汽车、医药和半导体这些生产大众的精密行业。
来看看汽车行业的做法。计划推出新车型时,首先要决定设计概念和原型。这相当于设计架构的过程。以宝马X6为例,这款新车型结合了多功能运动车(SUV)和双门轿跑车(coupe)的特性,被宝马公司称为全能轿跑车。X6面市之前,宝马公司己经在车型设计和制造设计上投入了数千个小时和数百万的资金。宝马公司接到顾客的订单后,会启动某条流水线,根据顾客要求生产定制的X6.
我们从汽车的生产过程中可以获得什么启示呢?新车的生产过程包括两个阶段,第一阶段是创新的设计过程,包括建立投产必备的流水线;第二个阶段才是根据顾客的要求生产汽车。从许多方面看,软件行业也是如此,只是划分的界线不同。
杰克·里夫斯(Jack Reeves)在《什么是软件设计?》(What is software design?)这篇文章里提到,在软件工程里,与传统行业的设计文档具有相同地位的只有源代码。软件的生产则是自动化的,由编译器、构建工具和测试代码共同完成。
如果把编写代码看成是设计行为,而不是生产行为,我们就能采用一些己经被证明有效的管理方式。这些方法过去用于管理具有不可预测性的创新工作,比如研发新车、新药、新的电脑游戏。我所指的是敏捷的产品管理方法和精益生产方法,比如SCRUM,它们关注如何为客户实现最大的投资收益。
如果软件行业希望从这些方法中获益,我们必须记住,程序设计属于设计范畴,而不是生产范畴。
译注1:费雷德里克·布鲁克斯因担任IBM的在型机System/360及其操作系统OS/360的开发项目经理,被称为“S/360之父”,著有《人月神话》(The Mythical Man-Month:Essay on SoftwareEngineering)、《计算机体系结构:概念与发展》(Computer Architecture:Concept and Evolution)等。
相关文章推荐
- HDU 4046 Panda(树状数组)
- ios8适配遇到的问题及解决方法
- Android 问题之找不到资源解决办法
- 使用YUM安装ZABBIX监控
- [未完成][知识点]数论之定积分基本定理
- [LeetCode] Ugly Number II
- 求最大公倍数
- /proc
- SSIS Catalog项目版本管理
- Linux 下常见目录及其功能
- (easy)LeetCode 258.Add Digits
- 数据库设计三大范式
- 桌面支持--重置skype密码链接
- The method replace(int, Fragment) in the type FragmentTransaction is not applica
- 回归-用极大似然估计来解释最小二乘
- Android Studio 快捷键
- C/C++经典源代码网站
- 几个基础数位DP (hdu 2089,hdu 3555 ,uestc 1307 windy 数)
- hdu 1599 floyed最短路
- OSGI