Software development is my passion. It happens to be my profession as well. I care about the way it is taught, how it is applied, the challenges it faces and most of all the innovations it creates. Over the course of my studies and job related experiences, I have come to believe that communication is central to good software.
Agile development happens to address this issue head on. I particularly favor the scrum process and the dicipline it instills in you. I discovered Test driven programming while investigation the Extreme programming 'buzz'.

Software Development TDD - Scrum - eXtreme Programming

Agile Programming

  • What is it?

    Some people actually think agile programming is about fitting two people in a single chair. In fact agile programming is about being responsive to change.
    There are numerous agile methodologies out there, and some of them do indeed favour a pair programming approach. However, taking turns at the keyboard (sorry we just don't share a keyboard!) is not a central or crucial aspect of agile methods.

  • Why should you care?

    Here is what Bill Gates had to say on this subject
    "Over time, code gets complicated, and you want to be agile and change it" [see the article by J. Nicholas Hoover for InformationWeek].

    Agile methods emphasize working software as the primary measure of progress. This is obtained through some iterative incremental process of software development. In other word at the end of each iteration (a relatively short time frame) you get a working application which the client can test drive, and comment on. This is not just for feedback, at any time the client can change its requirements and the development process fortunately is designed to integrate these changes not just accommodate or hack a solution around it.

  • What does it entail?

    "The function of good software is to make the complex appear to be simple." _Grady Booch

    But such achievement means very little unless we avoid this:

    "The trouble with programmers is that you can never tell what a programmer is doing until it is too late." _Seymour Cray
    Agile methods are iterative and incremental development methods. The emphasis is on building releasable software in short time periods (time box). The customer is deeply involved with the developers in the design process and iteration planning. At anytime questions such as: "Where are we going?", "What do we have right now?", "What is the next step?" can be answered in a tangible and precise way.
  • Who is using it?

    Every relevant software outfit uses some form of agile process at some point in there activities. Internet time demands that kind of speed, responsiveness and quality. Don't take my word for it check this article: Agile development: Not just for 'agilists' anymore By Colleen Frye
Clean Code is code that is
  • Concrete (It exist, it runs, it works)
  • Lean (no bloat, just does what needs to be done on time and within budget.)
  • Easy (to use, read, understand, maintain)
  • Adaptable (resilient to changing technologies, modifications)
  • Neat (organized, self documenting)
wikipedia links: Scrum | eXtreme programming