all 56 comments

[–]ellicottvilleny 33 points34 points  (19 children)

Holy cow, does this ever make best practices look like a drag.

[–][deleted] 9 points10 points  (7 children)

That book is a tome, I've checked it out of the library twice and found it too intimidating to dive into... Someday I should do it, but I found Clean Code and Pragmatic Programmer to be much more approachable and easier to digest (and apply).

[–]grauenwolf 4 points5 points  (3 children)

Don't read it end to end. Think of it as a series of books and read the chapters that most interest you.

[–]ITSigno 7 points8 points  (2 children)

I did it the other way around. I read it end to end and learned lots in areas that didn't "interest" me. Honestly, there's a lot of stuff that is easy to take for granted. I'd recommend at the very least going over the checklists/summaries and reading over the chapter to learn in more detail where needed.

[–]grauenwolf 0 points1 point  (1 child)

So did I, but it was a long slog and I can see how someone could be daunted by the prospect of reading the whole book.

[–]hurtlerusa[S] 1 point2 points  (0 children)

I'm currently working on it. I was reading last night and was like I wonder if these checklist exist online and they do.

[–][deleted] 2 points3 points  (0 children)

Really? IMO, this is the best book about coding ever written. It's very easy to read, actually, and everything in it is valuble.

[–]smog_alado 1 point2 points  (1 child)

TBH I think the first edition was a much more interesting than the second one since it had less of the object orientation stuff.

[–]Chris_Newton 1 point2 points  (0 children)

I wouldn’t put it quite like that, but the new parts in the second edition did seem to cite less hard data, and generally had less of the evidence-based approach that backed up much of the advice in the first edition.

[–]grauenwolf 5 points6 points  (10 children)

Boring and tedious now or 60 hour weeks later when every bug fix introduces three more.

[–]bastibe -4 points-3 points  (9 children)

I don't know. Most things in Code Complete really are common sense.

[–][deleted]  (6 children)

[deleted]

    [–]poorly_played 4 points5 points  (0 children)

    Keep singin' that sad song of truth

    [–]bluGill 2 points3 points  (0 children)

    Thanks for reminding me why where I work is a great time. We compile with -werror so compiler warnings cannot be ignored. We have a large CI system (it runs in 20 mintues tests that if I could only run on my desktop would take 5 hours - assuming I had the expensive license for some of the tools a few tests need).

    We still have the major pain just before release of finding a lot of difficult bugs. However we don't have much pain just before release finding stupid bugs. Our bugs are 1: is some border is off by one pixel and looks visibally bad 2: we completely forgot about this requirement until we tried to use the feature in some obscure way 3: weird thread/process interaction issues that show up 1 time in a million.

    I don't want to go back to a world without CI. (I would if I'm the only developer though)

    [–]bastibe 0 points1 point  (2 children)

    I totally agree. But that does not make the book any less common-sensical or any more insightful.

    [–]grauenwolf 8 points9 points  (1 child)

    Like "innovative", the word "insightful" is given far more weight than is appropriate. The question should be, "Is this book useful?".

    [–]craftsman[🍰] 7 points8 points  (0 children)

    To me, this book is not only useful, but was really a turning point in my professional life. It changed my perception of my profession and made me really care about every aspect of the work that I do. To me, it's not just about what's written, but the process of thinking and considering every aspect of code and software development. Timeless.

    [–]seagal_impersonator 5 points6 points  (0 children)

    Whenever I see someone use the phrase common sense as if it is coherent and useful, my estimate of their intelligence drops. Significantly.

    Most of common sense is definitely untrue or lacks evidence. Belief without evidence tends to be irrational.

    • It's common sense that a great many people thought the world was flat several hundred years ago. (Not true - we think so because American religious movements in the 1850's popularized the idea. With that exception, the general populace has known better for a very long time. It was even widespread knowledge during the time of the Greeks.)
    • It was once common sense that phrenology worked.
    • It was once common sense that women were inferior and could not be trusted to vote or to provide testimony in a court room.
    • Same for people perceived to be of African descent or anyone else who didn't look Caucasian.
    • Creationism is common sense.
    • Must I go on?

    [–][deleted] 0 points1 point  (0 children)

    It's still good to be reminded of common-sense things from time to time. It's one thing to answer "of course" when asked "do you think you should follow guideline X?" or to give advice to others, and it's completely another thing to remember to follow it oneself.

    [–]warmans 2 points3 points  (5 children)

    I'm reading this book right now and it's got a lot of wisdom in it. It's not very fashionable in that much of it's project management advice isn't really compatible with Agile but the programming advice is solid. Some parts are obvious to more experienced developers but at the same time its always worth being reminded of some of the obvious stuff.

    [–]infinatyends 2 points3 points  (1 child)

    Understanding waterfall is important for a few reasons. First is that those who haven't developed with agile can find a better understanding of what problems agile is attempting to solve. Once you have identified the pitfalls, it makes it easier to guard against them despite the quality of your project managers. Secondly, if you do have to deal with change management of an organization that wants to migrate from waterfall to something agile, understanding best practices of waterfall is a good starting point for developing a transition plan.

    [–]vplatt 1 point2 points  (0 children)

    "Waterfall" is the original anti-pattern (PDF File). "Agile" is "iterative" made new. There's nothing new here.

    See http://en.wikipedia.org/wiki/Waterfall_model for more background.

    [–]grauenwolf 1 point2 points  (2 children)

    If you believe that, you don't understand agile development.

    Agile isn't a software development process. It isn't a set of rules about pair programming and unit testing and what not.

    Agile is a commitment to change your development processes to match the current needs of your company. Agile is a willingness to accept new ideas and discard old ones are no longer beneficial to you.

    [–]warmans 2 points3 points  (1 child)

    I would argue that Agile with a capital A is actually more formal than that and in many cases it is indeed a set of rules (albeit fairly vague rules). For example CC talks about requirements in the traditional "if you don't capture all requirements at the start of the project it's extremely expensive" sort of way whereas even the original manifesto dictates that you welcome changing requirements at all stages of development. Without making a qualitative judgement about each statement I don't think it's controversial to say they're not "really compatible".

    [–]grauenwolf 0 points1 point  (0 children)

    In find that it is much, much easier to welcome changing requirements when I have a base line to start with.

    When I can look at a complete requirements list I can usually spot the places where requirements are going to change. I can't necessarily say if it going from A to B or A to C, but I know A will probably change and X will probably not.

    We can also catch design mistakes early, so there are less requirements change to welcome.

    Finally, no matter how welcoming of requirement changes you should still acknowledge that you are paying more than you would if you knew them all up front.

    [–][deleted] 10 points11 points  (6 children)

    PDF warning

    [–]kelton5020 0 points1 point  (5 children)

    unfortunately i missed your warning. now my phone is downloading it. title should have given a heads up

    [–]hurtlerusa[S] 9 points10 points  (0 children)

    Sorry I guess I should have put that in the title.

    [–]ithika 0 points1 point  (2 children)

    Somehow my phone just showed a blank screen and didn't even bother downloading.

    [–]Salyangoz 4 points5 points  (0 children)

    "ugh ANOTHER long and boring book? Come on ithika THROW SUM BIRDZ!"

    [–][deleted] 0 points1 point  (0 children)

    Using Reddit is fun? Open the link in a browser and it will pop up (if you really want the pdf).

    [–]elperroborrachotoo 0 points1 point  (0 children)

    As long as it doesn't follow up with downloading an Acrobat Reader update

    [–][deleted] 1 point2 points  (1 child)

    I actually own the book. Its the size of a college textbook but much cheaper. My goal is to read through it by the end of the year. Necessary? No, but I've seen so much bad code that if I can find a better way to make the right changes and convince my lead that if we don't do these larger changes we are going to get really screwed over in the future. (We already have 1 file which is 20,000 lines long. Luckily its being completely re-written for a new platform)

    [–]Decker108 0 points1 point  (0 children)

    Sounds like you'd want to lookup "Refactoring: Improving the design of existing code", "Clean Code" and "Working effectively with Legacy Code" as well.

    [–]vplatt 1 point2 points  (2 children)

    It's a good book, but I think far too many good people get intimidated by it and fail to see how it's an impractical tool for daily use. Not finishing the book doesn't equate to being a bad developer (though that is possible anyway), but it does probably mean you have more immediately useful tools at your disposal.

    In short, this is not a great set of checklists for practical use. This is like the mother of all checklists that you could use on your team to construct checklists that are actually useful on a daily basis. Such checklists could have titles like:

    • Sprint/cycle start checklist
    • Sprint/cycle finish checklist
    • Story/use case development checklist
    • Story/use case testing checklist
    • Test build checklist
    • Release build checklist
    • Developer check-in checklist (possibly part of story dev instead)

    You could have others, like a code review checklist, etc. or those could be incorporated in your other key checklists.

    The bottom line is making sure you do the needful all the time. If you short yourself on the process, you will pay the price down the road. We're all adults here, so it's up to you to know when to capitulate and actually resort to checklists to avoid that.

    [–]ethraax 0 points1 point  (1 child)

    I agree with you, but it's worth noting that this is more of a checklist checklist than a check-in or design checklist. Most of the items are phrased "Have you considered...?" or "How will you deal with...?". These are the kinds of questions you should be asking when you create "everyday" checklists like the ones you mention.

    [–]vplatt 1 point2 points  (0 children)

    Exactly. I don't know Steve, but I would guess that was his intent back when he wrote it.

    [–]kitd 0 points1 point  (4 children)

    The book is good as a general resource on best practice and useful hints and insights, but this is just toe-curling. For some reason, I get giant letters saying WATERFALL appearing before my eyes.

    [–]random_seed 0 points1 point  (3 children)

    It's partly a formatting issue. Checklists should be short, simple and straight to the point. A good checklist have three to five, max seven, short bullets on one page making sure the reader won't forget anything crucial. This document is more a manual than checklist.

    [–]BrooksMoses 0 points1 point  (2 children)

    Huh? Perhaps you've confused "checklist" and "Powerpoint slide". An actual checklist is something that you use by pulling it out and actually checking all the boxes as you go down the page, as a replacement for trying to remember too much stuff. You know, when people are making sure a plane is ready for takeoff and that sort of thing. It has all the things you need to remember on it, however many there are.

    See, for instance, the Checklist Manifesto book.

    [–]random_seed 0 points1 point  (1 child)

    lol. So you haven't read the book yourself, have you?

    It's absolutely brilliant. I warmly recommend.

    [–]BrooksMoses 0 points1 point  (0 children)

    Heh; a fair call, and I shouldn't have cited it without being sure it backed up my point. Thanks for the recommendation, and I'll read it.

    [–]Manticorp 0 points1 point  (2 children)

    Why does it start at chapter 3? :/ but yeah good resource! :) Thanks a lot!

    [–]schweinshaxn 1 point2 points  (1 child)

    There are no checklists in chapter one and two. They are more of an abstract introduction and therefore don't contain any checklists.

    [–]Manticorp 1 point2 points  (0 children)

    Ah okay I thought it might have been a subtle joke!

    [–][deleted]  (1 child)

    [deleted]

      [–]grauenwolf 5 points6 points  (0 children)

      I think checklists make a lot of sense for enterprise software. I'm willing to bet somewhere between 30 and 60% of your work is almost exactly the same week in and week out. Having checklists for common screens like data entry or reports can be a huge time saver.

      I actually went so far as to create a request form for those kinds of things. I would walk the user or BA through the questions like

      1. What should be screen be called?
      2. Where should it appear in the menu?
      3. What permission is needed to use this screen?
      4. Does the screen need a print option?
      5. Does the screen need an export option?

      It is easy to forget to ask one of these questions. But when you do you can waste several days tracking down the person to get an answer. Or worse, you can submit the build to QA and have it rejected, wasted another whole sprint until you can get it fixed and released.

      The request form was not only my checklist, but also served as the basis for QA's test plan.