In raising the question about whether a specific programming language is agile I want to avoid exploring what makes a language agile, or comparing PHP with other languages. The intention here is not to associate PHP to agile as a natural relationship, as much as to try and understand if we can find the ingredients in the PHP world, for creating an agile environment.
Agile in the context of software development is no more than a set of principles and values as they were identified by a group of people (The 17 Agile Manifesto's signatories) who were then developing software in ways that somehow contrasted with the traditional processes. They had introduced into their development, practices which focused on delivering early and often, favoring constant feedback and change, low overhead, reduced ceremony and flat hierarchy.
Agile development practices
Agile environments in the late 80's and beginning of the 90's were typically object oriented, reflective, with some case tool for RAD. Many of these ideas sprouted from the Smalltalk community and were later borrowed by more recent projects like Java.
Among the most popular agile practices is test-driven development. The author of TDD, Kent Beck, is also the author of SUnit, a framework for unit testing for Smalltalk. Kent went on and wrote a Java version of it, JUnit. A few years ago Sebastian Bergmann ported the framework to PHP, and named it PHPUnit. More and more TDD is a part of the PHP developer's routine. Many projects demand that the code contributed is unit tested. TDD will facilitate to manage the agile development environment in a continuous integration set up.
In projects that are managed in a way where changes are rather welcome, it's very important that they become a part of the system as soon as possible. Continuous integration is a term coined by Martin Fowler to describe a process where integration is done as often and as early as possible. A wrapping tool like ant (Java) or phing (PHP) will be called from a continuous integration framework and then select various APIs for unit testing, checking code standards, checking the quality of dependencies, or whatever you want to automate in the process. Every time you merge, and you are advised to merge daily, the impact of you code will be monitored. In the PHP world there is a continuous integration tool called phpUnderControl. Though written in PHP for PHP projects, it sits on top of CruiseControl, a Java Continous Integration Framework.
The agile quality
PHP is a lightweight language. The reason I focused on PHP in the beginning was because I felt I could get things done quicker than with other languages. A language is never agile. A programming language does not usually define the processes used when developing in that language. But the language can have certain qualities that make the development sleeker; PHP is light, it is interpreted and it is simple: all these reasons have also contributed to attracting many people into the community that would not be concerned with best engineering practices, but just get their sites up and running without much hassle.
Agile does not mean doing it quickly. You don't finish the project earlier, but you will deliver earlier. You will deliver a part of the system, testable, usable, something that adds value. Then you will get feedback and the team will decide together with the customer what they will be delivering next. Your iterations are closer together than the delivery cycle of other approaches. In order to be able to deliver quicker you should develop just what you need. You need identified patterns to address common problems. You need to focus on new added value rather than re-designing your architecture each round. You need a standard architecture for your projects and some code generation tool that will lay down the skeleton for you.
Intrinsic agility
Some say these needs should be addressed by the language itself. That some languages are more relevant to Agile Development for their intrinsic agile nature. That the language should favor agile practices naturally, it should come fitted with strong object oriented support, it should facilitate unit testing and it should posses reflective power. The syntax should be fluent and as human like as possible.
In my view, if we can get things done with tools and frameworks, even if those tools are written in other programming languages, the language will not necessarily need to fulfill those needs for me. Of course all programming languages evolve, and hopefully in the same direction of those who use it, so if the language comes to favor the way I develop so much the better.
As far as web application development is concerned, and due to being an interpreted, embeddable, lightweight, simple language, with fairly reasonable object oriented support, with a big community, and many other reasons, PHP is in an unique position to fulfill the needs of an agile development team. The elements are available, it's up to the enterprises to take the step and use what's there for setting up their own agile development environment.
Hoje eu li um artigo bastante interessante, PHP é uma linguagem de programação Ágil? Bom, adiantando, não existe linguagens Ágeis, existem linguagens que te dão um suporte maior para por em prática sua Agilidade. Ruby, Smalltalk, Java são as l...
Tracked: Aug 15, 01:05