logo

 

     
 
Home
Site Map
Search
 
:: Bitwise Courses ::
 
Bitwise Dusty Archives
 
 
 

rss

 
 

ruby in steel

learn aikido in north devon

Learn Aikido in North Devon

 


Section :: Rants and Raves

- Format For Printing...

Programming, Methodologies and Buzzwords

This month Huw casts a suspicious eye on agile programming and concludes that its supporters may be its greatest enemies…
Tuesday 27 June 2006.
 

Folks! Do you want the miracle, fun, way to lose weight effortlessly? Do you want to smoke, drink, do no exercise and have a body like a top athlete? Then we have great news for you – with our new, easy, fun way of dieting, you can eat like a pig and watch the pounds simply drop away…

Yes, I know, you’d have to be one banana short of the bunch to fall for that.

OK, so let’s try another tack. How would you like to program by writing less code, less documentation, getting everything done quickly and having fun while you are doing it? Folks, welcome to Agile programming…

This word ‘agile’ is bandied about all over the place these days. Often, it’s used as a weapon with which to beat about the head old fogies like me. “I really need a good debugger,” I say. “Nah,” comes back the quick response, “Debuggers get in the way. They aren’t agile.”

“Ah, well at least, I guess I can get by with a decent editor with code collapsing and code completion…” - which prompts the irritable response, “Code completion is software bloat. A plain text editor and a friendly command prompt are far more agile…”

OK, OK, I give up. What the heck is all this agile stuff anyway?

Hackers Of The World, Unite!

I confess that I am so hidebound by convention that the cutting edge of agile programming had passed me by (as had Extreme Programming or XP, SCRUM and various other methodologies). I was therefore obliged to do some research to find out what it is all about. First stop, www.agilemanifesto.org and the ‘Principles Of The Agile Manifesto’. These state things such as ‘business people and developers must work together’, projects should be built around ‘motivated individuals’, ‘working software is the primary measure of progress’… in other words, all pretty much good old fashioned common sense.

I do have some reservations about this statement, though: “The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.” On the face of it, this seems to state the perfectly reasonable ideal that teams of programmers should talk to one another. But some people take it to imply: “and not bother with documentation.”

Take a look at the Wikipedia entry on Agile Software Development. This says: “…agile methods produce very little written documentation relative to other methods. This has resulted in criticism of agile methods as being undisciplined hacking.”

This hacking slur seems to be a sensitive issue among agile programmers. The Manifesto site addresses it head-on: “Those who would brand proponents of XP or SCRUM or any of the other Agile Methodologies as ‘hackers’ are ignorant of both the methodologies and the original definition of the term hacker.”

Hack And Slash…

Right-ho! I never like to be ignorant of the definitions of terms, so I did a bit of research. The Cassell Dictionary Of Slang lists two definitions of ‘hacker’ – one (presumably the one favoured by agile devotees) is “an enthusiast for programming or using computers as an end in itself”; the other (the sense in which ‘hacker’ is understood by the general public) is “one who uses their skill with computers to try to gain unauthorised access to computer systems.”

Now, I am not entirely convinced that even the more favourable of these definitions (“programming as an end in itself”) is one which inspires confidence. I mean, would you employ a builder who is more interested in his tools and techniques than in the house he’s supposed to be building? “Oh, yes, sir, this the Stephenson Olympia X32 is a beautiful little hod. I’ve been experimenting with the inverse twin-bifurcated method of wall-pointing recently. So much more elegant than the old Schmidt and Higginbottom back-refill technique…”

More to the point, prior to being applied to computer programmers (in the ‘70s), the word ‘hacker’ generally meant (in the ‘60s) “a run of the mill, average person.” Now, do you really think that it is entirely accidental that the same term was used to describe people who do “programming for programming’s sake”?

But the word ‘hacker’ didn’t suddenly spring into existence in the 1960s. When the Agile Manifesto talks about the origins of the term maybe they are taking a more historical perspective. Time to consult the Oxford English Dictionary. Here I discover that a hacker was (in the 17th century), logically enough, an agricultural worker who hoed with a hack (a type of axe). Figuratively, ‘hacker’ came to mean “one who mangles words or sense”.

I have yet to discover any definition of the word ‘hacker’ which I would be happy to have applied to myself and I find it continually surprising that other people have no such qualms.

And what about the meaning of ‘agile’? The definition (OED again) is “having the facility of quick motion”. So I guess that the underlying principle of agile programming is ‘responsiveness’. OK, I’ll go with that. Seems reasonable.

When The Revolution Comes…

The trouble is, ‘agile programming’ means different things to different people. I can’t say I’m surprised. As Manifestoes go, The Agile one is so lacking in detail as to be almost meaningless. For the sake of comparison, take a look at a real Manifesto – the one drawn up by Karl Marx and Frederick Engels in 1848. Those chaps don’t mince their words:

- “The theory of the Communists may be summed up in the single sentence: Abolition of private property.”

- “The proletariat will use its political supremacy to wrest, by degree, all capital from the bourgeoisie, to centralize all instruments of production in the hands of the state, i.e., of the proletariat organized as the ruling class; and to increase the total productive forces as rapidly as possible.”

Now, that’s what I call a Manifesto! Whatever you may think of it, you are left in no doubt about what it means. Now compare the Agile Manifesto…

- “Working software is the primary measure of progress.”

Primary? “Only”, I’d say…

- “Continuous attention to technical excellence and good design enhances agility.”

In other words: “Do good work”

- “Simplicity—the art of maximizing the amount of work not done—is essential”

In other words: “Do good work”

Well, you get the drift. All good, sound, principles. But more on the scale of “Come on, chaps, nose to the grindstone and all that, don’t you think?” rather than anything on a truly revolutionary scale.

Apart from a missing emphasis on documentation, I haven’t any major objections to the ideals of the Agile Manifesto. Far from it: after all, it generally states the bleedin’ obvious. However, its lack of detail had led to an unhelpfully broad interpretation of what ‘agile development’ really means. Over the past couple of weeks, I’ve read my way around a good few sites devoted to ‘agile methodologies’ and I can’t find any indication that IDEs and debugging are ‘anti-agile’ or that documentation is bad for you. However, I have come across a number of self-proclaimed ‘agile coders’ in newsgroups who make precisely these claims.

Well, I’m open to be convinced. Maybe you can program more efficiently if you follow the agile methodology, Extreme Programming or SCRUM. And maybe you can lose weight with the Atkinson Diet, the Red-and-Green, Lemon juice or Grapefruit diets. Then again, maybe you can lose weight by eating less.

I guess when it come to the crunch, my views on programming are similar to my views on dieting: there is no ‘secret’ other than discipline and hard work. Well, apart from talent, that is. Given the choice between two really good programmers and two dozen really average ones, I’d go for the two good ones and agile be damned!

AddThis Social Bookmark Button

Forum

  • Programming, Methodologies and Buzzwords
    9 October 2007, by Nicolas Connault

    I think many people misunderstand why so-called "agile programming" should end up in writing less documentation. It’s simply because the code is written in a self-documenting manner, with proper formatting, sound choice of variable and function names etc... And the unit tests that are written along with the code demonstrate the use of the APIs being written. End result: you don’t need a lot of documentation, because the code itself IS the documentation.

    Well, anyway, that’s my interpretation, and that’s how I try to code :-) Some go as far as to say that if you feel the need to insert a comment in your code, it’s because you don’t believe others could understand your code otherwise...

  • Programming, Methodologies and Buzzwords
    29 June 2006, by Daniel Lepage

    Why not choosing two good agile programmers ? :) Personally, I prefer to let people use their own approach (Agile or not). Only results talks! Don’t waste your time to find problems with Agile stuff.

  • Programming, Methodologies and Buzzwords
    28 June 2006, by Mike Woodhouse

    Well, it all depends how you define "good" as in "good programmer", I suppose. If we assert that a "good" programmer produces "good" end-product and that that end-product...

    1. Meets the requirements agreed with the customer in terms of function and performance;

    2. Consists of clearly understandable code with a transparent and flexible design;

    3. Includes a set of automated tests by which the design - and subsequent changes thereto - may be verified and

    4. Is documented to the degree necessary,

    ...then we’re probably all singing off the same songsheet. OK, number 3 may be a bit sneaky, but it’s hard to argue that a comprehensive automated regression test suite is a bad thing for most developments larger than a spreadsheet. Come to think of it, many spreadsheets could do with a regression test pack too.

    Agile, if I understand it correctly, is an umbrella term for a range of development approaches that attempt to ensure that a "good" end-product is produced. How we get there may vary, which is why I suspect the Manifesto is couched in broad (OK, woolly) terms. The general trend in XP, Crystal or whatever is towards working in a way that espouses regular deliveries of incremental improvements. In order to deliver meaningful improvements with short cycle times a high degree of discipline needs to be applied to each iteration, hence strict control of features, constant removal of duplication, test-driven design, continuous build cycles, pair-programming and a pile of other practices may find themselves thrown into the Agile mixer.

    While they might be intimidating taken as a package in something like XP, I think that viewed individually most, if not all, of these practices might be considered to be desirable in a programmer.

    I expect that there are degrees of agility: the Pragmatic Programmers, for example, are signatories to the Agile Manifesto but do not espouse all the practices of XP. Full-blown Waterfall projects are, on the other hand, decidedly not agile in any sense of the word. A "good" programmer in the latter context is presumably one who implements exactly what’s written in the spec, without any concern for whether the spec actually makes sense. I used to be one of those myself, maybe 30 years ago, I think I’m "good" in a rather better sense these days.


Home