Slashdot Mirror


Beck and Andres on Extreme Programming

narramissic writes "In recent years, Extreme Programming (XP) has come of age. Its principles of transparency, trust and accountability represent a change of context that is good not only for software development but for everyone involved in the process. In this interview, Kent Beck and Cynthia Andres, co-authors of 'Extreme Programming Explained: Embrace Change,' discuss how XP makes improvement possible."

54 of 321 comments (clear)

  1. Extreme... by celardore · · Score: 4, Funny

    I was hoping for something a little closer to Extreme Ironing.

    That would have been cool.

    1. Re:Extreme... by pnone · · Score: 2, Funny

      There is also one good tool called Petra supporting extreme programming prototyping http://petra.cleverlance.com/ We use it and love it.

    2. Re:Extreme... by shreevatsa · · Score: 2, Funny

      Nah, Extreme Programming is cool enough.

  2. Article's dated 6th May 2005.... by popeyethesailor · · Score: 2, Insightful

    This is too extreme even for slashdot...

    1. Re:Article's dated 6th May 2005.... by gbjbaanb · · Score: 2, Funny

      I don;t know about that - I think pair programming is great. think:

      What do you need to pair progam? development software, check. monitor, keyboard, check. coffee, check. newspaper check.
      Right, divvi that up between the pairs evenly, you get the software and PC, I get the coffee and newspaper. See how pair programming works? :-)

  3. Overrated by seti · · Score: 2, Insightful

    In my opinion, extreme programming is extremely overrated. Some of the ideas, such as test-driven development (although this concept is not restricted to XP), work well. Others, such as pair programming just do not work in my opinion. Programmersare solo beasts - putting two of these dragons behind one keyboard is asking for trouble.

    --
    Coca-Cola, sometimes War.
    1. Re:Overrated by hclyff · · Score: 5, Insightful
      Others, such as pair programming just do not work in my opinion. Programmersare solo beasts - putting two of these dragons behind one keyboard is asking for trouble.
      Pair programming can be seen as a kind of code review, but with the reviewer in equal position with the programmer. Traditional code reviews tend to be frustrating for the programmers, because the reviewers are in position of authority.

      But when you put two programmers with equal authority, you have one thinking about the bigger picture and the other reviewing his mind flow. At the same time the later is writing down the ideas in code, with the first one reviewing his code as he types.

      Programmersare solo beasts
      Where have you been the last 20 years? The stereotypical programmer, hacking his piece of kernel over night is very endangered species, and rightly so. Like any kind of engineering, software engineering needs as much face to face collaboration as possible.
    2. Re:Overrated by Aladrin · · Score: 2, Insightful

      I mostly agree. However, you've forgotten that not all programers ARE like that. Some do actually work well when that close to someone else. I would love to find another programmer of my level (too much higher or lower would cause many problems, I'm sure) and try it. I suspect I'm too hard-headed-control-freak to allow someone else to do things while I just watch, even half the time. But there are people who can and DO do pair-programming and produce code faster, with fewer mistakes.

      Unit testing is my new best friend, btw. It has helped me find so many issues and even prevent issues that I can't exist without it now.

      --
      "If you make people think they're thinking, they'll love you; But if you really make them think, they'll hate you." - DM
    3. Re:Overrated by BiggerIsBetter · · Score: 2, Insightful

      Like any kind of engineering, software engineering needs as much face to face collaboration as possible.

      You really think XP is Engineering?

      --
      Forget thrust, drag, lift and weight. Airplanes fly because of money.
    4. Re:Overrated by Angst+Badger · · Score: 4, Insightful

      Pair programming can be seen as a kind of code review, but with the reviewer in equal position with the programmer. Traditional code reviews tend to be frustrating for the programmers, because the reviewers are in position of authority.

      I've never seen one of those. Every code review I've participated in has been a collaborative effort between peers. If you treat a code review as a cooperative effort between programmers, it doesn't have to be frustrating.

      Like any kind of engineering, software engineering needs as much face to face collaboration as possible.

      To a point. But real engineering requires planning and clear interface definitions, and XP -- almost to the point of being pathological -- attempts to avoid planning as much as possible by subsitituting endless chatter and tremendous time wasting repeatedly reimplementing what could have been done right the first time. (And yes, I know some things always have to be reimplemented, but just because mistakes are inevitable doesn't mean they have to be encouraged.)

      Software development has an unfortunate tendency towards fanatical adherence to the latest silver bullet. Usually, this involves an implementation language backed by a marketing push; XP seems to be the first programming fad built entirely on book publishing. But then, no implementation language ever actively encouraged the kind of passive-aggressive personality that thrives on XP.

      --
      Proud member of the Weirdo-American community.
    5. Re:Overrated by Peter+La+Casse · · Score: 2, Interesting
      In my opinion, extreme programming is extremely overrated. Some of the ideas, such as test-driven development (although this concept is not restricted to XP), work well. Others, such as pair programming just do not work in my opinion. Programmersare solo beasts - putting two of these dragons behind one keyboard is asking for trouble.

      Test driven development is seductive; who wouldn't want to have all those automated tests in order to check changes to their code? However, I find it hard to put into practice. When requirements change frequently (which XP is supposed to be geared towards) it's hard to complete the tests much less complete the code before we're asked to change something, and changing even a small piece of code often requires changing a lot of tests. If you can offer any suggestions about how to improve that, I'm all ears.

      Pair programming, on the other hand, is something that I wish I could have done when I was fresh out of school and not really as smart as I thought I was. It seems like an effective way to show the newer programmer how the veteran does things, both in the code and in how the day is scheduled.

    6. Re:Overrated by Spicerun · · Score: 5, Interesting
      I worked under it for at least a year. Its another one of those methods that looks good on paper, but sucks in practicality. What's unpracticle?

      1. No company in their right minds wants to pay for TWO programmers to do a single job. But then, again, you can always get 2 programmers at half-price to do the job (and have half the quality of one full price programmer).

      2. As with any other method, it assumes all the specs and implementation have been worked out before the code is even written....nobody has the freedom to write experimental throwaway code to even see if their approach is even feasible in the coding, or, if programming a device, if the device will even work with the approach being made (for you people not in the embedded world, most device datasheets are incorrect and seldom get corrected).

      3. While its great at letting the mundane functions be rewritten (refactored) as many times as possible, it gives a mechanism where newer features are *always* put off (by managers usually) indefinitely....its an illusion, under a few managers, that the programmers will ever get to implement the newer features wanted by customers (its amazing how most new features are always rated as low priority by someone other than the customer....even more amazing about how many 'stories' aren't written by the customer.).

      4. Even in the XP books it is explained that XP is not meant to work for every single software environment/situation....yet there are managers who will do their best to try to force it to work when it won't.

      I always find it really is better for a group of Programmer Peers to sit down together and review the code AFTER it has been written (with tests). Trouble is, most companies/managers refuse to understand that 'Programming Peers' do not include the stock boy in shipping.

      Just my $.02. Can you tell I didn't really like being under the XP model myself?

    7. Re:Overrated by Peter+La+Casse · · Score: 5, Insightful
      You really think XP is Engineering?

      It's an attempt to achieve a greater level of quality through process/practices, which is as close as "software engineering" has gotten to real engineering so far. Arguably, though, "software engineering" isn't real engineering until you use formal methods to ensure the correctness of your design and implementation.

    8. Re:Overrated by CastrTroy · · Score: 2, Interesting

      Pair programming may stop people from wasting time on slashdot, however, they seem to waste time in a lot of other ways. Like whether a specific for loop should be written as for(i = 0;imyArray.length();i++) or as for(i = 0;i=myArray.length()-1;i++). That and whether the opening brace should be on same line following the for statement, or on the next line. Oh, and whether certain things should be put in functions, or put inline in the code. Peer programming, while I can see the advantages of having someone sitting there, watching you, and correcting you as you go along, also has a lot of downsides. I often program in a very non-linear way. Sometimes i'm aware that I've made a mistake, but finish typing out my entire thought before I go back and correct it. Whenever I have someone watching me, and they point out the mistakes, telling me to go and correct something, I often lose my train of thought. It's like to writing a story and having somebody make you go back and correct all the grammar mistakes before while your done trying to get your thoughts out.

      --

      Anthropic principle: We see the universe the way it is because if it were different we would not be here to see it.
    9. Re:Overrated by MobyDisk · · Score: 5, Interesting

      I found pair programming to be very efficient. But it depends on how you pair people.

      (Summary of my best practices article)

      Junior developer alone: Can complete the project but with errors a senior developer could have fixed. Code reviews fix this, but are tedious.
      Senior developer alone: Good code, but this tends to breed "cowboy coders" and doesn't pass on knowledge.
      Senior + Junior: Highly effective, but only if the Junior developer is the one at the keyboard.

      Other combinations can help, but aren't superb. I recommend pair programming (1) on tedious code, (2) to spread knowledge, and (3) when refactoring something crucial.

    10. Re:Overrated by blowdart · · Score: 3, Insightful

      But all or nothing is not just an XP problem. All methodologies say their way is best, if you deviate you are a heretic and if it all fails then it's your problem for not following the rules. The people that "invent" a methodology make their money from teaching people how to do it, why would they kill their cash cow by telling people they should just take the bits that work for them? Methodology advocates, like preachers cannot afford to have people think for themselves.

    11. Re:Overrated by ClosedSource · · Score: 2, Insightful

      "Most programmers have, at some point or another, had an 'OMG - why on earth did I do that?' moment"

      Sure, but the question is what percentage of the time does this happen and is it often enough to justify tying up two programmers all the time.

      "The code only gets committed if *both* developers are happy - and that is a sure way to increase the quality of code, since the foibles of an individual are subsumed."

      That's an idealistic view. It would be more accurate to say the code gets committed when the more aggressive developer is happy.

    12. Re:Overrated by Eivind+Eklund · · Score: 2, Interesting
      It actually works good even with a large experience/skill disparity between the programmers. I've only had the experience from the senior perspective - the juniors have said it worked well for them too. As they're still my friends (even though I've quit working with them), I believe them :)

      Eivind.

      --
      Doubting the existence of evolution is like doubting the existence of China: It just shows that you're uninformed.
    13. Re:Overrated by vhogemann · · Score: 2, Insightful

      I enjoy pair programming, really.

      Quite often it prevents me from doing very stupid errors. Having another person looking at what you're doing, and making questions about that pice of code, and suggestions makes you pay more attention, and gives a precious feedback.

      Also, when I'm co-piloting (not at the keyboard, that is) I feel this incredible urge to return to my desktop and code something. Watching other people code, and talking about his code makes me want to code, its weird, but I always feel more motivated after a pair programming session.

      Of course there are times when I don't want anyone looking over my shoulder, but that's normally happens when I'm playing Nexuiz DeathMatch ;-)

      --
      ---- You know how some doctors have the Messiah complex - they need to save the world? You've got the "Rubik's" complex
    14. Re:Overrated by Stooshie · · Score: 2, Interesting
      ... and changing even a small piece of code often requires changing a lot of tests. If you can offer any suggestions about how to improve that, I'm all ears.

      That's the wrong way round. Shouldn't you be rewriting the tests to conform to the new specifications then changing the code for the re-written tests that fail? Doing it your way will make it very difficult to trace code.

      Another way of pair programming could be to have one person writing the tests and one writing the code.

      --
      America, Home of the Brave. ... .and the Squaw.
    15. Re:Overrated by sammy+baby · · Score: 3, Funny
      Your post reads like a summary of the book, "Extreme Programming Refactored: The Case Against XP," by Stephens and Rosenberg I recommend it for everyone, including people who are using XP successfully.

      If nothing else, it's worth it just for the song lyrics:

      Eight Builds a Week

      (Sing to the tune of "Eight Days a Week" by The Beatles)

      Livin' in a timebox
      Guess you know it's rough
      Gotta build every day, babe
      Even half-baked stuff

      Build it, ship it
      Build it, ship it

      Ain't got time for design, babe
      Eight builds a week

      Build it every day, babe
      Build it right on time
      One thing I can say, babe
      No time for design

      Refactor it, test it
      Build it, ship it
      Ain't got time for design, babe
      Eight builds a week

    16. Re:Overrated by 1lus10n · · Score: 2, Insightful

      Maybe to managers who dont understand the typical coder they should be an endagered species. To me I look around at corporate software and I am wholly unimpressed. I look at the things that the "overnighters" have accomplished vs the things the guys wearing ties and sitting in cubicles have accomplished and I pick the "overnighters" without any hesitation, flow charts, fancy buzz words or any fluff.

      You'll notice that firms who force crap like XP (but not limited to) onto coders fail in the long term. (or at least from a technical perspective they fail) I can also guarantee that sitting two people down to code on one terminal is a quick way to cut production and ramp up cost in a big way. Even the best minds dont always work well together.

      Software engineering is not the same as coding or testing and people who try to force everything into one role are in for some real shockers. You dont see engineers building the bridge, and you likely never will. The most efficient design is an architect/software engineer who designs the program/application/whatever with some input from the coders and/or testers, the coders then start to build the thing in question with oversight from the architect. Once your at a certain point you then include the testers. In the current corporate culture (which largely fails to understand the technical aspect of things) they try to replace the architect position and force the technical aspect down a level. Which is why you end up with so many project managers who use things like XP.

      --
      "Two things are infinite: the universe and human stupidity; and I'm not sure about the the universe." --Albert Einstein
    17. Re:Overrated by computational+super · · Score: 2, Interesting
      What in the seven hells were you doing before?

      Probably running complete end-to-end regression tests every time he made even a minor code change, as his boss likely required him to do in the name of "efficiency".

      I got my first professional programming job in 1990, back in the days before even the term "methodology" had entered the lexicon. After just a few months, practices like what we now call unit testing and refactoring seemed obvious to me - so obvious, in fact, that I just started doing them. Along comes my boss (who's never tried to so much as launch a text editor - back then, it was common for programmers to have bosses who weren't even terribly comfortable with computers) who asks me what I'm doing. I explain that I'm setting up a program to test the program I'm working on (and making subtle changes to the target program itself so that it can be "unit tested") and he berates me for wasting time. As a beginning programmer, I have no choice but to figure he knows something I don't know, so I abandon what I'm doing. (Actually, I continue to do it in secret, because nobody's proposing any more effective ways to get my job done).

      Fast forward about seven or eight years - Martin Fowler publishes a book called "Refactoring", Kent Beck publishes a book called "Extreme Programming Explained". My boss introduces me to these revolutionary concepts that will change the way I program. Now I can finally begin writing unit tests in the open and admit to it freely! I start to write unit tests and subtly refactor programs so that they can be unit tested... and the programmers around me berate me for disturbing their pristine, pure code (that works just fine, thank you very much!) by removing things like hardcoded file names and IP addresses in the name of some new-fangled, high-falutin "extreme programming" concept. Sigh...

      --
      Proud neuron in the Slashdot hivemind since 2002.
    18. Re:Overrated by GileadGreene · · Score: 2, Informative
      Off the top of my head:
      • Structural engineering - static load analysis of simple structures, finite-element modeling of complex structures
      • Digital hardware design - boolean logic, circuit simulation, more recently formal verification via model-checking and higher-order logic
      • Control engineering - frequency methods for stability analysis (PID controllers), linear algebra for the derivation of optimal control laws
      • Spacecraft trajectory design - pretty much all orbit analysis is mathematical in nature, and even the heavily numerical work is rooted in things like dynamical systems theory
      • Communications system engineering - statistical analysis of signals and noise, coding theory to improve SNR
      • Safety critical software - formal proof, model-checking

      Note that most engineering doesn't rely on formal mathematics to ensure correctness - they still do testing as well - but formal mathematical work can significantly increase your confidence in correctness, and it can help to detect design errors much earlier in the design process. Some things simply can't be tested though - spacecraft trajectory design is one of those things where the math must be right, becuse you only get one shot.

      Now, let's flip the question around. Can you give me an example of a field of "real engineering" that doesn't make use of some kind of mathematics to help understand and analyze proposed designs?

    19. Re:Overrated by murdocj · · Score: 2, Insightful

      The parent summarizes very well what I find problematic with pair programming. I'm a slower "let me walk thru it" kind of guy. I also sometimes need to just dummy up some throwaway code to see how something works. Having me pair program with a faster, "just do it this way" guy drives me nuts, because I feel like I'm being reduced to a typist.

      I have had successful "pair programming" sessions at my old job, but that was before I even knew what pair programming was. When someone had a tough nut to crack, we'd sit down together and work thru it... maybe we'd type code, maybe we wouldn't. It wasn't a case of one person directing the other person what to do. And once the need to pair up was done and it was clear what to do, we'd split up. Done *as necessary*, pair programming works fine.

    20. Re:Overrated by e2d2 · · Score: 2, Informative

      Actually what you are saying is completely not true when it comes to XP. They clearly say in their docs that you can choose the pieces of the methodology that you feel valuable and leave out ones you don't use.

      It also was extracted from a real world project methodology used by the C3 project. So in fact this methodology came from real world practices, not out of someone's ass as you imply:

      http://www.xprogramming.com/Practices/xpractices.h tm

      I've been in environments where we've used XP, I've been in environments where we used CMM (level 5!), and I've been in environments were we used nothing at all. IMO, most practices of XP are solid and can be used well in the real world. For instance unit testing gained popularity via XP. That's a good thing. Continuous building, something that large projects have been using for years, is a good practice. Etc.

      So why hate? It's good to be skeptical in this industry. But hear the evidence before you judge and when you do judge, justify it with evidence and reasoning. Not just notions of ulterior motives.

    21. Re:Overrated by AuMatar · · Score: 2, Insightful
      - Pairing keeps you completely focussed on a single important task. This benefit alone at least doubles the productivity of every developer and makes pairing cheaper.


      Actually, the least productive time I've ever spent was spent pairing. YOu end up either arguing over everything or shooting the breeze more than coding. I find pairing reduces the productivity by at least 75%- that 1 pair is less productive than either one of the two coding alone.

      - Pairing produces better designs that last longer.


      Good design up front does that. Pairing tends to have little to no effect unless their was no design to begin with. In which case you have bigger issues.

      - Pairing prevents simple mistakes and saves you from loosing time in the debugger.


      Yes, but it does so by costing 100% time of 1 developer. If you spend an hour of simple bug finding for a day of coding, pairing cost 7 hours. And worse, pairing does not eliminate simple bugs- it finds only about half of them.


      - Pairing fosters shared knowledge about the project that is being worked on. It makes it easier to exchange people between tasks.


      There's better ways to do this. Design reviews and code reviews, for example. Which have the advantage of spreading the knowledge to an entire team, not one person.

      - Pairing helps learning. People teach eachother programming techniques, patterns and ways of working with IDEs.


      So do code and design reviews, and they do so with far, far less cost. And IMO, far greater learning value.

      - Pairing helps raising the spirit of the team. It has worked extremely well to glue our team together, although we only see eachother in real life twice a year.


      I've seen higher morale the day of layoffs than when we were pair programming. I have never seen something destroy morale that fast. By the end of the week I was ready to punch my partner in the face, and we started off friends.

      - Pairing activates the speech area of your brain and makes you more creative.


      Wow, now this is utter bullshit.

      - Pairing is fun.


      Here's a list of some things slightly more fun than pairing, you should try them:

      *genital amputation
      *being in a full body cast
      *walking on broken glass

      If I was told I had to pair program again, I'd quit on the spot. I'd move into another industry rather than put up with that bullshit again.
      --
      I still have more fans than freaks. WTF is wrong with you people?
    22. Re:Overrated by Anml4ixoye · · Score: 2, Insightful

      Some comments:

      1. No company in their right minds wants to pay for TWO programmers to do a single job. But then, again, you can always get 2 programmers at half-price to do the job (and have half the quality of one full price programmer).

      No, companies want to pay for what is going to deliver them the biggest ROI for the least amount of money. They don't care how many people are on a job, as long as they get the profit in the end.

      2. As with any other method, it assumes all the specs and implementation have been worked out before the code is even written....nobody has the freedom to write experimental throwaway code to even see if their approach is even feasible in the coding, or, if programming a device, if the device will even work with the approach being made (for you people not in the embedded world, most device datasheets are incorrect and seldom get corrected).

      We do plenty of spikes, which is exactly throwaway code. We then throw it away, and rewrite it using test-driven development.

      In fact, the whole point of XP is to be in situations where the code and specs are constantly changing, and thrives in those kinds of environments.

      3. While its great at letting the mundane functions be rewritten (refactored) as many times as possible, it gives a mechanism where newer features are *always* put off (by managers usually) indefinitely....its an illusion, under a few managers, that the programmers will ever get to implement the newer features wanted by customers (its amazing how most new features are always rated as low priority by someone other than the customer....even more amazing about how many 'stories' aren't written by the customer.).

      This is definately false. XP is all about the customer driving what the developers are working on by listing what is the highest priority and most value for them. The developers sign up for stories to do just that. Sometimes they don't sign up for the most valuable story - generally because either they need something quick to do, or because it is necessary to complete another story.

      4. Even in the XP books it is explained that XP is not meant to work for every single software environment/situation....yet there are managers who will do their best to try to force it to work when it won't.

      Can't argue with that!

      I always find it really is better for a group of Programmer Peers to sit down together and review the code AFTER it has been written (with tests). Trouble is, most companies/managers refuse to understand that 'Programming Peers' do not include the stock boy in shipping.

      Just my $.02. Can you tell I didn't really like being under the XP model myself?

      It sounds like you were under a very poorly implemented model. In fact, I can't believe they would call that XP - because it sounds almost as far from it as you could be.

  4. Laundry? by LaughingCoder · · Score: 3, Funny
    FTA:
    I think that the first book was in reaction to a culture for programmers that was basically camping in their cubicles in Silicon Valley where people were spending their entire lives living out of cubicles with food brought in and laundry taken out.
    There are places where they take out laundry? Real programmers don't change their clothes until the job's done!
    --
    The more you regulate a company, the worse its products become.
  5. Why is it called "Extreme"? by 10Ghz · · Score: 4, Funny

    To me, the word "extreme" sounds like they program in assembly 24x7 for one week straight, or they program with laptops, while running away from a pack of wolves or something. But apparently it's not like that. So what makes it so "extreme"? Did they come up with that name when they were discussing their interests with their jock-friends?

    "Oh yeah, I'm in to pretty extreme things. Currently I'm doing base-jumping and ultimate-fighting. How about you?"
    "Well.... uh.... I'm in to.... EXTREME programming"
    "Whoa! Radical!"

    --
    Lesbian Nazi Hookers Abducted by UFOs and Forced Into Weight Loss Programs - -all next week on Town Talk.
    1. Re:Why is it called "Extreme"? by Anonymous+Codger · · Score: 4, Funny

      It's called Extreme because they take some basically good ideas and push them to such extremes as to be completely useless in the real world.

      --
      No sig? Sigh...
    2. Re:Why is it called "Extreme"? by Anonymous Coward · · Score: 2, Funny
      You have some misspellings there... let me correct you:

      • "Don't let your programmers be tired" -> "Forbid programmers from working overtime at your own peril as you should realize that a programmer is a real, live adult human being which happens to be a professional and therefore can take care of his own work hours due to the fact that he has been living with himself for quite a few years and knows perfectly well when he's tired and when he's not, and resents being treated like a child by a moronic idiot who just happens to have stepped on enough people to raise up the ladder enough to annoy said programmer".
         
      • "Get customer feedback" -> "Release in very short cycles, and have a customer owner that decide how things should work in your dreams, because in the real world you should realize that your customer doesn't give a s***t about whether you need feedback or not, because he's already told you everything you need in all those prep meetings and impromptu emails, and just wants to sit back and click on the darned button and see things working, so he won't be looking or testing anything you send to him because "it's not done yet" until he thinks "it's done" and then he'll change all those lovely specs you spent some much time tuning the tests to fit into. And your manager will be so desperate to please him that he will say yes to anything he says, because after all, this is Extreme Programming, it's great, it's flexible, we can do anything as long as the tests come out alright, right?"


      There, cleaned that up a bit for you.

      JARCP
      ----
      Just Another Random Cynic Programmer
  6. One of the best quotes ever... by chuckplayer · · Score: 4, Insightful

    Kent Beck hits the proverbial nail on the head with this zinger (which I'm sure is certain to stir up quite a few):

    "It's not all about programming. It's not all about programmers. Programmers aren't somehow special and to be protected and coddled. I used to say often that programmers were children. They liked not to be yelled at and to have more toys ... I think programmers are, or at least can be, adults and can and should, for the good of development and themselves, act that way."

    The above quote sums up almost every problem that I have seen over the past 10 years with the various development shops I've been a part of.

  7. Re:buzzwords by TechnoBunny · · Score: 2, Insightful

    But thats not necessarily a problem - how many projects are based around the same requirements as they were when the first line of code was written? Of course, in an ideal world they would be. But the world isnt ideal. Far better to start work accepting that the code you write may well be thrown away at some point, and continually refactoring to keep on track towards the changing target.

  8. Real Extreme Programming by niceone · · Score: 5, Funny

    IMO real extreme programming should involve at least 3 of the following:

    1. Only having 24 hours to deliver the code
    2. Failing would cause thousands of innocent people to die
    3. Getting your interface specs from a dieing man after being helicoptered across town
    4. Using emacs
    5. Failing code review results in you and/or your spouse being shot in the leg
    1. Re:Real Extreme Programming by settrans · · Score: 2, Funny

      5. Failing code review results in you and/or your spouse being shot in the leg

      I'm confused. Are we still talking about programmers?

      --
      "When I wake up in the morning I piss cryptographic excellence." - Bruce Schneier
  9. Re:buzzwords by Anml4ixoye · · Score: 4, Insightful

    I view XP as a methodology to solve a major problem I've seen in software - communication.

    Why do we build software? It's to provide value for our customer, whether that customer be a marketing department, a gamer, or ourselves. And if we don't keep in touch with what it is that they want (recognizing that people generally don't know what they want until they see it), we probably won't provide the value we could.

    To that end, XP encourages constant communication by using frequent releases of the stories (read: features) the customer thinks are most valuable. The customer gets a working version every week, or month, or 2 months, or whatever cycle seems to work for the team.

    From the development side, XP encourages the code to always be potentially shippable by having a suite of Unit and Acceptance tests (the former written by the developer /before/ the code is written, the latter written by the customer(!)). We continually run them using a Continuous Integration server which monitors the code repository and checks out the latest version, notifying the team of any conflicts.

    It also encourages things like Collective Ownership, where, in theory, any developer can sit down and work on any part of the system. This is achieved partly through the unit test suite, and partly through pair programming with frequent swapping (we swap pairs generally twice a day, in the morning and at lunch, but some teams do more, and some do less).

    But, regardless of all the practices (and there's more than I'm listing above), the end goal is /not/ to be "XP", it's to deliver value to the customer. And if your current practices are doing that, then that's what is important.

    As far as TDD, I have a series I recently did which shows how TDD works here (part 1) and here (part 2).

  10. Good marketing by ClosedSource · · Score: 2, Insightful

    "The XP books make very clear that it's either all or nothing. They don't claim that pair programming by itself is always useful, they just claim that this whole set of techniques taken together is useful. If you're going to do all the other things XP says, XP says you should combine it with pair programming."

    This is just good marketing. By making this "all or nothing" claim, XP has a built-in excuse that you are invoking here. Ever noticed that you hear the phrase "because you're not doing it right" more often with XP than with other approaches?

  11. Is he a manager ? by aepervius · · Score: 3, Insightful

    Because all the programmer I know around are quite adult, responsible, and do not care for the latest toy. But they do care that they are given enough time to implement features, taht the features are correctly documented, that the spec are there etc... And in the last 6 years I was there, those point were not met, and usually the manager were responsible for a reason or another, but never beared the responsability.

    To sum up, to define the programmer as "child", is really disapparging, and far far away from reality of the average software developpement shop. Most are average guys which want to do a correct job, but are put in impossible situation by management.

    No if the quote would be applied to manager "manager are like child, they like to play and win, but do not wish any responsasbility in tehir action".

    --
    C. Sagan : A demon haunted world:
    http://www.amazon.com/gp/product/0345409469/
    visit randi.org
    1. Re:Is he a manager ? by Cederic · · Score: 3, Interesting


      Beck is not a manager. That doesn't mean he lacks management skills (I've seen evidence that he does have excellent management skills) but reflects his hands-on nature. He writes code, and thinks about the process of writing code. And his thoughts tend to be somewhat broader than most peoples, and more complete, and when he shares them with others, better expressed.

      In other words, find books and papers and software written by Kent Beck and read the lot. If every programmer on the planet did that, even if they disagreed with everything he'd said, the IT industry would become immensely more efficient and effective overnight.

      Now consider Beck's quote that you have taken affront from. Think about new programmers, software heroes, cowboys, even experienced and capable programmers - they all want more toys, to be left alone to get on with their job (which they perceive as programming), that everything is handed to them on a plate. Your comment even reflects that - "enough time", "features are correctly documented", "spec".

      Real life isn't like that. And instead of whining about it, Beck stepped back and re-evaluated how to approach software so that he could deal with those issues, and still write top quality code, and still meet deadlines and give the customer value.

      No, Beck isn't a manager. He's quite beyond such limiting labels.

  12. Treat programmers like other professionals! by Rearden82 · · Score: 3, Insightful

    "It's not all about programming. It's not all about programmers. Programmers aren't somehow special and to be protected and coddled."

    As a programmer, I agree 100%. I expect to work and be treated like any other professional.

    NOT as a lab rat for "extreme programming" or whatever buzzword-laden feelgood bullshit management scheme comes along this week.

    You wouldn't go to a painter and say "I want you to make me a painting. It doesn't matter what it consists of yet, we'll worry about that later. Just start out with a box or something and we'll meet every day and figure it out from there. And just to make damn sure you can't get anything done, I've hired another painter whose role is to sit around and annoy you." So why does that make sense for programmers?

    1. Re:Treat programmers like other professionals! by sh4na · · Score: 3, Insightful

      Amen to that, brother!

      First there was the "cat herder" motif. Programmer's are savage animals to be herded about by sensible managers, since they are wild and unpredictable and can't possibly function in a professional manner. That didn't go down too well, so after that programmers are this special breed that must be protected from the evil clutches of managers, like an artist on a quest trying to get rid of those pesky debt collectors. Nope, didn't work either. So now programmers are, really, nothing special, *bemused chuckle*, so they must work in pairs because they really can't discipline themselves all that much, so can't follow deadlines and schedules and program their work accordingly (pun intended).

      Really, wtf?!? Who comes up with this shite!?!

      I'm a professional. I study. I work. I have to deal with clients and managers and other programmers and emails and schedules and deadlines and projects and planning and meetings and $"#%$$ hard disk failures and stupid IDEs and dumb APIs and idiotic OSs and back pain from lugging the laptop around and hand pain from sitting on %$#"%$$% chairs with %&#%#$ desks and &%%"% mice and #$£&% keyboards and procrastination and bills and everything else one has to deal with in any job. And above all of this I still love the job, so I have the extra duty of being wacky some of the time just to fulfill my geek quota.

      And besides all of this, because I have this label someone stuck on my back somewhere without me noticing, announcing to the world that I'm a programmer, I have to also be a "lab rat [so aptly put by the parent, which is why I'm shamelessly quoting] for whatever buzzword-laden feelgood bullshit management scheme comes along this week" (or the next... and the next...), because someone is bound to read that buzzword-laden $#&%$%# and decide it would be so much more better amazing wonderful wow to make me work like the aforementioned buzzword-laden recommends as the oh so bestest way to get anything done with those darned critters^H^H^H^H^H^H^H^Hprogrammers!

      Could you buzzword-writing freaks, like, go pester the street vendors or accountants or something? I really need to finish these project design reports so I can start implementing the architecture I designed together with my team on - *gasp* - separate computers.

      --
      shana
      ......gone crazy, back soon, leave message
  13. GUI prototyping tool by pnone · · Score: 2, Funny

    There is also one good tool called Petra supporting extreme programming prototyping http://petra.cleverlance.com/ We use it and love it.

    1. Re:GUI prototyping tool by ynohoo · · Score: 2, Insightful

      What's up, didn't you like the "Funny" mod you got the last time you posted this?

      I must admit I found this site disconcerting - I'm unlikely to buy design tools from people who look (on this site) like they are in the "manic" phase of their bi-polar disorder...

  14. Agile Programming == Late night infomercial by MrData · · Score: 3, Insightful

    Agile Programming is like a late night infomercial without the "these results are not typical" disclaimer.

  15. Formal methods in chip design by Morgaine · · Score: 2, Interesting

    Chip design is a good example of such uses in "real engineering". The whole semiconductor industry is permeated with "strongly formal" tools implementing different types of formal methods at their core. These vary hugely, from loose fuzzy logic design aids to stronger expert system parameter, timing and topology validation, to the full blown formal methods that a language-based computer scientist would recognize.

    And it's been going on for decades. The FPU of the well-known transputer CPUs from the 80's were designed using formal methods.

    If integrated circuits were crafted using our current manual programming methods, 99% of computers would be dead 99% of the time.

    --
    "The question of whether machines can think is no more interesting than [] whether submarines can swim" - Dijkstra
  16. Re:Overrated == Someone answer this by aaribaud · · Score: 2, Informative

    As a non-layman, highly SW-based, real enough engineer (and other than that an almost normal person), I would not parallel, for instance, structural analysis in civil engineering with formal methods in SW engineering. "Formal method" is the name of a specific kind of SW analysis tool, based on mathematically proving the software, not taking stress scenarios into account (stress simulation for SW is called "testing" :) ).

  17. Extreme Hogwash by roman_mir · · Score: 4, Insightful

    First a disclaimer: I worked on an ADP project that involved Intelliware - an XP shop to build a mutual fund prospectus preprinting system (system that collected information from different mutual fund vendors, and used customer information to decide what and when to print and to mail to that customer.) This was a second iteration of the project. The first iteration had to be scrapped, because the same vendor provided a solution that did not scale to the task, when major Canadian banks came online.

    My impression from the entire excercise, (which included daily standup meetings, story cards, paired programming, unit testing, end of the day documentation.) The process became very very wasteful. I personally saw that putting 2 contractor programmers, each at 90/hr at one workstation does generate dialog between the programmer, where both have to generally agree on the approach to any given problem but I did not see any performance improvement achieved by this approach over havin one 90/hr contractor doing the same thing. Since the requirements of the system were still being 'refined' and since there still were deadlines to achieve, the pair had to produce as much code as possible in a very short time period and various bugs still slipped through the process (most of which admittedly were caught by the unit testing, but unit testing.)

    The daily standup meetings were mandatory of-course even though most people loathed those. There still were 'overal architects' on the process, and due to the politics of this specific vendor they forced a custom server solution upon the customer (even amid my vivid objections. I was trying to get the vendor to use existing server and framework solutions, unfortunately my voice was not heard, there was no will to prevent the imminent demise of the project by concentrating on the problem at hand and not getting ourselves into a proprietary application server territory.)

    Basically the project was not delivered on time (and as I at the time predicted) went over the original time estimates by about a year. I was forced to leave 3 months into the project because I became to frank with the department director. 3 months after I left, Intelliware was forced out the door as well. The project was partially delivered within the time that I estimated, the department director had to leave the department as well.

    I do not get any warm and fuzzy feelings about anyone promoting XP, I right away start looking for ulterior motivations. My personal feeling is that people who do not want to carry any responsibility for the project, for the code, for the requirements welcome XP (or can be easily swayed to accept that methodology.)

    In XP noone is really personally responsible for anything, and that attracts people who want to have it easy. Documentation is shunned upon, any forward thinking is met with contempt. Any questioning of the process/methodology is considered a heretic. Sweat shop mentality dominates XP, and it is not surprising, considering that it takes 2x as many people to deliver the same solution for 2x the money. Obviously there is a drive for those, who are actually producing code to work as fast as possible without any room for thought.

    I did however find that unit testing is a very good approach to testing and that wiki style documentation is excellent if used properly.

    1. Re:Extreme Hogwash by roman_mir · · Score: 3, Insightful

      That doesn't sound like an XP project to me at all. How do you go over by a year if you deliver every 2-6 weeks? - you didn't read it, did you? For various political reasons instead of just concentrating on business at hand, the abovementioned firm decided to write everything you can find in a commodity application server by hand. My estimates included this fact, the XP provider who I named convinced the client that everything will be done by the client's deadline (about 4 months after the project began.)

      Delivery of various pieces was done every 2-4 weeks actually, but the application server part feature creep that was unapparent to the client but obvious to me reared its ugly head. Every time a piece of code was 'delivered', it became apparent that it had to do more and more, and every time it had to be redone.

      My point is that XP provides excellent conditions for this kind of 'delivery' mechanism because it objects to doing any real architecture (analysis of the requirements and features upfront.)

      That's ludicrous. One key tenet of XP is "sustainable pace". Don't burn out, don't work late nights. - there was almost no late nights, but everyone got the CTS. One person at the computer had to provide the code that two people would generally provide during the day.

      You are aware of the body of evidence (academic and business) that shows that while pair programming is less efficient than solo programming (in a lines of code delivered sense) it is nowhere near twice as slow and the code delivered is so considerably higher quality that it more than makes up for the overhead? - I am aware of my own experiences and I don't have to submit my experiences to any 'body of evidence' (academic or business.) XP forces the pair to provide similar amount of work as if they were working seperately.

      I call bullshit on your statement you were using XP. You may have used many of the practices, and you may have called it XP, but you didn't do it. - you can call it whatever you want, Intelliware is the top XP solution provider in Ontario.

      Don't feel bad - it's a bloody difficult thing to do properly. Possibly too difficult. By far the highest discipline method I've ever used. But don't badmouth it just because the company employing you didn't do it properly. - First of all, I was a contractor for ADP, and Intelliware was an outside resource, but all (4) ADP people were put into Intelliware teams and we had to work together, so I wasn't employed by an XP company.

      Secondly, what I am feeling from you is exactly the same attitude that I was getting from that XP shop - do not badmouth XP. XP cannot be wrong. I am under impression that XP is a religious movement rather than a management solution to a technical/management/social problem.

      The fact that so often you can hear people say exactly this: it's bloody difficult thing to do properly, should be a red flag - it is just like any other methodology or any other process. Anything is difficult to do properly and in theory anything will work well if done properly.

      Give me a bloody break, just because you bought into the entire XP religious propaganda, doesn't make XP any more valuable a tool than any other methodology, process or a combination of requirement/design/development standards.

    2. Re:Extreme Hogwash by roman_mir · · Score: 2, Interesting

      FFS, Intelliware may be the top XP solution provider in Ontario, but you've said yourself: Feature Creep - absolutely. A Feature Creep caused by the politics of the vendor, who used XP to his own advantage because it is just so easy to hide the fact that Feature Creep will happen.

      In a proper XP project that is impossible. You only implement features for which there are stories. The customer chooses which stories to implement. Feature creep ceases to be an option. - Bullshit. The customer is told that in order to implement the business requirements various frameworks have to be put in place. It is true, the frameworks have to be put in place, what is not made apparent is that these frameworks do not have to be implemented in house. XP is not to blame for the politics of the company, but it is a bloody excellent mechanism to make it nearly impossible to give any estimates on what actually will happen when these frameworks, that need to be implemented, start blowing up into a 'proper' application server.

      Give me a bloody break, and don't badmouth XP until you've done it properly. - oh, jeez. So what you are telling me is that you apparently know that XP was not done properly by this top XP provider in Ontario (a bloody huge province.) This is insulting to the intellect of the casual reader.

      I'm quite happy for you to criticise XP - shit, I can give you a couple of pages of solid criticism myself - but at least base it on reality, not your experience of some fucked up cowboy method that someone told you was XP. - I don't see you giving me anything but statements, that are full of horse manure. Apparently you are THE authority on what makes a proper XP implementation. Whatever. I worked on XP projects twice in my life, I researched what XP is supposed to be and compared to my experiences. As far as I am concerned the Intelliware XP experience was as close to a 'perfect' XP experience as anyone should ever hope to get. I was there, what is your basis for your statements?

      I haven't bought into the entire XP religious propaganda. If I had I'd be insisting we use it where I work now. I don't, because I evaluate multiple development methods and I recommend the appropriate one for the work being done, in the environment in which it is happening. I just get pissed off with the dogmatic refusal from a significant percentage of the IT industry to actually objectively evaluate new and different ways of working. Stop holding my industry back you luddite wankers. - holly crap. So I am a luddite wanker now, who is dogmatically refusing to objectively evaluate a new way of working.

      I evaluated it. I worked with it. I am being objective here: from my experiences, XP suggests some nice features (unit testing/wiki on the go documentation,) that can positively influence design/development of a project. From my experiences XP is also a great management tool to avoid any blame for any wrong doing (and people do the wrong thing quite often.) From my objective point of view, XP is just another methodology and has the same limitations as any other methodology and does not provide an obvious edge over any other methodology if any of those methodologies are properly followed.

      But forget you, I am not answering to any of your accusations any longer.
      --

      For the normal readers, not for the XP evangelists: Unit testing does objectively help to develop better code. Wiki documentation (and xPlanner especially for CVS checkin flag blocking) can be useful tools IF people in the team do not actively hate the idea. If someone (a team lead hopefully) decides to use the Wiki as supplementary documentation source, it may become a very useful tool indeed. All kinds of communications can happen through this documentation resource.

      As to paired programming: it is up to your project management. If they will to pay for it, go nuts. It won't make your code worse, but again, objectively speaking, I found paired programming to be ONLY useful at moments w

    3. Re:Extreme Hogwash by roman_mir · · Score: 2

      First of all it's not generally a requirement to design every class, just a good practice - It is never a requirement to design every class. It is not a requirement and except for academic tasks it is never done a practice (I exclude extreme cases, such as NASA, because I cannot really say much about those.) It is a requirement to describe the behaviour and external interfaces. If complex algorythms are needed, then it is the job of an architect to provide them either as a design (a flow-chart for example,) or as a library requirement.

      We describe structures and we can use components/classes/interfaces/object/package diagrams for that, we describe behaviour and for that we can use collaboration/sequence/timing diagrams, we describe behaviour and for that we can use activity/state/use case diagrams. We can use any of the abovementioned diagrams but it is not a requirement to use them, you can just as well describe in words the entire design, but pictures help most people.

      When I say architecture I don't just mean design of the classes/interfaces/data structures/behaviours. I mean a review of the requirements and a discussion on how the requirements will be met within the project. The actual details of the implementation can be left to the developers (and in most cases should be,) as long as the general patterns of development are made clear, the frameworks are accounted for, the components are identified, the major tasks are established and all of the more complex algorithms are overviewed. The architecture must take into account all of the MAJOR decisions, such as the communication methods, storage methods, scalability methods, security methods. There is more to it, but basically architecture describes components of the application and describes how the usecases are supposed to be implemented by those components. The collaboration between components must be made clear with the interfaces.

      The architecture must take into account the hardware, the security and the legal requirements of the system, it must take into account performance expectations.

      The architecture must express the totality of the application as the sum of all its parts, and each part must be accounted for, thus making it possible to give a close enough time estimate for implementation of each part.

      The architect must take responsibility for identifying all of the major system components and interfaces.
      The architect must take responsibility for reducing the system components into smallest individual building blocks.
      The architect must have experience making time estimates for smallest individual blocks.
      The architect must know the team. If this requirement is not met, the estimates cannot be very precise and must be padded for the unknown variable (some people work better than others, some people are known to have done a similar job in a specific known time period.)
      The architect must keep up with mostly inevitable business requirement changes.
      The architect must insist on a particular set of development standards.
      The architect must insist on a standard set of build/deployment procedures.
      The architect must insist on a standard method of unit and integration testing.
      The architect must insist on a standard method of source code management (cvs with locks or whatever.)

      This is probably not complete but it is what I came up with in these 2 minutes and probably covers most of the work that the architect is responsible for. The architect is mostly a technical manager with authority to resolve conflicts and with responsibility to prevent time wasting.

  18. Sounds like writing management books by wasted · · Score: 2, Funny

    A lot of business management books work that way.

    1. Take something obvious or counterintuitive (Doesn't matter if it will really work or not)
    2. Label it with impressive sounding phrases
    3. Copyright a bunch of specific steps (methodology) to do the obvious
    4. Write and publish a 400 page book about the methodology steps using your new phrases
    5. Sell it to PHBs and incompetents
    6. Profit!
    7. When complaints about non-success arrive, arrange seminars at hundreds of dollars per seat.
    8. Give Seminar
    9. More Profit!

    Hmmm, since I have all of the steps down, maybe I should write a book...

  19. Mostly, XP improves Kent Beck's net worth ... by joe_n_bloe · · Score: 2, Insightful

    Having been through employers who tried both XP and Scrum (not Beck but similar), the only positive thing I have to say about either is that if your developers really suck, teaching them XP and/or Scrum will allow you to keep much closer tabs on their lack of progress. Otherwise, like most "new" methodologes, it's a way for people to teach classes and sell books.

  20. Re:Write the test first by Cederic · · Score: 3, Insightful


    Hmm. For the definitive description, I can only suggest you acquire (beg, borrow, buy, etc) a copy of Test Driven Development by (eek) Kent Beck.

    My brief summary:
    You write a test. To write the test you must know what it is you are testing. This means you have to think about interface, so you can access the functionality, and function, so you know what it's meant to do.

    Thus before you've written any code you're already putting a lot of thought into what's going on with your code. Far more thought than most programmers put in (trust me, I've worked with too many ;)

    To be able to write a test with small enough scope (so you don't end up testing half the system - you may want to do that, but not right now) you need to be able to isolate the piece of code you're testing. There are multiple mechanisms to achieve this (see the paper "Endo-Testing: Unit Testing with Mock Objects" for an example) but the outcome is this: The code you write, to pass your test, can be isolated from the rest of the codebase. It is inherently decoupled (at least to a degree).

    Now extrapolate this across the entire codebase. It's all decoupled. It has to be, so that you can test it all in isolation.

    That makes the code easier to re-use too. If a block of code isn't tightly coupled to the things that use it, or to the things it uses, it's easier to re-use with other things.

    Which leads to the other aspect of TDD: Eliminate duplication. If you're doing TDD by the book, you ruthlessly excise any duplication in your code. Where you see two blocks of code doing the same thing you refactor them into one block of code.

    This is relatively risk-free, because all the code you're changing has a full suite of automated unit tests. Which you're running every few minutes (because they take a couple of seconds to run). So you're getting pretty prompt feedback on any errors you accidentally introduce while changing the code.

    Of course, you have a lot of test cases now. These are a form of documentation. They provide examples of how to use your code, and also pretty definitive indications of how it's expected to work.

    So the process of writing tests forces you to write testable code. I believe testable code shares many characteristics with well designed code.

    You may also want to pick up Michael Feather's book on "Working Effectively with Legacy Code". Many of his techniques revolve around building test cases, and refactoring the code to make it more testable. That's not coincidence (and remember - refactoring means "improving the design of existing code").

    As I said, I'm an amateur at explaining this compared to Beck, so find a copy of his book and read through it - it's actually not a long read, the basics really are simple.