Programming Is an Act of Design
2015-08-13 09:09
344 查看

KRiSTEn nygAARd, FATHER oF oBjECT-oRiEnTEd pRogRAMMing and the Simula programming language, used to say programming is learning. Accepting the fact that programming—or more precisely, software develop- ment—is a processes of discovery and learning, not a process of engineer- ing and construction, is fundamental to bringing software practices forward. Applying the concepts of traditional engineering and construction on software development does not work. The problems have been documented and com- mented upon by leading software thinkers for more than 30 years. As an exam- ple, in 1987 Fredric Brooks, Jr., stated in the “Report of the Defense Science Board Task Force on Military Software” that the document-driven, specify- then-build approach lies at the heart of many software problems.
So where should the software industry look to improve its practices? What about the industries involved in production of sophisticated mass-market products such as cars, pharmaceutical drugs, or semiconductors?
Let’s take a look at the car industry. When planning a new model, the first thing is to choose a concept or archetype. It’s primarily an architectural positioning mechanism. The BMW X6 is an example of a new concept that combines the properties of an SUV and a coupe into what BMW calls a sports activity coupe. Before you can purchase a new X6, BMW has invested thousands of hours and millions of dollars in both its vehicle and manufacturing design. When BMW receives your order, one of its assembly lines will kick in and produce your customized version of the X6.

So what can we learn from this car-maker scenario? The important lesson is that the making of a new car involves two processes: the first process is the cre- ative design process, including establishing the required assembly lines. The second process is the manufacturing of cars in line with customer specifica- tions. In many ways these are the processes we find in the software industry as well. The challenge is what we put into the terms.
In the article “What is software design?”, Jack Reeves suggests that the only artifact of software engineering that satisfies the criteria for a design docu- ment, as such a document is understood and used in classical engineering, is the source code. The manufacturing of the software is automated and taken care of by the compiler, build, and test scripts.
By accepting that carving out source code is an act of design, not an act of con- struction, we are in a position to adopt useful management practices that are proven to work. Those are the practices used to manage creative and unpre- dictable work such as developing a new car, a new medical drug, or a new computer game. We talk about the practices of agile product management and lean production such as SCRUM. These practices focus on maximizing return on investment in terms of customer value.
For the software industry to capitalize on these practices, we must remember this: programming is an act of design, not an act of construction.
Programming Is an Act of Design
Einar LandreKRiSTEn nygAARd, FATHER oF oBjECT-oRiEnTEd pRogRAMMing and the Simula programming language, used to say programming is learning. Accepting the fact that programming—or more precisely, software develop- ment—is a processes of discovery and learning, not a process of engineer- ing and construction, is fundamental to bringing software practices forward. Applying the concepts of traditional engineering and construction on software development does not work. The problems have been documented and com- mented upon by leading software thinkers for more than 30 years. As an exam- ple, in 1987 Fredric Brooks, Jr., stated in the “Report of the Defense Science Board Task Force on Military Software” that the document-driven, specify- then-build approach lies at the heart of many software problems.
So where should the software industry look to improve its practices? What about the industries involved in production of sophisticated mass-market products such as cars, pharmaceutical drugs, or semiconductors?
Let’s take a look at the car industry. When planning a new model, the first thing is to choose a concept or archetype. It’s primarily an architectural positioning mechanism. The BMW X6 is an example of a new concept that combines the properties of an SUV and a coupe into what BMW calls a sports activity coupe. Before you can purchase a new X6, BMW has invested thousands of hours and millions of dollars in both its vehicle and manufacturing design. When BMW receives your order, one of its assembly lines will kick in and produce your customized version of the X6.

So what can we learn from this car-maker scenario? The important lesson is that the making of a new car involves two processes: the first process is the cre- ative design process, including establishing the required assembly lines. The second process is the manufacturing of cars in line with customer specifica- tions. In many ways these are the processes we find in the software industry as well. The challenge is what we put into the terms.
In the article “What is software design?”, Jack Reeves suggests that the only artifact of software engineering that satisfies the criteria for a design docu- ment, as such a document is understood and used in classical engineering, is the source code. The manufacturing of the software is automated and taken care of by the compiler, build, and test scripts.
By accepting that carving out source code is an act of design, not an act of con- struction, we are in a position to adopt useful management practices that are proven to work. Those are the practices used to manage creative and unpre- dictable work such as developing a new car, a new medical drug, or a new computer game. We talk about the practices of agile product management and lean production such as SCRUM. These practices focus on maximizing return on investment in terms of customer value.
For the software industry to capitalize on these practices, we must remember this: programming is an act of design, not an act of construction.
相关文章推荐
- Strategic Game--hdu1054
- Oracle为什么要“重振”存储?
- JQuery的一些笔记
- 在UIView中添加应用下载信息模块
- mac 系统通用快捷键(mac 下的应用多数会往这些标准看齐)(转:http://yang3wei.github.io/blog/2013/02/08/chen-ni-yu-mac-chen-ni-yu-xcode/)
- POJ-2251 Dungeon Master (BFS模板题)
- 1751 Highways【最小生成树】
- DRBD的简单应用
- HDU 1176 免费馅饼(树塔问题的简单变形)
- 学习总结5
- 装饰模式---结构性
- 数据结构之二叉树详解
- win7默认网关不可用怎么解决
- POJ 3356(最短编辑距离问题)
- 深入浅出 RPC
- 深入浅出 RPC
- iOS开发之使用Storyboard预览UI在不同屏幕上的运行效果
- IBAction:IBOutlet:注意事项
- 循环打印矩阵
- 一致性hash算法在memcached中的使用