Agile Programming and Extreme Programming are two types of software development methodologies. There are many slight variations on both Agile and Extreme programming. The key idea of Agile Programming is to construct software in a series of short (typically two to four weeks) iterations. Each iteration has its own planning, design, coding, testing, and release phases. Agile Programming emphasizes quick changes to design and verbal, rather than written, communication among team members. Agile Programming is quite similar to the Spiral software development methodology except that Agile has shorter iteration times. Agile Programming is particularly effective on smaller projects (say, 10 or fewer team members), non-critical projects (in other words, not projects such as medical or weapons systems), and non-distributed systems (in other words, when all team members are in one physical location).
Extreme Programming is most often considered a particular form of Agile Programming, although some engineers prefer to think of Extreme Programming as a separate methodology altogether. Extreme Programming is more specific the Agile Programming but in practice no two groups which use Extreme Programming seem to agree on exactly which characteristics are essential. From a practical point of view, Extreme Programming encourages (or requires depending on your point of view) "Pair Programming" where developers always work in pairs, and "Test-Driven Development" where unit tests are always created in conjunction with the system under development. Extreme Programming may be a good choice for prototype technologies and research projects.
You can contrast Agile Programming and Extreme Programming with the Waterfall model of software development. This methodology says, in essence, to start with an extensive requirements analysis, then thorough design, followed by coding, testing, and so on until finished. The Waterfall model is often used in huge military projects with long development times. Ultimately "Agile Programming", "Extreme Programming", "Spiral Development", and the "Waterfall Methodology" are all just labels. In reality most software projects use certain aspects of all these methodologies, all of which are based on sound software engineering principles and practices. During my time at Microsoft, I worked on thirteen different products and the most important part of success (and failure for certain projects) was not a particular methodology, but clear communication, hard work, and common sense.
If you enjoyed this blog, then you might enjoy working at Microsoft. My parent company, Volt Information Sciences, is always looking for software engineers. Check out the job listings at http://jobs.volt.com/.