Software & Systems Development
Required Resources:
Outline:
What's the Problem with Software Systems?
Traditionally, a computer program is understood as being a list of instructions that are to be carried out by a computer (Wikipedia: program). These instructions can quickly become very idiosyncratic and interdependent. A simple example of this is the encoding of dates (e.g. July 21, 2005) using just the last two digits of the year (e.g. 07.21.05). In the late 1990's, this led to widespread fears that computer systems of all kinds (in banks, elevators, power grids, airplanes) would fail when these last two digits changed from 99 to 00. The use of "00" would not properly differentiate the new century/millennium from the previous one. (This is known as the "Y2K" problem or bug.) Encoding a two digit year indicator is idiosyncratic, and was originally done to save scarce computer resources. The fact that the ultimate consequences of this practice were unknown (and, as it turns out, vastly overestimated) is due to the complex interdependence of software systems. These problems have gradually been addressed (but not at all solved) through a number of methods described below: Object-Oriented Programming, Iterative Development, and Open Source Development:
Object-Oriented Programming:
- Programming instructions are divided into modular components (objects). The enclosure of programming instructions in an object is called "encapsulation."
- What is passed between these objects and what they can do (messages, operations or methods) is clearly defined. This interoperation is also made as flexible as possible (polymorphism).
- Defining these objects in such a way that they can be re-used as easily as possible. This has led to the creation of a kind of extended, abstract theory of object types, in which these objects are associated with number of specific attributes:
- Classes
- Inheritance
- Aggregation
Here's how Object-Oriented Programming is described in Wikipedia:
The idea behind object-oriented programming is that a computer program is composed of a collection of individual units, or objects, as opposed to a traditional view in which a program is a list of instructions to the computer. Each object is capable of receiving messages, processing data, and sending messages to other objects. Object-oriented programming is claimed to give more flexibility, easing changes to programs, and is widely popular in large scale software engineering.
Optional, further reading that explains these concepts is available at: Intro to OOP - http://java.sun.com/docs/books/tutorial/java/concepts/
Waterfalls, Cycles, Cathedrals and Bazaars
Other ways of dealing with software development. Move away from project development that is linear, etc. to cyclical. (Read: Transitioning from waterfall to iterative development)
Discussion: Approaches to software development
In the Wikipedia introduction to The Cathedral and the Bazaar, the author notes that the two models of software development outlined in that article can be understood in very general terms:
- the Cathedral is characteristic of proprietary software in general, and even applies to conventional, notions of individualized textual authorship (e.g. Encyclopedia Britannica).
- the bazaar, on the other hand, can be associated with open-source applications and open, collaborative work in general (e.g. Wikipedia itself).
After reading the Wikipedia article and Eric Raymond's original paper, discuss the possible strengths and shortcomings of these two approaches to development --in the worlds of systems, software and even text creation. Feel free to include in your discussion consideration also of iterative and waterfall design methods. If you have time, feel free to track down sources or arguments on the Web that might support your claims.