If you are watching the hype in software development for the last few years, you have certainly heard about Agile Software Development. If you haven’t yet I recommend you consulting any reference. Agile development is the attitude of satisfying your customer through continuous delivery of valuable software. It copes with requirements’ change and enforces high standards for software quality.
You might think that Agile has nothing to do with a programming language, but you are wrong as Agile combines managerial and technical processes together. Agile methodologies range from extreme programming (XP), which focuses almost exclusively on the developer and development techniques, to the Dynamic Systems Development Method (DSDM), which focuses almost completely on processes — but they all have similarities.
Python, an agile programming language
Although Agile can be used with any programming language, some languages make your life easier in the agile world. Python is one of them. It’s agile by design. It even shares the same philosophy of Agile Development. That is not exclusive to python. Ruby – as I know about it- for example is Agile too.
Zen of python
Did I mention philosophy? Well, type `import this` in your python interpreter and read “The Zen of Python” Do you notice any similarities with “Agile principles”? Well, they both encourage simplicity, and technical excellence.
Agile development eschews extensive up-front specification, and prefer to handle change as it happens. Python has another way to say it “In the face of ambiguity, refuse the temptation to guess.“
Python says “Now is better than never. Although never is often better than *right* now.” and agile recommends to delay commitment to the last responsible moment.
Python and productivity
“Deliver working software frequently, from a couple of weeks to a couple of months, with a preference for the shorter timescale.”— so high productivity is crucial to agile
Python boosts developer productivity many times beyond compiled or statically typed languages such as C, C++, and Java. Python code is typically one-third to one-fifth the size of equivalent C++ or Java code. That means there is less to type, less to debug, and less to maintain
Python also has a very short production cycle. No complex building, linking, or compilation processes. Python just run immediately on any machine.
Python and code quality
Python code is designed to be readable, and hence reusable and maintainable. The uniformity of Python code is easy to understand, even if you did not write it. With minimal usage of special characters, wise usage of indentation, and built-in operators that can be used with any object, Python could almost make it self as readable as English.
Python and Design
Software has inherent complexity, and this complexity uncovers over time. The Agile approach is to handle this complexity as it uncovers by Evolutionary Design. “It is much cheaper to write something wrong and fix it” — Dean Leffingwell
Python is a multi-paradigm language. So it offers more abstraction mechanisms than normal OOP languages such as Java that you can use in design. You can mix classes, functions, modules, coroutines … etc. to ease your design process.
Python adopts a flexible object model. OOP in python is not as restricted as it is in JAVA or C++. features like multiple inheritance, and duck typing totally changes how you think in OO Design. It even has native support to some design patterns like “decorator”.
python and Simplicity
“Simplicity the art of maximizing the amount of work not done is essential.”— Agile principles
Python comes with a large collection of pre-built and portable functionality, known as the standard library. This library supports an array of application-level programming tasks, from text pattern matching to network scripting. Python’s standard library is very extensive. The library contains built-in modules (written in C) that provide access to system functionality such as file I/O that would otherwise be inaccessible to Python programmers, as well as modules written in Python that provide standardized solutions for many problems that occur in everyday programming. Some of these modules are explicitly designed to encourage and enhance the portability of Python programs by abstracting away platform-specifics into platform-neutral APIs.
In addition to the standard library, there is a growing collection of several thousand components (from individual programs and modules to packages and entire application development frameworks), available from the Python Package Index.
Not enough? You can extend python with any C library you might think it is useful. So you can focus on your problem, and stand on the sholders of giants. As you see python Values the DRY (Don’t Repeat Your self) principle.
python and change
“Welcome changing requirements, even late in development, Agile processes harness change for the customer’s competitive advantage” — Agile principles
Disability to handle change in requirements is a common reason for software projects failure. Light process, designing to change helps in lowering the cost of change, but python offers you something useful in change management. Python can isolate change due to its flexible interfaces.
Python offers default , and optional parameters in their interfaces. So you can extend a function, method or constructor without changing the signature. In many cases you will regret not using that as your code grows large with many calls to that interface.
python and integration
Python scripts can easily communicate with other parts of an application, using a variety of integration mechanisms. Such integrations allows Python to be used as a product customization and extension tool. Today, Python code can invoke C and C++ libraries, can be called from C and C++ programs, can integrate with Java and .NET components, can communicate over frameworks such as COM, can interface with devices over serial ports, and can interact over networks with interfaces like SOAP, XML-RPC, and CORBA. It is not a standalone tool. In many cases, Python is used as a “glue” to integrate many components of a system
As you can see, python is designed to be agile from philosophy to implementation. It understands software projects’ needs and problems and participate in solving them. Besides it’s ease of use, its portability and generality.
- Agile manifesto
- agile principles
- Foundations of Agile Python Development
- zen of python