Programming Is an Act of Design

?

Programming Is an Act of Design

Einar Landre

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.

时间: 2024-10-16 19:42:52

Programming Is an Act of Design的相关文章

Understand the Business Domain

? Understand the Business Domain Mark Richards EFFECTivE SoFTWARE ARCHiTECTS understand not only technology but also the business domain of a problem space. Without business domain knowl- edge, it is difficult to understand the business problem, goal

《Pearls.of.Functional.Algorithm.Design》pdf

下载地址:网盘下载 Richard Bird takes a radically new approach to algorithm design, namely, design by calculation. These 30 short chapters each deal with a particular programming problem drawn from sources as diverse as games and puzzles, intriguing combinato

[it-ebooks]电子书列表

#### it-ebooks电子书质量不错,但搜索功能不是很好 #### 格式说明  [ ]中为年份      ||  前后是标题和副标题  #### [2014]: Learning Objective-C by Developing iPhone Games || Leverage Xcode and Objective-C to develop iPhone games http://it-ebooks.info/book/3544/ Learning Web App Developmen

(转) [it-ebooks]电子书列表

[it-ebooks]电子书列表 [2014]: Learning Objective-C by Developing iPhone Games || Leverage Xcode and Objective-C to develop iPhone games http://it-ebooks.info/book/3544/Learning Web App Development || Build Quickly with Proven JavaScript Techniques http://

斯坦福CS课程列表

http://exploredegrees.stanford.edu/coursedescriptions/cs/ CS 101. Introduction to Computing Principles. 3-5 Units. Introduces the essential ideas of computing: data representation, algorithms, programming "code", computer hardware, networking, s

程序员必读书籍及导读指南

最近在网上看了一个非常好的帖子<程序员一生必读的书>(我的腾讯微博上有分享该贴子链接,有兴趣就点击进去看看吧),该贴的第一个张图片是一个雷达图, 这张图是由ThoughtWorks(全球软件设计与定制领域的领袖级企业)的资深人士提供的,它将程序员要读的书分为四个类别,每个类别又分为初级.进阶和高级读物,并用黄色三角形点出了强烈推荐阅读的书籍.四个类别包括: 编程实践(Coding Practice) 设计与架构(Design & Architecture) 方法学(Methodolog

反应堆模式

反应堆模式 he Reactor:An Object-Oriented Wrapper for Event-Driven Port Monitoring and Service Demultiplexing 反应堆模式:一种应用于事件驱动的端口监控和服务多路化的面向对象封装器 Douglas C. Schmidt An earlier version of this paper appeared in the February 1993 issue of the C++ Report. 这篇文章

反应堆模式最牛的那篇论文--由solidmango执笔翻译

The Reactor:An Object-Oriented Wrapper for Event-Driven Port Monitoring and Service Demultiplexing 反应堆模式:一种应用于事件驱动的端口监控和服务多路化的面向对象封装器 Douglas C. Schmidt An earlier version of this paper appeared in the February 1993 issue of the C++ Report. 这篇文章的早期版本

第2章 传统与敏捷方法论

2.1  传统泛瀑布软件开发模式 2.1.1  瀑布模式 1.瀑布模式简介 2.瀑布模式特色 3.瀑布模式缺点 2.1.2  渐增模式 1.渐增模式简介 2.渐增模式特色 3.渐增模式缺点 2.1.3  雏形模式 1.雏形模式简介 2.雏形模式特色 3.雏形模式缺点 2.1.4  螺旋模式 1.螺旋模式简介 2.螺旋模式特色 3.螺旋模式缺点 2.1.5  统一开发过程模式 1.RUP模式简介 2.RUP模式特色 3.RUP模式缺点 2.2  敏捷方法论 2.2.1  Scrum 1.Scrum