Contribution 40

From WikiContent

(Difference between revisions)
Jump to: navigation, search
(Programming is design)
Current revision (19:18, 13 July 2008) (edit) (undo)
(Programming is an act of design)
 
(9 intermediate revisions not shown.)
Line 1: Line 1:
-
== Programming is design ==
+
== Programming is an act of design ==
-
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 development is a processes of discovery and learning and not a process of engineering and construction are fundamental to bring software practices forward. Applying the concepts of traditional engineering and construction on software development does not work. The problems have been documented and commented upon for more than 30 years.
+
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 development is a processes of discovery and learning and not a process of engineering and construction are fundamental to bring software practices forward. Applying the concepts of traditional engineering and construction on software development does not work. The problems have been documented and commented upon by leading software thinkers for more than 30 years. As an example, 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 so many software problems.
-
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 so many software problems.'' On the other hand, the software industry has a lot to learn from the design and manufacturing of sophisticated mass market products.
+
-
To explain why, lets take a look at the car industry. When planning a new model, the first thing is to choose a concept. Examples of concepts are Coupe, Sedan and SUV. The role of the different concepts is to create new or address existing needs in the market. BMW X6 is an example of a new concept that combines the properties of a SUV and a Coupe and its called Sports Activity Coupe (SAC). Before you can place an order for your new X6, BMW has invested thousands of hours and millions of dollars in its design, transmission systems, power plant and the assembly lines required to build your version. When BMW receives your order, one of their assembly line's will kick in and produce your version of the X6, though within the variability offered by the X6 architecture.
+
So where should the software industry go and look for improving their practices? What about the industries involved in production of sophisticated mass-market products such as cars, pharmaceutical drugs or semiconductors?
-
Summarized, the making of a new car involves two processes: 1) The creative design process, including establishing the required assembly lines. 2) Manufacturing of cars in line with customer specification. These are the processes we find in the software industry as well.
+
Lets 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. BMW X6 is an example of a new concept that combines the properties of a SUV and a Coupe into what BMW calls a Sports Activity Coupe. The thing is that 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 their assembly lines will kick in and produce your customized version of the X6.
-
Back in 1992 an article called ''What is software design?'' was published in the C++ Journal. Here Jack Reeves suggested that the only artifact of software engineering that satisfied the criteria for a design document, as such 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.
+
So what is the lesson learned from this carmaker scenario? The important lesson is that the making of a new car involves two processes: The first process is the creative design process, including establishing the required assembly lines. The second process is the manufacturing of cars in line with customer specification. In many ways these are the processes we find in the software industry as well. The challenge is what we put into the terms.
-
By accepting that carving out source code is an act of design, not an act of construction we are in a position to adopt useful management practices that will work. Those are the practices we find used to manage creative work as architechting a new building, developing a new car, a new medical drug or a new computer game. The practices of agile product management such as Scrum.
+
In the article “What is software design?” Jack Reeves suggested that the only artifact of software engineering that satisfied the criteria for a design document, as such 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.
-
But the key thing to remember is: Programming is an act of design, not an act of construction.
+
By accepting that carving out source code is an act of design, not an act of construction we are in a position to adopt useful management practices that are proven to work. Those are the practices used to manage creative and unpredictable 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: Programming is an act of design, not an act of construction.
 +
 
 +
(RMH Edited 7/13/2008)
By [[Einar Landre]]
By [[Einar Landre]]

Current revision

Programming is an act of design

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 development is a processes of discovery and learning and not a process of engineering and construction are fundamental to bring software practices forward. Applying the concepts of traditional engineering and construction on software development does not work. The problems have been documented and commented upon by leading software thinkers for more than 30 years. As an example, 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 so many software problems.

So where should the software industry go and look for improving their practices? What about the industries involved in production of sophisticated mass-market products such as cars, pharmaceutical drugs or semiconductors?

Lets 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. BMW X6 is an example of a new concept that combines the properties of a SUV and a Coupe into what BMW calls a Sports Activity Coupe. The thing is that 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 their assembly lines will kick in and produce your customized version of the X6.

So what is the lesson learned from this carmaker scenario? The important lesson is that the making of a new car involves two processes: The first process is the creative design process, including establishing the required assembly lines. The second process is the manufacturing of cars in line with customer specification. 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 suggested that the only artifact of software engineering that satisfied the criteria for a design document, as such 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 construction we are in a position to adopt useful management practices that are proven to work. Those are the practices used to manage creative and unpredictable 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: Programming is an act of design, not an act of construction.

(RMH Edited 7/13/2008)

By Einar Landre


This work is licensed under a Creative Commons Attribution 3


Back to 97 Things Every Software Architect Should Know home page

Personal tools