Slashdot Mirror


Book Review: The Clean Coder

CoryFoy writes "As someone who has been closely involved in both the 'agile software' movement as well as the 'Software Craftsmanship' movement, I have been following the work of Robert Martin for some time. So I was quite interested when I got my copy of his latest book Clean Coder where he 'introduces the disciplines, techniques, tools and practices of true software craftsmanship.' Would his book live up to being a guide for the next generation of developers, or would it go on my shelf as another interesting book that I had read, once?" Read below for the rest of Cory's review. The Clean Coder: A Code of Conduct for Professional Programmers author Robert C. Martin pages 256 publisher Prentice Hall rating 5 Nebulous Rating Units reviewer Cory Foy ISBN 978-0137081073 summary A good overview of the current agile practices for software developers Before even getting into the book, it is good to know the style of Robert Martin, affectionately known as "Uncle Bob" to many people. Bob is a former preacher who comes at life — and topics he teaches — with a no-holds-bar approach. So when he approaches topics such as "Professionalism" and the software industry, I come expecting passionate discussion and serious assertions. The Clean Coder is no exception.

The book starts off with an overview of the Challenger space shuttle disaster. As a native Floridian who could see shuttle launches from my house (and, in fact, saw the Challenger explode just as it crested the trees from where we lived) this really resonated with me. The accident was a result of engineers saying no, but management overriding the decision. With this introduction, Bob makes it quite clear that when we choose not to stand up for that which we believe, it can have dire consequences.

We then dive right in, starting with the topic of Professionalism. The assertion is made that the key to professionalism is responsibility — "You can't take pride and honor is something you can't be held accountable for". But how do we take and achieve responsibility? Chapter one lays out two ways. To start, it looks at the Hippocratic Oath, specifically the rule of "First, Do No Harm". The book maps this to software by saying to do no harm to function or structure, ensure that QA doesn't find anything, know that your software works, and have automated QA. In fact, when I work with teams, I teach them that if your testing "phase" finds bugs, it's a problem with your process that needs to be addressed immediately, so the concept of ensuing that QA doesn't find anything is a great concept to bring out.

Then we move on to Work Ethic — specifically around knowing your field. This means continuous learning, practice (through things like Katas and Dojos), collaboration, mentoring, identifying with your employer/customer, and practicing humility. To help with that, Chapters 2 and 3 talk specifically about saying "No" and "Yes". When we say no, and when we want to say no, we should mean it. Saying, "We'll try" means that you, or your team, isn't already giving it their best, and that through some extraordinary effort you'll pull it off. Say no and stick to it. But, when you say Yes, mean it. People are counting on you to be truthful with them.

Chapters 4, 5, and 6 begin to talk about the specific practices of coding. Chapter 4 talks about the coding process itself. One of the hardest statements the book makes here is to stay out of "the zone" when coding. Bob asserts that you lose parts of the big picture when you go down to that level. While I may struggle with that assertion, I do agree with his next statement that debugging time is expensive, so you should avoid having to do debugger-driven development whenever possible. He finishes the chapter with examples of pacing yourself (walking away, taking a shower) and how to deal with being late on your projects (remembering that hope is not a plan, and being clear about the impact of overtime) along with a reminder that it is good to both give and receive help, whether it be small questions or mentoring others.

Chapters 5 and 6 cover Test-Driven Development and Practicing. The long and short is that TDD is becoming a wide-spread adopted practice, in that you don't get as many funny looks from people when you mention TDD as you once did. And that coding at work doesn't equal practicing your tools and techniques — instead you should set aside specific time to become better through coding exercises, reading and researching other areas (languages, tools, approaches), and attending events and conferences.

Chapters 7 and 8 cover testing practices. In Chapter 7 the book looks at Acceptance Tests and the cycle of writing them — specifically at what point the customer is involved (hint: continuously) and how to ensure they stay involved. Chapter 8 goes to more of the unit testing level, and defines some strategies and models for looking at unit testing, including an interesting "Test Automation Pyramid"

Now that we've covered the developer herself, coding and testing, the book moves on to discussing time. Chapter 9 covers Time Management strategies — staying out of "bogs" and "blind alleys", using techniques like the "Pomodoro" technique to create focus, and the law of two-feet — if you are in a meeting and aren't getting value out of it, you should feel free to (respectively) leave, or otherwise modify the meeting to get value from it.

Chapter 10 covers several different methods of estimation. In the teams I work with, estimation is perhaps one of the hardest things — not because estimating can be hard (which it can be) but because either they are held so tightly to the estimates that they are afraid to make them, or, worse, they are told what the estimates are going to be. The book really only skims the surface here, covering several techniques from Planning Poker, to PERT, to "Flying Fingers", but gives a decent overview of how to do those techniques.

Rounding out the discussions of time comes Chapter 11 and talking about Pressure. The key of this chapter is that because you have committed to your principles, practices and disciplines, you should be able to stay calm under pressure. I can certainly say from experience that the worst experiences in my career are when people weren't able to stay calm, and the way the book is laid out, if you are following the practices outlines so far, you should be able to be the voice of reason and calmness.

The last three chapters cover teams and collaboration. Chapter 12 talks about important practices such as shared code ownership, pairing, and respect for other team members. Chapter 13 covers teams and the importance of having teams that gel together. The book finishes with Chapter 14 and discussions of the importance of apprenticeship, mentorship and craftsmanship.

As I mentioned earlier, I've been involved in the "agile" movement for quite some time, and have spoken with Bob on many occasions, so many of the practices in the book weren't new. I did quite appreciate the stories he had to tell about his experiences. However, I think that some people may be turned off by the hard line around "professionalism". Sometimes you do need to say no, and I think it is good to have encouragement from a book to do that. But sometimes things are more complex, and I think that you would have a harder time looking to this particular book for help with the edge cases.

In conclusion, I think this is a book which provides worthwhile information and an interesting look at how people are looking at software development as a profession. If you read between some of the hard lines made, there are some great nuggets to be gleaned from the book for software developers of any level.

You can purchase The Clean Coder: A Code of Conduct for Professional Programmers from amazon.com. Slashdot welcomes readers' book reviews -- to see your own review here, read the book review guidelines, then visit the submission page.

196 comments

  1. Clean Coders by Sonny+Yatsen · · Score: 3, Funny

    Back when I was getting my CS degree, I've always noticed that the cleanest coders are also the guys who didn't shower for days at a time and always wore the same clothes.

    --
    My postings are informational and does not constitute legal advice. Act on it at your risk.
    1. Re:Clean Coders by chemicaldave · · Score: 4, Interesting

      I can think of many colleagues in contrast to your example. I have found the opposite. In general, people who cannot keep themselves clean and their lives organized will produce sloppy code (that includes working code with unhelpful comments and obfuscated code).

    2. Re:Clean Coders by Kenja · · Score: 2

      I dont know... I'm not the most organized person and I often forget to do dishes. But I write clean code and copious documentation because I work on a lot of projects on a lot of platforms in a lot of languages and frankly I would have a hard time coming back to an old project for updates if I didn't because I often have no recollection as to what I wrote at three in the morning in Flex for Salesforce five months ago when I've been writing Java servlets for Lotus Domino for the past two weeks.

      --

      "Have you ever thought about just turning off the TV, sitting down with your kids, and hitting them?"
    3. Re:Clean Coders by Anonymous Coward · · Score: 0, Informative

      Just because you're too stupid to understand the code it does not mean the code is obfuscated.

    4. Re:Clean Coders by Kjella · · Score: 2

      Luckily I've not run into many like that, but I think they divide into two groups. The naturally sloppy - which will write sloppy code too, and those that have just given up on real world human social life. I mean, the computer doesn't mind if you wear food-stained, ragged clothes and stink to high heaven. Your WoW-buddies will never see it. Cats and dogs don't seem to care and if they pee inside that'll really top off your smell. The last ones aren't sloppy, they "optimized" it away in the sense that why shower, I'll only get sweaty again. In fact the musk means any coworker will be glad to leave, meaning you get more time with your computer. And you don't get invited to meetings, everyone will just send documents for review. I wouldn't recommend it as a life style but some are really that odd and churn out great code.

      --
      Live today, because you never know what tomorrow brings
    5. Re:Clean Coders by Anonymous Coward · · Score: 0

      Well, you gotta have priorities.

      A real coder knows that his chances of having his code looked at are infinitely bigger than having anyone look at his body.

      Showering? When I could write the next piece of the most awesome piece of code ever in that time?
      And clothes? Well, they are just the camouflage for the outside safari. Who needs clothes for coding?

      And by the way: (Pool-)water-resistant keyboard: Best invention ever, or what?

    6. Re:Clean Coders by chemicaldave · · Score: 1

      Upon further reflection I think sloppy code can be attributed to laziness. Laziness manifests itself in differently with different people. Some don't have good hygiene, others haven't vacuumed in months.

    7. Re:Clean Coders by w0mprat · · Score: 2

      Back when I was getting my CS degree, I've always noticed that the cleanest coders are also the guys who didn't shower for days at a time and always wore the same clothes.

      I'll come right out and say it, the cleanest coders were the walking bacterial colonies, the fact that human fingers were pressing the keys was a mere detail.

      --
      After logging in slashdot still does not take you back to the page you were on. It's been that way for 20 years.
    8. Re:Clean Coders by StikyPad · · Score: 1, Funny

      If that run-on explanation was an example of your "copious documentation," then I believe you just proved the GPs point.

    9. Re:Clean Coders by Anonymous Coward · · Score: 0

      I often tell people I am too stupid to write bad code.

    10. Re:Clean Coders by Anonymous Coward · · Score: 1

      Dunno, some of worst coders I've ever met have been hell of a lot cleaner persons than I am. On the other hand, so are some of the best ones.

    11. Re:Clean Coders by Anonymous Coward · · Score: 0

      I think the correct term is "Woosh!"

    12. Re:Clean Coders by c0lo · · Score: 1

      Upon further reflection I think sloppy code can be attributed to laziness.

      Laziness to think but, unfortunately, not too lazy to write code.

      --
      Questions raise, answers kill. Raise questions to stay alive.
    13. Re:Clean Coders by c0lo · · Score: 1

      Well, you gotta have priorities.

      A real coder knows that his chances of having his code looked at are infinitely bigger than having anyone look at his body.

      Showering? When I could write the next piece of the most awesome piece of code ever in that time?

      Before jumping into writing the code, I find better to think again: do I really need that code? Do I need it there (or in another place)?
      In my case taking a shower (or anything else to keep me away from the temptation of the keyboard), is as good a way as any others (e.g. having a smoke outside).

      --
      Questions raise, answers kill. Raise questions to stay alive.
    14. Re:Clean Coders by rioki · · Score: 1

      True. There are three types of coders. The novice that don't understand their code. The advanced that understand their code, but no one else does. And the guru that writes code that every one understands and thinks is so simple to come up with.

    15. Re:Clean Coders by LordNightwalker · · Score: 1

      Stands to reason: character traits (of which tidyness is just one) are usually reflected in everything a person does. So yes, I believe strongly that you can judge people's approach to work ethics by observing other areas of their lives. I get my best observations during game nights: are they prone to cheat, do they use sneaky tactics, how competitive are they and how well do they cope with losing, how serious do they take the game, what's the general vibe they give off while playing, ...

      OTOH, I seem to contradict my own theory: my desk at home is a mess, and often, so is my kitchen. Yet, at work I'm the tidy freak, compulsively closing closets and drawers others leave open. I approach my work code in the same style. But my home and media folders at home are, again, a mess. I have no explanation for this...

      --
      Install windows on my workstation? You crazy? Got any idea how much I paid for the damn thing?
  2. Finally by clampolo · · Score: 0

    We needed a book that taught programmers proper hygiene. I have often come close to collapsing when the terrifying stench of an unclean coder has hit my nostrils. I know at least a dozen people I will give this book to along with a good scrub brush.

    1. Re:Finally by rednip · · Score: 1

      We needed a book that taught programmers proper hygiene.

      Look for it hidden in any book on manners, if you don't find it right away, just keep on such reading until you get it.

      --
      The force that blew the Big Bang continues to accelerate.
  3. Let me summarize by elrous0 · · Score: 4, Insightful

    Programming--You're doing it all wrong!

    --
    SJW: Someone who has run out of real oppression, and has to fake it.
    1. Re:Let me summarize by Anonymous Coward · · Score: 1

      That comment is typical (I'm sorry to say) of many I've seen & heard in relation to this topic.
      Ask youself these questions.

      1) Do you write clean Code? Is it maintainable? Is it readable? What is the spaghetti rating? Are your functions/classes nested to deep?
      2) Can you re-write the code from just the comments? Is it self documenting?
      3) Is is 'Done', complete, FIN? If you have any technical debt then it is NOT DONE.
      4) What percentage of the code is covered by your test cases? anything less than 80% is IMHO unclean.
      All these things combine together to give you 'Clean Code'.

      So what is it?

      Btw, I've been following 'Clean Code' Principals since 1983 when I read 'The Software Reliability Cookbook'.

    2. Re:Let me summarize by Anonymous Coward · · Score: 0

      What do you mean by technical debt?

    3. Re:Let me summarize by BranMan · · Score: 1

      FIXME comments, I would imagine.

    4. Re:Let me summarize by elrous0 · · Score: 1

      I'd like to take credit for it, but that was on an old poster that used to hang in my old CS department when I was an undergrad (above a picture of an angry-looking old programmer glowering at the camera). Every time I hear some programmer complaining about how the younger kids today are sorry programmers, I think about it.

      --
      SJW: Someone who has run out of real oppression, and has to fake it.
    5. Re:Let me summarize by slapout · · Score: 1
      --
      Coder's Stone: The programming language quick ref for iPad
    6. Re:Let me summarize by unclebobmartin · · Score: 1

      What do you mean by technical debt?

      This is the definitive article: http://www.martinfowler.com/bliki/TechnicalDebt.html

    7. Re:Let me summarize by syousef · · Score: 1

      1) Do you write clean Code? Is it maintainable? Is it readable? What is the spaghetti rating? Are your functions/classes nested to deep?

      By what metrics? I've never seen a metric that's truly a good indicator for a wide variety of code.

      2) Can you re-write the code from just the comments? Is it self documenting?

      If you need so many comments that you have duplicated your code completely as comments, your comments are inappropriate. Comments should explain the intent of your code. They should refer to algorithms, not re-describe them in their entirety. For example: Formulae should not be duplicated in comments - if the developer can't read a formula as code, they should not be permitted to modify it! - but a description of variables is (that is if the names aren't self explanatory, or the formula isn't so common any expert should be able to read it. For example commenting Newtonian motion formulae like F=ma and s=ut+0.5at^2 isn't appropriate), the intent of the formula is important, the algorithms used are important, references to design documents are important.

      3) Is is 'Done', complete, FIN? If you have any technical debt then it is NOT DONE.

      If you're putting out incomplete code as a finished product, it doesn't matter what techniques or methodologies you use, you shouldn't be permitted to code.

      4) What percentage of the code is covered by your test cases? anything less than 80% is IMHO unclean.

      I've seen code with 80% inappropriate coverage. Not only is the code not properly tested, but the coder has wasted additional time on test cases that are not useful - time that should have been spent writing better code (including better tests). Metrics like this are no more sophisticated or appropriate than the old kloc measure of performance. There is no substitute for proper code review (including the test cases). I'd rather 50% coverage with proper tests than 80% coverage with bad tests.

      All these things combine together to give you 'Clean Code'.

      So what is it?

      Btw, I've been following 'Clean Code' Principals since 1983 when I read 'The Software Reliability Cookbook'.

      Nope. I think I've demonstrated - with the exception of code completeness and within the limits of what you'd expect of a slashdot post - why these things are neither necessary nor sufficient.

      If you want to write good code your first port of call is to have a second person that wasn't involved in writing it do a proper review. That's exceedingly hard because even the best read code is hard to walk into. That is nonetheless what needs to be done. Formal processes should only be used as a guidelines. If you want to see how horribly badly over-formalising and over-prescribing can go take a look at ISO9001. Software and methodologies must not be treated like religion. It is part engineering and part science - no magic required.

      --
      These posts express my own personal views, not those of my employer
    8. Re:Let me summarize by jpate · · Score: 1

      Here's a tip for "clean code" you might appreciate:

  4. here, have some cynicism by fred+fleenblat · · Score: 1

    If management would reward clean code, they would get it.

    Instead they reward doing many simple tasks quickly until they realize you are getting in the way of people doing real work, and then they promote you to management.

    NO I'M NOT BITTER WHY DO YOU ASK?!?!

    1. Re:here, have some cynicism by dilvish_the_damned · · Score: 2, Interesting

      Being a manager, I am learning to hate the phrase "clean code". It seems to be a preoccupation with how code looks whilst being a distraction from what it does.

      --
      I think you underestimate just how much I just dont care.
    2. Re:here, have some cynicism by Anonymous Coward · · Score: 0

      Being a manager, I am learning to hate the phrase "clean code". It seems to be a preoccupation with how code looks whilst being a distraction from what it does.

      Please read Making Wrong Code Look Wrong. Also, watch the classic Star Trek episode "The Menagerie" and pay careful attention to the ending. "Everything works, but they had never seen a human before." Just because something works, doesn't mean it's right.

    3. Re:here, have some cynicism by Anonymous Coward · · Score: 0

      Being a manager, I am learning to hate the phrase "clean code". It seems to be a preoccupation with how code looks whilst being a distraction from what it does.

      The way code looks is only a distraction from what it does when it's not written cleanly. The learning curve should be the functionality, not the way it was written. For the person who wrote the ugly code, sure, cleaning it up is a pointless exercise. For anyone looking to use, maintain, or extend that code, cleaning it up is invaluable.

    4. Re:here, have some cynicism by Anonymous Coward · · Score: 0

      Gotta love that article. It starts with great ideals and excellent advice and ends up with a well-known train-wreck that has hurt millions of developers.

      I propose the fifth level of achievement is when you realize that not everyone will get your idea and abstain from being too smart if you cannot make sure those people stay away from your code.

    5. Re:here, have some cynicism by unclebobmartin · · Score: 1

      Being a manager, I am learning to hate the phrase "clean code". It seems to be a preoccupation with how code looks whilst being a distraction from what it does.

      Not quite. Clean code is not about looks, it's about behavior. It's about how the code behaves when you try to change it. Code is clean if it is easy to change. Code is not clean when it resists change. If the estimates of your programmers are growing for no reason you can divine, then the reason is almost certainly that the code is getting dirtier and dirtier with every passing day.

    6. Re:here, have some cynicism by immakiku · · Score: 1

      Maintaining standards of aesthetics in your code is the cheapest and easiest way to ensure it does what it's supposed to do. Simple logic: if I have a hard time reading your code, I might misunderstand its intention and modify it the wrong way.

    7. Re:here, have some cynicism by kikito · · Score: 2

      I have another phrase for you then: "spaghetti code". I hope you like pasta.

    8. Re:here, have some cynicism by Anonymous Coward · · Score: 0

      It would help if managers looked at the code or even knew how it worked. I'll let you maintain some non-clean code and you will get an appreciation for what it means.

    9. Re:here, have some cynicism by Anonymous Coward · · Score: 0

      Think of it this way, it's code that you have a chance of hell in maintaining. Not "more maintainable", no, it means "maintainable at all". Not many people care just where you put your curly brace, but they would like to know exactly what the hell the code is doing and not have to unravel multiple objects and functions to make a small change that you need "yesterday".

      Now do you get "clean code"?

    10. Re:here, have some cynicism by btherl · · Score: 1

      The advantage of clean code is that when someone modifies it, it still works afterwards. Unclean code becomes progressively more difficult to modify until modification is impossible, and the whole lot gets thrown out and rewritten or replaced. The advantage to a manager is that when you say "Discount prices by 10% on this product range", your programmers do it and it works. With unclean code, they do it and it doesn't work, then they make excuses about how difficult it is to do what you asked. For me it's not a preoccupation with how the code looks but rather a preoccupation with how the code can be maintained later.

  5. Oxymoronic! by Anonymous Coward · · Score: 0

    Jumbo Shrimp, Military Intelligence...

  6. So Meticulously Cccclllllleeeeaaaannnn: +4, True by Anonymous Coward · · Score: 0

    and full of platitudes.

    For truly clean coding, I suggest soap;
    however,

    ( To quote William Jefferson Clinton: )

    "I feel your pain.

  7. Re:Agile... please stop. by Anonymous Coward · · Score: 0

    That's why I'm working on "Masturbation Coding". We all know that the best coders know how to jerk-off the machine. We all know the best develop the skills to get the computer to cum up with the answers. And then there are times when you just have to go up the rear and code dirty to get the job done.

  8. Review or Summary by Anonymous Coward · · Score: 0

    I stopped reading when I noticed the 'reviewer' wasn't actually going to review the book. He was merely going to summarize it. I mean, he even broke it down per-chapter.

    XcepticZP

    1. Re:Review or Summary by CoryFoy · · Score: 3, Informative

      Fair enough comment. I do add my viewpoints on the section, and summarize it at the end. I find most books I read can't be summarized nice and tidy at the beginning, but instead need some background throughout. This book is especially true of that, because it's like a collection of short essays more than one contiguous writing.

  9. Appropo... by gregarican · · Score: 1

    Bump this while yo checkin' yo braces and semicolons...

  10. Re:Agile... please stop. by robot256 · · Score: 4, Funny

    "Agile" programming is when you stop looking surprised and outraged when the customer changes the project requirements on you every few days.

  11. Quality by Dog-Cow · · Score: 2

    In fact, when I work with teams, I teach them that if your testing "phase" finds bugs, it's a problem with your process that needs to be addressed immediately, so the concept of ensuing[sic] that QA doesn't find anything is a great concept to bring out.

    Given the number of mistakes in this sentence, along with the pompous notion that process can somehow prevent logical errors, makes me very glad I don't work with, much less for, you.

    (If you code for NASA, perhaps you have the luxury of a process that does prevent logic errors. Somewhere around 99.9999999999% of us do not.)

    1. Re:Quality by CoryFoy · · Score: 2

      I think you misconstrued my point. Let's say you find a logic error during code review. That means your process is working well. Let's say another bug slips out to production. That means there is something in your process that didn't catch that. Perhaps it's more automated testing. Perhaps it's more code reviews. Perhaps it's more communication. Perhaps it's closer oversight of junior developers. The point being that when you find a bug in your QA or Production cycles, go back and look at your development process to see what let that through. Sure, you may not find them all. Sure, the cost/benefit analysis may not be worth it. But it stands that we tend to blame individuals whenever a bug hits production instead of stepping back and looking at our overall process to see what led that bug to slip through. Of course mistakes happen. It's what you do about it as a team and as an organization that matters next.

    2. Re:Quality by Fubari · · Score: 2

      ... the pompous notion that process can somehow prevent logical errors

      Pompous?
      Preventing logical errors is the key idea here: Introduction to Test Driven Design (TDD).
      excerpt: If it's worth building, it's worth testing. If it's not worth testing, why are you wasting your time working on it?

      So... what's your strategy for preventing logical errors?

    3. Re:Quality by skids · · Score: 1

      Besides, it it plainly clear that he is behind the times. Modern industry has solved the problem of QA "finding something" by laying off the entire QA department (and treating customers as BETA testers.)

    4. Re:Quality by mcmonkey · · Score: 1

      ... the pompous notion that process can somehow prevent logical errors

      Pompous?

        Preventing logical errors is the key idea here: Introduction to Test Driven Design (TDD).

      excerpt: If it's worth building, it's worth testing. If it's not worth testing, why are you wasting your time working on it?

      So... what's your strategy for preventing logical errors?

      Yes, pompous. There are no valid blanket statements on the meaning of bugs found during testing. That would depend on the bug found. Could be a systematic issue with the development process. Could just be that people aren't always perfect.

      A bug found in testing could be due to an issue in development, an issue with the requirements, an issue with the test.

      In fact, when I work with teams, I teach them that if your testing "phase" finds bugs, it's a problem with your process that needs to be addressed immediately, so the concept of ensuing[sic] that QA doesn't find anything is a great concept to bring out.

      So if my testing finds a bug, all other work needs to stop so the problem with my process can be addressed immediately. (Even if the problem with my process is just that people are involved.)

      So what if I water down my QA process so that no bugs are found, no matter how bad the code is? Does that mean there are no problems with my process?

    5. Re:Quality by IICV · · Score: 1

      Test driven design does not prevent or catch logical errors. It only helps prevent errors that come about from code not adhering to spec. If the specification itself is logically incorrect, then there is no way to write a test suite that will catch that.

      For instance, if the spec says "When A and B are both true, do essential function C" but in reality A implies ~B, it doesn't matter how awesome your test suite is, or how much coverage it has - your code will pass whatever tests you want to throw at it, but in practice C will never be executed.

      Ideally, while writing the tests (or the code itself) you would catch that the spec says one thing and reality says another thing, but that's not test driven development - that's more like reality driven development, which is something we really should see more of :)

    6. Re:Quality by EatAtJoes · · Score: 2

      I love unit tests as much as the next refactoring junkie, but there are very significant areas in quality assurance that TDD should not and cannot address, for instance software with emergent behavior.

      I've been the unlucky maintainer of monstrous "unit tests" that were instead huge fixtures that create an alternate universe to production. Devs would write code, then spend as much time or more getting the "unit tests" to work, then have QA find brand-new bugs.

      The TDD response is decomposition, but some solutions simply do not decompose well. If your s/w is well-architected, the complex parts can be built atop solid APIs that are 90+% covered by real unit tests; the complex functionality can then be exercised in regression tests and simulations, and their invariants verified in QA.

      Which brings up my problem with the statement "ensure that QA doesn't find anything": if that's consistently true then one of the following is also true:

      * the software is too simple to even warrant QA and indeed should be entirely automated

      * the QA process misses huge chunks of functionality

      * your software hasn't had a major new feature in, like, forever

      * you don't have a GUI (or your GUI has a locked-down platform)

      * your developers intimidate and harass QA so they are loath to really test

      Effective QA finds bugs, that's what they do, and they are a godsend to a good development team.

    7. Re:Quality by Anonymous Coward · · Score: 0

      You're begging the question, why on Earth is it that important to prevent logical errors? Can you conclusively show that it saves more time to prevent X potential logical errors versus simply correcting the Y logical errors that do survive into QA?

    8. Re:Quality by c0lo · · Score: 1

      For instance, if the spec says "When A and B are both true, do essential function C" but in reality A implies ~B, it doesn't matter how awesome your test suite is, or how much coverage it has - your code will pass whatever tests you want to throw at it, but in practice C will never be executed.

      Then your test suite is shit. Any test case should start with verifying the preconditions (and not actually execute the test code unless preconditions are not met). If A implies not B, a test case well constructed will always be "in error" (not failing the product to be tested, but the test environ execution).

      --
      Questions raise, answers kill. Raise questions to stay alive.
    9. Re:Quality by Anonymous Coward · · Score: 0

      Besides, it it plainly clear that he is behind the times. Modern industry has solved the problem of QA "finding something" by laying off the entire QA department (and treating customers as BETA testers.)

      I would think this funny except this exact thing happened where I work. I can now move code from DEV to QA and back, because I am now both!
      -Troll

  12. Re:Agile... please stop. by Kjella · · Score: 4, Insightful

    The waterfall-agile axis in software development is doing to go away as soon as the left-right axis in politics does. On the extreme left (or right, I don't really want to this to have any political meaning) you have strict waterfall, a single flow down exclusive phases. Then as you move right you have more overlaps, several delivery phases and so on. Eventually you get to agile, where you re-prioritize, redesign, code and test in very short sprints. And on the right of that you have cowboy coding, where you've given up all pretense of cycles and just do it all at once. Are any of them "right"? Probably not. Some things will require more planning, some things less depending on the project. And some claim their solution is the solution to everything. And if that there's problems with it, that's because they're not doing it right or not doing it extreme enough. The most avid agile zealots remind me a little of libertarians, if the free market isn't working it's because it's not free enough. And if the agile project has problems, it's because it's not agile enough. There's no problem that can't be solved by greater ideological purity.

    --
    Live today, because you never know what tomorrow brings
  13. Is it just me by Anonymous Coward · · Score: 0

    Or do agile developers remind anyone else of religious zealots? Or worse: LARPers!

    1. Re:Is it just me by RotateLeftByte · · Score: 1

      I do find many agile devs are verging on the Fanatical. This is rather sad IMHO. There are some good ideas BUT taken too far they are overkill.

      I prefer the mantra, "Do it right, Do it once."

      --
      I'd rather be riding my '63 Triumph T120.
  14. Ha Ha. by unclebobmartin · · Score: 1

    I deleted the Hygiene chapter before I published the book. I figured it would be a little too remedial. Maybe I should have left it in. At least the part about the breath mints.

    1. Re:Ha Ha. by RotateLeftByte · · Score: 1

      Kudos for posting her Uncle Bob. I've seen one of your 'shows'. The only thing I can say is 'Sport On the Nail'.

      --
      I'd rather be riding my '63 Triumph T120.
  15. You have to pay for clean. by DarthVain · · Score: 5, Insightful

    The problem is the inability of consumers or managers to understand the 3 part rule. Speed, Quality, Cost, pick two.

    I think the best analogy for this is furniture.

    Mennonites make great furniture. It takes a long time, and is very expensive. It is a craft, and they are craftsmen.

    IKEA makes some pretty shitty furniture but is good enough for many applications. It is cheap, and fast.

    What most consumers and managers want, is the quality and hand craftsmanship of the Mennonites, at the speed and cost of IKEA.

    Problem is, that is impossible for the most part, particularly when you start looking at very large scale applications. So when managers hire people they want the IKEA drones, and expect them to produce Mennonite quality very quickly. Bottom line is short cuts are taken, managers "risk manage", and in the end you get buggy code that is not clean at all. Particularly when you have a work force that is treated like replaceable parts, in many cases you are dealing with someone else's mess, why should you try and code cleaner?

    Anyway, none of this is new, and I am sure on small applications were individuals have more control, cleaner code is possible, however in the corporate world, given the outlook by most, I can see it being problematic.

    1. Re:You have to pay for clean. by bfwebster · · Score: 1

      "...pick two."

      If you're lucky or very good. In lots of projects, you get to pick just one. ..bruce..

      --
      Bruce F. Webster (brucefwebster.com)
    2. Re:You have to pay for clean. by Anonymous Coward · · Score: 0

      Speed, Quality, Cost, pick two.

      That's only true when looking at narrow slices of time or selected examples. On a broader scope higher quality software is easier to maintain which allows for faster average times for changes and thus a lower cost.

      Yes you can red line an engine, you can even do it for a long period of time, but it will wear out faster that way and result in higher maintenance costs (if you don't break it entirely). The same applies to a development team and its relationship to their software.

      Ah bad car analogies, is there anything you can't do?

    3. Re:You have to pay for clean. by DarthVain · · Score: 1

      LOL too true!

      Usually that one is "Cost" in my experience.

    4. Re:You have to pay for clean. by Anonymous Coward · · Score: 0

      It's always true. The speed at which management expect you to develop will always end up being faster than you can reasonable develop high quality code complete with automated BDD test cases with 100% test coverage.

      At that point the best coded piece of software will go to ratshit.

    5. Re:You have to pay for clean. by Saxophonist · · Score: 1

      It's always Speed and Cost where I am. I wish it was ever quality.

    6. Re:You have to pay for clean. by swordgeek · · Score: 1

      This is true. But companies (and by extension, the hiring managers) need to understand where they're making their money.
      The Mennonites could (theoretically) give up and start making second-rate crap for the same price, and make a big short-term profit. Suddenly they could product five times as much and sell it for the same price! Until their cost-cutting caught up to them, and people quit buying their furniture at a premium.

      A company which has programming as a *primary function* needs to spend money on serious programmers and a proper environment for them. They need to spend time and money to get what they need to establish a name for themselves. On the other hand, they can probably get away with fairly cheap desk accessories (Note: Not chairs - good chairs are essential!) and aesthetic furniture. On the other hand, an interior design magazine would not be able to get away with less than top-notch casual furniture, decorations, and the like.

      Here's a good piece of advice for managers and executives: Are you trying to cut costs in your primary business? If so, you're probably in trouble.

      --

      "People who do stupid things with hazardous materials often die." -- Jim Davidson on alt.folklore.urban
    7. Re:You have to pay for clean. by jeffmeden · · Score: 2

      The problem is the inability of consumers or managers to understand the 3 part rule. Speed, Quality, Cost, pick two.

      I think the best analogy for this is furniture.

      Mennonites make great furniture. It takes a long time, and is very expensive. It is a craft, and they are craftsmen.

      Example fail. If Mennenites abided by your "pick two" rule and they were slow but produced high quality, they would be cheap. Instead they are expensive to boot, and are apparently working under the "Pick 1" rule.

    8. Re:You have to pay for clean. by Anonymous Coward · · Score: 1

      They are slow, but only because they do everything by hand. And you don't order a chair and wait around while it's being built; you just tell them which chair you want and they load it into your truck... so for your purposes, it IS fast.

    9. Re:You have to pay for clean. by ChaoticCoyote · · Score: 1

      Well said, sir.

    10. Re:You have to pay for clean. by JaredOfEuropa · · Score: 1

      Most of the time, cost and speed are the main drivers in software development. What some of these methods aim to do is improve quality while keeping cost and speed more or less the same. Same as in furniture: mass produced furniture used to be rather crappy but it is getting better all the time, while prices remain the same. Just compare some of the Ikea furniture of 10 years ago with what's on offer today.

      The problem with software development in large corporations is not that managers demand Mennonite quality, it's that they do not realise that the software they want is not a mass-production product. Of course the managers who at last come to that conclusion become staunch proponents of "buy not build", but they often forget the significant and decidedly bespoke system integration effort that comes with off-the-shelf products. But your remark about a desire for a replacable work force is spot on: the drive for a specialised, compartimentalised and highly interchangable workforce has made managers' lives easier. Resources are a lot easier to manage than people, after all. And it has driven down costs. But all other aspects of development work have suffered: speed, quality, but also innovation, corporate agility, and joy in one's work.

      --
      If construction was anything like programming, an incorrectly fitted lock would bring down the entire building...
    11. Re:You have to pay for clean. by Anonymous Coward · · Score: 0

      Speed, Quality, Cost, pick two.

      Thanks for the warning. See, your competitor promises to code faster, better, cheaper (and that's a plausible claim, unless you yourself are the world's most productive coder), but you're already working on your excuses.

    12. Re:You have to pay for clean. by frank_adrian314159 · · Score: 1

      The problem is the inability of consumers or managers to understand the 3 part rule. Speed, Quality, Cost, pick two.

      Who will win in the market? Whoever can get Angry Birds out in two months, even though it crashes now and then, or those who take six months to deliver the same functionality with fewer (but never no) crashes? You know the answer to that as well as I do. As far as insight goes, I tend to value Dick Gabriel's "Worse is Better" paper over anything that "Uncle Bob" has written.

      The fact that Uncle Bob is a consultant flogging his flavor of the month with his tired "Estimate the number of ping pong balls the Empire State building can hold!" opening shtick doesn't help his credibility in my eyes either. Remember, he used to be just as gung ho for Refactoring being the silver bullet. Before that, it was XP. And, before that it was UML (and its associated heavy processes) that was going to save the (coding) world. I'd think a guy who wants to make things better should probably have a somewhat better track record (or, at least, a bit more consistency) by now.

      He seems to be good a writing books and giving talks on whatever the hot software engineering topic du jour seems to be, but if I had to figure out what to do to improve product quality, I'd be less interested in talking to a talking head and more interested in talking to someone who's had a bit more recent experience in running successful software projects. At least the latter would tell you that your management and their expectations probably has a lot more to do with it than anything your coders do.

      --
      That is all.
    13. Re:You have to pay for clean. by wrook · · Score: 1

      I will tell you how to break this rule. Most people order 30 chairs and sit on 2 of them. They have all sorts of reasons why they need those 30 chairs: People might come over, some might break, somebody might break in a steal some of them. But in the end, they really only use 2 of them. So we spent 15 times more than we needed in both time and cost. And in the bargain, because we couldn't afford 30 *good* chairs, we made crappy ones. The crappy ones break over time and we have the added cost of dealing with disposing of the broken chairs (which we probably never budgeted for).

      The false assumption in the Cheap, Fast, Good analogy is that they are opposed to each other. But the reality is that if you just do less, it is both cheaper and faster. This leaves you more time to work on being better. Even though the start up cost of better goods are higher, they often end up being cheaper in the long run due to less time spent fixing or replacing them.

      Personally, I hate the word "Agile" because it has such a broad definition (bordering on no definition) that it can mean anything. But when I talk about "Agile", I mean something very specific. I ask stakeholders to give me only a minimum of requirements, but I invite them (maybe I should rephrase that as "make them") change their requirements over time. In fact my stakeholders often complain at the beginning that I allow *less* than the minimum requirements. But I assure them that they can add to the list later if they feel like it (which they won't). My goal is to abandon work that we realise we don't need as we discover more about the system.

      In addition to simply doing less, I optimise for high throughput rather than interactivity in the process. This may sound like the opposite of "Agile", but it isn't. In a lot of shops you get requests like, "We need a build today to do a demo", or "QA found this bug and it takes priority over everything". I make a stable build every week or 2 weeks (depending on my iteration length). That is the only build available for demos -- ever. Hey, it comes out every week, if you need to demo a feature, you should be able to plan that far ahead. Bugs are treated exactly like features. Every week we evaluate the incoming work and prioritise it. Then we do it. If bugs are higher priority than features then that's what we do. But once we start and until we end, nobody is interrupted. Again, if you can't plan 1 or 2 weeks in advance, then you've got bigger problems than software issues.

      Finally, we shoot for 100% test coverage. We've got continuous integration. We refactor code (including large architectural changes) whenever we think the design can be improved. These things take a fairly hefty start up cost, but overall throughput remains constant instead of dropping off over time. Actually, well written software should enable you to improve your speed marginally as the size goes up (you have more capabilities and don't have to write everything from scratch). The only reason it usually doesn't is because we don't spend the time to keep everything well factored and organised.

      Coding issues aside, real productivity gains come from keeping the team small and allowing a very long time for requirements discovery (essentially the entire development time). Allowing people who are discovering requirements to *use* the software as it is being developed improves productivity even more. It gives people the opportunity to find out *exactly* what they need rather than what they think they will need. We go faster by *not* coding.

    14. Re:You have to pay for clean. by spinkham · · Score: 1

      This attitude is why software is so bad, lulzsec can go around owning just about any company it wants purely for the lulz.

      Good thing we don't treat our bridge builders like we treat our the designers and builders of our software infrastructure. Then people would die instead of just losing millions of dollars.

      --
      Blessed are the pessimists, for they have made backups.
    15. Re:You have to pay for clean. by c0lo · · Score: 1

      "...pick two."

      If you're lucky or very good. In lots of projects, you get to pick just one. ..bruce..

      More often than I like, you finish in picking none.

      --
      Questions raise, answers kill. Raise questions to stay alive.
    16. Re:You have to pay for clean. by Beetle+B. · · Score: 1

      Who will win in the market? Whoever can get Angry Birds out in two months, even though it crashes now and then, or those who take six months to deliver the same functionality with fewer (but never no) crashes? You know the answer to that as well as I do. As far as insight goes, I tend to value Dick Gabriel's "Worse is Better" paper over anything that "Uncle Bob" has written.

      Not sure if you're criticizing your parent, because you just made his point. Making Angry Bird with bugs quicker means the manager didn't pick all three.

      --
      Beetle B.
    17. Re:You have to pay for clean. by DarthVain · · Score: 1

      While I agree with you about primary businesses, most software isn't developed for the software industry. For example, where I work might not have the primary business of programming, however they still do it in house and to a larger extent outsource it. The outsource WILL have their primary business as programming, however they will be subject to the unreasonable demands of the corporation. Which usually means features fall off the table at the sake of cost, etc... So by extension, being at the behest of their employers those shops still have the same problems and pressures dealing with the same managers.

    18. Re:You have to pay for clean. by DarthVain · · Score: 1

      Touche. But you get the idea.

    19. Re:You have to pay for clean. by Anonymous Coward · · Score: 0

      Good thing we don't treat our bridge builders like we treat our the designers and builders of our software infrastructure. Then people would die instead of just losing millions of dollars.

      We do, and they do.

      Somebody once upon a time said to himself, "it'll be too expensive to hang both levels of this 2-story walkway from the ceiling hangars - we'll just hang the top one from the ceiling, and hang the bottom walkway from the top one." Of course they didn't realize that this doubled the load on the brackets that attached the top walkway to the ceiling hangars, and those brackets were only rated to hold ONE walkway, not two. It failed under load. People died.

    20. Re:You have to pay for clean. by phtpht · · Score: 1

      The problem is the inability of consumers or managers to understand the 3 part rule. Speed, Quality, Cost, pick two.

      This rule concerns external quality of the product - as perceived by the customer. The problem with bad code is the *internal* quality - which has impact on the "quotient" for the 3 part rule. The worse the internal quality, the smaller the overall pile from which you "pick two". Eventually with very bad code the development just grinds to a halt.

      I think the best analogy for this is furniture. Mennonites make great furniture. It takes a long time, and is very expensive. It is a craft, and they are craftsmen. IKEA makes some pretty shitty furniture but is good enough for many applications. It is cheap, and fast.

      Yeah and internal quality (bad code vs good code) would then be the tools with which the furniture is made. Poor shops would assembly every piece by hands of unexperienced workers, great shops just have experienced guys working on top grade machinery. Both poor and great shops can still do the "pick two" tradeoff although it is obvious how their overall productivity would compare. And thats the way it is with shitty code (bunch of cowboy coders working on a yesterday deadline) and great code (tests, refactoring, good planning, experienced people).

    21. Re:You have to pay for clean. by Anonymous Coward · · Score: 0

      Mennonites make great furniture. It takes a long time, and is very expensive. It is a craft, and they are craftsmen.

      So, out of "speed, quality, cost", you were actually only able to pick one: quality. Speed isn't there ("it takes a long time" and neither is cost ("[it] is very expensive").

      IKEA makes some pretty shitty furniture but is good enough for many applications. It is cheap, and fast.

      Quite a few things you get at Ikea are actually pretty decent, although the cheap stuff isn't. That said, "fast" doesn't factor into it here, since you're not commissioning custom work, so the trade-off is just between quality and cost. In other words, it's "you get what you pay for": very much true even at Ikea, but a bad example for illustrating the "3 part rule".

      Of course, I shouldn't complain. Your post was free, and it was posted quickly, so... well, draw your conclusions. ;) Mine, on the other hand, took almost two weeks, so it's not just free, but also good. ;) (OK, just kidding in this last paragraph.)

  16. Goto-less programming by Relayman · · Score: 1

    I saw some open source the other day riddled with gotos. I learned (in the early 70s) how to write structured code (where any statement in the code has exactly one entrance point and exactly one exit point). To this day and millions of lines of code later, I still don't use gotos (and pseudo gotos like iter). I wasn't shocked to see the cruft in the open source, but I am disappointed that the review didn't mention structured coding.

    The reality is that bad code these days is much worse than the bad code of yesteryear (just read The Daily WTF for a plethora of examples). Maybe someday we'll go back to what we had when we were working on "proving" that programs worked instead of just testing them.

    --
    If I used a sig over again, would anyone notice?
    1. Re:Goto-less programming by Bryan3000000 · · Score: 1

      Proof that it works to within a certain margin of error given specified system parameters and on hardware proven to be within certain specifications and failure rates? I believe that software engineering still exists as a discipline. Proving software without system specifications is impossible from an engineering perspective, but there is still testing. Is that what you're griping about?

    2. Re:Goto-less programming by JonySuede · · Score: 1

      I dont care about your rant but I care about the gotos
      Gotos have there place in structured error handling in C.
      And your dogmatism prevent you from favoring readable code over an artificial limitation (exactly one exit point) since the more readable way to express a guard condition is to do :
      if(!isGuardConditionMet())
            return ERRNO_GUARD_UNMET;

      --
      Jehovah be praised, Oracle was not selected
    3. Re:Goto-less programming by Relayman · · Score: 1

      No, I'm just saying that there has been a regression in mainstream programming in the last 40 years. We are now just getting back to where we were in the '70s. Can you image where we would be now if we hadn't regressed (I'm talking about a world without blue screens and malware)?

      --
      If I used a sig over again, would anyone notice?
    4. Re:Goto-less programming by c0lo · · Score: 1

      I saw some open source the other day riddled with gotos.

      Not intrinsically bad. Code generators (e.g flex/bison) generate goto-s and there is no problem.

      --
      Questions raise, answers kill. Raise questions to stay alive.
    5. Re:Goto-less programming by Bryan3000000 · · Score: 1

      Can you image where we would be now if we hadn't regressed (I'm talking about a world without blue screens and malware)?

      Shangri-La, in the Beta Quadrant, using an intuitive visual scripting language (that works) to program the biological quantum computers (running GNU Hurd) that have replaced our brains.

  17. I've been programming for over 20 years... by GigaHurtsMyRobot · · Score: 1

    The last thing 'coders' need is another book telling them exactly what practices they should be following. As with most things, the focus should always be on creating a working product first. After you've built something, then you can refine it and clean it up. Too often when the focus is on how it is to be completed instead of actually completing it, the latter never happens. Re-factoring is a much easier task when you already have it working, already know exactly what it should do and when, and have experience using it which helps break it down more intelligently.

    1. Re:I've been programming for over 20 years... by timeOday · · Score: 1

      I agree that some degree of "hack first, refactor later" is good, AFTER you have a reasonably solid foundation to build on. The problem is if you hack first and then lose the motivation or the funding to do the refactoring. Then you are stuck living with your first draft forever, and even trying to build on top of it.

    2. Re:I've been programming for over 20 years... by ChronoFish · · Score: 4, Interesting

      I've been programming for about 17 years..... and I've found you can't clean code "later". Once it's working it's off to testing and then shipped/delivered. No manager wants you to refactor code unless there is a damn good reason to do it (i.e. there is a bug or enhancement). If you refactor at that time now your next project is actually two projects (a refactor project followed by an enhancement project).

      The very idea of refactoring code killed Netscape. They rewrote their underlying rendering engine- a triumph of the developers - with no (little) noticeable enhancement for the end user. Users who were developers "got it" - but the mass market did not.

      -CF

    3. Re:I've been programming for over 20 years... by Lord+Grey · · Score: 1

      While I utterly agree with your statements (and I've been programming for almost 35 years) the reality is that management usually gives coders virtually no time to clean things up. There is constant pressure to move on to the next task or project, with little thought to hardening or refactoring something that already seems to "work."

      Then, you wind up with the code you see around you and someone decides to write a book about how to "fix it."

      --
      // Beyond Here Lie Dragons
    4. Re:I've been programming for over 20 years... by gutnor · · Score: 1
      It depend how you define 'working'. Nowadays working should mean clean, with automated tests, little/no dead feature, little/no overengineering, no 'entreprisification', made with the right too for the job if possible, and finally coded with care (meaning coded to be read easily by fellow developer, no by tools or manager )

      If that's what you have in mind by working, that is what Robert Martin generally advocate (see the other book called Clean Code): get the stuff working in a way you don't have to worry about the future because your code is clean enough so that you can refactor easily later. Haven't read this one, but I doubt he veered too much of that path.

      Now, "working", in management speak, is synonym with "sold". Which cover the above scenario, but also the hacked together prototype written in VBScript by a consultant 5 years ago, converted by an automated tool to F#.Net (for no good reason), tortured to work behind the Company Mandated SOA framework, "tested" by hand by a team of 50 indian developers kept demotivated by stupid targets.

      Cleaning up the mess of a hacked together application is tremendously difficult. Budget for improvement are based relative to the cost of the project and other improvements, making it even harder to justify actual cleaning up (hacking is cheap, especially because hacking generally means no testing). When the project is in production with big client, even minor change to stuff like datamodel, internal interface, message format, ... will require from the client a full regression test - which means that there is resistance to change all the way. Then you have backward compatibility with your own broken interface and integration with the rest of the product portfolio which can have vastly different release plan, and then you have to deal with the design problems in other application that "bleeds" into you own (like - hey let use the portfolio position table in the database that store the position in a *double*)

      In last 10+ plus developing applications,with one exception, "working" has always meant either hacked together without testing or so legacy that no refactoring is small enough to be possible. A lot of the problem would not have existed to such extend with coder caring about their code. That require skills, and books.

    5. Re:I've been programming for over 20 years... by unclebobmartin · · Score: 2

      This book has no code in it. It's not about code at all. It's about coders, and the attitude they need to survive in a corporate environment. It's about being professional. About saying what you mean, and meaning what you say. It's about how to answer a manager who want's the impossible. It's about finding a way to write effective code just after you've had a big fight with your spouse. It's about all the non-coding things that programmers face every day.

    6. Re:I've been programming for over 20 years... by unclebobmartin · · Score: 1

      the reality is that management usually gives coders virtually no time to clean things up. There is constant pressure to move on to the next task or project, with little thought to hardening or refactoring something that already seems to "work."

      One of the lessons in the book is that a professional programmer will not allow this to happen! As professionals we need to understand what it means to be a professional, and what that implies about our relationship with our employers. A professional is hired for his/her knowledge and expertise. When you hire a professional, he tells _you_ what to do! When you hire a doctor, or a lawyer, you don't tell them what to do, they tell you what to do. "You need to have your appendix out." When your manager says "We need to go fast, so don't refactor" you reply: "The way we go fast is by refactoring. Since you want me to go fast, I must refactor."

    7. Re:I've been programming for over 20 years... by TemporalBeing · · Score: 1

      The last thing 'coders' need is another book telling them exactly what practices they should be following. As with most things, the focus should always be on creating a working product first. After you've built something, then you can refine it and clean it up. Too often when the focus is on how it is to be completed instead of actually completing it, the latter never happens. Re-factoring is a much easier task when you already have it working, already know exactly what it should do and when, and have experience using it which helps break it down more intelligently.

      The problem, as your 20 years of programming experience should tell you, is that often management will never allow the "clean-it-up" so you get saddled with how you did it the first time, even if you only meant it to be a prototype. So, doing your best to get it as close to right the first time - through discipline and good practices to start with, will help you all the more in the long run.

      While I haven't RTFB, I will have to agree that more information on this topic is very, very necessary. Often, programmers do not know how to estimate their time - it's skipped in CS/IS/IT/SE curriculum - and there's not much good stuff on the topic available, with most everyone saying "it's too hard". Good material will help the field mature in ways that are desperately needed, and old-timers saying "not another book" is not going to help that.

      --
      Truth is like the sun. You can shut it out for a time, but it ain't goin' away. - Elvis Presley (source: imdb.com)
    8. Re:I've been programming for over 20 years... by Anonymous Coward · · Score: 0

      You say that like the developers have a choice. I too have been programming for nearly 35 years and I have never once been able to tell my superiors anything of the kind. Even as a lead and low level manager, I did not have the choice. The people who control the purse strings do not allocate the money to fund doing it right. You can say "no" all you want but it isn't going to change that fundamental obstacle.

    9. Re:I've been programming for over 20 years... by Anonymous Coward · · Score: 0

      Depends on how buggy you want your crap to be and how easy you want it to be to fix it. I'm of the opinion that you should make an effort to write clean and modular code in the first place, and use unit tests as a part of your process to test the parts before you put the whole together. I don't think writing modular code necessarily slows you down... But it can make things quicker later.

    10. Re:I've been programming for over 20 years... by wrook · · Score: 1

      There is an important distinction between refactoring and rewriting. Refactoring is the task of changing small parts of the code so that it operates exactly the same way that it did before. Your outward facing interfaces aren't going to change much in each refactoring (although after successive refactorings it might change dramatically). Your unit tests should still run (possibly with some updating) after you have refactored the code.

      Rewriting is the task of taking a large piece of code and rewriting it so that the acceptance tests pass. You will be rewriting the unit tests pretty much from scratch (if you even had any).

      Refactoring should always be done after your unit tests are passing. You shouldn't refactor before your code does something useful. Get the tests to pass first, then refactor. Otherwise you're going to be spinning your wheels a lot.

      Refactoring after you have done many many changes is very, very difficult. You are changing the structure of the code. But poor design choices often ripple through the code -- the design of one thing affects the design of another. Once you start refactoring it's like pulling a loose thread on a sweater -- the whole thing unravels on you (anyone who has tried to put legacy code under test and then refactor it has experienced this). You get to a point where you think that you might as well rewrite the whole thing.

      But as you point out, rewriting is not usually a viable option. You get a new code base with the same user features. It usually costs about the same as the original did. It is often missing requirements (because how many projects have *all* their requirements documented in such a way as you can make sense of them in a rewrite?). You can't sell it to the customer because at best it is the same as before. So you've just doubled the cost of your development (and more). I've seen many rewrite projects in my years as a programmer. Very, very few of them are released to the public. Of those that are, very, very few of them are commercially successful.

      I get the feeling that the original poster sees continual refactoring as wasteful. I can't see what the final shape should be so I am repeatedly changing it (practically every time I touch it). It would seem that it would make sense to wait until it is stable and then rewrite it. The reason for constant refactoring is reduced risk. I keep all of my refactorings as small as possible by doing them as soon as possible. The constant work is mitigated by the reduced scope of all the changes. Keeping the code base well factored also decreases the complexity of new changes. So while it feels like a lot of work up front, overall throughput is increased.

    11. Re:I've been programming for over 20 years... by Anonymous Coward · · Score: 0

      You say that like the developers have a choice. I too have been programming for nearly 35 years and I have never once been able to tell my superiors anything of the kind. Even as a lead and low level manager, I did not have the choice. The people who control the purse strings do not allocate the money to fund doing it right. You can say "no" all you want but it isn't going to change that fundamental obstacle.

      Probably that explains why you are still programming (instead of engineering software) for the last 35 years?

    12. Re:I've been programming for over 20 years... by Anonymous Coward · · Score: 0

      The pay off of refactoring the code can/should be seen in the fact that future enhancements are delivered quicker and with less bugs. Otherwise you're refactoring incorrectly. There is a benefit to refactoring that the end users can/will notice and not just "developers" if it's done write.

    13. Re:I've been programming for over 20 years... by sjames · · Score: 1

      The key is to do it iteratively. Hack the first bit, then refactor, then the next bit. Continue until done. This way it is never "complete" in hacked form, so it can't get pressed into production until the refactor has happened. The hack is a rough draft. Only an idiot would send a rough draft to press (enter the managers!).

  18. on boolean logic, and zealotry by RockGrumbler · · Score: 1

    "Saying, "We'll try" means that you, or your team, isn't already giving it their best"

    In my experience, it means "We don't know, let us go off and research it more."

    On a side note. I'm sick of the attitude that programming process and dogma is the one true way to make yourself a better programmer. Just attend one more conference or buy one more book to acquire your true path to coding nirvana from someone else.

    The edge cases that aren't covered by pre-ordained process are REAL LIFE, and you are often the only person who has enough context to make good calls about process and procedure. Spending your whole life fine-tuning your work flow to imitate the sub-deities of agile seems wasteful and quite UN-JOYFUL. I wish more folks would just pick and choose the things that work for their group based of of honest experimentation, and go about their life BUILDING COOL THINGS.

    1. Re:on boolean logic, and zealotry by JonySuede · · Score: 1

      quite UN-JOYFUL.

      Right on, as the Beasty Boys once sang :

      You heard my style I think you missed the point it's the joy.

      joyful programming <-> productive programming

      --
      Jehovah be praised, Oracle was not selected
  19. "Uncle Bob" by Raenex · · Score: 0

    Robert Martin, affectionately known as "Uncle Bob" to many people.

    Ugh.

    1. Re:"Uncle Bob" by Anonymous Coward · · Score: 0

      At least it's not "Uncle Remus".

    2. Re:"Uncle Bob" by kikito · · Score: 1

      "Raenex"

      Ugh.

  20. Can someone explain to me... by Anonymous Coward · · Score: 0

    Why does this book have the crab nebula on the front of it? I did a quick search of "Uncle Bob" and it seems several of his books feature astrophysical images. What is up with that? (not necessarily complaining, but I was kind of disappointed when I saw the Crab and it turned out to be a programming text.)

    1. Re:Can someone explain to me... by Anonymous Coward · · Score: 0

      you could have a word with Tim O'Reilly

    2. Re:Can someone explain to me... by c0lo · · Score: 1
      The "explanation" from "Clean Code - A Handbook of Agile Software Craftsmanship" (which is a different from the same author):

      The image on the cover is M104: The Sombrero Galaxy. M104 is located in Virgo and is just under 30 million light-years from us. At it’s core is a supermassive black hole weighing in at about a billion solar masses.
      ...
      The image of M104 on the cover is a combination of the famous visible light photograph from Hubble (right), and the recent infrared image from the Spitzer orbiting observatory (below, right). It’s the infrared image that clearly shows us the ring nature of the galaxy. In visible light we only see the front edge of the ring in silhouette. The central bulge obscures the rest of the ring. But in the infrared, the hot particles in the ring shine through the central bulge. The two images combined give us a view we’ve not seen before and imply that long ago it was a raging inferno of activity.

      Tell us what you make of the above "explanation".

      --
      Questions raise, answers kill. Raise questions to stay alive.
  21. I found this sentance odd. by shadowrat · · Score: 1

    Saying, "We'll try" means that you, or your team, isn't already giving it their best, and that through some extraordinary effort you'll pull it off.

    I say this a lot. Usually it coincides with a feeling that we have been given a task, usually using some new or otherwise unproven technology or techniques, with hazy specifications on a fixed and frankly uncomfortable timeline. Generally the first answer is no, but it becomes apparent that we don't really have a choice in the matter, our job is to do this thing. We say it just to placate ourselves and make it sound like there is no expectation of success.

    "We'll try", to me, has always translated to, "We're doing this against our better judgement."

    I'm sort of interested in reading this book and finding out if there's more to this situation that the review detailed.

    1. Re:I found this sentance odd. by unclebobmartin · · Score: 1

      Saying, "We'll try" means that you, or your team, isn't already giving it their best, and that through some extraordinary effort you'll pull it off.

      I say this a lot. Usually it coincides with a feeling that we have been given a task, usually using some new or otherwise unproven technology or techniques, with hazy specifications on a fixed and frankly uncomfortable timeline. Generally the first answer is no, but it becomes apparent that we don't really have a choice in the matter, our job is to do this thing. We say it just to placate ourselves and make it sound like there is no expectation of success.

      "We'll try", to me, has always translated to, "We're doing this against our better judgement."

      I'm sort of interested in reading this book and finding out if there's more to this situation that the review detailed.

      The problem is that _you_ may interpret "We'll try" as "We're doing this against our better judgement." However, your boss will likely interpret it to mean: "We're on it! We'll succeed!" Frankly saying "We'll try." is often used as a way to end an uncomfortable conversation; leaving it in an ambiguous state. It's easier than saying: "No.", which is what really needs to be said. When you accede to the demand to "try", you are admitting that you weren't trying before.

    2. Re:I found this sentance odd. by mcmonkey · · Score: 1

      Saying, "We'll try" means that you, or your team, isn't already giving it their best, and that through some extraordinary effort you'll pull it off.

      I say this a lot. Usually it coincides with a feeling that we have been given a task, usually using some new or otherwise unproven technology or techniques, with hazy specifications on a fixed and frankly uncomfortable timeline. Generally the first answer is no, but it becomes apparent that we don't really have a choice in the matter, our job is to do this thing. We say it just to placate ourselves and make it sound like there is no expectation of success.

      "We'll try", to me, has always translated to, "We're doing this against our better judgement."

      I'm sort of interested in reading this book and finding out if there's more to this situation that the review detailed.

      Sounds like you're just the guy this book is for, saying you'll try when you should be saying no.

      When I say, 'I'll try,' I mean, I'll try. It means, I don't know if the request is possible given the available resources, or I have check for conflicts with existing requirements, or I'm not sure if the request is technically possible.

      "Saying, "We'll try" means that you, or your team, isn't already giving it their best". WTF is that crap? "Uncle Bob" sounds like a pompous d-bag.

      Perhaps "I'll try" means I'm open to learning and growing. There may be something I cannot do today which I will be able to do tomorrow, so rather than saying no, I do some research. I don't consider that "extraordinary effort."

    3. Re:I found this sentance odd. by Lije+Baley · · Score: 1

      Your boss has already been to sales-, er, business school and is thinking "We're on it! We'll succeed!" from the git-go. If you don't say "We'll try", the boss will find someone else who will. But then I suppose a book on craftsmanship is mostly useful to those who are able and willing to target the "high-end" of the coding job market where, presumably, a person can have strong principles and employment at the same time.

      --
      Strange things are afoot at the Circle-K.
    4. Re:I found this sentance odd. by Kittenman · · Score: 1

      Do or do not. There is no "try". (Oblig. Yoda quote...)

      --
      "The greatest lesson in life is to know that even fools are right sometimes" - Winston Churchill
  22. Fully agreed by JMZero · · Score: 1

    Sorry everyone for wasted space - but that was a beautiful comparison, perfectly summing up my thoughts as I've listened to advocates of different methodologies over the years.

    --
    Let's not stir that bag of worms...
  23. Re:Agile... please stop. by ADRA · · Score: 1

    Woah, that's way too much pragmatism for a slashdot programming discussion. I mean I don't think there's a single piece of mud you've slung there... very disappointing...

    --
    Bye!
  24. "a no-holds-bar approach"?? by Anonymous Coward · · Score: 0

    Again, here we have programmers who can memorize that $%@^! is not the same as $%@!^ but ask them to know english??? It's "NO HOLDS BARRED". DUH.

  25. 3 companies, 3 agile failures by Anonymous Coward · · Score: 4, Interesting

    I've worked at 3 different companies of all sizes in the past 8 years. Every one claimed to be Agile, every one one of them produced undocumented spaghetti code that collapsed under the slightlest change request.

    "Agile" unfortunately has become an excuse for no plans, no docs and no discipline.

    Therefore, having never been employed in a real Agile environment, what about Agile lends itself to be abused this way?

    1. Re:3 companies, 3 agile failures by Anonymous Coward · · Score: 1

      >> Therefore, having never been employed in a real Agile environment, what about Agile lends itself to be abused this way?

      Many agile methods (scrum, extreme programming) promote some level of developer self organisation. These methods are predicated on every developer being able to exercise sufficient judgement to decide and execute on what's best for the project, the implication being that management is an overhead developers can and should live without. As a consequence top down management is caricatured, with Dilbert as an unspoken reference point.

      In fact, developers are absolutely dreadful at self organisation. Conversations veer off into rabbit holes on wafer thin evidence (for example, whether communications between major systems components should be synchronous or asynchronous) with vague phrases such as "over-engineered" and "future-proofed" thrown about without the slightest consideration on the overall cost of these conversations (flame wars, often) on the project, nor on how much it would be to retrofit the alternative thereafter. Also, without a very clear reward and punishment structure on less interesting but important aspects, such as documentation (code + tests is rarely sufficient), these points are often neglected.

      The reality is that just as most developers are mediocre but think they are better than average, so are most managers. Working for pragmatic, technically literate managers who know the customer's business domain at least as well as the customer is a truly liberating constraint. Sadly, many developers have not and have no benchmark for comparison or demanding more of their managers. Even so, asking mediocre developers to self organise is a recipe for delay, overspend and underachievement. To add insult to injury, the claim will be made that because a series of irrelevant unit tests turn green and because unintelligible documentation exists, the code is "clean".

    2. Re:3 companies, 3 agile failures by Anonymous Coward · · Score: 0

      Agile cannot fix a dysfunctional team who is barely capable of putting out working software. Agile takes a good team and takes the roadblocks out of their way so that they can be a great team.

    3. Re:3 companies, 3 agile failures by swb · · Score: 1

      Agile is like "flexible" -- it's just another word thrown around that enables enough ambiguity to allow people to have it both ways.

    4. Re:3 companies, 3 agile failures by Anonymous Coward · · Score: 0

      If you ask me the answer to your question is simple.

      Traditional Waterfall development gives software engineers & programmers a large amount of control over what gets done, how it gets done and when it gets done. Instructions are provided (design doc), and this allows for the software engineers & programmers to manage features as well as the code quality. It also allows programmers to find the most qualified person to work on a feature who is available.

      Agile's approach to development removes that control from the programmers and software engineers and places it with "customers". Customers decide what gets worked on next based on the review of the last iteration. Customers don't care about code quality, or that the feature you just added was your "first draft", it's in the product and it works so to them it's done. Customers don't care that the UI guy is being asked to write graphics code in order to get a feature in for this sprint (dispite UI guy knowing little to nothing about the graphics system) they just care if he doesn't get the job done.

      Code reviews are supposed to help facilitate quality control on the code as a whole. And the automated testing that TDD & Integration Tests provide help assure everyone else on the project that the integrity of the code is intact. Though most companies tend to skip TDD or Integration tests, I believe theres even an agile anti-pattern specifically about it, which ammounts to "This is the most common reason agile teams fail".

      The problem here is that customers aren't concerned with code reviews, or the integrity of the code until the project is crashing or not working right. It's up to the programmers & software engineers to ensure both, but in my experiance most of the programmers don't have enough pull to say "Look we really need time to refactor this code even though there will be no noticble changes on the users end" and have the customers be it management or an external customer allow them to do it. And if you are able to pull off a refactor once, if you ask to be able to refactor that same code in another month or two the customer is likely to look at you and say "You just refactored that a few months ago..."

      So you end up with a code base that kind of looks like a Dr. Frankenstien special, which "works" but is extremely fragile. This happens when "Customers" (I'm including management as a customer) begin determing technical aspects of the products development rather than leaving that end of things up to the software engineers and programmers.

    5. Re:3 companies, 3 agile failures by Anonymous Coward · · Score: 0

      Agile is a buzzword that's unfortunately thrown around a lot. Many "Agile approaches" are fundamentally good, but are misapplied or applied half-assed. Agile doesn't necessarily mean rush through it or change your requirements every 3 days, like some people believe...

      What I've found is that regardless of agile development, if you don't have your requirements set in the beginning and you haven't spent the time developing a road map, you will end up with what you describe. What a lot of agile coding books neglect to do is discuss the first phases of the project. Some project managers will just divy up features with a poorly defined road map, and substitute scrums for planning meetings... That isn't how it works. The agile part only comes in AFTER you have planned the project.

      Here's how we do agile... We enforce a certain set of rules, and it fixes most problems:

      1. All code must be documented with javadoc-style comments (we primarily do Java). This translates to pick a standard commenting and documentation style for your organization and stick to it.
      2. Any and all DB changes must be documented in the ERD
      3. All configuration steps must be documented in the trac wiki.
      4. SVN commit messages must be a discrete list of fixes and changes, and when a trac ticket is closed, they should include fixes #N
      5. Scrums should be short to avoid wasting time. "I am working on X, Y and Z. I believe that feature Q is a necessary prerequisite that is blocking Y, and therefore Bob should work with me to resolve that dependency. My goals for today are ..."
      6. Unit test!
      7. Trunk must always build.

      The biggest thing I've seen abused is using scrums instead of planning and requirements analysis, that and managers believing agile means the ability to change direction every week. Lazy coders who don't document are lazy coders who don't document regardless of the methodology... Maybe the name agile gives them an excuse because they believe it means rushed?

    6. Re:3 companies, 3 agile failures by mattpalmer1086 · · Score: 1

      In general, I agree with you. No methodology is a silver bullet that will magically transform a bunch of mediocre people into a tight, intelligent productive team. In fact, I would go so far as to say that most methodologies exist to mitigate the effects of the mediocre. A really good team of people can produce great code no matter what methodology is presented to them (even if they have to work around bits of it sometimes).

      I successfully introduced Agile development into my last organisation, which was very much a traditional waterfall style, make-promises-we-can't-keep-but-at-least-there's-a-plan sort of place. We adapted the methodology to fit the organisation to some extent (mostly scrum, with a bit of kanban thrown in, and interfacing it all with traditional Gant chart people). It worked pretty well - mostly because the people we had were really committed to making it work, and I worked double-time on getting the organisation on board, particularly inviting them to sprint-reviews. It created a buzz - and the organisation was sold on it - which helped a lot.

      In my new role in a much smaller organisation, I'm not so sure it will work as well - so I'm holding off a bit until I get the measure of the place. I have really talented developers - but communication and visibility is not a big issue due to the small size of the place, and people tend to work individually on tiny projects rather than collaborate as a team on small bits of shared functionality.

      Anyway, Agile won't make mediocre people great, and Waterfall won't make great people mediocre. There are advantages and disadvantages to each style of development. The one thing you really do need to make great code is at least a few great (or at least, highly committed) people.

    7. Re:3 companies, 3 agile failures by mattpalmer1086 · · Score: 1

      That isn't Agile development - it's just poor development. Good agile development doesn't cede control of the development process from developers to customers, any more than good waterfall takes control away from customers and gives it to developers.

      In both cases, it requires strong product management - and this is not undertaken by the customers or the developers in either case. Taking scrum as an example, you have the role of product owner, whose job it is to ensure that the right things are being built. Scrum only provides a way for customer feedback to occur and influence the development process during development, as opposed to waterfall where requirements are agreed up-front. One good thing about scrum (over waterfall) is it explicitly has processes for the development team to agree how much can be built, and how it will be built (which can be absent in a waterfall process).

      So I strongly disagree with your assertion that agile takes control away from developers. When it works well, it creates a highly collaborative environment in which both customers and developers agree on what will be built, how long it will take, and whether further refinements are necessary. However, this does require a strong product owner to interface between them.

    8. Re:3 companies, 3 agile failures by mattpalmer1086 · · Score: 1

      I totally agree with what you say. Agile is not the absence of planning. You still have to do a lot of requirements gathering and analysis. Some architectural issues need careful spiking to ensure you will meet non-functional requirements.

      Agile is not anarchy - it's about controlled and collaborative change in exploring a complex problem space.

    9. Re:3 companies, 3 agile failures by Anonymous Coward · · Score: 0

      I think it actually comes down to upper management not actually understanding what the term actually means in an engineering sense.

      My previous employer, Company X was very marketing driven. They used a lot of acryonyms which represented products that their marketing people produced. Engineers were seen as replaceable parts and worker drones by pointy haired bosses.

      Company X was using the term "Agile" software development for their stockholders and clients as a way of telling them that their software was going to be written quicker than other companies, and they could change projects at a moments notice. ie. Company changes direction overnight and now you're in the business of creating mobile widgets instead of online widgets.

      They thought the term Agile meant that they could change the company direction very quickly, ie pull devs off project A to work on parts of project B and then back to Project A and not skip a beat. They were "agile" right? Upper management also planned out 2 years of project work including start and end times and made up project estimates on the spot with no engineering input whatsoever.

      Engineers would get surprised when they came to work on monday with "Oh hey, we're starting a new project today" - gets handed a 2-3 page document outlining the new project. "Ok where's the spec"? "Oh, ummm, the BA which was fired last week has it on M: drive".

      No Spec, or the spec that was written was absolutely useless..

      "When is this due?" ... "Last week"

    10. Re:3 companies, 3 agile failures by wrook · · Score: 1

      "Agile" is a virtually meaningless phrase: People over Processes, etc, etc. What *exactly* does that mean? I've worked on some extremely good "Agile" teams. All of them have had well documented processes and extremely disciplined practitioners.

      The number of groups who prefer ad hoc development far and away outnumber the number of groups who prefer disciplined development. Ad hoc isn't even necessarily "bad". It's just "as you go". If you've got a team composed of great people, it can work. But, this is very, very rare.

      Let's say you were a manager of a software group. You prefer ad hoc development. You may not even know that you prefer ad hoc development because you don't really know enough about software development processes to say anything on the topic at all. But you can't go to the people who are paying you the big bucks and say, "We just do whatever the fuck we want". You need something that has some credibility to call it. You read the agile manifesto and think, "Yes, I agree with all of that!". Voila! You're now "Agile".

      The thing is, if I went into that team and said, "You aren't going to get to agile until you do X, Y, Z" they will literally laugh at me. They've done virtually no research. They've talked to nobody who has a proven track record using "Agile methods". But they have an ego the size of the Empire State Building. My way is best and if "Agile" isn't exactly what I'm doing, then "Agile" is broken, they will think.

      Before Agile it was "Spiral" and "RAD" and about a million other things that had some benefit but were co-opted by the clueless idiots. Man, the number of times I saw teams who purported to follow the Rational process simply because they drew a UML diagram once makes my head spin. Like I said, "Agile" is meaningless. It was practically meaningless from the beginning, except that those who knew what they were doing had some common ideas. But it's definition was vague enough that everyone who wanted a process to follow without following a process jumped on it. But if it weren't for Agile, it would have been something else.

      As a programmer your goal should be to find good teams to work on. Don't obsess about whether they call themselves one thing or the other. Good teams create good practices to follow. At interviews, do enough questioning to make sure that they have good practices and are actually following them. Unfortunately, you won't find very many groups who are. Your other option is to build those teams yourself. But that takes a whole new set of skills.

    11. Re:3 companies, 3 agile failures by Anonymous Coward · · Score: 0

      In my experience, companies adopt agile because they've heard good things about it, but are unwilling to actually follow agile.

      At my current job, we do "agile", not agile. Our manager is uncomfortable doing anything he is unfamiliar with, so he chooses the two or three things he likes from agile and incorporates them into the waterfall process he knows, and we end up with "agile". I think it's entirely to do with comfort level. Our manager is just not comfortable handing that much control over to the developers, he isn't comfortable having quick release cycles, and he isn't comfortable implementing anything before the entire project is planned out.

      So, what it comes down to (again, in my opinion), is that most places don't actually do agile development. To truly do an agile development, you have to choose one and follow the entire methodology; it is far easier, however, to pick and choose what you like best from all methodologies, and end up with a bastardization that is worse than the starting point.

    12. Re:3 companies, 3 agile failures by Anonymous Coward · · Score: 0

      I think one of the causes for the current agile trend is simply a lack of good planning tools. Programmers know that planning is important, but the also realize that the tools at their disposal are neanderthal. Planning a software project is just painful today, so people generally find excuses not to do it and opt for rapid prototyping and sprints. And even if you invest the time and effort your plans usually become outdated very quickly, and, again, the tools just don't support the sort of rapid and detailed plan editing that you'd expect. [shameless plug]that's why I'm developing a rapid planning tool that's especially tailored to programmers who want to be able to plan their work as fast as they can type. it's still a work in progress, but I have a demo video that shows the basic concept: http://gigantt.com [/shameless plug].

    13. Re:3 companies, 3 agile failures by Anonymous Coward · · Score: 0

      because one of the central concepts of agile development is to champion getting something, _anything_ to work over documentation and design. This isnt an exaggeration or a misrepresentation these are two of the core concepts of the idea.

      'Working software over comprehensive documentation
      Responding to change over following a plan'
      (The other two concepts arnt much better either.)

      This is pretty much the antithesis of good programming practice. Agile development isnt a solution for anything or a working system. Its a desperate attempt to make bad practices work because ultimately management and customers want to see something work rather than see some design specs, customers and management want to change things whenever they please rather than form a rigid spec, and the really insidious one, _developers_ dont want to do the boring bits which design and documentation are. Its like trying to build a house with no blue prints and somebody constantly changing where you are putting the walls... with gusto.

      That doesnt necessarily mean to abandon the concept because as far as I am aware none of the issues with customers, management or developers are going anywhere, but dont expect to ever come across an agile development system that actually works. Its not abused, the system itself is abuse.

  26. Re:Agile... please stop. by swordgeek · · Score: 1

    Agile programming is pretty much equivalent of as-built blueprints. Basically, you start with a half-assed drawing, and as you build, you create your blueprints to match the building. It's become the standard for almost all buildings, and it SUCKS!

    Similarly, "Agile" and "Clean Code" are pretty much mutually exclusive in my experience. Someone who can get code out the door TODAY and update it TOMORROW is going to kludge together the worst pile of regurgitated crap possible.

    --

    "People who do stupid things with hazardous materials often die." -- Jim Davidson on alt.folklore.urban
  27. all wrong? Re:Let me summarize by Fubari · · Score: 2

    Programming--You're doing it all wrong!

    I know you're going for +5 funny...
    But what I read is "Here's some things that might be useful."
    The review was well written and I appreciated the reviewer's comments on what they found interesting.

    Sure, tech-skills are important.
    But what a lot of programmers miss is that the other topics (estimates, integrity, responsibility) are important.
    Maybe if you work on solo projects your entire life, then it doesn't matter so much.
    But social interactions really are big deal in software, just like they are with every other human endeavor.
    (The more cynical slashdotters would s/social interactions/politics/ and they wouldn't be wrong, but that doesn't make it any less relevant.)

    Suppose somebody develops software professionally (e.g. for money).
    What will help their career more: adding another language to their resume?
    Or learning more about the people side of things? e.g. process, psychology & practices
    (Diminishing returns start to kick in after learning your 4th or 5th programming language.)

  28. Trashbin by Anonymous Coward · · Score: 0

    "As someone who has been closely involved in both the 'agile-- Throw it in the trash.

  29. Never.. by ADRA · · Score: 1

    read the book, but ANY text that enforces a mandatory set of principles to program probably has a healthy amount of:
    1.overly dogmatic approaches to solving a problem. The zealots will eat it up and constantly espouse the belief to all within ear shot, but unless institutionally mandated will probably be ignored for a variety of perfectly viable solutions. Eg. Web Session Persistence: Thou shalt never store state within a web session context and you will perform all backend processing with either cookie or DB looked up data. The idea is sound and it makes a lot of scaling problems go away, but there are times/places/situations where web session contexts on web servers are perfectly valid solutions to a given problem. I find books of similar ilk will tackle problems by shoving one solution down the reader's throat and completely eschew the exception or the philosophically diverging opinions.

    2. too many pedantic problems/solutions in that everything stated is either terribly obvious to any programmer of a certain benchmark quality or so trivial that static analysis could identify the problem. There are definitely patterns that should be avoided like the plague, and the earlier a developer identifies them the better. Assuming your language of choice can be statically analysed, this is a non-issue, but I suppose -someone- needs to cook up these best of breed solutions to trivial problems, but I'd envision a web page that took in these types of problems as a collection as a better approach. A single book seems to be too dated and too ridged in its recommendations. Adding a rev to a programming language or library could vastly change what is recommended / disdained causing someone to publish a brand new book, etc...

    There is a good reason to have documentation on why solution X or Y is the best of class for a given set of problems, but the zealottry and scope of said solutions always seems lacking. A good book will given concrete solutions and properly scope the solutions for targeted purposes. Of course a very narrowly focused book won't sell nearly as well, so they tend to not get made.

    I'd say that #2 rules of thumb are best presented in a web focus so that they can breath and evolve as the communities that use them evolve. Having books on the subject just solidify rules of thumb that shouldn't be fixed in stone.

    --
    Bye!
  30. Re:Agile... please stop. by LordArgon · · Score: 1

    "Agile" is definitely over-used, but it actually *can* mean things. In my circle, it's always referred to a collection of traits including timeboxed iteration and bottom-up planning. I'd say to fundamental goal of "Agile" development is to codify the "release early, release often" mantra into your development process as efficiently as possible.

  31. We have too many tools to write clean code by Anonymous Coward · · Score: 0

    I hate hate hate web development. I long for the days of DOS 5 and Turbo C.

    Example:
    html/javascript. Use + to concatenate your strings. Send a AJAX msg to php where you use '.' to concat your strings. And maybe you need to chat with some Python which is living in a world all its own. And pass your messages back. JSON? xml? mystery mosh? it goes on and on. Every new language and tech has to do everything a little different from everything else. Listening to new languages justify themselves is like reading nerd masturbation. It is impossible to hire even a senior dev who knows all the tools you use, even though where he worked previously he created the exact same result with an entirely different set of tools.

    It is just insane. How anyone can be expected to product good code with all the overhead of competing/complementary languages and platforms. I'm no javascript fan but if we really are moving to a one-language, one UI world. I welcome it. Then maybe we can start to see some decent code again and we won't need books like this anymore.

    1. Re:We have too many tools to write clean code by sycodon · · Score: 1

      You had no reason to post this as an A/C. It's perfectly reasonable.

      We have taken an application (web browser) which was initially designed to show text (and later porn) and kludged together a generic client supporting what is essentially a client server architecture. Code runs on the server, which, in addition to access the database, writes and downloads code that runs on the client. It used to be that the client was a full featured application that supported the entire GUI toolset, was always aware of its connections and objects, and used a single language.

      Now we have browsers operating in a "stateless" manner, where they essentially gets amnesia all the time, use a mish mash of different languages and bolt-ons to make up for deficiencies and are incompatible with other browsers.

      The existing web application architecture is poorly thought out and badly implemented.

      --
      When Fascism comes to America, it will call itself Anti-Fascism, and tell you to give up your guns.
    2. Re:We have too many tools to write clean code by Anonymous Coward · · Score: 0

      Having worked on a web application for a decade, I have to agree.

      If I had spent those 10 years figuring out how to deal with the complete and utter bullshit UI libraries are instead of taking the easy way out and using HTML to create a user interface that worked well in all screen sizes and resolutions, I'd be a much better programmer.

  32. Hippocratic Oath by StikyPad · · Score: 1

    To start, it looks at the Hippocratic Oath, specifically the rule of "First, Do No Harm".

    Hopefully the book is better researched than the summary suggests -- "First, do no harm" is not a part of the Hippocratic Oath.

    http://en.wikipedia.org/wiki/Hippocratic_Oath#Modern_version
    http://en.wikipedia.org/wiki/Primum_non_nocere#Origin

    1. Re:Hippocratic Oath by CoryFoy · · Score: 1
      Likely my fault. Although, from your links (http://en.wikipedia.org/wiki/Primum_non_nocere):

      "The Hippocratic Oath includes the promise "to abstain from doing harm" (Greek: ) but does not include the precise phrase."

      So it's not all *that* far off. But thanks for the clarification!

    2. Re:Hippocratic Oath by unclebobmartin · · Score: 2

      No, not your fault. I was blissfully unaware that the oath did not contain the phrase. Shame on me for not checking that!

    3. Re:Hippocratic Oath by Anonymous Coward · · Score: 0

      He was thinking of John Wesley's rules (summarized as (1) Do no Harm; (2) Do Good; (3) Love God)

    4. Re:Hippocratic Oath by frank_adrian314159 · · Score: 1

      To start, it looks at the Hippocratic Oath, specifically the rule of "First, Do No Harm".

      I just wish that "Uncle Bob" would take the same care with the software engineering profession.

      --
      That is all.
    5. Re:Hippocratic Oath by Anonymous Coward · · Score: 0

      Well according to the original Oath on Wikipedia:

      I will prescribe regimens for the good of my patients according to my ability and my judgment and never do harm to anyone.

      Not the same, but quite similar. (The modern version provides the "from harm and injustice..." so it's a bit more vague....

  33. here in our ghetto... by Anonymous Coward · · Score: 0

    schedule could never be met (because it was conjured out of some managers' wet dream,) so short cuts were taken with the delusion that one day we would go back to do it right. however over time those short cuts caught up with us and we're spending more and more time patching patches of patches of patches of short cuts, all the while new feature development schedule still could not be met, so more short cuts are taken... no, management felt that if it "works," it's done. no further time would be allocated for it barring bug fixes, which are expected to be quick and would not negatively impact the development schedule (did I mention the schedule is based on some managers' wet dream?)

  34. Belief. Things you know? by esmrg · · Score: 1

    ...The accident was a result of engineers saying no, but management overriding the decision. With this introduction, Bob makes it quite clear that when we choose not to stand up for that which we believe, it can have dire consequences.

    There are some things that bother me here. (And they should bug you too)

    1. The engineers did indeed stand up by saying no, but authority didn't give a fuck. In the end the engineers did not have control of the project.
    2. The engineers didn't merely believe, they knew. I'm sure there were test results and rigorous math involved. Yes, I understand the terms are too often used interchangeably but it's important to know the distinction. When some yahoo stands up for his belief in, I don't know, let's say, god, there is big difference. Belief does not require proof.

    When you stand up for something you can't prove, that can have dire consequences as well.

    Granted, this writer is a former preacher, and it shows.

    1. Re:Belief. Things you know? by PCM2 · · Score: 1

      To be fair, though, too: Nobody at NASA actually predicted an accident, and the specific accident was not the result of some miscalculation (contrary to the wording of TFA). If management steamrolled over the engineers' objections, the result was that the Shuttle was less safe than it could have been. In fact, the vehicle should have been considered unsafe. What constitutes unsafe in this case? According to Richard Feynman, it was "a chance of failure of the order of a percent (it is difficult to be more accurate)." So even ignoring engineers' objections, the chance that the mission would go off without a hitch was still considered to be around 99 percent. By NASA's professed standards, that's not safe enough -- but to say that the accident was the result of bad management, I think, goes a little too far. Could the accident have been avoided? Certainly -- there were 99 out of 100 things that could have happened that would have prevented the accident, instead of what actually did happen. And if they reduced the chance of failure to one-half of one percent, there would have been slightly more than 99 out of 100 outcomes where nothing would have failed, and so on. Could "standing up for what you believe in" have prevented the accident with 100 percent certainty? Only with the crystal clarity of hindsight.

      --
      Breakfast served all day!
    2. Re:Belief. Things you know? by unclebobmartin · · Score: 2

      ...The accident was a result of engineers saying no, but management overriding the decision. With this introduction, Bob makes it quite clear that when we choose not to stand up for that which we believe, it can have dire consequences.

      There are some things that bother me here. (And they should bug you too)

      1. The engineers did indeed stand up by saying no, but authority didn't give a fuck. In the end the engineers did not have control of the project. 2. The engineers didn't merely believe, they knew. I'm sure there were test results and rigorous math involved. Yes, I understand the terms are too often used interchangeably but it's important to know the distinction. When some yahoo stands up for his belief in, I don't know, let's say, god, there is big difference. Belief does not require proof.

      When you stand up for something you can't prove, that can have dire consequences as well.

      Granted, this writer is a former preacher, and it shows.

      I have to say that I don't quite understand your point. What does the "preacher" statement have to do with my comments about the Challenger accident? Can you be specific? What, precisely, does it show?

      BTW, I _was_ a preacher three+ decades ago in my young and foolish twenties; but I got over it before turning thirty. I am now quite content to be an atheist.

      You are quite right that the engineers stood up to say NO. They wrote memos and held meetings. They were very upset. In the end some of them refused to watch the launch over the issue. No, they did not "know" that there would be an accident. But they were very concerned. They did not have enough evidence to be conclusive, but the implications of the evidence that they did have was very scary. In the end, their concerns were overridden by managers who made the choice to ignore their experts.

      My final point in the introduction was that if I were one of those engineers I'd be haunted by the question of whether I should have called Dan Rather.

    3. Re:Belief. Things you know? by unclebobmartin · · Score: 1

      To be fair, though, too: Nobody at NASA actually predicted an accident,

      The Thiokol engineers were very emphatic that the mission should be postponed. They _did_ say, in no uncertain terms, that the mission was at risk, including the loss of the orbiter and crew. This was not a prediction, but it was a clear warning by the experts responsible for the SRB.

    4. Re:Belief. Things you know? by Todd+Knarr · · Score: 1

      I think there's a critical distinction, though. Let's start with a support beam. If I correctly account for all the loads and select a strong enough beam, and then I don't exceed design tolerances on the beam, we expect the beam not to fail. It may fail, but that'll be because it was damaged or something happened to force the load out of spec or something.

      Challenger was a different matter. It was the equivalent of using a support beam that was only 95% strong enough for the load placed on it. When you do that, you expect the beam to fail even if nothing unusual happens to it. You can't predict exactly when it'll fail, but you know that if conditions remain normal that that beam will simply fail at some point. That was the situation with Challenger: the engineers didn't know exactly which launch it'd happen on but they knew conclusively that, given the erosion of the gaskets they'd been seeing, if things remained as they were the question wasn't whether there'd be a failure but merely when.

      It's the difference between taking a gamble and playing Russian Roulette. With the latter, you know that if you keep playing someone will die. The only question is who. And just because I can't tell you right now exactly who it'll be, that doesn't mean I don't know it'll happen.

    5. Re:Belief. Things you know? by martyros · · Score: 1

      My final point in the introduction was that if I were one of those engineers I'd be haunted by the question of whether I should have called Dan Rather.

      Or gone and given an unofficial technical briefing to the men and women flying in the Challenger. Or even camped out on the launchpad.

      The fact is that the engineers *could* have stopped the launch that day. But they didn't think they could, because it would require them to do something dangerous and extreme -- they would have to rock the boat in a major way. I'd be willing to bet that most, if not all, of those engineers, in a similar situation, would now be more willing to do "rock the boat" in a similar situation. It's unfortunate that for most of us, to reach that point requires at least one major failure.

      I hope your book helps others to learn the easy way, rather than the hard way.

      --

      TCP: Why the Internet is full of SYN.

  35. Is the book based on research? by olau · · Score: 1

    Question for the reviewer: is the book based on actual scientific research or is it anecdotal evidence?

    Not that there is necessarily anything wrong with anecdotes and good advice, you can learn a lot from the success of others. It's just that there's a lot of advice flying around in this trade, and not all of it has as firm a base as it sounds like, ahem, Extreme Programming, ahem. The note about staying out of the zone sounds more in the anecdotal than the scientific category to me.

    1. Re:Is the book based on research? by mcmonkey · · Score: 1

      Question for the reviewer: is the book based on actual scientific research or is it anecdotal evidence?

      Neither.

    2. Re:Is the book based on research? by CoryFoy · · Score: 1

      Good question. I'd say it's primarily an anecdotal book, with some links to research on some areas (like automated testing). I do agree that more research is good, and it's work looking into the research Laurie Williams (among others) is doing around the agile software field.

    3. Re:Is the book based on research? by unclebobmartin · · Score: 5, Informative

      Question for the reviewer: is the book based on actual scientific research or is it anecdotal evidence?

      As the author, I feel able to respond. This book is a book about how to behave as a professional programmer. It is not a book about how to write code. As such it is not, and could not be based on any kind of scientific research. Rather it is based on my 40+ years of experience as a programmer, and on the mistakes I have made over that time. This book contains all the things I wish I had known when I was in my thirties.

    4. Re:Is the book based on research? by Anonymous Coward · · Score: 0

      I know the chances are chances are thin to get a reply, but anyway. Do you think functional programming (e.g. haskell) plays an important role today and in the near future? Could functional programming be considered the better choice compared to object oriented programming? (I know that you need the best tool for the job, but apart from this regard)

    5. Re:Is the book based on research? by bigmike_f · · Score: 1

      Thank you from a programmer in their thirties.

    6. Re:Is the book based on research? by infodragon · · Score: 1

      Thank you for posting this comment. It probably pushed me over the edge to purchase the book. I've been developing C++ for 18 years now, professionally started the week before I turned 16. I have found through those years it is best to listen to others and pick out the mistakes they've made and ask yourself how you would have avoided that mistake. Someone once said... "The wise learn from their mistakes, the truly wise learn from others mistakes!" I've probably mangled the quote and I cannot remember who said it.

      --
      If at first you don't succeed, skydiving is not for you.
  36. Another way to look at this... by RogueWarrior65 · · Score: 1

    "Obfuscated coding" is another way of saying "Job Security". I can remember working for a Fortune 500 company in the early 90s where they had to pay a small fortune to get retired Cobol programs to recode for Y2K. I also remember buying someone else's code sight-unseen thinking that the guy was talented only to discover that the guy had the sloppiest code I'd ever seen.

  37. Technical Debt by RotateLeftByte · · Score: 1

    In my part of the world this means more than FIXME

    It is all the stuff that gets put on the black hole called a 'Todo list'. You know the stuff that never gets done.
    Thus you never get 'To Done'. The code isn't finished.

    --
    I'd rather be riding my '63 Triumph T120.
  38. This is true by Giant+Electronic+Bra · · Score: 1

    But that is EXACTLY why 'agile' development methods place a high degree of emphasis on working code. Iteration 1 should WORK, every iteration from 1 to N should work. The early iterations of larger projects may not do anything exceptionally useful, but they have to run and pass acceptance tests. Thus you're always squarely centered on extending a working application and 'cleaning it up' (continuous integration). You never spend time working on anything that isn't part of some actual working functional part of the application being developed. Now and then that actually means you may code something in a way that is clearly not the final end result, but that's OK because you will always be in a position where you have an actual working application. If the customer decides later they don't want X, then you just never do X and if X would have required refactoring Y then good, you already have a Y that does everything else sans X.

    It really does work, and the emphasis really is NOT on process, but on practical problem solving. Process is "what actually did work best in practice".

    --
    "Malo periculosam, libertatem quam quietam servitutem." -- Jefferson
  39. Re:Agile... please stop. by unclebobmartin · · Score: 1

    Imagine doctors who live on a continuum of the opinion that cleanliness is effective in reducing infection. Which are right? Are any? Or should we be tolerant of doctors who operate with dirty hands? (BTW at one time doctors summarily dismissed the practice of hand-washing, even when faced with the overwhelming evidence of it's efficacy.)

  40. Re:Agile... please stop. by Anonymous Coward · · Score: 0

    I want to have your babies.

    But first, I will produce something else, such as a small stone, for your review

  41. Re:Agile... please stop. by Anonymous Coward · · Score: 0

    (BTW at one time doctors summarily dismissed the practice of hand-washing, even when faced with the overwhelming evidence of it's efficacy.)

    You have a nice citation for that, right?

  42. Re:Agile... please stop. by mevets · · Score: 0

    Apparently it is the magic key to unlock a treasure trove of asinine catch phrases.

  43. Re:Agile... please stop. by Kjella · · Score: 1

    Imagine doctors who live on a continuum of the opinion that cleanliness is effective in reducing infection. Which are right? Are any? Or should we be tolerant of doctors who operate with dirty hands? (BTW at one time doctors summarily dismissed the practice of hand-washing, even when faced with the overwhelming evidence of it's efficacy.)

    No, but the standards will be wildly different between an operating theater, a hospital ward, a visit to the general practitioner's office and first aid on a gushing wound. And for that matter how contagious it is, a cancer ward will only have basic sanitation while a virulent lung disease will be in full isolation. So no, there's not one answer that is perfectly right. But like you point out, there are many answers that are very wrong :)

    --
    Live today, because you never know what tomorrow brings
  44. Re:Agile... please stop. by unclebobmartin · · Score: 2

    This over-use of "agile" to describe programming needs to stop. Please. It's a mean-nothing word. "Agile" and has turned into a useless fluff phrase (has it ever been anything but?).

    I just did a search. The text of the book uses the word "Agile" five times, all as side references. The book is decidedly _not_ part of the Agile canon. Rather it is a book about how to behave as a professional programmer.

  45. Re:Agile... please stop. by Warwick+Allison · · Score: 1

    Imagine coal miners who live on a continuum of the opinion that cleanliness is effective in increasing productivity. Which are right? Are any? Or should we be tolerant of OCD coal miners who cannot operate with dirty hands?

    Just because you can type in an analogy does not mean it has any relevance.

  46. Re:Agile... please stop. by LordArgon · · Score: 1

    What's the alternative? Full paragraph descriptions of each concept? Catch phrases catch on because succinctly convey meaning. There's nothing magical about either the phrases or the concepts behind them, but that doesn't mean the concepts are useless.

  47. I half jokingly say there's 3 laws to programming by NotSoHeavyD3 · · Score: 1
    They are of course

    1. Never comment anything

    2. Never document ever

    3. Don't produce error messages and if you do be sure to use a number and not a human readable string

    Unfortunately it seems that way to many software engineers write their code according to those 3 laws.

    --
    Did you know 80 to 90% of the moderators on slashdot wouldn't recognize a troll even if one dragged them under a bridge.
  48. Re:Agile... please stop. by kikito · · Score: 1

    Agile means being conscious that the client *will want* to change the project requirements. This means making sure that the client understands that, and establishing a way to make it work.

    And that is why you don't look surprised when you use Agile.

    "Traditional" programming, on the other hand, is like making a map of a road with the client, and then getting in a car with him, start driving, and then refusing to turn the wheel even if there's a cliff just in front of the car "because it's not in the map that we agreed upon 2 months ago".

  49. Re:Agile... please stop. by mevets · · Score: 1

    English, for one. It is a very lively and expressive language. Terminology and shorthand serve to facilitate rapid communication within a given field. Renaming banal concepts to aggrandize them does not. It does pad the resume very nicely though.

  50. Re:Agile... please stop. by LordArgon · · Score: 1

    You're somehow being obtuse and elitist at the same time. I didn't use these terms to sound smart. I used them to "facilitate rapid communication" within the field of "software engineering". I'm sorry if you find them distasteful, but that doesn't make them worthless.

  51. There are actually 10 laws by Anonymous Coward · · Score: 0

    1. Never apologize

    2. Never explain

    3... 10 TBD (I'm in crunch mode right now, will get to these soon...)

  52. Robert Martin by Anonymous Coward · · Score: 0

    I read his first book on C++, which I didn't finish, but remembered thinking it was a heck of a lot of work. He modelled a non-trivial domain using C++ classes and extended its development from one chapter to the next, explaining both OOD and the features of C++ along the way.

    Years later, I enjoyed some of his columns on object-oriented programming, such as the "Open-close principle" (systems should be open for extension but closed for modification).

    Now this, which sounds like a collection of blog articles which each took about twenty minutes to write (and no additional time to correct). Looking back, it seems that Martin's career has followed an arc from the complex to the superficial. It's often said that people in other careers (politicians, managers) follow similar arcs. They're most interesting near the beginning.

  53. Re:Agile... please stop. by Boronx · · Score: 1

    It's funny you should write that since they are finding that over cleanliness is deadly.

  54. Sorry..I lived on Merritt Island for years. by Anonymous Coward · · Score: 0

    Merritt Island is the home of Cape Kennedy. (It is NOT Cape Canaveral)

    I've worked at Kennedy Space Center. (back in 1995).

    --By NASA's professed standards, that's not safe enough -- but to say that the accident was the result of bad management, I think, goes a little too far.

    Nope. Dead wrong.

    All launches have parameters for weather. How much cloud coverage is allowed. How much lightening is allowed (and from how far away). How hot and how cold is it.

    If management decides to launch outside of those parameters...then the failure is due to management. Pure and simple.

    Management gets to ask what the safe conditions for flying. Management does *NOT* get to ask "Well, if we go OUTSIDE of those conditions...are we risking an accident?" Yep, you are. And they did.

  55. Re:Agile... please stop. by Anonymous Coward · · Score: 0

    Yea, I remember a project that went exactly like that. The spec often changed several times DAILY- basically whenever someone* wanted a new feature or change behavior. The spec went from being a set of goals to becoming a wishlist for any number of people who came along to "save the day". I warned them and warned them that this is a recipe for catastrophe, this is not how you engineer software, etc... Of course management knew better..

    For some reason we could never prove that ANY part of the product worked much less bring it to any sort of state of completion. Of course it was my fault an thus I found that one morning, with the project seriously overdue, I no longer had access to the building, had a short meeting with the VP whereupon they gave me a nice little check to go away. I feel sorry for the poor slob who took my place.

    *by 'someone' I mean ANYONE. I was glad the fucking janitors didnt have access- although I did have my suspicions.

  56. Re:Agile... please stop. by syousef · · Score: 1

    There is a happy medium between making minor corrections as expected through the design and development of code, and completely redesigning the project every few days or weeks. Both traditional and agile approaches can be implemented well or can be implemented very very poorly. My experience has been that you start with fairly solid requirements and are flexible enough to make the darn thing work and if you have the time to also take advantage of any insights that come as the project progresses. However under no circumstances should you start off designing a bridge and end up designing an airliner. That isn't agile - it's moronic.

    --
    These posts express my own personal views, not those of my employer
  57. Re:I half jokingly say there's 3 laws to programmi by Anonymous Coward · · Score: 0

    They are of course

    1. Never comment anything

    2. Never document ever

    3. Don't produce error messages and if you do be sure to use a number and not a human readable string

    Unfortunately it seems that way to many software engineers write their code according to those 3 laws.

    Job Security

  58. Dogma by dugeen · · Score: 1

    Like all theoretical programming styles and religions, clean coding has one or two points to commend it but it would be impractical to follow it in every detail in real life. You'd end up with an unmaintainable mess of XYZArgument objects.

  59. As A QA Engineer by Anonymous Coward · · Score: 0

    Test Driven Development does not exist.

    What Developers mean is Verification Driven Development where the Developer verifies that the software is fit for pupose before deeming the Development phase to be over. If a Developer has not Verified that the Software Does what it is supppose to, It should not go any where near a QA department.

  60. The Puritanical Coder by Ironpoint · · Score: 1

    The programming community needs to attempt to not devolve into writing religious texts about how straight to sit up in your chair and what special underwear needs worn while programming. However, from a book writer's standpoint, a bible is certainly going to be a top seller if it catches on with enough adherents. So it's no suprise that this book pops up. The best advice to follow is to do what works best for you, but some people don't like that. So you get coders leaving on ships to go find places in the world where they can program as they see fit without the need fit someone's definition of 'clean.'

    Unfortunately, managers will read this book and misinterpret it. Soon, we'll have more stupid fad rules like mandatory "stay out of the zone" breaks, mandatory walking around time, or mandatory whatever.

  61. you don't vacume the pattio by Anonymous Coward · · Score: 0

    or the coffeshop

  62. Re:Agile... please stop. by Anonymous Coward · · Score: 0

    The issue with software has nothing to do with coders.

    The conceptualization of software, which takes deep user research, an affinity for business flexibility (changing a few features can change the product perception/market easily), and strong user experience training (ie interaction design & visual design).

    I thought with the success of design at Apple, Pixar, and numerous other companies would hint, hint, that the problem is not in the coding team. The problem is in the conceptualization and visualization of what the product needs to be - and if it is a visual and interactive product, that is a visual and interactive design. Seems to work at Apple doesn't it? It takes intuitive/synthesis oriented thinking (multi-perspective), less than analytical thinking (which is what the MBAs have).

    Agile is (mostly) a reflexive response to a poor work environment. If you get up in arms about what I'm saying, it is likely you've never worked at a company that does things with real design steering the ship.

    Waterfall - means a big dump of abstract - half baked - conceptualizations of what a product should do (ie features described in 2-3 sentences, you know what I'm talking about wink wink or features described in pages with abstract notions like "fit criteria" ...instead of actually showing what the thing is and how its going to work!)

    Agile - means dump ultra-raw statements of need, often straight from the customers mouth, on the dev team and get them pizza, and iterate a lot of times to fix it and hopefully shield from doing "too much"
     

  63. Naughty Publisher by Anonymous Coward · · Score: 0

    On the inside publisher page, (the page with the address of the publishers address, Lib of Congress Catalogue info, isbn, copyright,)
    it says the book was printed on alkaline paper, talk about limiting the life of the book, it will only take a few years before the pages rot. and this book looks like a keeper, talk about trying to increase sales by selling to the same customer again.

    1. Re:Naughty Publisher by Anonymous Coward · · Score: 0

      Acid-free paper, a.k.a. "alkaline" paper, helps prolong the life of the book, you dummy. Not the other way around.

  64. Re:Agile... please stop. by unclebobmartin · · Score: 1

    Look up Ignaz Semmelweis

  65. Re:Agile... please stop. by angel'o'sphere · · Score: 1

    The problem, Sir, is: here on slashdot nearly everyone is a kind of programmer. And like many programmers most of them are autodidacts (that does not exclude the option that they also visited an university and have a degree).
    However the simple idea that - instead of being an autodidact - having an experienced master as teacher and guidance is very strange to them. (There is nothing wrong in being an autodidact, ofc)
    So basically everything "new" is an attack on their self acquired knowledge of truth and perception. An old friend of mine had a mantra: The perception is always the truth in the eye of the perceptee.
    So what was the point I wanted to come to ... well, that seems to be really bad in the USA e.g. Some new concept is suddenly talked about. In this case Agil. It gets ignored and ignored and ignored, but a noticeable amount of people have heard about it "somehow". After a while those guys "that have heard about it somehow" realize that there are suddenly books, trainings and consultants, coaches about that topic. They conclude the hype has started. On top of that they likely indeed meet a coach/trainer in a project who does not work to the expectation. The typical conclusion is: the whole concept is bullshit.
    The funny thing is: if you talk to those guys 10 years later, somehow they have adopted most of the "best practices" that where propagandize in that hype.
    E.g. I would bet a huge amount of /. readers/programmers use a version control system. Most of them likely use a xUnit like testing "framework". I would bet far over 50% have a nightly build or even a continuous build system. If they don't make a peer review before check in, most of them certainly check/read/look at the code when they integrate/merge into their local code base. I would assume that a lot of the /. readers (not to many but surely 30% or more) make more than one commit per day. And lots of them also write their own test cases. Etc. etc.
    That is Agil! Before the "hypes" you hate so much, you used back ups and not a source control system. You used a Word or Excel document and not bugzilla or another issue tracker. You did not write proper tests and you did not review code from other people.
    Anyway, I for my part enjoyed the few talks I heard from you. E.g. two years ago in munich on the OOP you talked about how to make an organization more efficient. You fired Bob, poor Bob ^-^ But after that the throughput was much lower. (You had that picture of an inbox with "stuff to do" for everyone and the inbox always was only half full ... so the conclusion was to fire one so that the inboxes of the others are full)
    Anyway: to the /. crowd, as you are all so skeptical about everything new unless it is linux related, I would propose to read books about anecdotes (e.g. the Anit Pattern book) After all they usually dont' have new concepts which you need to grasp, agree with or disagree with but often simple funny eye openers.
    I'm perhaps a nerd, but bottom line I only read 2 kinds of books: SF novels (Ian Banks!) and well written computer / software related literature. But in the later case mainly only "concept" work and not "how to learn language X or system Y". I find it quite entertaining to read such books while I'm sitting in the train to work ...

    Good night.

    --
    Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
  66. Learn to write you illiterate goofball by Anonymous Coward · · Score: 0

    The CORRECT spelling & phrase is not what you wrote:

    http://slashdot.org/comments.pl?sid=2234578&cid=36429134

    "Gotos have there place" - by JonySuede (1908576) on Monday June 13, @05:10PM (#36429134)

    It's THEIR, indicating possessive, not THERE place, you blatantly obvious illiterate dolt!

    (LOL, If that's how you write english? I'd HATE to see your code you write (that is, IF you even do)).

    APK

    P.S.=> Payback's a BITCH, yea? See here, and I am waiting on your trolling behind to show up there:

    http://tech.slashdot.org/comments.pl?sid=2248218&cid=36479278

    Just so I can publicly make you look more stupid than you already have clearly evidenced yourself to be!

    ... apk

  67. Learn to SPELL & WRITE properly, illiterate do by Anonymous Coward · · Score: 0

    The CORRECT spelling & phrase is not what you wrote:

    http://slashdot.org/comments.pl?sid=2234578&cid=36429134

    "Gotos have there place" - by JonySuede (1908576) on Monday June 13, @05:10PM (#36429134)

    It's THEIR, indicating possessive, not THERE, you blatantly obvious illiterate dolt!

    (LOL, If that's how you write english? I'd HATE to see your code you write (that is, IF you even do)).

    APK

    P.S.=> Payback's a BITCH, yea? See here, and I am waiting on your trolling behind to show up there:

    http://tech.slashdot.org/comments.pl?sid=2248218&cid=36479278

    Just so I can publicly make you look more stupid than you already have clearly evidenced yourself to be!

    ... apk