Slashdot Mirror


Software Craftsmanship

kaisyain writes "When I was a kid we moved into an old Victorian house. From the street the house looked impressive and fascinating. When you got up close, however, you noticed the paint was peeling, the widow sashes were rotted away, doors couldn't open or close because they didn't hang true, and at some point someone had cheaply redone the kitchen in a style that was very much not Victorian. Pete McBreen's Software Craftsmanship reminds me of that house." Read on to see if you agree with kaisyain's withering review. Software Craftsmanship: The New Imperative author Pete McBreen pages 192 publisher Addison-Wesley rating 2/10 reviewer Justus Pendleton ISBN 0201733862 summary A good start with a terrible finish that answers few of the questions it raises.

The back of the book claims that it will present an alternative method of software development, "a craft model that focuses on the people involved in commercial software development." McBreen offers his "software craftsmanship" model up as an alternative to the mainstream "software engineering" model that dominates much of the literature. It is a position that I am personally sympathetic too, so you'd think I'd be favorably disposed toward the book. Instead I found myself angry at the author for his strawman arguments, illogical conclusions, unfounded assertions, and irrelevant asides.

The book starts off well enough. McBreen points out that, historically, software engineering literature and theory have been dominated by huge projects from the military and government and small, complex, esoteric projects from academia. Neither of those extremes reflect the reality of developing applications for most developers today. McBreen offers up a method of working patterned on craftsmen of old, with a basic breakdown of master craftsman, journeyman, and apprentice.

All of this sounds well and good, but how about some details for what this means in practice?

First we have to wade through some arguments against licensing the profession. (Although craftsmen of old did that all the time, maybe he doesn't want us to extend the metaphor too far.) And then we have to read about how to be a good user. (The back of the book says it is written for programmers, so why do I need a section titled "Stop Choosing Developers Based on the Lowest Bidder"?)

As you're reading chapters like "Becoming a Software Craftsman", "Learning from Software Engineering", and "Design for Testing and Maintenance" you slowly begin to notice that none of this has anything to do with software engineering per se. After all, what is software engineering? McBreen gives a definition on page 7 taken from the IEEE:

Software engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software; that is, the application of engineering to software.

He promptly forgets about this definition in his zeal to set up strawmen for his software craftsmanship model to knock over. "The software engineering view states that COBOL is a dead language with no future." "Unlike software engineering, software craftsmanship takes a long-term view of things." "A key difference between software craftsmanship and software engineering is the emphasis that craftsmanship puts on learning and coaching." "Software engineering, therefore, has to deal with the problem of developing software where incremental development and evolutionary delivery are not feasible strategies." He suggests that journeymen review the work of apprentices and that master craftsmen then review the reviewed work: "Although the software engineering paradigm might consider this type of secondary review to be a waste of time, it is an essential part of practicing any craft." "You cannot do software engineering on a low budget...software engineering projects take a lot of time...software engineering denigrates anecdotal evidence."

Where does he get this stuff from? Did I read that right, he thinks formal software engineering would complain about too many code reviews? I must have missed that issue of IEEE Software.

He seems to think software craftsmanship is somehow vastly different from this thing he keeps calling "software engineering" but anyone even vaguely familiar with software engineering literature will have a hard time spotting any actual differences. On page 113 he seems to be against "code walkthroughs" although I fail to see how they are any different from "A master craftsman...[inspects] everything that the journeymen and apprentices create." On page 124 he rails against software engineering's use of "best practices." He doesn't seem to understand that "best practices" are nothing more than anecdotal evidence and an attempt to gather and disseminate information of "master craftsmen."

This symptom is worst in the concluding section, "What to do on Monday", which is intended to be a set of things you can do to end your slavish attachment to software engineering and start out on the path of software craftsmanship. What revolutionary things does he advocate that software engineering must clearly be diametrically opposed to? He suggests we carefully evaluate the portfolio of interview candidates; pay talented staff extremely well, perhaps even more than managers; we should design for testing and maintenance; pay more attention to usability over glitter on user interfaces; create a learning environment to encourage perpetual learning.

What does any of that have to do with software engineering vis a vis software craftsmanship? Is there some reason I can't pay my developers extremely well and still have a systematic, disciplined process?

McBreen's entire premise is flawed because he doesn't seem to understand what software engineering is. His argument seems to be with a specific process, not with software engineering itself. He offers some useful advice but none of it is earthshaking and none of it is really an alternative to "software engineering." Indeed, none of what he talks about is especially new, either. It is basically the same "surgical team" model that Fred Brooks described decades ago, something he alludes to but never outright acknowledges and explores.

McBreen makes a lot of smaller missteps along the way that damage his credibility but they are really too many to enumerate. At the end of the book, you not only don't have any clear idea of what makes software craftsmanship different from a well-run software engineering shop, you also have no clear idea why you spent $29.99 on a 180 page book softcover book.

Interested readers can purchase Software Craftsmanship from bn.com. Slashdot welcomes readers' book reviews -- to see your own review here, read the book review guidelines, then visit the submission page.

306 comments

  1. who did it? by greenalbatros · · Score: 4, Funny


    When you got up close, however, you noticed the paint was peeling, the widow sashes were rotted away, doors couldn't open or close because they didn't hang true, and at some point someone had cheaply redone the kitchen in a style that was very much not Victorian


    Bejaysus! did Microsoft build your house?

    --
    this sig steers like a cow. and i can prove it
    1. Re:who did it? by mcgroarty · · Score: 4, Funny
      Bejaysus! did Microsoft build your house?

      I'd think he would've said something about the toll booth in the driveway...

    2. Re:who did it? by mcgroarty · · Score: 1

      (...not to mention, having seen the kitchen, he was obviously allowed to peek inside!)

    3. Re:who did it? by greenalbatros · · Score: 1

      he would have done but they'd have sued for NDA violation

      --
      this sig steers like a cow. and i can prove it
    4. Re:who did it? by dtjohnson · · Score: 1, Funny

      Tollbooth? That just collects a small fee to provide unlimited access. No, in a Microsoft victorian, every light switch would have a coin slot, your phone would call up MS every hour to report your activities, upgrades to the appliances would be mandatory, and Bob Kruger of the BSA would visit to check your licenses for your dinner recipes.

    5. Re:who did it? by Bazzargh · · Score: 3, Funny

      It's not your house, its Microsoft's house. You're just renting it. And no, you can't remove the flock wallpaper.

    6. Re:who did it? by Anonymous Coward · · Score: 0

      In Russia, the house owns YOU!

    7. Re:who did it? by Malacca · · Score: 1

      And there is no bathroom

    8. Re:who did it? by Night+War · · Score: 1

      And you can't be visited by any guests, like ... penguins in your home.

    9. Re:who did it? by atuk_daud · · Score: 1

      No Microsoft didn't build the house, a real professional built it (Victorian House). Then, Microsoft bought it and commercialised it.

      --
      The truly loyal subject will neither advise nor submit to arbitrary measures
  2. I'll call programming a 'craft' by krog · · Score: 2, Interesting

    when programmers unionize.

    1. Re:I'll call programming a 'craft' by kfg · · Score: 1

      I'll call craft unionization when the independant luthier and potter down the street from me unionize.

      KFG

    2. Re:I'll call programming a 'craft' by Anonymous Coward · · Score: 1

      actually, programmers should unionize.

      because of the dotcom era, there's now, way too many programmers [not too mention new college grads about to become programmers] that the value of our services have become diluted,

    3. Re:I'll call programming a 'craft' by ginnocent · · Score: 1

      I'd rather see more programmers joining professional associations than becoming unionised.

      Yes, both defend their members interests in terms of pay and conditions, but professional associations garner their members more trust and respect by also ensuring their members meet certain standards of competence and behaviour.
      This eventually lets them influence things like laws and insurance policies (oh, we can't insure that project without a professional software engineer approving the designs and test procedures).

      This is why accountants and lawyers with the right certificates on the wall get nice offices, lunch on expenses and decent salaries, despite the fact that we have no shortage of either profession in most industrialised countries.

      I know that most software developers hate wasting time on political and business stuff, but if you refuse to take part, you should also remember not to complain the next time you see the engineers getting laid off but not the lawyers. Or the next time you make a significant contribution to the design of a product worth millions, but get paid less than the lawyer who designed the sales contract.

    4. Re:I'll call programming a 'craft' by SetiMike · · Score: 1

      And I'll call programming a 'craft' when programmers form covens!

      Unions, some fields need them, not everybody though. They attempt to be a one size fits all. That doesn't work.

      In that sense, unions are a lot like Microsoft, they make a program and demand that everyone uses it whether it fits your needs or not. Sometimes, you just have to choose the other path.

  3. Apprentices? Journeymen? by grammaticaster · · Score: 0, Funny

    Is Orson Scott Card behind this somehow?

  4. What he says by The+Terrorists · · Score: 5, Insightful
    can be said about any craft or art pursued by human beings. The real question is, why will this book sell? Because coders, like other craftspeople, will take a schematic quick way to solve the problem over the tediousness and attention to detail and painstaking slow work that any quality craft requires.

    This is also why stuff like Extreme Programming and other strategies become popular. There are many ways to quality - all of them are task specific and slow. There is no magic pill.

    1. Re:What he says by sporty · · Score: 0, Offtopic

      What about the red pill?

      --

      -
      ping -f 255.255.255.255 # if only

    2. Re:What he says by Anonymous Coward · · Score: 0, Troll

      There are many ways to quality, but extreme programming isn't one of them.

    3. Re:What he says by WankersRevenge · · Score: 4, Insightful

      First off, I'm not a software guy - I'm a camera guy. Programming is just a hobby of mine. But just perusing your comments stirred some thoughts - - -

      Did you ever see the Seven Samura (stay with me here) - in it, as they were recruiting warriors, one of the interviewees asked "What's in it for me?" to which the leader responded, "No glory. No pay. And three meals a day". The interviewee laughed and said he would take it.

      Another Samuri joined the group only for the love of the craft.

      If coding is tedious and you don't like building your application in painstakingly slow fashion, then maybe you should find a craft which better addresses your passion, or at least try and be patient with yourself as you grow. Each project, in my humble belief, should allow you to grow as a craftsmen until you reach that nebulous peak of perfection.

      We're all going to die and the apps you pump out - in the grand scheme of things - will be ultimately forgotten. So don't you think it would be better to leave something beautiful behind in the world, if only to fulfill you? (and by doing so, fulfilling the people you love)

      You're right that there is no magic pill because truthfully, you don't need it.

      Just my thoughts. I'll step off the soap box now.

    4. Re:What he says by ReconRich · · Score: 5, Insightful

      Because coders, like other craftspeople, will take a schematic quick way to solve the problem over the tediousness and attention to detail and painstaking slow work that any quality craft requires.

      Coders almost ALWAYS take the quickest way (on commercial projects) Why ? Because coders are evaluated on the basis of what they get done, and how quickly. Bug counts are hardly ever relevant; in a world where delivery schedules are the ALL IMPORTANT factor, a craftsman is a LIABILITY. Assuming he doesn't get fired for not meeting the same schedule as guys who throw something together as quickly as possible and then forget about it, His wonderfully crafted, nearly bug-free, easy to use application will fail miserably, because a dozen or so crappy applications beat him to market. Face it folks, the software buying world rewards those who
      1. Are first to market
      2. Control the market.

      Craft helps neither first, or control. Hence, the people who fund software development DON'T CARE about it.

      On the other hand, Open Source and Free Software do not have this kind of profit-maximizing strategy, hence these observations do not apply.

      -- Rich

      --
      Free your mind and your Ass will follow -- George Clinton
    5. Re:What he says by Anonymous Coward · · Score: 0
      This is also why stuff like Extreme Programming and other strategies become popular. There are many ways to quality - all of them are task specific and slow. There is no magic pill.

      If I understand you correctly, you are thinking XP tries to be the "magic pill", but is just a quick hack? If so, you probably should learn more about XP (and in general about so-called "agile" methodologies). The main focus IS quality, but without sacrificing efficiency.
      [my apologies If I misunderstood your point... don't want to be fighting strawmen]

      One thing I was thinking when reading review was that "wasn't the author writing about things that XP is solving".

      What XP does, however, is try to get rid of the myth about adding bureaucracy and inappropriate formalism assuring or guaranteeing quality. It's the same fallacy as "let's hire million poor to mediocre CHEAP developers, and just do more QA". It's much more efficient to have skilled people create high-quality base product (by doing code inspections, writing test cases, only working reaonable hours etc. etc), so there's less defects to catch.

      Just like the problem with much of US food industry is thinking it's ok to get shitty (literally) meat or eggs from farms, and then "fix" this in processing plants. And as a result there's lots of E.Coli and Salmonella problems that could have been prevented by making sure farmer's keep animals clean, and they get properly transported in clean conditions. (there are examples of how to do it right way, in, say, scandinavian countries if you want references).

    6. Re:What he says by UncleFluffy · · Score: 2, Insightful

      Another Samuri joined the group only for the love of the craft.

      Too right. I'd rather hire one person who loves what they do than five monkeys who regard it as "just a job".

      --

      What would Lemmy do?

    7. Re:What he says by jvkjvk · · Score: 2, Insightful

      I find that the problem is that you generally will have a hard time finding someone (read: a company) to pay you to build "your application in painstakingly slow fashion".

      You might write bullet-proof code, but if you finish after the product ship date announced by Marketing, you will be out of a job.

      The same goes for work-for-hire. If you come in with an proposal for 6 months, and quite a few other people come in with proposals for 2-3 months, do you really think that they are going to pick you because you craft beautiful software?

    8. Re:What he says by TimeZone · · Score: 2, Insightful
      We're all going to die and the apps you pump out - in the grand scheme of things - will be ultimately forgotten. So don't you think it would be better to leave something beautiful behind in the world, if only to fulfill you? (and by doing so, fulfilling the people you love)
      There's something to be said for finding a job you like and are good at and can contribute to society through, but I don't think that jobs necessarily are how you should make your mark on the world. Perhaps, I'm old-fashioned, but I think that's what families (and propagation of genetic material) are for.
    9. Re:What he says by LionKimbro · · Score: 1
      You're right that there is no magic pill because truthfully, you don't need it.

      Sure. But you must understand, it is the nature of Samurai to seek out a better technique where they can.
    10. Re:What he says by Shaleh · · Score: 3, Interesting

      my experience in corporate America is that the bit bangers APPEAR to be more productive but are actually less or even counter productive. If programmer A takes 2 hours to code a crap solution and 3 days to fix it versus the craftsman who take 2 days to do it once and do it right, programmer A looks good initially but becomes a liability.

      A friend of mine is definately the tortoise, slow as it goes, programmer type. Some of the younger hackers mock him. But if you look at the total output he comes out on top because he spends far less time debugging. Managers need to understand that simple output is an invalid measure and look more at the whole process. This is especially valid in places that do a devel cycle followed by a cleanup cycle. The friend I referenced earlier often spends the cleanup phase of projects helping the bit bangers out because he has nothing else to do.

    11. Re:What he says by pVoid · · Score: 4, Insightful
      While I respect your attempt at entering this playing field, I think it is a bit out of your league.

      IMHO, the major problem about software in the past decade has been people's association of "oh, I can compile a C file" with "I'm a software developer". To me, anyone who hasn't gone through the final 5% of a massive project, the crunch before the deadlines that usually ends up being a death march for many, has no clue as to what is *really* involved in software engineering.

      Think of it this way, any family man or woman can cook a decent meal. My parents always cooked very well actually... That doesn't make them chefs.

      Anyone can cut down a tree in their back yard. That doesn't make you a lumberjack. In fact, after having seen what lumberjacks do and go through, I'm just amazed at how they still do those things.

      In the grand scheme of things, nothing counts. Not the bus driver, not the stock broker on wall street, not the lawyer, not even the judge who overrules a court order... and no, not the apps [we] pump out either. It doesn't change the fact that there is definitely an art and technique involved in it.

      I agree with some things you say, and I really am not answering to you in particular. Yes, there is no magic pill, and yes this guy sucks for trying to reinvent the wheel, *yet again*.

    12. Re:What he says by Anonymous Coward · · Score: 3, Interesting

      If coding is tedious and you don't like building your application in painstakingly slow fashion, then maybe you should find a craft which better addresses your passion, or at least try and be patient with yourself as you grow. Each project, in my humble belief, should allow you to grow as a craftsmen until you reach that nebulous peak of perfection.

      As a programmer by day, I'd love to take my take my time and perfect my work, but we have these silly little things called budgets, deliverable dates, constantly changing requirements, and way too many incompetent coworkers.
      Programming is not like building stuff in the real world. There are only so many 'features' people will ask for in a picnic table, but for a piece of software its virtually infinite. There is no perfection because no-one can agree on what perfection is for any significant application.

    13. Re:What he says by Dixie_Flatline · · Score: 2, Interesting

      I'd like to respectfully disagree. There are some software houses out there that care about quality as opposed to timely release. Frankly, most game companies with AAA titles are like that. Game release dates are pushed back all the time. It's because attention to detail in a good, high quality game is generally important to a shop like BioWare or Blizzard or Epic.

      So, the software buying market also often rewards those who work the hardest and make the best games. Usually. There have been a lot of good games that have failed and a lot of bad games that have done much better than they deserved. But the good games usually have the same meticulous attention to detail. Don't dump on coders that work for commercial companies. A lot of us try to do a good job. :)

    14. Re:What he says by gid-goo · · Score: 2, Funny

      I call bullshit on this. I work for and have worked for game companies. Producing AAA titles. For consoles and PC. Game companies are some of the best examples of what NOT to do in software development. Project management is non-existent, any kind of thought towards software architecture doesn't exist, rewriting every possible goddamn wheel they can is par for the course. Blizzard is the exception! Neverwinter Nights was a buggy piece of shit. All of the Bioware games have had significant crash problems in fact. Epic? WTF? Are you high? Unreal2 sucks. Not to mention the source code. Anyone who has bought the engine can tell you, its terrible. Not 3d Studio terrible, but not good. Blizzard is the only thing you got right there. They're big winners (for real).

      Most game companies are concerned with getting shit out the door. If your entire company depends on 1 title being released every 2 or 3 years and selling like crazy you want to release. Plus after 2 or 3 years no one cares. Especially, since most games end up in some inane death march due to the aforementioned lack of project management or any sane person with a clue as to how software design should take place.

      Note to all, if you want some beautiful examples of how a software project can totally be fucked up by lack of coders turned managers without any clue what their doing, look at the game industry.

    15. Re:What he says by gbjbaanb · · Score: 1

      Well, I think you've got it right - although not for the point you were making ;-)

      All those Samurai you were on about - the analogy is that none of them had day jobs, all of them were involved in Free Software projects.

      Nobody *works* for the love of the craft - except junior programmers who havn't yet realised what a 9-5 every day for ten years does to you - but those who work on free software, they do it for love of that project, respect from their peers, etc etc. They are the samurai in this story.

      BTW, they all died in the end. So much for Linux saving the world ;-)

    16. Re:What he says by Anonymous Coward · · Score: 2, Insightful

      Apparently, I'm a freak among freaks. When I write a program, I go out of my way to make it modular and readable. Sure, I sometimes take twice as long to write a single program as others, but most of the time my "time to production" is less than 1/2 of others.

      Why? Because I can easily test each component. If the component doesn't work, I can rip it out and plug a new one in that does.

      In other words, "Keep it simple, stupid."

      Ah, who am I kidding. The toughest thing in programming is simplifing the task. If you can figure out how to reliably break the task into simple, managable, testable, easy-to-understand chunks, you've got the problem solved. If not, you will end up with spaghetti-code before production.

    17. Re:What he says by Dixie_Flatline · · Score: 2, Insightful

      Yeesh, that's pretty harsh.

      Neverwinter Nights, I felt, was actually pretty good. It's a big effin' engine. It just won an award at GDC for excellence in programming. A group of our PEERS decided that the job that we did was quite good, and I agree. As for these 'significant crash problems' I don't know what you're talking about. I played BGII all the way through 5 or 6 times, and don't remember having an exceptional number of crashes. I don't really remember it crashing at all, actually.

      Unreal 2 is a fine game, if you ask me. I played that all the way through a couple times, and it never crashed. The game worked as I expected it to. I'm really not at all sure what you're talking about.

      As for project management and software architecture, I can assure you that we've got a metric assload of it. There may be better managed projects in the world, but I've found the management on my project quite exemplary.

      Note to all: I'm not sure where this guy works or has worked, but I'm not entirely certain I believe ANY of his story.

    18. Re:What he says by throbbingbrain.com · · Score: 1
      So don't you think it would be better to leave something beautiful behind in the world, if only to fulfill you?

      I agree 100%! Unfortunately, it never seems to fit into the corporate business model...
    19. Re:What he says by throbbingbrain.com · · Score: 4, Insightful
      To me, anyone who hasn't gone through the final 5% of a massive project, the crunch before the deadlines that usually ends up being a death march for many, has no clue as to what is *really* involved in software engineering.

      A well engineered project won't have a deathmarch or crunch at the final 5%.
    20. Re:What he says by pVoid · · Score: 2, Insightful
      Not true.

      It is a 'well known fact' (whatever that means) that the last 10% of a project takes 90% of the effort.

      We all know it's not a fact, it's just humour to a certain extent, but the point is that tying up a project and delivering something complete is something very far from someone doodling a raytracer together over the weekend.

      What makes software good isn't the ability to make the core of the functionality work somewhat. It's the ability to make the whole work seemlesly. You know it just as well as I, if you are a software engineer, that in those last 5% the 'boys' get distinguished from the 'men'.

      PS. this is not a troll or flame. I'm seriously saying what I think.

    21. Re:What he says by pVoid · · Score: 1
      PS. I said "the crunch at the final 5% or death march for many". I didn't say "the crunch or death march at the final 5%".

      Any software project, unless extremely lavishly funded will have a crunch at the end. In fact, I'm about ready to assert that any adequately funded project in whatever field it may be will have a delivery crunch. It's routine. I'm not even talking about overtime etc. I'm talking about stress running high, adrenaline pumping, egos flaring. It's in those times that professionalism can make or break the product.

    22. Re:What he says by gid-goo · · Score: 2, Interesting

      Sweet, I'm not super interested in putting out there where I work as I'm kind of disgruntled as you might read from my email.

      As far as problems with Neverwinter Nights and Baldurs Gate. I got a little carried away, sorry. Didn't mean to harsh on your mellow. I played BG and BG2 and had a fair number of crashes. They were good roleplaying games. They weren't great software. BG1 had patches that invalidated old save files, crap like that. But I was overly harsh. Put it down to a crap ass morning due to general incompetence in the software engineering field here at ye olde game studio

      As far as unreal2? The sheer monotony of the level design, ugh. It's pretty, yes, but boring as shit. I don't think Unreal (which was fun as hell)or Unreal 2 are bad as far as crashing and bugs go. I've just heard (and seen) the engine code that licensees get isn't so hot.

      That being said, I stand by my comments on software engineering in the game industry. Hell, at GDC when the software engineering shit comes round, everyone is hot in the pants about windows debugging hooks! WTF? Unit testing, all of the crap, no interest. But debugging hooks, hell everyone is all over that. I don't know your project. I'm assuming you work at Bioware, I have no direct experience with anyone who works there. I can say that most studios I've been involved with aren't real pinnacles of solid engineering. And while game programmers think they're the bomb, they're usually a bit behind the curve. This is IMNSHO. :)

    23. Re:What he says by vroomfondel · · Score: 1

      It is a 'well known fact' (whatever that means) that the last 10% of a project takes 90% of the effort.

      Unfortunately, the first 90% of the project also takes 90% of the effort.

    24. Re:What he says by Anonymous Coward · · Score: 1, Insightful

      Too right. I'd rather hire one person who loves what they do than five monkeys who regard it as "just a job".

      Perhaps the question should be, would you rather hire one monkey (a zoo animal) who seems to love programming than five people (non-zoo animals) who just do the daily grind?

    25. Re:What he says by RetsamYthgimla · · Score: 3, Insightful

      This will change eventually, or at least it should. When people hire contractors to come in and fix their house, they don't always go for the lowest bidder who will finish faster.

      If you want your walls painted, do you hire the guy who costs $500 and takes two days, or the guy who costs $300 and takes one day.

      The first guy guarantees that he will use a coat of primer, two coats of paint, and that he will fix any defects, though there probably will be very few if any.

      The second guy guarantees that there will be paint on the wall.

      Yeah, there's cheap bastards out there that will go with the second guy, but most people would go for the first one.

      But in this society, people don't care about the quality of technology. They don't want two coats of paint; they don't want the right color and right finish; they don't even care if there's a coat of primer. They just want paint on the wall. That's one of the many, many reasons that the dot-coms failed. And at some point, people are going to have to start caring. I hope, anyway.

    26. Re:What he says by kfg · · Score: 4, Informative

      My family used to employ two carpenters. One was the gung ho type, always rushing around, cutting up boards, hammering, always on the go *doing* something. He was also relatively cheap.

      The other guy was the typical old New England carpenter. Rarely spoke, and then in as few words as possible. He moved painfully slowly, almost like he was drugged. It seemed like he never did *anything*. If you walked in on him unexpected 19 times out of 20 you'd find him chewing on a pencil and staring out in to space.

      He also cost twice as much as the other guy, so we were paying twice as much an hour to "get less work out of him."

      Well, come the end of a project guess who turned out the most "product" for the least money?

      Yep, the old slow guy. Think twice cut once works.

      What's more, the stuff "Old guy" did is still standing strong 35 years later, and still drawing comment about the beautiful craftsmanship in our house.

      Mr. "Works a lot"'s stuff has all had to be torn out and redone, in more modern, and thus more expensive, dollars.

      I used to be head mechanic in the largest bicycle shop in New York State's Captial district. The boss would look at new bikes I put together and whistle, declaring, "I should charge every customer $10 for your assembly jobs."

      Then he'd go out and hire some hack (literally, a cab driver) to throw bikes together for $5 each. Then he'd sell the bike, and with an impatient customer waiting ask me to "prep it."

      Any bike I built didn't need "preping." If I put it on the floor it was ready for Lance Armstrong to get on and ride out the door.

      These cabbie built bikes I had to take apart and reassemble, a job that took three times longer than had I been assembling them out of the box, while a customer stood tapping his toes. And the boss had to pay my high hourly to do this.

      At one point I went to him and said, "Look, how about letting me assemble all of the bikes and you charge ten bucks *less* for them. You'll save money."

      He never did get it.

      I don't work there anymore.

      For the most part, and I realize there are exceptions, being a craftsman means being selfemployed.

      It's a rare boss who really pays you for the value you bring to the company. What they really want is people who make "the fur fly," even if all that does is make a bloody mess.

      KFG

    27. Re:What he says by Anonymous Coward · · Score: 0
      The same goes for work-for-hire. If you come in with an proposal for 6 months, and quite a few other people come in with proposals for 2-3 months, do you really think that they are going to pick you because you craft beautiful software?
      Look at Jesse James building motorcycles. People will sacrifice a lot for quality.
    28. Re:What he says by Dixie_Flatline · · Score: 1

      Heh. Well, fair enough.

      To be fair to Unreal 2, the programming seemed rock solid. What the designers DO with the programmed result isn't really in the scope of this discussion.

      I suppose I probably also have a skewed view of the industry, 'cause BioWare is the only game company that I ever worked for, and it's obvious here that attention to programming detail is a super-high priority. Releasing on time is a priority for the company, just less of a priority than shipping a good game that people will enjoy.

      Has anyone here seen the Id engine code? I haven't, but I'd be interested in hearing about how well IT'S laid out, since it's usually something of an industry standard.

    29. Re:What he says by Fnkmaster · · Score: 1

      Hey pVoid, where do you live? Because your comments are always pretty spot-on. Got a resume handy? :)

    30. Re:What he says by rufo · · Score: 1

      Which means that, ultimately, I'm putting in 180% of my total effort.

      Jesus Christ, I need a raise.

      --
      My English teacher once told me that two positives don't make a negative. Two words for her: Yeah, right.
    31. Re:What he says by melee · · Score: 1

      They may have died.

      But they won.

    32. Re:What he says by HalfFlat · · Score: 1

      Having worked for a game developer for a bit (but not any more), I can vouch for the sad state of software engineering, project management and management generally in at least one company. Talking to peers and browsing the likes of Fat Babies indicates that if not the norm, it's certainly wide spread.

      We made a great game, but it was in spite of, not because of, the engineering and management practices. It is worth noting that every employed programmer from that game has since left the company. Good people, but bad practices. I still hope they can turn things around, but I'm not holding my breath.

    33. Re:What he says by Jester99 · · Score: 1

      Has anyone here seen the Id engine code? I haven't, but I'd be interested in hearing about how well IT'S laid out, since it's usually something of an industry standard.

      You can download it yourself for DOOM, Quake, and I believe Quake 2.

      I'm just an amateur programmer, however I downloaded the DOOM source when it came out and poked around at it. Very clean and readable. Made a lot of sense to me. Don't know how well the newer (and much more complicated) games look.

    34. Re:What he says by Anonymous Coward · · Score: 0

      True, true. And when computer software and hardware design become embedded in our lives to the point where it's life or death (literally) if they do or don't work 99.99% of the time, THEN we'll get quality coded computer designs. Until then, expect to be out in the proverbial rain, cranking the proverbial starter of the proverbial Model-T of computing.

    35. Re:What he says by marhar · · Score: 2, Interesting
      Another Samuri joined the group only for the love of the craft.

      Yeah, and this is the guy who ends up dead... :-(

    36. Re:What he says by leshert · · Score: 1

      You obviously don't work at a company that either makes the division that produced the code also provide support, or cross-charges customer support to that division.

      I do.

      I feel bad for you, your employer, and your employer's stockholders.

    37. Re:What he says by MountainLogic · · Score: 1

      There is one thing that seperates games from most other software; games are one off and are intended to updated. Code just does not need to be maintined. There are exceptions to this, but the business model is to burn through an idea and start again from scratch when the next platform comes out.

    38. Re:What he says by jo42 · · Score: 1

      ...and that is why so much software out there is crap!

    39. Re:What he says by PurpleWizard · · Score: 1
      Being involved in a death march doesn't make you a software engineer, just probably a mug for sticking it when management fail rather than leading a coup and deposing them.

      I speak as someone who works under the banner Software Engineer on a few projects where I should have staged the coup!

      Machiavelli Software Limited (not really just in case there's a real one with hot lawyers out there. It's a joke alright!)

    40. Re:What he says by Anonymous Coward · · Score: 0

      No. No. No.

      It's not that they don't care, it's that they care about different things than you do. Follow the dollar, hop the clue train.

    41. Re:What he says by pyrrho · · Score: 1

      Calling ReconRich,

      The internet bubble has burst. Time to market over quality was a part of that bubble.

      message over.

      PS: to be serious, you do have a point, and time to market will always be important, but it's not the "time it takes me to have something I can put in the market" it will return to being "the time it takes to put together something that WORKS, and get it to market."

      --

      -pyrrho

    42. Re:What he says by Doubting+Thomas · · Score: 1

      A quote I use frequently, when discussing software, schedules, and code bloat:

      "I apologize for the length of this letter. If I had had more time, I would have written a shorter one."

      -Mark Twain

      --
      Just because it works, doesn't mean it isn't broken.
    43. Re:What he says by Anonymous Coward · · Score: 0

      Rich, I agree with all of your points, except that I happen to be fast because I am a craftsman.

    44. Re:What he says by TobiasSodergren · · Score: 1

      I'm not convinced that creating quality code = doing it slowly. Especially if the code has to be maintained or made to fit another project. Clean code combined with a good design tend to be easier to create, use and maintain. At least, that's my experience.

    45. Re:What he says by Anonymous Coward · · Score: 0

      Wouldn't it have been cooler if Neo took the blue pill, continued searching for the meaning of the matrix, led a hacker underculture to fight the system from within, not really understanding how sometimes he could understand the code by which the world operates, and not knowing if Morpheus was a terrorist or savior, and they cut that whole incredibly stupid politically correct "Maya Angelou lies to Jesus Anakin" bit, and then at the end of the movie we learn what reality is.

      Loss: We never hear the phrase, "there is no spoon"

      Gain: A really kick ass sequel that *everyone* would be waiting outside to see, even now, even in Seattle.

    46. Re:What he says by Anonymous Coward · · Score: 0

      go spend some time in the real world. The only difference is that picnic tables are harder to change than software programs. And I guarantee no master carpenter could satisfy you if it were *your* picnic table.

    47. Re:What he says by veepher · · Score: 1

      This reminds me of a poster at a very large UK organisation i used to be seconded to, who were in the business of very large software proeject development and implementation;
      on time
      first time
      every time
      *next* time

    48. Re:What he says by Bush+Pig · · Score: 0

      Actually, I think the original attribution of the quote is Blaise Pascal.

      --
      What a long, strange trip it's been.
    49. Re:What he says by Anonymous Coward · · Score: 0

      I find it truly sad when I find other programmers talking down to people like you are. Programmers, for whatever reason, think that because they can write good software, they deserve to be able to turn their noses up at people. The truth is, many non-professional programmers do a better job at programming than even the professionals. Why? Because programmers get very lazy after a few years of programming, especially the ones who look at it as just another paycheck and have no passion for it. The bottom line is, you have got some serious pride you need to deal with if you think you can determine someone's ability to program just by reading a posting they wrote in which they say that they know how to program. People such as yourself ask really moronic questions at job interviews and are shameful to the software community in general! (go to techinterview.com for a good example of moronic "programming" questions).

    50. Re:What he says by pVoid · · Score: 1
      Well, first off, I made it very clear that I wasn't denigrating him.

      Recall, I said "regardless of how well you cook, it doesn't mean you're a chef." This applies to software too, regardless how well you program, doesn't make you a software engineer.

      In fact, I know a lot of good programmers, brilliant minds, who just aren't good when it comes to commercial software engineering. The contests they have at places like MIT only show one side of the beast which is software engineering... and that is (and I quote myself again) "to compile a C file". Software engineering requires *many* more skills, such as accountabiltiy, team play even when you don't like your team, estimation estimation and more estimation skills, being able to tone down your pride and speak rationally when told in a meeting that your idea/code doesn't work, perseverance, coming through with your responsabilities, did I mention estimation? And many many more things like knowing how to be able to concentrate on demand (as opposed to sitting down at your desk when you want to)...

      For all I care, this guy could have invented SSH2, the math, and the open source library behind it, it doesn't qualify him as a software engineer.

      Like I said, only people who have delivered multi million dollar projects, and have lived through the last 5% of those, are qualified in my eyes.

      But like I said, this guy might make the best friggin Veal Sautee man kind has ever seen...

      PS. What's with AC? chicken?

    51. Re:What he says by pVoid · · Score: 1

      I tried emailing you man, that anti-spam armoring sure works well, heck, it even fooled me! =)

    52. Re:What he says by CoolGopher · · Score: 1

      Please tell me where you work. If you have well engineered projects I'd dearly like to work there for a change!

    53. Re:What he says by KewlPC · · Score: 1

      They didn't *ALL* die. Two or three of them lived, and they "won", if you could call it that (see the movie and you'll know what I mean). Stupid farmers ;)

  5. Huh? by sulli · · Score: 5, Funny
    Instead I found myself angry at the author for his strawman arguments, illogical conclusions, unfounded assertions, and irrelevant asides.

    Don't read slashdot much, eh?

    --

    sulli
    RTFJ.
    1. Re:Huh? by Anonymous Coward · · Score: 0

      or watch US news?

    2. Re:Huh? by Ponty · · Score: 1

      I was about to bitch at you snidely, then I remembered that you're right. Very sad.

  6. Modernisation? by immybaby · · Score: 1, Interesting
    McBreen offers up a method of working patterned on craftsmen of old, with a basic breakdown of master craftsman, journeyman, and apprentice.

    Problem is, these days, most of the code would be written by journeymen, even the king's most mission-critial software (i.e. Windows, upon which the modern world is based).

    1. Re:Modernisation? by Aumaden · · Score: 1
      The problem with Software Craftsmanship is that it is not what Bob & Alice Average want.

      They want features. They want pretty whiz-bang interfaces. They want (or at least tolerate) talking paperclips. If it crashes or hangs every so often, so be it.

      If they really wanted Craftsmanship do you really think Windows would be where it is today?

      -- Aumaden

  7. Read Pragmatic Programmer by bokmann · · Score: 5, Informative

    I have read this book.

    While I liked it, and found it a nice framework in which to hang many thoughts on, I would recommend 'the Pragmatic Programmer' by Andy Hunt and Dave Thomas over this book. McBreen actually quotes that book so often in this one that I often wondered, "so, what was the point of this book then?"

    1. Re:Read Pragmatic Programmer by Anonymous Coward · · Score: 0

      I would recommend 'the Pragmatic Programmer' by Andy Hunt and Dave Thomas

      Is that the late Wendy's founder or one of the MacKensie brothers from SCTV?

      Either way, it is impressive that one of those would write a book on computer programming.

    2. Re:Read Pragmatic Programmer by bokmann · · Score: 2, Informative

      Oh! I should also recommend "After the Gold Rush", for arguments on the opposite end of this spectrum. This is also a fantastic book that helped me form my own conclusions.

      That book is currently out of print, but the author has a website with the contents of the upcoming second edition.

      http://www.stevemcconnell.com/gr2.htm

    3. Re:Read Pragmatic Programmer by cybermace5 · · Score: 5, Funny

      I would recommend 'the Pragmatic Programmer' by Andy Hunt and Dave Thomas over this book.

      Such a multi-talented man Dave was. I still prefer Wendy's over any other fast-food restaurant. So the 'Pragmatic Programmer' has an extra-spicy approach to coding?

      *ducks*

      --
      ...
    4. Re:Read Pragmatic Programmer by mcgroarty · · Score: 1

      Begging your pardon, but I think you forgot the funny on this one.

    5. Re:Read Pragmatic Programmer by gorilla · · Score: 1

      The Wendy's guy wrote a programming book?

    6. Re:Read Pragmatic Programmer by cybermace5 · · Score: 1

      I agree, but who am I to argue with the mods?

      --
      ...
    7. Re:Read Pragmatic Programmer by cschmidt · · Score: 1

      Dave also gave a very convincing and Oscar-worthy performance in Strange Brew.

      --

      Who am I to blow against the wind? -- Paul Simon
    8. Re:Read Pragmatic Programmer by mcgroarty · · Score: 1
      Oh ho, dear sir! And I do stand corrected.

      We both got a +5 Funny today. It's a regular LOLocaust!

    9. Re:Read Pragmatic Programmer by pyrrho · · Score: 1

      want to impressed by versatility, read some of Michael Jackson's books, like "Problem Frames".

      He's a much better systems analyst than he is musician. Or... it might be two different people (namespace collision).

      --

      -pyrrho

    10. Re:Read Pragmatic Programmer by tpv · · Score: 1

      Artima has a couple of recent interviews with Andy+Dave that are worth reading.

      --
      Read more of this story at Slashdot.Read more of this story at Slashdot.Read more of this story at Slashdot.
  8. Well then by Anonymous Coward · · Score: 2, Interesting

    What books WOULD you recommend, if this one sucks rocks?

    1. Re:Well then by archeopterix · · Score: 1
      What books WOULD you recommend, if this one sucks rocks?
      I have only read the review, not the book, but judging from the review, "Peopleware : Productive Projects and Teams" by Tom Demarco & Timothy Lister could be recommended instead of this one. Focuses on people, not the process, the authors' assertions are well proven (Hm... Ok, well argumented) and it is fun to read. I'd write more, but I can't access the book right now.
    2. Re:Well then by Anonymous Coward · · Score: 0

      "Ok, well argumented"?

      WTF is argumented?

      try: well argued

  9. I believe that by teamhasnoi · · Score: 0, Flamebait
    I am the new owner of your crappy house. Thanks a lot.

    Great work with the cheap paneling covering all the holes in the plaster too.

    Bastard.

  10. personal attacks by adamruck · · Score: 0

    for a book review that seemed to have alot of personal attacks against the auther... but overall I found it to be interesting and well written

    --
    Selling software wont make you money, selling a service will.
    1. Re:personal attacks by TopShelf · · Score: 3, Insightful

      Quite the contrary - there isn't a single personal attack in the review. The content of the book and its assertions are pretty much torn apart, but there isn't any slam directly on the author...

      --
      Stop by my site where I write about ERP systems & more
    2. Re:personal attacks by adamruck · · Score: 0

      . Instead I found myself angry at the author for his strawman arguments, illogical conclusions, unfounded assertions, and irrelevant asides.

      hmmm

      Where does he get this stuff from? Did I read that right, he thinks formal software engineering would complain about too many code reviews? I must have missed that issue of IEEE Software.

      The review talks about the book almost intirely in terms of the author, instead of in terms of the content.. so yes I stick to my position that there are personal attacks in the review.

      --
      Selling software wont make you money, selling a service will.
    3. Re:personal attacks by cjpez · · Score: 1
      there isn't a single personal attack in the review
      Except maybe this one?
      McBreen's entire premise is flawed because he doesn't seem to understand what software engineering is.
      *ahem*
    4. Re:personal attacks by tim_maroney · · Score: 1

      A statement in a review that an author does not seem to understand an important point is legitimate criticism, not personal attack. In this case the reviewer goes on to substantiate with numerous examples the author's apparent comprehension gap.

    5. Re:personal attacks by cjpez · · Score: 1

      Well, I'd argue that it is both legitimate criticism and a personal attack. :) "He doesn't seem to understand what software engineering is" is very different from saying "The book doesn't show an understanding of what software engineering is."

    6. Re:personal attacks by Ponty · · Score: 1

      Well, the author wrote the book. So the author is at fault for its failings. So it's quite sensible to blame the author for straw man arguments and unfounded assertions. You can't go blaming anyone else (unless you're a White House advisor, then it's likely Saddam Hussein's fault.)

      Attacking the author would be more along the lines of "I found myself angry at the author for being such an ugly WASP."

      And why should people pardon bad spelling? Typos are fair, bad spelling is evidence of lack of caring.

    7. Re:personal attacks by sbeitzel · · Score: 2, Insightful

      I dunno, that didn't look like a personal attack to me. Sure, one could interpret it that way, but think about it: all the reviewer has to go on is the material. If the material asserts that software engineering is X and then later on the material presents software engineering as z, theta, and epsilon, each of which is !X, then the only conclusion one can come to is that the material does not present a consistent description of software engineering and the author of the material either doesn't know, or changed his mind several times and didn't edit well.

      --
      Oh, go on, check out my job.
    8. Re:personal attacks by cjpez · · Score: 1
      and the author of the material either doesn't know, or changed his mind several times and didn't edit well.
      Absolutely. I dig it. I still hold, however, that bringing these things up in a book review constitutes a personal attack. When you mention the author's shortcomings, you've moved into doing an "author review," not just a book review. But we're just playing semantics here, and I don't even really care. :)
    9. Re:personal attacks by tim_maroney · · Score: 1

      I think we're agreeing vigorously here, as they say, but please allow me to expand just a bit on the issue, and on why I don't think the phrase "personal attack" is appropriate here.

      The understanding, talent and abilities of an author are legitimate subjects in a review of the author's work. A review may be a criticism but it need not be an attack. Some statements which in other contexts would rightly be considered personal attacks should not be considered personal attacks when they appear in reviews.

      This could go too far, of course. The personal criticism may have nothing to do with the work under discussion ("he's a crappy tennis player as well as being too ignorant of math to write on quantum physics"), or commit the ad hominem fallacy (e.g., "so and so's manifesto is idiotic because he smells like a yak"). However, reasonable concerns about the author's grasp of the subject are fair game.

      Yes, criticizing an author's understanding -- euphemistically or not -- could be considered a personal attack under a strict definition, but it is not a personal attack that necessarily merits disapproval. Disapproval is implicit in the phrase "personal attack," and that part of its connotation doesn't apply to this kind of review comment, so I think it's misleading to call it that. But yes, I will grant that strictly speaking it is a personal attack, as well as being legitimate criticism.

    10. Re:personal attacks by cjpez · · Score: 1

      And with that, gentlemen, we have officially spent entirely too much time on such a trivial bit of fluff. :P I recommend a healthy dose of Robocode to purge the evil from our systems...

    11. Re:personal attacks by doingstuff · · Score: 1

      Short comings of the author can affect the review of the author's book. This isn't poetry. It's like the creditability of a witness can affect his/her testimony.

      I worked on a project that the author created. Without projects like that I would not be employed. A team of programmers (craftsmen or not) made it architecturally sound. I truly hope that not all the projects the author coded was like the one I worked on. I never meet him but his reputation perceives him - Talks the talk but no walk.

      In the context to the project I worked on, the author has no creditability and can/will suffer from personal attacks. The lack of creditability will be fuel for the downfall of the book.

      [the author of the material either doesn't know, or changed his mind several times and didn't edit well.] - all three

  11. Hammer != Compiler by viper21 · · Score: 3, Interesting

    We can buy trashed houses and fix them up to our hearts content... will these new Software Craftsmen also be open source advocates?

    It would be pretty hard to repair the shoddy 'windows' on our 'house' if they are all licensed by Microsoft.

    -S

    1. Re:Hammer != Compiler by jra101 · · Score: 1

      > Hammer != Compiler

      No, its the Integrated Development Environment ;)

      --
      I write code.
    2. Re:Hammer != Compiler by Anonymous Coward · · Score: 0

      This post to be framed and hung in the Metropolitan Museum of Obvious Karma Whores That Still Got Modded Up.

  12. lameness detected by stock · · Score: 0, Flamebait
    writing a bad article or book can happen, but slashdot pointing and drawing attention for such publication is just lame.

    Robert

    1. Re:lameness detected by mugnyte · · Score: 2, Insightful

      you must be trolling. you only want good reviews? get over the "any press is good press" phobia.

    2. Re:lameness detected by stock · · Score: 2, Funny
      woho, the author of the book is doing moderation too? :)

      Robert

    3. Re:lameness detected by jridley · · Score: 1

      Reviews are not supposed to be just to point out what's good so you can also enjoy, they're also to point out the bad so you can save your time and money. Do you feel that everyone should have to read every book on a subject to find the few gems? Personally if I want a book on a subject, I ask around to see what is good and what's bad. What's bad is at least as important; I hate to spend $30+ on a book and find out it doesn't even make a good doorstop.

  13. Meta-Programming books suck by graveyhead · · Score: 4, Informative

    There is only one book that preaches a methodology that I have found useful (and I have read several), and it is more of a programmers cookbook than a strict methodology. Design Patterns from Gamma, Helm, Johnson and Vlissides. It gives you exactly what you need as a programmer: the ability to communicate volumes of information about your system to me with a few key words. For example, if you tell me that your logging system is a Singleton object, I immediately understand its' place in your system and how to use it.

    --
    std::disclaimer<std::legalese> sig=new std::disclaimer; sig->dump(); delete sig;
    1. Re:Meta-Programming books suck by adamruck · · Score: 1

      yes.. I totally agree... if you understand data structures properly.. armed with a design patterns book even the largest most obscure projects can be written much more smoothly

      --
      Selling software wont make you money, selling a service will.
    2. Re:Meta-Programming books suck by Hayzeus · · Score: 1
      I'll second your opinion on this book, although it's really not a methodology book in any way, shape or form. As your subject line states, it's more "meta-programming".

      Methodology books aren't completely useless, provided you avoid slavish adherence to any one approach. The best approaches to software development have to take into account not only the actual task at hand, but also indirect (often economic in the case of commercial development) factors: expected life cycle, cost targets, hard release dates, etc. I have yet to find a single methodology that does this for me, although I have been able to take away useful ideas from some.

    3. Re:Meta-Programming books suck by Anonymous Coward · · Score: 0

      It was a good start, but is too widely regarded as the be-all and end-all of software patterns. Jim Coplien has some pretty damning criticism of the cargo cult that this book has become. Hint: get some Gerald Weinberg in your bookshelf, start with "An Introduction to General Systems Thinking" if you can find it anywhere.

    4. Re:Meta-Programming books suck by thanuk · · Score: 2, Insightful

      For example, if you tell me that your logging system is a Singleton object, I immediately understand its' place in your system and how to use it. All from the knowledge that there's exactly one instance? That's impressive

    5. Re:Meta-Programming books suck by Dhericean · · Score: 2, Informative
      I'm not sure if it counts as preaching a methodology (or just giving lots of good advice) but the book that I still find useful (and reread every year or two) is "Writing Solid Code" by Steve Maguire.

      Even though it is written by an ex-MS programmer and from MS Press it is a very good book. Maguire worked for them before they tried to take over the world. His "Debugging the Development Process" is a bit more preachy and less useful (but still a good read).

      --

      Gamma Testing - Where testing is extended to the full user community (AKA Shipping the Program)
    6. Re:Meta-Programming books suck by CrazyLegs · · Score: 3, Interesting

      Patterns are way too overused for my tastes. They speak to structures and themes rather than methodology. As well, they are not too useful in framing up a users requirements. Rather, they present a design lingua franca for programmers. So, while they are interesting to think about, patterns (to me) are much more of a rear-window view of design.

      --

      CrazyLegs

      "Pork!!" said the Fish, and we all laughed.

    7. Re:Meta-Programming books suck by David+Kennedy · · Score: 4, Insightful

      _Design Patterns_ is not a methodology book. Say it with me, "Design Patterns is NOT a methodology book."

    8. Re:Meta-Programming books suck by Hayzeus · · Score: 1
      Patterns are way too overused for my tastes.

      Patterns are always used when just about anyone writes code, unless the writer is doing something completely novel. The movement behind the whole pattern thing is simply to publish these, so we don't have to constantly re-invent the wheel. As such, patterns aren't something that's simply "interesting to think about".

      Framing user requirements is another animal altogether and has nothing to do with design patterns at all, except to the extent that the patterns chosen will depend on the design of the software, which in turn depends (ultimately) on functional requirements.

    9. Re:Meta-Programming books suck by Tablizer · · Score: 1

      I think the Gamma et al Pattern thing is overhyped, and us relational fans think many parts of such patterns can be reduced to compact formulas instead of code templates. IOW, make patterns virtual instead of physical code structures.

      However, a bigger question to ask about patterns is why they have to be *duplicated* instead of referenced? A truly high-level language or programmer should just be able to reference an existing pattern by name in their code rather than copy the "shape" by hand into a code structure. Thus, I sense a factoring problem in the Gamma approach. The abstraction level or technique is not high enough to deserve praise as revolutionary. At best, it is a stop-gap approach.

    10. Re:Meta-Programming books suck by lobsterGun · · Score: 1

      It doesn't necessarily have anything to do with design paterns. But if you liked Design Patersn, you'll probably like this essay. The law of leaky abstractions.

    11. Re:Meta-Programming books suck by Bodrius · · Score: 1

      Although it is possible to overuse Design Patterns, it is rather difficult and I have yet to see the case where this is a problem.

      What you say about them not being useful to frame up user requirementes, however, is completely true. Neither are flow diagrams. Why should they? Neither tool is supposed to be about "framing up user requirements".

      Design Patterns is something to be used at design/implementation level. It's a set of higher-level idioms that stand at different levels above the "source code idioms" (like classes, functions, control structures, etc) and actually connects them.

      They are meant to be used when you're looking for ways to solve a problem, which means you already figured out what problem you need to solve.

      How or why should they be useful when creating the requirement specification escapes me.

      --
      Freedom is the freedom to say 2+2=4, everything else follows...
    12. Re:Meta-Programming books suck by Rary · · Score: 1
      "They speak to structures and themes rather than methodology"

      Um, that's because...... they're not a methodology.

      Every programmer uses a pattern, whether they realize it or not. The point of studying design patterns is to be aware of them, and how best to use them, and how to identify which ones to use, and when.

      Methodologies, on the other hand, are not used by every programmer. That's quite unfortunate.

      --

      "You cannot simultaneously prevent and prepare for war." -- Albert Einstein

    13. Re:Meta-Programming books suck by pyrrho · · Score: 1

      well, tablizer, having read your arguments about OOP your comment is not suprising.

      But consider... Design Patterns is a logic book, it's about logical relations, and coupling, loose and tight, about references, linked, embeded, direct and indirect.

      They are not templates. That is, you can impliment a pattern using SQL and C if you so desire! The implimentation is left for your (or some vender that wants to serve your needs), and that's the way it should be.

      Actually Design Patterns (not talking about other pattern books, just Design Patterns) is probably the best book for you in particular as it doesn't say that OOD is the be all end all. In fact, when they give their example of a OO parser, they specifically say this is not the best way to build a parser, there are more efficient and standard structured approaches, and the pattern is presented to investigate the logic and functional relationships involved.

      --

      -pyrrho

    14. Re:Meta-Programming books suck by IWannaBeAnAC · · Score: 1

      Yeah I read Gerald Weinberg's "Phycology of Computer Programming" ages ago, 1989 probably. The terminology was dated even then (it was written in the early 70's I guess?) but the ideas were spot on, and relevant. Indeed, a programmer who followed that book today would probably produce better code than "average". Sigh, shows how far we've come in the last 30 years...

    15. Re:Meta-Programming books suck by IWannaBeAnAC · · Score: 1

      Anyway, what I was really going to ask ;) is, are any of his other books any good?

    16. Re:Meta-Programming books suck by Tablizer · · Score: 1

      They are not templates. That is, you can impliment a pattern using SQL and C if you so desire!

      Some of those patterns do seem specific to C++ and/or OOP. Plus, why not include C and SQL versions in the book then? Why just cater to OOP? Paradigm Bigotry?

    17. Re:Meta-Programming books suck by pyrrho · · Score: 1

      there is paradigm bias... they understand data and functions as coupled, there is an OOD bias, but not bigotry.

      Just as there is a bit of a C++ bias, but that's just a pragmatic factor.

      The way Design Patterns handled coupling issues is very interesting. They don't say something like sickOOPs say, "decouple everything" "abstract everything", etc., but they tell you ways to decouple, and give insight on the benefits and costs of certain kinds of dependencies from a purely logical point of view.

      Why not a C+SQL pattern books... well, there is room there for such a book. Problem: the "patterns" area of books is a sick wasteland, Design Patterns isn't just the shining star, it's practically the only decent example (though no doubt someone can point me to some exception, this is imho, ymmv).

      --

      -pyrrho

    18. Re:Meta-Programming books suck by Tablizer · · Score: 1

      Well, if somebody wants to fund me to write a Relational Patterns book, I would be happy to start.

      sick OOPs say, "decouple everything" "abstract everything", etc.,

      Coupling is something to manage, not totally eliminate. Coupling allows you to treat things as a group rather than have to manage them at a naked granularity. Encapsulation is a form of coupling, for example. As far as what "abstraction" is and whether OO does it better, don't eeeeven get me started.

    19. Re:Meta-Programming books suck by pyrrho · · Score: 1

      as far as getting you started, I've read some of your exposition on this.

      I don't say that OO does it better, I think this book, Design Patterns, which happens to be a part of OOD, deals with the subject matter appropriates. It does not advocate an extreme, it advocates and understanding of the implications of different kinds of relationships.

      And the reason why is exactly what you mention, understanding the implications of various kinds of relationships (aka coupling between components) is what's important, so that in each case you can decide what you need. Tight coupling is good in some cases, loose in others. And of course, there is gradiant from one extreme to the other.

      On the other hand, I do think in terms of OOD, but not in the way you think of OOD. My OOD is much more pragmatic than the OOD that seems to have become a pet peeve of yours.

      Believe me, I know what irks you in the sense that there certainly is a class of OOProgrammer that give OOD a bad name. That is, bad designs defended as good because they are object oriented.

      --

      -pyrrho

    20. Re:Meta-Programming books suck by Tablizer · · Score: 1

      On the other hand, I do think in terms of OOD, but not in the way you think of OOD. My OOD is much more pragmatic than the OOD that seems to have become a pet peeve of yours....Believe me, I know what irks you in the sense that there certainly is a class of OOProgrammer that give OOD a bad name.

      Well, if you could document and articulate exactly why your pragmatic approach is better then either procedural/relational or the heavy-handing OOD stuff, that would be nice.

      The problem is that everybody compares with emotions and feelings instead of something more externally observable.

      It appears to me that people select whatever best models their own head, and then assume it is universal.

      A related problem is that people perceive change patterns differently. Thus, they gear their code for different kinds or flavors of future changes than what I do.

    21. Re:Meta-Programming books suck by pyrrho · · Score: 1

      that's an interesting challenge, I might try to do that.

      Your emphasis on change, and the design representing one's anticiplation of change is very interesting and more or less exactly how I design.

      I find object oriented syntax convenient. Perhaps I can give you a more detailed explanation at some later date.

      --

      -pyrrho

  14. From recent experience by phorm · · Score: 5, Insightful

    I've seen a lot of apps - especially web-based ones - that look great and are coded like crap. The problem with somewhat simpler languages, especially scripting languages, is that the ease of learning the basics often leads to some very undereducated programmers.
    I don't consider myself a "professional" Perl programmer, though I've had several years experience, but even I can see when a large system is made up of a lot of little shyte.
    Another thing one might notice in particular, is on group-programmer projects. The interface coding might be very nice, and then when one goes the the back-end modules that query mySQL DB's, etc... it's obvious that it was a different and less experienced programmer.

    When I start seeing things like:
    $stuff[1], $stuff[2]
    $blah
    etc
    it scares me. If code isn't going to be commented, at the very least the variables can be intuitively named so as to make sense, and using arrays of hard-to-determine crap for no reason is just bad (at the least, use named hashes, or just normal vars).

    1. Re:From recent experience by Daimaou · · Score: 1

      My experience has been that interfaces tend to look very nice, and underlying code tends to suck not only on group-programmer projects, but also on single programmer projects.

      The conclusion that I have come to accept as the truth, or a close enough approximation, is that pointy-haired, computer illiterate bosses want a product. If a developer goes in and shows the boss or manager a really nice piece of MySQL connection code, the boss' eyes are going to glaze over and a girly tantrum is likely to emerge. However, if the same programmer shows the boss a beautiful facade (meaning a nice GUI with absolutely no guts at all), the elastic in the boss' underpants is likely to get catapulted across his overly large office (unless of course 'he' is a woman).

      Once the facade is in place, the boss or manager begins itching to ship the product, so the developer(s) now have to rush to cobble together some underpinnings for their nice facade. And there you go; crap code.

      Not all software projects I've worked on, or been involved with in some way, have been like this; however, more than enough of them have.

    2. Re:From recent experience by Zordak · · Score: 5, Funny
      Actually, bad variables are great job security. Right now, I'm working on a utility that will take your finished code and replace all of your good, intuitive variable names with "varXXXXXXXX" and remove all of the comments. It saves a password-protected "undo" state, so that as long as you are on the project, the code is maintainable. As soon as you get canned for somebody cheaper, Mr. No Experience goes crying to mommy.

      Version 2.0 will replace all of your comments with your phone number and an increased salary demand.

      --

      Today's Sesame Street was brought to you by the number e.
    3. Re:From recent experience by digerata · · Score: 1
      If code isn't going to be commented, at the very least the variables can be intuitively named so as to make sense, and using arrays of hard-to-determine crap for no reason is just bad (at the least, use named hashes, or just normal vars).

      If code is going to be commented, you are fired. Solves that whole issue. What's so difficult about that?

      --

      1;
    4. Re:From recent experience by Anonymous+DWord · · Score: 4, Funny

      How To Write Unmaintainable Code never gets old.

      10) Åccented Letters: Use accented characters on variable names. E.g.
      typedef struct { int i; } ínt;
      where the second ínt's í is actually i-acute. With only a simple text editor, it's nearly impossible to distinguish the slant of the accent mark.


      and:

      15) Names From Other Languages: Use foreign language dictionaries as a source for variable names. For example, use the German punkt for point. Maintenance coders, without your firm grasp of German, will enjoy the multicultural experience of deciphering the meaning.

      --
      "If he thinks he can hide and run from the United States and our allies, he's sorely mistaken." Bush on bin Laden
    5. Re:From recent experience by Anonymous Coward · · Score: 0

      Yeah, I was on a project last summer where the original code used a lot of things named like:

      char tempString1[ 1024 ], tempString2[ 1024 ];
      char *buf; ...and so on.

      I'd say programming is a skill analogous to driving in any industrialized nation. Many people can do it, but few people do it well. I offer up the current ADO.NET syntax as a perfect example of driving while stoned, drunk, late at night in bad weather and suffering from the acute runs...all at the same time.

    6. Re:From recent experience by Khomar · · Score: 2, Funny

      I have seen something much like this. I was going through some directories of a previous employee whose code I was inheriting, and I came across a directory filled with SQL scripts. They were all named:

      z.sql
      zz.sql
      zzz.sql
      zzzz.sql
      zzzzz.sql
      ...
      all the way to zzzzzzzzzzzzzzzz.sql. I kid you not!
      --

      I believe in de-evolution. God made the world perfect, man fell, and its been going downhill ever since!

    7. Re:From recent experience by phorm · · Score: 1

      Often enough I'm not the one writing the code... it's code coming from other sources or projects. Those that wrote code within my organization did a nice, neat job of it.... it's adding features to/fixing the imported stuff that gives me a huge headache.

    8. Re:From recent experience by Pfhreakaz0id · · Score: 1

      He just wanted to make sure they floated to the top of the alpha-sorted directory list, descending.

    9. Re:From recent experience by Khomar · · Score: 1

      True, but what on earth are these scripts supposed to do? You could not tell except by opening them one at a time and examining the code (which was uncommented).

      --

      I believe in de-evolution. God made the world perfect, man fell, and its been going downhill ever since!

    10. Re:From recent experience by refactored · · Score: 1

      So who is going to need that? Isn't all code like that already?

    11. Re:From recent experience by Doubting+Thomas · · Score: 1

      Yes, exactly.

      I've actually gotten to the point where I refuse to deliver mockups. The very earliest thing you will see from me is a functioning prototype, and even that makes me nervous. I generally aim for delivering the application in vertical slices, so that there is no, "Oh, it all looks okay to me, let's ship it", because there is no 'all' yet.

      --
      Just because it works, doesn't mean it isn't broken.
    12. Re:From recent experience by IWannaBeAnAC · · Score: 1
      Hey don't laugh, multilingual variable names are not uncommon in some areas, especially in crufty old Fortran 77 code given to you by your eastern European colleagues.

      The fish doesn't help much either :-(

    13. Re:From recent experience by pi_rules · · Score: 1

      When I start seeing things like:
      $stuff[1], $stuff[2]
      $blah
      etc
      it scares me


      I have you beat. $foo. Seriously... $foo was a variable used in projects at my last company repeatedly. It was -THE- global structure for CGI applications. I don't know how this started, or who did it, but it irked me to see it the first time. I eventually got used to it, but never adopted the practice myself.

      Don't get me wrong, I'm okay with cute varialbe names. I'm probably the worst at this really. I hated VBScripts inability to short-circuit a conditional, so when I had to work around it with a temporary loop boolean variable you'd see stuff like:

      Dim blnVBSSucks ' Workaround for non short-circuting conditionals.
      or
      Dim blnTimmay ' This language is so retarded I had to pick a dumb name to work around the non short-circuting conditionals.

      etc.

      Professional? Perhaps not, but it kept me slightly entertained while working overtime on the weekends. I'd have to say it was more professional than the code I was replacing though. In one instance the previous programmer had used an include directive to pull in all his 'Dim' statements.. all 600 global variables to the script with desriptive names such as I1, I2, I3.. I54, R1, R2, R3...R54, etc.

      I'm glad I don't code anymore :)

    14. Re:From recent experience by enomar · · Score: 1

      I recently saw a coworker get passed over for a promotion. A senior programmer leaves, so he first gets promoted into the vacacy taking on a whole new set of systems.

      When they hired a new kid to take his old spot, the kid complained that he couldn't use any of the old code.

      They did a review of the guy's code, and it was all the same. It operated okay, but was completely undocumented and unmaintainable. They forced him to document the old code, and by the time he was done, they gave the new systems to someone else and put the kid to work for him.

      --

      :wq
  15. That's why they call it "Review" by NickFusion · · Score: 2, Insightful

    and not "Advertisment."

    --
    What were you expecting?
  16. Must be a freshman... by flynt · · Score: 3, Funny

    It sounds like whoever wrote this review just got done with Philosphy 100 at the local community college and is eager to show off his/her stunning analytical abilities by bringing up every single fallacy mentioned in the class. It probably gave him or her a sense of accomplishment or something.

    1. Re:Must be a freshman... by machinegestalt · · Score: 3, Funny

      Ad hominem! bad! :D

    2. Re:Must be a freshman... by IIRCAFAIKIANAL · · Score: 1

      Someone please moderate the parent post down. He can't even type in complete sentences! =]

      Incidently, aren't all the spelling nazi posts technically ad hominem attacks? Doesn't change the fact that reading a string of eazy to spall words speled incorractly is anoying as hell though...

      --
      Robots are everywhere, and they eat old people's medicine for fuel.
  17. Hoffa by Hellraisr · · Score: 1

    I think he's trying to set himself up as the Hoffa of software development land

  18. Another article by McBreen by Target+Drone · · Score: 4, Interesting
    For a little humor people should also check out his article on How to Crash and Burn your Java project

    Also, it may be hard to believe but having worked with Pete on the project that was "Crashed and burned" I can testify to the fact that the article is in fact non-fiction.

    1. Re:Another article by McBreen by Anonymous Coward · · Score: 0

      The most important thing you have to do in order to crash and burn your Java project is to ensure that nobody who knows anything about OO design gets to work on the project. The easiest way to do this is to hire cheap, fresh out of school "Java wannabe" programmers and give the design job to someone who has never delivered an OO application.

      Java wannabe == apprentice?

      If that strategy fails and you get given a real designer make sure that some really junior programmers are assigned the task of "assisting with the design". If you do this really well your designer will be too busy helping the juniors to actually manage to do any design.

      Apparently, the master craftsman doesn't have enough time for the journey man/apprentice.

      Hypocracy to boot...

    2. Re:Another article by McBreen by kisrael · · Score: 1

      Heck, I have a method for How to Crash and Burn your Java project that fits on one line. Two words, in fact:

      Use EJBs

      Seriously, I have heard of 4 or 5 major failures and no major successes with these things. Entity Beans are about *the* most complicated and complex way of doing O/R mapping, there's very little you can do with Session Beans that can't be done with static functions (stateless) or regular objects (stateful), and the best practices with business delegates and facades gives you like 5 or 6 layers for anything you want to do. And benefits like clustering? Hell, everything goes back to a single RDB anyway.

      Seriously, I can't see any benefit to EJBs that you can't get with regular Java and a good understanding of the more common patterns.

      Anyone agree/disagree?

      --
      SO YOU'RE GOING TO DIE: The Comic for Dealing with Death
    3. Re:Another article by McBreen by Fnkmaster · · Score: 4, Interesting
      Yup, you're pretty much on the money. If the goal is transparent scalability, maybe you should first focus on making a system that is efficient (i.e. you don't need twenty computers in a cluster to run it), and reliable (with EJBs there are often so many extra things to break that they end up being less reliable). There are better O/R mapping tools out there, some of which are even free (Castor). The last project I worked on basically ended up eliminating entity beans and using almost exclusively stateless session beans. At which point we realized we were pretty much using no features of the EJB container exception transactionality at function call boundaries. Not that this is so hard that you need all that complexity to address it - a much simpler framework could provide declarative transactionality.


      Of course, we couldn't eliminate EJBs entirely, because our customers really wanted it to run with the Weblogic 6 licenses they had bought (woe befalls he who tries to explain that if you are going to use EJBs, you might as well use JBoss since it's a ton faster and generally more reliable than Weblogic, and pretty well supported through their online forum). But then again the customers wanted to know they could call Weblogic with a problem - of course, Weblogic would never really be able to help them anyway (I know, I've tried their "support").


      Yup, basically I would never use EJBs in pretty much any project I can think of again, since they just don't solve enough problems to be worth the pain and hassle. What they DO provide, and the reason people use them, is an application "blueprint" for teams without a decent architect to solve their structural problems. It's just possibly the worst such model imaginable, and it's truly sad that this model has caught on. If you want a framework for a truly distributed, reliable, scalable framework, Jini and, say, JavaSpaces provided MUCH more interesting options, but had no corporate acceptance. If you had REAL problems that require a distributed framework, this was the way to go, since EJBs have absolutely no awareness of the location remoteness features they provide built in (resulting in a potential mess of RMI shit in all but very, very simple systems). Which, in short, is why everyone ends up scrapping entity beans.


      Ugh. Thanks for reminding me why the enterprise software business sucks so much. :)

  19. Software Engineering is different in Purpose by etcshadow · · Score: 4, Interesting

    Contrary to what the author of this review is saying, I really do think that software engineering is different from software craftsmanship. Although you can take many of the things said about software engineering and come up with an application of them similar to an application you could come up with for software craftsmanship, but in practice you wouldn't. This is because the underlying philosophies are very different, and they exist for different purposes. The philosophies/purposes break down like this:

    Software Engineering: make the development of software a controllable business process.

    Software Craftsmanship: make the best software.

    The basic notion of software engineering is to create a *process* which is so perfect that no personal weaknesses in your programmers can hurt the company. A subtle side effect of this is that it also tends to prevent any extremely great individual contribution from having a large impact. That is, the goal is to make all of your coders cogs in a machine. The business owners and managers would much rather have this setup because it makes it easier for them to sleep at night.

    --
    :Wq
    Not an editor command: Wq
    1. Re:Software Engineering is different in Purpose by haystor · · Score: 1

      I agree completely. The only problem is that I haven't seen a a seamless business process yet. Personally, I want ultimate flexibility in my coders and systems (in a business coding project).

      If I were coding phone switches, software engineering would be the proper approach. If there is a bug, its in the code or the switch was built wrong. Once built, the switch will always perform the same way.

      In business there are few guarantees that aything will stay the same. What's more, its rare that an process that is already in full swing has been captured perfectly. This is because there are people involved. These people do things like make special deals with special customers. I'll take my pick of 5 coders and jump straight into coding versus 20 software engineers trying to keep up with rapid changes in a large business. There definitely needs to be more doing and less planning.

      --
      t
    2. Re:Software Engineering is different in Purpose by Anonymous Coward · · Score: 0

      "Software Engineering: make the development of software a controllable business process.
      Software Craftsmanship: make the best software."

      These are not mutually exclusive objectives.

      "A subtle side effect of this is that it also tends to prevent any extremely great individual contribution from having a large impact. "

      This is fallacious. The great individual is set up as a toolsmith, lead, mentor, etc. Also has more input into the standards used by the team.

      Unless you're at home, coding in your skivvies, it is a team.

    3. Re:Software Engineering is different in Purpose by pmz · · Score: 2, Insightful

      The basic notion of software engineering is to create a *process* which is so perfect that no personal weaknesses in your programmers can hurt the company.

      This is a very dangerous notion, and I disagree with it.

      Engineering is about creating technology. It's unfortunate that most "Software Engineers" are clueless doe-eyed grads or uneducated bureaucrats, but that is a symptom of the overall immaturity of the industry. It's unfortunate that the overall credibility and quality in the software industry is so poor that people impose soul-less processes to eliminate risk.

      Look at engineering firms like the Skunk Works or early NASA, who produced tremendous technology in an almost absurd amount of time. With the cogs-in-a-wheel method, these organizations would still be making paper airplanes and the sound barrier would be a finger in the ear!

      Even with RUP, Extreme this-and-that, CMM, whatever, nothing can replace individual talent in an engineering project, and absolutely nothing can completely remove the risk associated with these talented individuals.

    4. Re:Software Engineering is different in Purpose by ddimas · · Score: 1

      So basicly what you are saying is that Software Engineering is a mass production process, and sotware craftsmanship is an artistic process.

    5. Re:Software Engineering is different in Purpose by etcshadow · · Score: 1

      Well, I'm not saying "engineering bad" or any such nonsense. I just mean to say that what people generally refer to as "software engineering", in practice, is about making programming into an assembly line. It arrises from one fundamental difference between software production and any other kind of industry... and that is that there is nothing really separating the prototype from the product.

      You see business people (classicaly) thought of their engineers as the people designing the product and their manufacturers as the people producing the product. They could, grudgingly, separate the two notions. However, in software, the design *is* the product, like in architecture, for example. However, big business thought processes are very invested in the notion of the assembly line. Thus, they start to see their programmers as the assembly line instead of the engineers (in the clasic sense of the product designers).

      Anyway, that's the notion I was delving into. There is certainly real engineering involved in creating software, but the business term "software engineering" carries some heavy connotations of turning programmers into cogs.

      --
      :Wq
      Not an editor command: Wq
    6. Re:Software Engineering is different in Purpose by jvkjvk · · Score: 1

      The problem with "process" is that it can almost always be subverted by personal weaknesses in your programmers.

      I submit that a process "so perfect that no personal weaknesses in your programmers can hurt the company" would sink the company by it's weight.

      Such a process would have to include more than the checks and balances of test first design, pair programming, archetectural, code, design reviews, automated test suites, etc., etc., ad nauseum.

      We certainly don't have that perfect process so far, and I doubt we will in the near future.

      I think the real notion of software engineering is to create a repeatable process. One where, if you follow it, you can say things analogous to, "we need concrete pilings driven to a depth of 100' to suport this building", for every step of the process.

      This begs the question as to whether building software is more like building a bridge or planting a garden. As far as I know, gardening has not risen (or sunk) to the level of engineering.

    7. Re:Software Engineering is different in Purpose by renehollan · · Score: 3, Interesting
      As with many things, the software "engineering" vs. craftmanship dichotomy is not completely black and white.

      Whereas engineering is about reproducable, and measurable processes that can be constrained within certain bounds, craftmanship is about being able to build things that serve a purpose.

      To some degree a craftsman will delve into a standard repetoire of tricks and techniques to get a job done, reflecting the "engineering" aspect of the job. However, what makes a craft interesting is that no two assignments are alike, and the job-specific problems, and how they are solved separate the master from the novice, not mere knowledge of a larger repetoire of canned solutions to known problems.

      Because programming is such a young discipline (as opposed, say, to building buildings, bridges, or even airplanes), there is a log of original craftmanship involved in most projects. When a design pattern is found to be useful, it is catalogued, communicated, and often finds generic implementation in some piece of code, or higher-level programming language -- application-specific languages, or languages "tuned" to be particularly useful for certain applications reflect "software engineering": we've solved this problem, this is the general approach, and here are the parameters within which this solution works. A design pattern, implemented, becomes a "rough in" of a piece of code.

      What this means, of course, is that the repeatable stuff becomes engineered, leaving only the "finish work" to be crafted. Leading edge programmers pushing the envelope of what the "finish work" is are thus craftspersons, and commensurate with the original work they do, notoriously unable to provide time, complexity, and labour estimates: when the job is done, they will know how long it will take.

      This, of course is frustrating to traditional management teams. For software is not like a house. The interesting stuff, and the stuff that sells as the next "killer app" is precisely the stuff that no one has yet produced, reducing it to a low-margin commodity, instead of the "hot" program it is. And this stuff is not engineered -- it is crafted.

      Software patents and copyrights ensure artificially high value for what would otherwise be commodity software, restricting its proliferation until it is ubiquitous, and commensurately high salaries for "assembly-line software engineers". Without them, the high-margin areas would be those of the leading edge, crafted code -- protected by copyright and patent for a short duration, perhaps, to encourage progression of the art, and recoupment of development efforts.

      Interestingly, some 95% of all code is not engineereed according to a simple blueprint, but custom-crafted, Microsoft Office sales duely noted. Even if you can buy all the pipe and fittings you need, a plumber to cut things to proper lengths is handy. If all commodity software were free, there would be plenty of employment for software craftspersons (on this, I agree with RMS). Software engineers, in the guise of assembly-line coders, would be relegated to the ranks to apprentice, or "do it yourselfer". Perhaps when this happens, true software engineering, that is the polishing of a custom crafted design into a generic cookie-cutter component, understandable and consumable by the apprentice, will properly refer to the master software craftsperson.

      --
      You could've hired me.
    8. Re:Software Engineering is different in Purpose by syo · · Score: 1

      I don't think the author of the review is making this claim at all...in fact he begins by disclosing that the Craftmanship school of thought is close to his heart.

      The kaisyain claims that McBreen did not make a sufficient case in his book to distinguish between or successfully argue the case for Software Craftmanship over Software Engineering. kaisyain doesn't address the issue of differences between software craftmanship and software engineering at all.

    9. Re:Software Engineering is different in Purpose by DancingSword · · Score: 1

      Interesting this discussion of how engineering enforces, rather than embracing improvisation/creativity...

      A Pattern Language sought to destroy that enforcement pattern/assumption, decades ago...

      I'd find-interesting the CS/coder equivalent to it...

      --
      Messages to/for me ( in me journal )
  20. Interesting Software Engineering publication by CorporatePunk · · Score: 4, Informative

    Bruce Weide of the Computer Science Department of the Ohio State University has been working for several years on a way to introduce software engineering principles to first year computer science students. It's an interesting read (albeit one that was forced on me for my classes) and is available for download here in pdf format.

    1. Re:Interesting Software Engineering publication by Anonymous Coward · · Score: 0

      yea, but as one who helped develop part of that discipline, I can say its only partially useful in application.

  21. Comparing programming to "real world" endeavours by binaryDigit · · Score: 5, Interesting

    I always find it amusing to read about people who try to compare programming (or software engineering, or whatever) to things such as house building, or even more general like "master craftsman", apprentice, etc. One of the biggest problems facing developers today is the overwhelming complexity of the software being created and the environments they are being created in and the pressures of getting said software done in a particular timeframe.

    If one MUST use some real world analogy, then imagine wanting to build a dresser. You come up with the requirements, must have four drawers, have certain dimensions, be made with a certain type of wood and be stained to look a particular way. So you start buying lumber. But wait, no one carries just the right type of lumber you want, so you run out and cut your own tree down and make the lumber yourself. You decide to dove tail the drawers, but the dove tail rig you have doesn't quite fit, so you kinda work around it and get "good enough" dove tails. Uh oh, you never checked with your wife on those dimensions, she wants something 6 inches wider, gotta take those drawers apart and make wider ones, do you cut more trees down, or do you patch an add on to the existing pieces? That last one put you behind schedule, so now you don't have time to actually check your work completely as you go and your carpenter friend Bob has a baseball game to go to, so he can't help with that tricky scroll work you need to do, guess you'll just go online and just copy what someone else has done. etc, etc.

    Not to mention that few software projects have such simple requirements. This dresser has to actuall fold the clothes for you, let you know how many socks are present, pick your wardrobe for the day AND it has to look pretty, interface nicely (dooh, made those knobs too small to grab), etc, etc.

    And lets not forget one of the biggest project killers, you decide to build this dresser with four of your friends, each doing a different part. And dang it if those drawer openings are too small. And the trim around the edges are 1/4" smaller than the trim used for the mirror, and those pilot holes are 3/8" but your using 5/16" screws.

    You get the picture. Nothing like this happens in the real world, software is a completely different beast and to contrain it by using realworld analogies might push a few books, but it's not making software engineering or the software being produced any better.

  22. What I tell my group by jackjumper · · Score: 5, Insightful

    I run a small software group writing control code for semiconductor processing equipment. I read a lot of literature and what works for my group is:

    - code reviews on every check-in
    - lots of refactoring
    - incremental releases
    - constant testing
    - individual 'craftsmanship'

    So what do I tell my group? I tell them "any piece of code you write you should be proud to show at a job interview."

    And I lead by example.

    1. Re:What I tell my group by Dalcius · · Score: 2, Interesting

      I applaud your way of doing things; if I were in charge, I'd say the same thing, to a point (programs that are used rarely don't need to be perfect, IMO). However, given my experience with other programmers who take the "Go go go go go, done. Next?" approach to their assignments, I find that work gets done quickly, gets out the door and gets good money in relatively short time. Whether the expense of paying people like me (I'm a Software Analyst, I fix software problems [lots of code surfing]) is worth it in the end, I don't know, but I do stay quite busy.

      Managers, deadlines, revenue, program flexibility... how are these affected by your way of doing things? What has been your experience with this?

      --
      ~Dalcius
      Rome wasn't burnt in a day.
    2. Re:What I tell my group by Anonymous Coward · · Score: 0

      That sounds great. You must have very understanding top level management. Unfortunately, most other organizations are not so blessed.

    3. Re:What I tell my group by Anonymous Coward · · Score: 0

      Doh, and you don't list an email address.
      So much for applying to be part of your team. :(

      Oh well. Unemployment isn't so bad; at least I have the opportunity to try some of my ideas. :-)

    4. Re:What I tell my group by Andrewkov · · Score: 1

      Tell them that if they write crappy code, you'll post it on Slashdot so we can all laugh at it!

    5. Re:What I tell my group by jackjumper · · Score: 1

      What a great idea!

  23. No big surprise here by fw3 · · Score: 5, Interesting
    1. That McBreen is a co-author of 'Questioning extreme programming'

    2. That the /. review(sic) is incomplete, biased and (imo) less useful than the reviews on Amazon/BN.

    His credentials seem ok, the excerpts looked interesting and relevant and I think his approach is a viable one (which is not to say it's the only or best one for any given circumstance).

    Modern software engineering(sic) doesn't seem equal to the challenge that many (cough-MS) organizations developing software emphasize absolutely as many features as can be crammed into the deployment space, with reliability criteria seemingly like "if it's not so unstable that the customer will ask for his money back, we ship it".

    Ok that's the current market and goodness knows people keep buying and writing bloated, buggy software is by no means limited to commercial/priprietary, it's become all too common in free/oss projects also. (See my related views about that).

    The mantra that seems to drive the market is "More features". Personally I beleive the best programs result from the alternate view: "The best program is the smallest program that fits the need".

    So wherever the statement "If buildings were constructed the way software is constructed, the first ant to come along would destroy civilization overnight" remains true, I think the applicability of "software engineering" is (nil).

    --
    Linux is Linux, if One need clarify their dist: <Dist>/GNU Linux
    bsds are of course just BSD
    1. Re:No big surprise here by Azghoul · · Score: 1

      I don't think the reviewer is commenting at all on the "benefits", one way or another, of a craftsmanship approach as opposed to the standard engineering view (that doesn't seem to be working).

      If fact, it sounded like the reviewer really wanted to find something new, maybe even a little "holistic", and didn't find it in this particular book.

      I think, rather, that the reviewer is commenting on his opinion that the book sucks rocks and doesn't do a thing to advance the author's arguments, nor does it sufficiently explain how one might go about becoming a 'craftsman' as opposed to "just" an engineer.

      Totally separate things, I think.

    2. Re:No big surprise here by aserra · · Score: 1

      I have to agree...especially with the comment on the drive to "More Features". I think I read a quote somewhere speaking about M$ Word that if one would set a million monkeys in front of a million computers all running Word, they would not be able to find, let alone use, all of the features available. We currently live in the era of feature bloat. As developers we have perpetuated this by agreeing to deliver whatever the "customer" wants no matter how ludicrous the want. The "customer" also bears some responsibilty in this, but we are usually looked ot as the experts.

  24. Don't like the term "Craft" by tfriedlich · · Score: 2, Insightful

    Come on, it's more of an art. What's better than constructing an elegantly written piece of code. Granted, most programs are closer to a "Cathy" comic strip than a Piccasso, yet there is something so nice about the occasionally beautifally crafted script.

    1. Re:Don't like the term "Craft" by Junks+Jerzey · · Score: 1

      Come on, it's more of an art. What's better than constructing an elegantly written piece of code.

      But at the end of the day, you get paid for code that works, not code that's artsy.

    2. Re:Don't like the term "Craft" by jstoner · · Score: 1

      Actually craft is a better term than art. Art is art for art's sake, craft is art for life's sake. Frank Lloyd Wright once dismissed a complaining client, saying that if the roof didn't leak, there wasn't enough art in the building. Please tell me you've never said such a thing to your customers.

      --

      'In knowledge is power, in wisdom humility.'
    3. Re:Don't like the term "Craft" by pod · · Score: 1

      No it's not art. You don't write code to create art, but to create functional applications. If at the end of the day some of your code can be positively appreciated by a very select few, bonus. It's, say, like an appliance, or a TV. It's designed for a certain task, and may look pretty, should even, belong in a museum of modern art, but sorry, it ain't art.

      I agree with the view of programming as a craft. It'll probably never be an exact science, not until computers can program themselves (but then you still have the underlying code). It will probably never be like engineering either. Sure, the processes and approaches and stuff at the project level will be more structured and defined, but ultimately the individual programmer will at best follow a function spec, beat out some code, and return what amounts to a (hopefully) well documented black box. Code that works around library and system bugs, is optimized in certain places, and follows the programmers thought pattern. It's problem solving, even though the problem has already been solved, at a higher level though.

      I would argue programming is much more like a craft than anything else.

      --
      "Hot lesbian witches! It's fucking genius!"
  25. Look. by Boss,+Pointy+Haired · · Score: 4, Interesting

    There is no magic bullet or even way of thinking that is overnight going to make IT projects run on time and on budget.

    Software Engineering has a substantial creative component to it that is far more akin to music or art than to other forms of engineering.

    And just like music or art;

    * a few of us are REALLY GOOD

    * some of can perform the programming equivalent of playing "Three Blind Mice" on the piano

    * and some of us SUCK.

    Trouble is, in the IT industry, as opposed to other creative industries, there is little salary difference between the three.

    1. Re:Look. by MmmmAqua · · Score: 1

      There is no magic bullet or even way of thinking that is overnight going to make IT projects run on time and on budget.

      Amen. Unfortunately, most publishers would find it difficult to sell a book entitled "This Book Will Not Magically Solve All of Your Software Development Problems".

      Software Engineering has a substantial creative component to it that is far more akin to music or art than to other forms of engineering.

      Agreed, however... the substantial creative component is utterly useless without at least a modicum of technical proficiency. I once watched my younger brother, who has an amazing talent for music, pick up a violin for the first time ever and, after a few quick plucks, play a Johnathan Kingham (JK rocks, BTW, another amazingly talented musician) tune off the cuff perfectly. On the other hand, I have never seen someone with the creative talent for programming, but no technical profiency (like even being able to explain what O(1) means) produce anything other than amazingly creative pieces of crap. My job allows me to influence the hiring of developers for my company, and I will approve an unimaginative bore with a strong technical skillset over a brilliant, dynamic, non-educated h4x0r any day. Why? Because I can depend on the bore, instead of hoping for a flight of creative fancy from the h4x0r to get a project in on time.

      And just like music or art;
      * a few of us are REALLY GOOD
      * some of can perform the programming equivalent of playing "Three Blind Mice" on the piano
      * and some of us SUCK.


      I have to say you're completely wrong here. The real list:
      1) Less than 1% of us are the Mozarts, Bachs, and Chopins of our profession. Think Linus, RMS, Gosling, etc.

      2) Less than 20% of us are talented and skilled, but not brilliant - Dave Matthews Band, Bob Marley, Norah Jones, so on and so forth.

      3) The majority of us have a modicum of talent, and the solid skillset to keep us working in this business. The bar bands and lounge acts of our profession - not making it big, but still making it.

      The guys who suck don't make the list because this is a profession and the people who really suck are weeded out fairly quickly. And no, just because somebody does things differently from the way you would do them, or uses a proven, solid technique rather than a tricky one, does not mean they suck. It means they have a different way of doing things. Deal with it.

      That said, it does seem that the people who suck are the most vocal about their 31337 sk1llz, and therefore the most annoying.

      import standard.disclaimer;

      --
      Arr! The laws of physics be a harsh mistress!
    2. Re:Look. by kevinkenan · · Score: 1

      In the music world, there certainly is a vast difference in the amount made by artists in each of the 3 tiers. However, I don't see much evidence that there is a correspondence between quality and income.

    3. Re:Look. by Anonymous Coward · · Score: 0

      >> I once watched my younger brother, who has an amazing talent for music, pick up a violin for the first time ever and, after a few quick plucks, play a Johnathan Kingham (JK rocks, BTW, another amazingly talented musician) tune off the cuff perfectly.

      I call Bullshit.

      Unless your brother played another string instrument before, there is no way he could do anything perfectly the first time on a violin. A piano I could see (if the piece was simple) since the keys are all arranged in musical order and are circumscribed (one key plays one note).

      On a violin, you can play the same note in different places and it is absolutely not circumscribed. Playing an A requires pretty precise placement of the finger. If you are off just a little, the note will be flat or sharp.

      Even a guitar would be easier than a violin since one fret equals one note (you can bend a string to go sharp however, and there are places where the same note can be played in 3 different places on the fretboard).

    4. Re:Look. by MmmmAqua · · Score: 1

      I call Bullshit.

      You obviously don't know many talented artists or musicians. My brother plays the piano, the guitar (now) and pretty much anything else he wants to. All he has to do to play an instrument is pick it up, knock out a few notes to get an idea, and that's all she wrote.

      --
      Arr! The laws of physics be a harsh mistress!
  26. Re: Singletons suck by Anonymous Coward · · Score: 1, Insightful

    Singleton has got to be the most over-used pattern ever. There are hardly any legitimate cases for a singleton, yet it's the first pattern anyone learns. They then go off and litter their code with the bloody things.

  27. Re: Singletons suck by graveyhead · · Score: 1

    Yes, Singleton is overused. My example of a logging system is one of the few times I have found it to be appropriate: you need logging from everywhere and it sucks even worse to instantiate an object when you need to write to a log.

    I use it as an example frequently, because it is the most simple pattern and the one everyone seems to understand the best.

    Personally, my favorites are the visitor and interpreter patterns.

    --
    std::disclaimer<std::legalese> sig=new std::disclaimer; sig->dump(); delete sig;
  28. Save your money... by C+A+S+S+I+E+L · · Score: 3, Funny

    ...and buy a copy of the "Extreme Craftsmanship" book that is sure to come out next year.

  29. Re:Holy shit! by Anonymous Coward · · Score: 0

    I have seen negative reviews here before. A handful of 8's and even a couple of 7's.

    Remember, anything under a 9 is a bad review.

  30. Not to be nitpicking and all..... by whazzy · · Score: 1

    ...but,what does the reviewer mean when he says, "the widow sashes were rotted away" Slashdot readers need to know,bcoz we cannot tolerate 'slepping' mistakes:-)!

  31. The house that love built by scotay · · Score: 3, Insightful

    We took to calling our ERP software that we we're responsible for supporting and customizing "The house that love built." It had a long history of many owners and installed base in critical production environments. Despite the desire to burn it to the foundation to fix it, we were limited by time and money. We had plenty of ugly interfaces that put the toilet next to the refrigerator, load-bearing posters, and if we ran out of floorboard, we weren't above painting the dirt.

    I sometimes wish we were working on an old house, as our house was flying down the street at the speed limit, and no one was willing to stop to make the required repairs.

    How much can craftsman programmers learn when their walkthroughs are confined to the sample home (development environment)? They rarely go near a lived-in home (production environment) and may have never talked to an actual homeowner (customer) in their entire career.

  32. Re:Comparing programming to "real world" endeavour by Anonymous Coward · · Score: 0

    Preach On! The only part missing is the fact that the wife changes her mind every other day about what she really wants...

  33. Widow sashes? by pnot · · Score: 2, Funny

    When you got up close, however, you noticed the paint was peeling, the widow sashes were rotted away,

    If my house were full of bereaved women wearing decomposing ribbons, I wouldn't be worrying about the peeling paint...

    1. Re:Widow sashes? by Anonymous Coward · · Score: 0

      ..wish i had points.. that was purdy dog gone funny.

    2. Re:Widow sashes? by Anonymous Coward · · Score: 0

      (Score: +5 Almost Made Me Pee Myself)

    3. Re:Widow sashes? by Anonymous Coward · · Score: 0

      Eww.. So if you were Pip, you would do Miss Havisham?

    4. Re:Widow sashes? by Anonymous Coward · · Score: 0

      You'll feel different once the paint has peeled of the widows' faces...

  34. Re:Comparing programming to "real world" endeavour by taeric · · Score: 1

    But it is attitudes like this that will cause you to repeat all of the mistakes already known by other professions.

    This is still my main gripe against acedemics in computer science fields. They think they need vastly new methods of teaching for these "new fields." While some adjustments are indeed necessary, please don't just try to reinvent everything. You can still use existing methodologies and such, but you have to understand them yourself.

    For instance, the dresser may be a bad example. But only because it is in a different scope. The dresser is part of a whole. Specifically, it is part of a place of residence. If you have a programmer and give him a huge unbreakable task (such as building a "project"), then don't be surprised when it doesn't turn out. Instead, realize that you should give individual programmers components of the whole program.

    My point, I guess, is that you can always come up with examples that don't work. The trick is finding the ones that do work, and taking advantage of them.

  35. Quality of crafted software by erikpearson · · Score: 1

    It seems to me where this book really falls down is here: whereas developers will always think of software development as an art, project sponsors do not. They have no way to place value on the quality of a system, including ease of maintenance and extension. This differs from other disciplines which are considered crafts, since consumers differentiate quality there.

  36. Re:Comparing programming to "real world" endeavour by binaryDigit · · Score: 1

    But it is attitudes like this that will cause you to repeat all of the mistakes already known by other professions.

    The dresser is part of a whole. Specifically, it is part of a place of residence.

    The trick is finding the ones that do work, and taking advantage of them.

    But that's the problem. It's NOT like building a house, only in the crudest sense. Currently we're still banging nails out of scrap metal. We're still lashing hammers out of sticks and rocks. There are lots of screwdrivers out there, but none seem to match the screws that we want, or force us into compromises that we don't think are good.

    What I'm getting at is that you can't use the concept of canning jellies into making a good pot roast. Apples and oranges. What makes things like house building and car building possible is that it's foundations are stable. Engine putting power through a piece of steel through a transmission, through another piece(s) of steel to get to the wheels. You can certainly tweek parameters, but the foundations are what they are. Software has yet to get to that point, and until they do, no amount of trying to apply physical world theories are going to make any dent.

    It's not like problem partitioning is anything new in software development, we've been doing that for years. The problem is that the problem grows at a rate that is faster than the solutions and those implementing those solutions. Imagine trying to be a house builder if the fundatmental nature of wood kept changing every five years. Or new materials were being adopted at that pace (first we use wood, now we use steel, now we use concrete). So I think that our problems are unique, not that existing theories can't be applied to "help", but something "different" has to happen to "fix".

  37. Re: Singletons suck by kin_korn_karn · · Score: 1

    Singleton has got to be the most over-used pattern ever.

    I agree, everyone's been ripping off "Boyz n the Hood" for years.
  38. Best Practices by gr8_phk · · Score: 1
    One thing in the review that caught my attention was the reference to best practice. Check out the MISRA guidelines for automotive software development. It's supposed to be derived from "best practices". They forbid a lot of things (pointers, recursion, anything too abstract) because green programmers tend to make errors using them. A craftsman would teach someone the proper use of such things rather than just avoid them entirely. So I'd have to agree with the book in this case and not the review - Published best practices are not necessarily craftsmanship, they are cost reduction efforts.

    1. Re:Best Practices by Anonymous Coward · · Score: 0

      Automative software have safety requirements... Their best practice is not necessary your. If you don't understand requirements, then go back to school.

  39. Craftsman/Journeyman/Apprentice not always great by Karl+Cocknozzle · · Score: 2, Insightful

    This may seem slightly off-topic, but bear with me, and the relevance will become clear...

    My family owns a home-improvement business (I don't work there now, but did summers during college) and often deal with builders who work on the principle described by the author.

    On more than a few occasions when I worked there, I would go to hang rain gutters (on new homes) and find all sorts of messes: Corners not square, roofing materials cut way too short or way too long, roof vent holes that have had shingles nailed over them, and even more idiotic and egregious mistakes than this--All of them perpetrated by either apprentices under supervision, journeymen or mastercrafstmen. Usually, it was the result of a project that was behind schedule and needing to cut corners to catch up.

    My point? It doesn't matter what "Quality Assurance" system you have in place if you set unrealistic goals and/or hire the cheapest labor you can get your hands on.

    --
    Who did what now?
  40. somebody mod this clown down by Anonymous Coward · · Score: 0
    Redwolves2 (Ralph Whitbeck) is at it again.

    A few months ago, whenever Slashdot ran a book review, he'd immediately post a link to Amazon.com. Whenever he did this, he included his Amazon associates ID.

    Many slashdot posters were disgusted by this parasitic behavior. Slashdot has a tough enough time generating revenue to stay afloat, and this guy was skimming the cream off of one of Slashdot's few revenue sources.

    I think somebody reported Ralphie to Amazon, because another AC threatened to do that, and then RedWolves2's links disappeared.

    But now he's back with a new trick. Rather than embed Amazon Associates links directly onto Slashdot, he's registered a site to do his dirty work.

    In today's review, he points readers to his page, which seems to exist for no other reason than to feature books reviewed on Slashdot. Naturally, Ralphie's never forthcoming about what he's doing. Neither his Slashdot posts nor his website informs readers of his affiliate profits.

    I worry that Slashdot will run out of revenue before it finds a viable business model. For all its faults, Slashdot is a valuable site. And it disgusts me to see someone like Ralph Whitbeck bleeding the site of potential revenue.

  41. condemned by moojin · · Score: 1

    using the analogy of the victoria house as a software project. my house would have been condemned from the first day that construction was begun.

    we have contruction workers, plumbers, electricians, etc who have no idea of what they are doing aside from two weeks of training and a manuals (which they refuse to read). (i must admit that i too started with a lack of knowledge, but have made an effort to increase mine by all means available.)

    it is a mess.

    andrew

    --
    Why did I lurk so long before registering for a Slashdot account? I could have had a Slashdot ID of less than 100000.
  42. forget the review by sbwoodside · · Score: 2, Interesting

    I haven't read the review and I'm not going to. The idea that software is a craft is right on. Managing a successful software project is much more about getting the right people on the job and trusting them to write good code, than it is about engineering practises. Software is invisible to anyone but the active coder. That's the whole point of good APIs -- they are very small, understandable interfaces to the invisible code.

    Since the code can't be seen, then it can't be engineered. I suspect that software will remain a craft until code visualization tools progress to the point where I can look at a visualization of someone else's code and understand it in a general sense almost immediately.

    simon

  43. Re:Comparing programming to "real world" endeavour by KillerCow · · Score: 1

    I always find it amusing to read about people who try to compare programming (or software engineering, or whatever) to things such as house building, or even more general like "master craftsman", apprentice, etc

    Whenever I hear an argument like that, it usually compares software to automotive companies. I like to remind them that if they want to use that comparison, then their automotive companies must be as adaptive as software.

    The functional requirements (not just styling) change every year. Your customer base expands by orders of magnitude every year, requiring more and more support. The environment that the product runs in (rails, roads, rivers... whatever) changes every two or three. The actually product changes every five years... changing from building cars to airplanes to submarines. The materials used to build the product are completely replaced every ten years. The consumable (fuel) that that product consumes changes every four or five years. And you have to do all of this in six to eight month product cycles.

    You can't rely on last years model to provide a base for next year's with all of those changes.

  44. Nope, never happens in the real world by A+nonymous+Coward · · Score: 1

    Like when they designed the last 4 US battleships, somehow two teams got confused on turret size, I believe it was for the 5" turrets, had to do some quick re-engineering to make them fit. No, nothing like that would ever happen in real engineering, noooo, software engineering is soooo special...

    1. Re:Nope, never happens in the real world by binaryDigit · · Score: 1

      No, nothing like that would ever happen in real engineering, noooo, software engineering is soooo special

      No, not that the errors don't occur, the nature of what is trying to be achieved doesn't happen in most other things that are done (i.e. the fluid nature of the infrastructure we design on). Engineering f* ups will ALWAYS occur, no matter how big or small, I don't see how I was saying that this wasen't the case. Of course any "real world" projects that depend on software also suffer similar issues.

  45. My notes of Software Craftsmanship by Anonymous Coward · · Score: 5, Interesting
    I enjoyed this book, even if I didn't agree with everything that Pete had to say.

    Notes of interest:

    • Master programmers (craftsmen) should be paid more than many programmers.
    • Treat software as capital assets - it costs money to replace.
    • "Single vendor and new languages are always risky". Avoid "bleeding edge" technology (anything that is new to the team) (p. 148). Exercise caution when using it. More time is needed to evaluate and get familiar with new technology. More QA time is also necessary.
    • The ideal learning time is Tuesday or Wednesday -- it allows people time to try out new ideas (before they forget them over the weekend). Do tutorials and seminars according to the team's needs -- Just In Time.
    • "Craftsmanship diverges from engineering in that it emphasizes personal responsibility and decentralization" -- p. 179
    • "Talent matters more than the process that is used". How do people get "talent"? They pay the price to learn, and should always be learning.
    • There are no one-size-fits-all software development methodologies or processes -- p. 22
    • Java is considered "high-risk" (p. 160) -- only use it for application lifetimes of five years of less. (Wow, this is quite a claim).
    • Asserts that small teams of master craftsmen are more effective than large teams.

    - JWR

  46. Re:Comparing programming to "real world" endeavour by (H)elix1 · · Score: 4, Insightful

    Nothing like this happens in the real world, software is a completely different beast and to contrain it by using realworld analogies might push a few books, but it's not making software engineering or the software being produced any better.

    This type of thing happens in the real world ALL THE TIME. Talk to anyone who has had a home built for them. Critical people or equipment doesn't show up on time, structure is far more fluid than people ever suspect, and what was presented to the customer via blueprints and models still may not be what they were expecting.

    Engineering is knowing when to say good enough. A component performs as specified in the requirements. That is, if they say they need a hinge that will hold an aluminum door they don't build it out of titanium. For cranking out code, this is really an art. XP touches on this (and goes to far IMHO) about focusing on the task at hand rather than building large frameworks, object models, etc. There is a balance there, but for most construction these days the spec is 'good enough'.

    Craftsmanship is taking the time to make sure every stud in the house is square. This is not an engineering requirement - the requirement is to support the wall. This is about polish and taking extra time to 'do things correctly'. It takes time, usually is not budgeted, and is a godsend to the folks having to maintain it down the road. These things also tend to live far beyond everyone's expectations. Think of some of the deep space probes landing on asteroids - craftsmanship. The mars lander comes to mind when you mentioned bolts.

    Craftsmanship is also about using the right tool for the job. As I learned some basic carpentry skills, my grandfather would comment 'Any power tool used improperly can be a sander'. This applies to the real world as well as software. Let him that has not done an ugly hack throw the first stone - but duct tape and bailing wire are staples of engineering jokes because they are about getting the job done, but not in an elegant manner.

    When I build stuff for others, solid engineering is enough. For my personal projects, I expect craftsmanship.

    Course, I have not seen the book, so I may be way off track here...

  47. Why no salary difference -- Re:Look. by Jack+William+Bell · · Score: 2, Interesting

    Your breakdown into three programmer types is nothing new. It is widely documented that out of a group of ten programmers two will be as productive as the other eight put together. So why aren't these 'star performers' treated (and paid) like the stars they are?

    One reason is because the people making the money descisions are under the illusion that software is not a create industry. They think it is 'Engineering' in the sense that anyone who can add the numbers can do it. But if that was true than we would already have self-programming computers. Seen one recently? When was the last time you actually used a '4GL' in a real-world scenario? Not a good example maybe; that doesn't really qualify as self-programming anyway. More like 'canned programming'.

    Nonetheless, take a close look at those people who are 'really good' programmers. In my experience you will often find they are also musicians or skilled at some other creative endeavor in a much higher percentage than the average public. This tells me that one of the things it takes to be a top programmer is the same thing it takes to be a great guitar player -- innate talent. Either you have it or you don't. And if you don't have 'it' no amount of schooling will make you more than adequate.

    But that leads to the second reason why you don't see the salary difference: Good programmers are often not seen as team players. They tend to be 'Prima Donnas'. They get angry when people don't listen to them as they go against the political grain in an attempt to do something the 'right' way. In other words they usually just aren't as likeable as the 'other eight'. And the fact that events usually prove the star programmer was right all along only leads to more friction.

    The third reason for the salary difference is just plain silly: Performance reviews. I have yet to see a supervisor who was comfortable giving a star performer a star review; something on which a significant salary raise might be predicated. But without the good review the raise doesn't happen.

    This might be because the supervisor is acting on personal feelings "She is good, but she has been difficult to work with this year." It might be because the supervisor feels uncomfortable giving extreme reviews in either direction. It might be because the supervisor fears that the star performer will be promoted away (or worse, over them) if it were clear how good they are. And I am sure a hundred other reasons as well.

    I certainly know how hard it is to show up with a good attitude every day knowing that only the quality of your code is the difference between you and Joe Schmuck, who can't program his way out of a paper bag. But even more than the money I just want them to start LISTENING TO ME! I can't tell you how many times I have been hired as an expensive consultant, given them my professional opinion and then watched them do it the wrong way anyway. Over and over. Always smacking into the very same brick walls I warned them about.

    So, if you are a supervisor for programmers I hope you take this rant to heart. You might also want to take my handy test: 'You might be a PHB if . . .'

    --
    - -
    Are you an SF Fan? Are you a Tru-Fan?
    1. Re:Why no salary difference -- Re:Look. by Boss,+Pointy+Haired · · Score: 1

      Performance reviews. I have yet to see a supervisor who was comfortable giving a star performer a star review;

      I think the "Performance Review", or "Appriasal" (call it what you will) effectively breaks down when the person being reviewed has significantly higher career aspirations than the reviewer.

      Reviewer: "Where do you see yourself in 5 years time?"

      Reviewee: "Your boss."

      Reviewer: "Right, ok that will be all."

    2. Re:Why no salary difference -- Re:Look. by kisrael · · Score: 1

      I wonder how many people who talk about star programmers actually are one. And if the stars are more or less likely to read stuff like Slashdot.

      --
      SO YOU'RE GOING TO DIE: The Comic for Dealing with Death
    3. Re:Why no salary difference -- Re:Look. by kisrael · · Score: 2, Funny

      Reviewer: "Where do you see yourself in 5 years time?"

      Reviewee: "Your boss."

      Reviewer: "Right, ok that will be all."


      If you're smart, you'd say "still reporting directly to you...but you're the president of the company". That way, you shouw you're politically smart and not just ambitious.

      --
      SO YOU'RE GOING TO DIE: The Comic for Dealing with Death
    4. Re:Why no salary difference -- Re:Look. by Billly+Gates · · Score: 1

      Speaking about pay has anyone notice the trend to outsource to India? What do you all think about the trend that according to the gartner group 1 out of 3 programming jobs are now done by Indians making minimal wage!

      Not only does managment think programmers are all equal but rather they a.) waste money b.)Are just commidities c.)Worth as much as the highschool dropout at McDonalds and should be compensated as such since they do not bring in money anyway.

      They count the beans and say how much money does Bob the java programmer make us a year? Hmmm we only need him to link ouy systems with our wharehouses and customers and this salesmen from an Indian outsourcing company can give us 3 programmers for a fourth of the price of bob's salary.

      Lets fire Bob and replace him with Indians. We can save so much money.

  48. Oops! Update to notes... by Anonymous Coward · · Score: 0

    Change "Master programmers (craftsmen) should be paid more than many programmers." to "Master programmers (craftsmen) should be paid more than many managers."

    1. Re:Oops! Update to notes... by TeraCo · · Score: 1
      The problem you have then is how do you encourage people to leave the 'fun programming job' to take the 'shitty management job'.

      Unless you're saying that there are enough people out there who love being managers that companies don't need to entice people into taking them>

      --
      Not Meta-modding due to apathy.
  49. Code craftsmanship / eXtreme programming etc by Anonymous Coward · · Score: 1, Interesting

    These are all the buzzwords of today merely putting banaids on the gushing exposed arteries of the software industry. People read these books and half implement the parts that sound good to them and completely ignore the important ones.

    Today's software market will not tolerate holistic software engineering except in rare cases. In fact, most schools teach the "craft" of software engineering ass backwards. Instead of permeating the curriculum with software engineering concepts such as coding standards in CS 100 (and failing people who write out of spec, etc) to submitting models before submitting code and then grading based on accuracy to the models and on the actual quality of code. 99.999999999999% of all software classes, even the ACM's own college level programming contest, grade only on 1) does it work and 2) how fast can you get it done. They never even look at the code. People do not come out of college with the skills to engineer software and corporations are too interested in the bottom line to pay for people to learn these concepts, they want canned talent that know how to program well and that's good enough.

    eXtreme Programming, software craftsmanship, etc are only buzzwords made to pray on weak minded developers that are desperate for results. If you want to save the industry, you'd know selling a book on amazon won't do it.

  50. Career aspirations by Jack+William+Bell · · Score: 1

    That is the worst part -- I am a consumate geek. This means I don't want to be anyone's boss really. I just want to do cool things with cool technology. And I would like to be paid relative the fact I am quite good at it.

    So my career aspiration is do more of what I do now, but to have a little more control on the technical issues in those cases where I really am the most qualified to make the descision. I have no problem deferring to someone else when they really are better or more informed mind you. But someone who hasn't written a line of code in ten years and only knows about the project what he hears in design review meetings just doesn't qualify that way.

    OTOH I am working as a consultant now, which means I most always keep the politics and the on-site developers needs in mind. And accept that I might know more about the technology but they almost certainly know more about their business. This is something else I can do and it does pay better. If only it was more consistant.

    --
    - -
    Are you an SF Fan? Are you a Tru-Fan?
  51. Re:Comparing programming to "real world" endeavour by binaryDigit · · Score: 1

    This type of thing happens in the real world ALL THE TIME

    I was not saying that every house built is perfect. Obviously there are always logistical issues and problems that always occur. The point I was trying to make (and apparently unsuccessfully) was that the basic foundations of software engineering are quite different than those in the real world. We don't have building codes and a fundatmental understanding that a roof of a certain weight and composition has to be built using certain materials in a particular way to support it.

  52. Re:Comparing programming to "real world" endeavour by taeric · · Score: 1

    I guess I didn't make my point very well. Of course there is nothing out there that is exactly like programming. No matter what examples people could possibly come up with, you can knock holes in it.

    My argument is that that is counterproductive. The point is not to come up with one golden example that describes all we need. Instead, the trick is to understand what parts of other trades we do need to learn from. This includes house building, bridge building, book publishing, etc. If you can't find some common elements, then you aren't looking hard enough. (Or, more likely, you are looking too hard) Remember, they don't call them generalizations for nothing.

  53. New programming paradigms... by crazyphilman · · Score: 4, Insightful

    ...are like $#@holes. Everyone has one, and they all stink. So I agree with this critique.

    I'd like to add my two cents, so here it is:

    Every year or so, some wingnut comes out with a "brand new paradigm" of software development, which is supposed to totally shake up all established practices and change the world overnight. And, it's all hogwash, but inexperienced programmers and the wannabes who take the six-month-special course in a back alley in NYC hoping to make it big in "Computers" all jump on the bandwagon and make life miserable for the rest of us. I've been programming in one language or another since 1991 (although I've been using computers since 1983 or 4); I started studying it formally in 1995, and I've been working full time as a programmer since 1998. And, in all that time I have never seen anything come out that does a better job than plain, old software engineering.

    You know what I think?

    I think that in this age of "bigger, better, faster, more" people who can't make a name for themselves by building/doing something USEFUL try instead to become "visionaries". So they pull some weird new way of programming out of their asses, serve it up to us like it's filet mignon, and sell books about how to change everything you're doing yet again. This constant change prevents companies from building stable software. How can you work all the bugs out of anything, when every five minutes you're changing all your processes? As if the huge amount of turnover, outsourcing, and downsizing doesn't make long-term software development hard enough.

    The worst thing is, managers assigned to IT teams frequently don't know enough about software engineering to understand the difference between one paradigm and the next. So they end up running willy-nilly from one to another, changing boats midstream in a doomed, Frogger-like attempt to not get sunk in the next layoff. Any new book that catches the manager's eye mesmerizes him.

    Heaven help the gullible manager who ends up with an aggressive little ivy-league grad that wants to make a name for himself. Then the manager's gonna be led by the nose. After all, what does a manager respect more than pedigree? It doesn't matter that the kid's balls haven't even dropped yet, that he has no experience on any real project, that the closest he's come to load balancing is two PCs in his dorm room, serving static web pages to one user who keeps hitting "refresh"...

    GOD.

    When, oh when, will people learn?

    We've already figured out how to manage software projects. We've understood what works and what doesn't for at least a couple of decades. The field is fairly well researched, so there is plenty of material available about software engineering, and all you have to do is go look it up. There's NO NEED to keep trying to change the process.

    Feh. Snort.

    --
    Farewell! It's been a fine buncha years!
    1. Re:New programming paradigms... by gid-goo · · Score: 1

      Well curmudgeon dude. I agree to some extent. Managers who flit between software design principles suck. But I think that there's always room to improve the process. Right now software engineering isn't really working. Software is coming out failure prone and behind schedule. So, no I don't think that long time software engineers know what they're doing. So, no, we don't understand what's worked and we haven't figured out how to manage software projects. The field is not fairly well researched. Nice try though.

    2. Re:New programming paradigms... by DevEiant · · Score: 1
      We've already figured out how to manage software projects. We've understood what works and what doesn't for at least a couple of decades. The field is fairly well researched, so there is plenty of material available about software engineering, and all you have to do is go look it up. There's NO NEED to keep trying to change the process.

      Yeah! We've got this locomotion problem licked! Fie on you and your talk of this fancy "internal combustion engine"! Who needs it when we've got perfectly good steam engines?!

      Seriously -- what planet have you been working on, and: what's their immigration policy? I've been "working full time as a programmer" since 1993, and I've yet to see an environment in which the project management was "figured out". It's more my experience that every project starts out well, but more or less rapidly degrades into a Death March, and it's almost never because of "an aggressive little ivy-league grad that wants to make a name for himself". It's usually because people get set in their ways and stop learning, questioning, and trying to better themselves and their code.

    3. Re:New programming paradigms... by crazyphilman · · Score: 2, Interesting

      "Ah! Permit me to retort!" (Now, if only I had the Samuel Jackson look down pat, it would be perfect).

      Yes, I am a curmudgeon. And, I am very jaded, from working with some of the very ding-bats I complained about. But, you're off the mark on some of your points, and I'd like to mention why I think this is true.

      First of all, TRUE software engineering works just fine. That is, if you have a team which is committed to the basic principles involved, i.e. design your solution first, unit test everything, use a rational testing process, document everything well... You will likely end up with a solid project. The PROBLEM is, hardly ANYONE actually follows the principles of software engineering!!!

      Companies care only about the bottom line, ok? Even Microsoft has come right out and said that fixing all the bugs in a given piece of software doesn't really matter, because most of the phone calls they receive aren't about bugs, but desired features (I'm not sure if I buy their reasoning, but some MS flack said it recently). If you pay attention to most of the things people are writing on the web about their programming practices, and if you read the articles that are being posted to programming-related magazines, AND you read between the lines a little, You'll see that they're not talking about software engineering, they're talking about hacking things together with small teams (what do you think XP is all about?).

      I can't speak for everyone, but in the time I spent in private companies, this seemed to be what was going on:

      1. Some manager comes up with a new Thing (tm) that they want to add to a piece of software, or maybe a new Thing (tm) that is its own tool.

      2. Some developer or small group of developers is handed a "sort of" spec to follow and told "go for it, I need it by XXX".

      3. The developers basically just go ahead and hack it together, figuring they'll document everything later, when they're done. Since companies are trying to penny-pinch these days, half or more of the developers are likely to be contractors, and it's likely that many will have no advanced training in computer science (hence my comment about six-month wonders).

      4. After some short period of time, the Thing (tm) is presented to management. It works, because the developers have figured out a small set of test data which ought to work okay for the demo. Everyone is happy, there's lots of back-slapping, etc.

      5. So, now, the managers who were at the meeting all start scheming to put their names on the project. So each one comes up with some hair-brained Thingy (tm) which they can insist the programmers include.

      6. The programmers bitch about it, but they can't win, so they graft in a half-dozen Thingys (tm) and they get the project to work. Sort of. There's another demo, and more back-slapping. There may be sushi, but only for the managers. The programmers are given a dry bagel, a packet of imitation cream cheese, and a plastic knife. They go back to their cubicles and play hockey with the bagel, use the cream cheese to glue up a poster, and put the knife in their desk drawer for later.

      7. Ok, now the managers are pissed because all the other managers had the same idea and everyone has their own Thingy (tm). So a round of backstabbing begins, with managers claiming that their Thingy (tm) is better than the other Thingy (tm) and that this or that Thingy (tm) should be left out because it's "not robust enough yet". This goes on for a few days, until a new list of approved and disapproved Thingy's (tm) gets sent back to the original project manager, who is now no longer the project manager but rather a gofer for the higher manager who's "taken a leadership role" in the project to puff up his resume.

      8. The programmers all try to kill themselves with the plastic knives, then give up and read Slashdot for two hours while they stew about the situation. Eventually they simmer down and a round of grafting and featurectomies takes place. The programmers work late, curse th

      --
      Farewell! It's been a fine buncha years!
    4. Re:New programming paradigms... by GlassHeart · · Score: 1
      We've already figured out how to manage software projects. We've understood what works and what doesn't for at least a couple of decades. The field is fairly well researched

      Once software size exceeds a single person's mental capabilities (probably between one to five thousand lines of code), the overall quality drops significantly. With what we know today, a good programmer and a team of testers can probably produce a literally bug-free 1,000 line program given enough time. However, that hasn't scaled well at all. Commercial software will routinely ship with dozens, hundreds, or even thousands of bugs unfixed.

      Another major area is scheduling. We have not figured out how to predict how long a development task (particularly the debugging activities) will take. Once you realize that the construction industry can often estimate tasks to the hour, you'll understand how far we have to go. A software manager is lucky if he can nail the month.

    5. Re:New programming paradigms... by crazyphilman · · Score: 1

      Ah... Don't take the comment about the ivy-leaguer personally. It related to an unpleasant experience I had with one once, although I enjoyed the end, where the ivy leaguer crashed and burned (don't worry about him, he bounced back, slightly more humble).

      As to your point about your work experience, wow, you're pretty bitter. Where have you been working, so we can avoid it? See, this is why I stick to civil service and government jobs these days. No death marches, no weirdo bullshit to put up with, just normal, software engineering projects that are managed sanely. Although, I do wish our users would provide us with more details in spec, but I suspect that everyone has that problem.

      As far as your comment about people getting set in their ways and never changing, I haven't experienced that. Some of our senior developers are already building .Net projects (with C#, which they said they had no trouble learning). I think the youngest guy in that group is in his early forties.

      See, you can work with new tools, learn new languages, discover new ways of doing things, without giving up basic software engineering principles. Think about it like this: a physicist doesn't stop using the Scientific Method when a new piece of laboratory equipment is invented, does he? No, of course not.

      So, why give up programming and project design methods which have been proven to work? They're analogous to the scientific method. Use the new equipment, but don't drop the intellectual framework of your field of study.

      Again, don't take my opinion personally. It IS, after all, just an opinion.

      --
      Farewell! It's been a fine buncha years!
    6. Re:New programming paradigms... by crazyphilman · · Score: 1

      Actually I've heard that the limit of what one person can reasonably be expected to maintain is 10,000 lines of code, and that's using object oriented programming. I've read articles online by people who have maintained code of that size, so I'm assuming that it's doable. And, I've seen many truly large programs that are relatively bug-free; look at the commercial game industry. Those projects are huge, and written by teams. Sure, they have bugs, but most games work pretty well by the time you end up playing them. So I disagree with your criticism about complexity.

      I don't think the quality of a program drops automatically based on size; I think it depends on the organization that is doing the programming. Many companies don't really follow software engineering principles. One person mentioned "death marches", which apparently is a pretty common phenomenon. The book sure made it seem common enough. Consider: if you don't build at least some kind of initial design *and follow it* you end up continuously grafting on new pieces over time. You just can't take that approach without causing problems.

      I can't disagree with your comment about scheduling, though. NO ONE I've EVER MET has had that one licked. I don't think the construction analogy holds up, though. Writing software is a very slippery endeavour, dependent not only on knowledge but on inspiration as well. Recently one person I know worked on a problem for a few days, then asked someone else to look at it -- and the second person solved it in thirty minutes. There's no linear way to predict how long something is going to take a given person. I don't think it's fair to consider this a problem with software engineering per se.

      --
      Farewell! It's been a fine buncha years!
    7. Re:New programming paradigms... by GlassHeart · · Score: 1
      Actually I've heard that the limit of what one person can reasonably be expected to maintain is 10,000 lines of code

      10 KLOC probably represents an absolute peak, where you have a straightforward project and a very experienced programmer.

      look at the commercial game industry. Those projects are huge

      Uh, not really. They take up a lot of space on the CD-ROM, but the source code is not likely that big. The original Doom weighed in at about 47 KLOC, not counting comments. Linux is estimated to be some 30 MLOC, NT 5 at some 20 MLOC, Win2K at 35 MLOC, and XP at 40 MLOC.

      Games also compete in the most demanding sector of private computing. You'll find that general applications are ironically held to lower standards, and ship with correspondingly more bugs.

      I don't think the quality of a program drops automatically based on size

      I was probably not being clear enough. What I really meant was that the risk of bugs rises dramatically as the size exceeds one person's abilities. There are known ways of mitigating such risks, but it's essentially impossible to write a bug-free 1 MLOC program, even if you assign a thousand programmers each capable of writing a bug-free 1 KLOC program. An organization that does not apply good development methods, as you pointed out, will realize more of these risks.

      I don't think the construction analogy holds up, though. Writing software is a very slippery endeavour, dependent not only on knowledge but on inspiration as well.

      ...as far as we know how to write software today. It's entirely possible that in a hundred years, software development will be as mundane, repeatable, and predictable as building a house. A house, nevermind a skyscraper, is a fairly complex thing. We're just very good at building them now.

      Imagine early construction, where you're not really sure where that suitable tree is in the forest. I expect schedules to slip somewhat back then.

    8. Re:New programming paradigms... by crazyphilman · · Score: 1

      I'll surrender the point on videogames. It was a bad example. The only good estimate I could find about lines of code for games was for Quake II, which looked like it came in around 70,000 lines of code. So... You got me there. ;)

      On the other hand, your example of Linux being 30,000,000 lines of code is bad too. The biggest piece of Linux (which is made up of thousands of discrete projects, rather than being one giant project) is the kernel, at between 5 and 6 million lines of code. And, the first kernel was written by Linus Torvalds as a solo project. People love to brag about lines of code, but really it's just another statistic. You know... "There are lies, damn lies, and statistics" (Mark Twain).

      But, that aside, I think you're seriously underestimating the number of lines of code one person can understand. Let me explain. You're stuck on the idea that one person can only understand 1,000 lines of code. Where the heck did you get that figure? I've got software projects I'm working on here that aren't that hard for me to follow, and they're pushing 8 or 9 thousand lines. I think I cut one down to 6,000 by removing image support (the person I'm writing it for only needed text). Hell, I just wrote a dll that contains around 2,000 lines, and it only took me a couple of days. 1,000 lines of code is an undergrad assignment, ok? So let's get away from that figure.

      If you really want convincing, think about this: when ID software released the Quake II source code, lots of people downloaded it and started studying it. Now, that's probably 70,000 lines of code. And, people were able to understand it and work with it. If what you're saying is true, that ought to be impossible, right? But clearly it isn't impossible at all. How can we reconcile this with our current conversation?

      If you look at the source download for Quake II, it's broken up into over 300 files, the largest of which is 4200 lines of code. Herein lies the secret.

      It may be true that no one can understand any one piece of code that exceeds around 10,000 lines. HOWEVER, when you break that code up into functional chunks, suddenly far larger amounts of code are comprehensible. The largest file in the Quake II download was 4200 lines. Most were less than half that. So, if you were methodical, you could gain a decent understanding of the source code by reading, and taking notes on, individual files one at a time. As you gain understanding of each file, you document it until you end up with an understanding of the full project. Because of the modular way in which it is built, you don't have to have the whole thing in your head at one time. You concentrate on the subsystem you're working on. Follow? Ok.

      Now, this is exactly why Object Oriented Programming was invented. Joe Programmer doesn't have to keep all 30K lines of code he's working on in his head at one time. He only has to worry about his individual object, provided he doesn't change its interface without looking up all the other objects that need it so he knows what else needs to change.

      OOP, Components, and so on were all invented to solve exactly this problem. And, software engineering tries to codify an approach to designing your project so that all of the small chunks are manageable and can be assembled into a greater whole later. So one man can build twenty 4KLOC chunks of code and end up with an 80KLOC chunk of code that he can completely understand.

      Will there be bugs? Of course. I'm not saying there won't be. That's what peer review is for. But, a little software engineering, a little OOP, and you can build some pretty big beasts in your free time. There's probably some kind of functional limit to what one man can do, even with OOP. Figure, 10KLOC per class file, max, a hundred classes... That's a million lines. It's doable.

      So I don't think your idea that you can't write a bug-free big program really washes. Eventually, you CAN probably work all the bugs out, but you have to have more patience than you'll find i

      --
      Farewell! It's been a fine buncha years!
    9. Re:New programming paradigms... by GlassHeart · · Score: 2, Interesting
      your example of Linux being 30,000,000 lines of code is bad

      You're probably right. I found that on a web site, but now I'm not so sure if it meant the kernel or an entire distro.

      You're stuck on the idea that one person can only understand 1,000 lines of code. Where the heck did you get that figure?

      The mental picture I'd like to convey is the author emerging from the project, completely convinced that there are zero bugs. Any other expert who has not seen the code can read it (taking weeks or months as necessary), and also emerge completely convinced that there are zero bugs. Zero. This level is trivial for a "hello world" program, and possible for bigger programs, but unattainable past a certain size today. The 1 or 5 KLOC I was tossing around is this magic size, where something akin to a mathematical proof is still humanly possible.

      OOP, Components, and so on were all invented to solve exactly this problem.

      But nothing has delivered on the promise.

      Don't get me wrong. The movement from spaghetti to structured significantly reduced the number of bugs in large systems, and probably from structured to OOP as well. However, the inherent complexity introduced could not be completely solved. Each object you define hid details, but also introduced risks, because the interactions between modules are still defined in fallible (and often plain vague) ways. The tough bugs in structured or OOP systems today are typically subtle interaction bugs, where one module does something just slightly unexpected by another.

      I don't think you're actually disagreeing with my original point that we're not exactly at the end of the evolution of software engineering practice.

      Eventually, you CAN probably work all the bugs out, but you have to have more patience than you'll find in private industry.

      You are attributing bugs to economics, which may very well be true. However, absent proof I am doubting that it's possible at all to achieve zero bugs past the "magic size". Note that while open source software (which do not have the commercial pressures) are shown by some to have fewer bugs, it's not zero.

      Look at the space industry. The Space Shuttle flight control, IIRC, is really two pieces of software developed to identical specs, voting in real time to decide what to do. IOW, NASA decided to pay two groups (not cheaply, either), rather than pay one group double. That indicates that they don't think even twice the money will achieve the safety afforded by an independent reimplementation.

      I respect your view of the future; you seem very optimistic about it.

      Here you are completely mistaken. Software engineering is creative and challenging today. The future I foresee is essentially blue collar, involving assembly more than creation. It's a step forward for the science, but I'm not sure practitioners will have as much fun. I'm personally not looking forward to that. :)

    10. Re:New programming paradigms... by crazyphilman · · Score: 1

      Very interesting post, although I still disagree with some of what you're saying ('course, this being slashdot, that's to be expected).

      I think your estimate of the 1-5K magic size is too low, especially if you're talking about an OO program. I think the number can be much higher than that. Also, I think your concept of proving the code with something akin to a mathematical proof insinuates an artificial difficulty that is not necessary. Even engineers in physical disciplines don't rely entirely on mathematics. I had a professor back in my Mech. E. days, a really wonderful old guy whose hobby was working with large equipment. He used to say, you can make all the technical drawings you want, you can do all the math you want, but you really never know anything until you build a prototype and fire it up. The message, of course, is that there is no substitute for empirical testing. Simulation is only good as a proof of concept.

      This applies to software engineering just as it does to mechanical. The idea behind software engineering is to apply physical engineering principles to software production, and I'm behind that 100%. But one major principle of physical engineering is, build a prototype and see if it works. TEST, in other words. So, coming up with a mathematical proof "proving" your program is without bugs seems kind of masochistic to me. Verification may be a useful step, but it's pointless to rely upon it solely.

      So, moving from this point to my next one, one can become relatively confident that his program has no bugs if he comes up with a detailed testing procedure, and then, takes the time to sit down at the computer and literally try every one of the program's features, and then, try to deliberately crash it in every way he can come up with. Note that most gaming companies hire dozens of people to do exactly this. They bang on the games for days, finding every problem and potential problem, and writing up a big report (which, unfortunately, often gets ignored, but what can you do -- that economic issue again). So, my position is that if you have the patience to do it, you CAN find most (maybe not all -- maybe one or two will surface later) bugs in your software, even if that software is of significant size. And, if a bug or two surfaces later, you can always fix it then -- a software engineer has one advantage over his physical cousins: a recall costs him nothing, just put a patch on a server and let everyone know it's there.

      So, I think the main thing we disagree on is how much complexity a human can handle. I'm more optimistic than you on that issue. I think we can handle quite a bit, if we're willing to spend the time to deal with it.

      As far as there being room for improvement to software engineering, I concede that point whole heartedly. It's not that I think there's no room to improve; I just don't like the way people come out every month or so with some totally new way of doing things and claim it changes everything and we can ditch all the old ways. It's annoying to me. If something works, and you're doing well with it, why would you discard it for some new fad? It's madness. But I'm a curmudgeon, everyone says so. Only 32 and already a curmudgeon, saying things like "you kids today!" and "why, when I was your age we had to turn a crank to get the hard disk rotating..." God, it's a curse. Heh heh...

      Now, about the future, I think you're right about how commercial development is going to be done, with a couple of caveats. First of all, I agree that the vast majority of programmers are basically going to be assembling components, using something like an advanced 4GL. Heck, it's already happening today. But I don't think that will be the end of traditional programming. First of all, someone will have to write the components. Sounds like a business opportunity to me. Second, there will always be academia, where pure research isn't going to involve gluing controls together on a form. Third, don't write off the open source community, which is motivated by the fun of

      --
      Farewell! It's been a fine buncha years!
    11. Re:New programming paradigms... by Anonymous Coward · · Score: 0

      in all that time I have never seen anything come out that does a better job than plain, old software engineering


      That's like saying you've never seen anything that does a better job than plain, old programming. Which of the N-million software engineering methodologies are you talking about here? Or are you talking about some vague, "Be careful and systematic when you code"?
    12. Re:New programming paradigms... by GlassHeart · · Score: 1
      one major principle of physical engineering is, build a prototype and see if it works.

      I am by no means discounting testing. In fact, I didn't mention it because I was taking it as a given. I'm not proposing that we ship small programs by manual inspection and no testing! Well-crafted test cases remains a very good way of flushing out bugs, even in small programs.

      I think your concept of proving the code with something akin to a mathematical proof insinuates an artificial difficulty that is not necessary. Even engineers in physical disciplines don't rely entirely on mathematics.

      This is true, but whatever they're building must still be theoretically (mathematically) sound. I will be rather upset if somebody builds me a house that seems to stand up, but theoretically shouldn't.

      Software is also different in the sense that it can in fact be made infallible, in theory.

      However, the most important concept here is that testing can only show the presence of bugs, not its absence. It is a fundamentally flawed activity, when it comes to guaranteeing that it is free of bugs. (Where it does work, however, it is very very helpful.)

      if you have the patience to do it, you CAN find most (maybe not all -- maybe one or two will surface later) bugs in your software

      Sure, that's where we are today. What I'm trying to point out is that, if the code is small enough, we can actually get to zero. Software has the opportunity of achieving mathematical perfection, being susceptible only to hardware faults. Yet we routinely see hardware that's more reliable than software!

      Another thing I've been trying to imply all along is, over perhaps the next 100 years, the invention of proofing tools to eliminate every error except specification errors. The infinite patience and higher speed of computers will be what brings "perfection" beyond the magic size we've talked about.

      I just don't like the way people come out every month or so with some totally new way of doing things and claim it changes everything and we can ditch all the old ways.

      This is, in fact, a symptom of the youth and immaturity of the industry. A mature industry is terribly reluctant to change, because it knows that 99.99% of proposed changes are pointless or counterproductive.

      First of all, someone will have to write the components.

      Yes, but there will be very few of them needed. Like assembly language programmers.

      Second, there will always be academia, where pure research isn't going to involve gluing controls together on a form.

      This is the same academe that failed to protect the industry from the patenting of basic techniques. ;)

      Third, don't write off the open source community, which is motivated by the fun of programming

      Sure, but even open source still has to be competitive with the state of the art, both in terms of bug count and features. The most vibrant open source projects are the competitive ones. So, when the state of the art is a trillion lines of code (and the only way to put that much together is boring), there may simply be no fun way to program such a beast.

    13. Re:New programming paradigms... by crazyphilman · · Score: 1

      Valid points all, but I still disagree with your pessimism about the future of programming. You seem to be confusing "economically successful or widely popular" with "fun to work on". It may be true that the most "vibrant" open source projects are the ones that compete successfully with commercial products, but most of the thousands or tens of thousands of open source projects in the world were just written for kicks, and don't compete with anything. They just *are*. Get away from the idea that the proper motivation of a programmer is money or fame. That fork in the road leads to a lot of disappointment. Take the road less travelled by, and program for the hell of it. You'll be happier.

      Listen: why should I care if my project is "competitive"? All I care about is if it works, it's relatively elegant and bug-free, and I enjoy working on it. When I want money, I go to work and build systems for my boss, ok? I do the fun stuff on my free time.

      When you say there's "no fun way to program such a beast" you should take a step back and reconsider the true meaning of what you're saying. If it isn't fun to produce gigantic commercial software, why bother with it? Build something small, quirky and fun for yourself, and share it with your friends. By "Small" I mean a few tens of thousands of lines of code, maybe a couple of hundred thousand if it grows over time. You were talking about trillions. And, you're way too stuck on state of the art. It reminds me of the dot-com egomaniacs I used to work for; everything had to be BIG. Everything had to be a revolution. Ah, those poor saps are going to have a heart attack before they hit 55. They really need to relax.

      Commercial programming is dead as a field in this country anyway: everything's getting outsourced, so this is a moot point. What I'm trying to illustrate is that no one can take programming away from you, no matter how many spiffy tools they build. You will always have the freedom to just start cranking away on your own projects. And, this makes the future a nice place to be.

      --
      Farewell! It's been a fine buncha years!
    14. Re:New programming paradigms... by GlassHeart · · Score: 1
      program for the hell of it.

      Well said. What I was really struggling to get at is the extrapolation from, for example, assembly language programming in 1981 to C++ today. In many ways, it's really intellectually fun to write assembly (the full control, the really small and tight code, the silly XOR-to-swap trick) in a way that is not present or not the same in a higher level language. Choosing C++, in one sense, is already valuing the function (easier to write and debug, more practical for bigger programs) over the "sheer artistry".

      Point is, people aren't writing assembly programs now, even for small projects where it is still feasible. Modern operating systems don't really have convenient assembly language bindings, and tools are falling behind (assembly language IDE, anyone?). Yes, I technically still *can* do that, but I'm not likely to.

      Now fast forward 50 or 100 years, where the tools are optimized to write billion-line programs. It may not take away all of the intellectual stimulation and creativity, but it will surely take away some and change others (but possibly add new ones!). Visions that far are obviously highly variant, and I'm not really trying to change your mind, just drawing a picture.

      no one can take programming away from you

      Well, I wasn't really talking about me, or any other motivated individual. I'm talking about the industry and the community, which I think will head towards a more mature and less interesting future. Yes, once in a while somebody will still build a really fun and innovative house, but most of them will just be bland. I'm not really saddened by that future. It's the price of maturity.

    15. Re:New programming paradigms... by crazyphilman · · Score: 1

      Assembly is a bad analogy. I think that it's much more fun to program in C++ than in assembly, and it offers just as much room for artistry. The thing is, once upon a time tools were primitive (e.g. assembly, no offence intended) and now they are already mature. New innovations won't be about changing the way in which an instruction is specified (other than syntax changes as new languages get invented) but rather, in the provision of prebuilt tools and widgets. So, our future really isn't like our past. The next tool will not be to Java as Java is to assembly. Instead, the next tool will be more like a 4GL which provides a huge library of prewritten Java code, with a code-builder which assembles the solution for you. At that stage, you're not even programming, really -- you're just configuring makefiles (in whatever weird, futuristic way this is done).

      And like I was saying, there will still be people who can roll raw code. The evolution to structured and OOP has already taken place. Programming per se isn't going to change much anymore.

      --
      Farewell! It's been a fine buncha years!
    16. Re:New programming paradigms... by GlassHeart · · Score: 1
      Assembly is a bad analogy. I think that it's much more fun to program in C++ than in assembly

      I think you mean that it's more fun overall, but surely it's a gain-some-lose-some situation.

      C++ is inherently more "industrial" than assembly. Things like self-modifying code are all but history, despite the innate elegance (and danger!) of these things. Few of us ever program hardware directly anymore, missing out on the thrill of seeing software instructions actually affecting something real. Missing out on how little resources the program consumes.

      The good news is that it opens up other avenues of creativity. Maybe this will always be true, as you suggest.

      Programming per se isn't going to change much anymore.

      I think a revolution is past due, actually. I'm tired of the low quality.

      Specifically, your prepackaged library path is one obvious possible future, but I don't really see how bug densities will drop much more that way. I'm hoping for a much more automated future where tools are available to generate application-specific libraries very easily. Kinda like general purpose ICs versus ASICs.

    17. Re:New programming paradigms... by DevEiant · · Score: 1

      I couldn't conceivably take the "Ivy-Leaguer" comment personally. I have difficulty even seeing how you might have inferred that from my reply, but that's probably my shortcoming.

      I have no interest whatsoever in dissuading you or anyone else from continuing to do what works. I meant only to suggest that parts of the methodology you champion don't work for everyone, and dismissing new ideas about how it may be done as the product of failed "doers" and pseudo-visionaries is irrational and counter-productive. There are certainly best practices which should be kept and even expounded upon (eg., design, unit testing, document everything, etc.), but that's exactly what Software Craftsmanship does. In no way does McBreen suggest that testing, design, and documentation be eliminated. In fact, your criticism seems a bit more like general frustration with the field than anything to do with the book being reviewed.

      Software Craftsmanship, as I understand it, is mostly just a reaction to the mistaken idea that programmers are interchangeable cogs in a code-churning machine, and that a project's success is a function of how many warm bodies you have rather than the qualifications of the team members. It's focus is on the "quantifiable" part of the software engineering definition, and not so much the "systematic" or "disciplined" part.

      I apologize for any misdirected bitterness.

    18. Re:New programming paradigms... by Tablizer · · Score: 1

      Actually I've heard that the limit of what one person can reasonably be expected to maintain is 10,000 lines of code, and that's using object oriented programming.

      Things become simpler when you break things down into *tasks* I find. It is not very OO, but it works well if done right. Most of the communication between tasks is via a databases rather than "structures". Thus, the developer can focus mostly on one task or event at a time (plus some libraries).

      The concept of "one big EXE" is sort of a client/server era artifact and not the only way to do it.

      It works for me. The average size of the task tends to be relatively independent of the total "system" size or database size. Larger systems might need slightly larger tasks because of things like security protocols, but at the most they tend to grow by about the log of system or database size in my observation.

    19. Re:New programming paradigms... by crazyphilman · · Score: 1

      I didn't say bug densities would drop. ;)

      I think the reason companies will keep pushing for a more componentized future is economic. They're already outsourcing all the programming jobs (well, they're outsourcing everything else too) so once all programmers are as inexpensive as possible, to make them even cheaper they'll have to simplify development. That's all there is to it, I think. I don't think companies care about bugs particularly, unless the bug actually impacts sales.

      So, basically I think it's about eliminating labor. But, I'll still be programming, even if it's in my bedroom.

      --
      Farewell! It's been a fine buncha years!
  54. Speaking in Calgary by Norman+Lorrain · · Score: 1

    April 1 It's a great book; I've never been comfortable with the Art vs Science camps in software development. Calling it a craft opens up a whole new model, which I think fits much better.

  55. Re:forget the review, code visualization by embedded_C · · Score: 1

    One of the McCabe tools (McCabe Reengineer) already does this. It is an easy way to quickly pick out areas of great complexity in your system and then focus your efforts there. While loops, if statements and case statments stick out in my mind as being quite recognizable. However, it doesn't do anything at all to give you information about what the program _does_. But it's a nice tool nonetheless.

  56. not realistic by GunFodder · · Score: 4, Insightful

    If all programming tasks were as exciting as defending a small village from rapacious bandits then I'm sure you would have no trouble finding brilliant programmers. Unfortunately a lot of software is not very exciting. I find it unlikely that there is a single programmer out there that writes commission accounting systems for fun.

    As a hobbyist you have the opportunity to pick and choose your projects. A working programmer often has to solve business problems that aren't unique or exciting.

    1. Re:not realistic by Khomar · · Score: 4, Insightful

      A working programmer often has to solve business problems that aren't unique or exciting.

      Quite true. However, speaking as a programmer, I have found that even in mundane tasks I get enjoyment out of perfecting my craft. I look to make my processes just a little faster or more robust, even when doing something that I have done before (if I cannot use or do not have access to a library). I also find that the creation of new libraries is frequently needed which also allows me to perfect my ability to design and develop useful libraries.

      I have worked on many projects both interesting and not, but that does not mean that enjoyment cannot be found in even the mundane things. If nothing else, I find enjoyment in the ability to pump out a simple program very swiftly without errors. There is always room for improvement.

      The key, of course, to any job is to learn to enjoy what you do, even when this task is difficult. About the only time I have had morale problems with work related to people I had to work with (or insane MFC libraries... but I digress). The work of developing itself remains a joy to me.

      --

      I believe in de-evolution. God made the world perfect, man fell, and its been going downhill ever since!

    2. Re:not realistic by pyrrho · · Score: 1

      (1) I think there is more tedium than excitment protecting a village from bandits.

      (2) All software projects can be interesting: if you are a logician. If you love logic. All these system are interesting to design and construct (less interesting, imho, to maintain and operate!)

      Of course, I'm a bit full of it as I've always gravitate to parts of the industry that interest me, because it does help one motivate oneself, not so much for projects that are more logically interesting, but to stay motivated through political storms and other meatspace crud.

      --

      -pyrrho

    3. Re:not realistic by Anonymous Coward · · Score: 0

      (1) he meant "play video games"

      (2) you haven't seen many software projects. And a logician would go insane, because he doesn't get to deal with design, or requirements. That's left to someone stupider than your code monkey.

    4. Re:not realistic by pyrrho · · Score: 1

      (1) that doesn't change my opinion.

      (2) I've seen many software projects.

      by the way, the waterfall method is long since discredited, so if the logician doesn't have anything to do with the design of his code then he is at a bad company, a company that would make even interesting projects boring and pointless. Did you consider that?

      --

      -pyrrho

  57. Moderator on crack, again by Rick+the+Red · · Score: 1

    That is the first post to mention "union" -- how the hell do you think this is "redundant"? PLEASE, if you get that one in Meta-moderation, rate it accordingly.

    --
    If all this should have a reason, we would be the last to know.
    1. Re:Moderator on crack, again by Anonymous Coward · · Score: 0

      That is the first post to this topic to mention "union". I expect the moderater, considering that it was the lucky millionth post of all time to mention the term, without adding anything insightful or interesting thought it worthy of being made an example of.

    2. Re:Moderator on crack, again by jomiller · · Score: 1

      amazing, you have summed up your own post and even mine and the rest of what might be this entire thread wtih that last remark. Come on, how's is bringing up the idea of a programmers' union not insightful or interesting. The entire concept sorta dates back to the industrial era where workers were fighting for their wages, hours, and lives with "The Man". How is that different from software developement. Most developers make decent to meager wages and work easily 60+ hours a week on average, let alone during crunch time. And if there is a problem that needs to be fixed yesterday, forget going home, on vacation, or even to the damn bathroom (and that sucks after the 85 Sobe Adrenaline Rushes and Jolt 20 oz. that you drank to stay awake). The idea of a union and and uprising of programers to create it is a very ineresting and somewhat provacative idea, if you have the disposition to think.

  58. Yeah! Hear hear! by mekkab · · Score: 1

    They should be using variable names like $Foo and $Bar[]!!! ;)

    actually, there is a perfectly valid reason to use arrays: Bounded latency, specifically for real-time code. Give me and array; the size of its elements and its size, and given how paging is on the target platform I can give you a Big O of how long it will take to iterate through. thrashing (excessive paging) suxxors.

    I realize that had only tangential relation to your comment about arrays of hard-to-determine crap, but this is slashdot. ;)

    --
    In the future, I would want to not be isolated from my friends in the Space Station.
  59. Re:Comparing programming to "real world" endeavour by Anonymous Coward · · Score: 0

    Fucking hilarious!

    My specs are always a moving target.

  60. Re:Comparing programming to "real world" endeavour by (H)elix1 · · Score: 3, Insightful

    The point I was trying to make (and apparently unsuccessfully) was that the basic foundations of software engineering are quite different than those in the real world.

    I know... I'm just going through the process right now and the real world seems as horked up as some of the ugly software projects I've worked on. Call me cynical, but I've got friends in differing areas of engineering - aerospace, mechanical, electrical, genetic - and all of them have nightmare stories of projects that were loosely defined, under funded, impossible deadlines, etc. I'm not saying software engineering sucks less or more - just that these same problems woefully apply to others fields as well.

    God help me, I was right there saying amen until you said this does not happen in the real world. I could be exceptionally unlucky, however.... (grin)

  61. How to tell a star performer by Jack+William+Bell · · Score: 1

    A star performer is the guy or gal that when you ask about them everyone else says "Well, they are really good. But..." The 'But' will turn out to be that they don't show up exactly on time every day or they don't hang with every one else after work on Friday or some other thing that has no relationship at all to the actual work.

    Reading /. is, unfortunately, not a good criteria. Reading the 'Software Patterns' by the gang of four during their lunchbreak might be one however. Also I have written before about the 'Toilet Tank Test' which is a question you ask during job interviews: "If I were to go to your house right now, go into your bathroom and look at the magazines on top of your toilet tank, what would I find?"

    The answer to the TTT is often quite revealing. If they say 'Dr. Dobbs' then you might consider hiring them on the spot. If they say 'Golf Digest', then thank them for their time. The TTT works because it is designed to show whether the person is so into software development that they think about it during their 'off' hours.

    --
    - -
    Are you an SF Fan? Are you a Tru-Fan?
    1. Re:How to tell a star performer by kisrael · · Score: 1

      The TTT is interesting. I'm not sure if I'd do that well on it... Wired, a videogame mag, a book of quotes. But most of my techie reading tends to be a smaller number of larger books, or online.

      I'd hope this interview would also get into how much decent coding I do on my own time for my own projects, not just what i read.

      --
      SO YOU'RE GOING TO DIE: The Comic for Dealing with Death
    2. Re:How to tell a star performer by Jack+William+Bell · · Score: 1

      Clearly there are variations on the TTT, such as "Are you involved in any Open Source projects."

      But your personal projects might not come out in a job interview unless you bring them up. I am thinking of making up a CD of some of my personal stuff (and selected past projects) that I can bring with me to an interview. That means I need to make them more 'proffessional' with real installers and such. Probably not a bad idea anyway.

      My point is that star performers are always people that are excited about what they do. You don't become a star at something unless you are obsessed by it to some extent. But that obsession usually comes at the price of some area of social development; we can call that the geek tradeoff. Mind you I am talking generalities here, not specifics and there are always exceptions. But to some extent your obessions define you.

      So if your biggest obsession is golf you will probably never be a star programmer. If your major interest is Unreal Tournament you might still stand a chance. However the guy in the next cube who is telling everyone in detail about a new sort algorithm he found on the net last night might be boring, but he is probably the one most likely to become make guru level. Even if currently he is only a 'larval stage' hacker.

      --
      - -
      Are you an SF Fan? Are you a Tru-Fan?
    3. Re:How to tell a star performer by Anonymous Coward · · Score: 0

      So if your biggest obsession is golf you will probably never be a star programmer

      But you could become CEO of Sun.

  62. Re:not realistic...Excellent points all... by Bamafan77 · · Score: 1

    Short, consice and on-the-money answer to all the people who throw out the "do it for the love of it argument". I wish I could mod you +5 right now.

  63. Design Patterns suck by alispguru · · Score: 3, Interesting

    (the subject is flamebait and overstated, but it did get you to read this, didn't it?)

    According to Peter Norvig and Greg Sullivan, most of the patterns in the Gang of Four book are there to show users of common OO languages the canonical ways of getting around design flaws in those languages.

    Norvig says 16 of 24 patterns either vanish completely or are significantly easier to implement in a dynamic OO language like CLOS or Dylan; Sullivan implements a tiny OO language in Scheme and uses it to implement all 24 patterns, with similar results.

    Go read the papers before modding me down, huh?

    --

    To a Lisp hacker, XML is S-expressions in drag.
  64. hm by Anonymous Coward · · Score: 0

    Ahem.
    There are physical analogues to prjects comparable to software design.
    Build a quality custom home...that is a equivalent scope. $US250,000 Project cost $US750,000
    Multiple teams working on tight schedules...oh no the plumbers a lazy bum, but he's the best we can get, lets call him up and yell at him...oh no we have a bill from theelectrician that has an extra zero on it= $US70,000...

    Trust me- its a non-trivial task.

    Yes; there is a fundamental difference between engineering a project and simply doing for the love of it; that's already been stated.

    Would a master/journeyman/apprentice model work...
    Who knows: I sure don't.

    I would GUESS that it wouldn't, because programming tends be something that is taught in universities, hence you learn a great deal in four or so years, which neatly cuts out alot of the time needed to learn a trade.

    Basic trade skills take about 5 years, you are decent after 10, and you are good after 15.
    That's a rule of thumb when considering the time it takes to learn a trade.

    My father is at the top of his trade in our area, thats how I know these things.

  65. Personal Responsibility by under_score · · Score: 2, Interesting

    I have read Software Craftsmanship. I have also read extensively in the general field of software development methodologies, software engineering, and project management. On thing that this book does, that is very rarely dealt with is the personal responsibility that one has as a software developer. Most methodologies are designed, in essense, around the idea of minimizing the human impact on the bottom line. Software Craftsmanship deals with this question to a superlative degree.

    One thing that I found lacking is the issue of why exactly craftsmanship is a better model than software engineering. There is some discussion of this, and although I agree with the conclusion, it was not very well supported. My feeling is that engineering works for physical structures where humans intuitively understand the rules and the use of the structure follows the same rules as the creation of the structure, but in software, you make up the rules themselves and the rules are different for the process of creation and the actual use of the software!

    Another two books which deal with the question of personal responsibility are Extreme Programming Explained by Kent Beck and Agile Software Development by Alistair Cockburn. If you are interested, I have compiled a list of resources for people interested in creating software.

  66. Re: Mod Offtopic by Anonymous Coward · · Score: 0

    "will these new Software Craftsmen also be open source advocates?"

    Karma whore much?
    The article has nothing to do with open source or market monopoly.

  67. Design patterns and where they may be going by dsplat · · Score: 1

    One book that is well worth the time (at least for C++ programmers) is Andrei Alexandrescu's Modern C++ Design: Generic Programming and Design Patterns Applied. He presents template implementations of some of the patterns from Design Patterns. Patterns are a level of abstraction above what we used to express directly in code. That may be changing. And the code is available as the Loki library.

    --
    The net will not be what we demand, but what we make it. Build it well.
  68. Re:not realistic...Excellent points all... by Anonymous Coward · · Score: 1, Insightful

    If I didn't love it, I could've sold my house (oddly enough given the slump, Silicon Valley house prices haven't dropped much), gone somewhere else, and lived off the equity for a couple of years til I found something else to do.

    Even programs that look tedious on the outside may have challenging algorithms on the inside.

  69. GAY METAPHOR OF THE YEAR AWARD GOES TO... by Anonymous Coward · · Score: 0

    ...this article.

  70. self absorbed in his craftsman analogy by tungwaiyip · · Score: 2, Interesting

    I certainly agree that a small team of talented developers are more productive than horde of average programmer. What I'm looking for in his book is some hard research on why this works better, some real world cases and some partical advice on how to make this work better. I find little of these in this book. Instead the author is just self absorbed in his craftsman analogy. The main theme: a bunch of apprentices would work with a craftsman to create quality product that the craftsman would personally sign off. That's a way too simplistic idea to improve software development by putting people in the apprentice-journeymen-craftsman role.

    Big regret to have spent money and time on this book.

  71. what are you considering "well researched?" by Anonymous Coward · · Score: 1, Insightful

    Ok, so you say we all know how to software engineer, but I've been studying the classica paradigms and none of them are truly "perfect" like you so claim.

    Even ideas as old as the spiral model have proven to be ineffective at one level or another.

    The only "software engineering" that seems to have been perfected with the is the fact that if you do the same damn program for 20 years you're bound to get better at it. NASA is the classical (and really only) example of CMU's Capability Maturity Model at work. But how much does less than a MB of flight control software change in 40 years? Yeah, they're good at what they do and can predict errors with frightening accuracy because they've been doing the same program over and over again longer than anyone else.

    What we need is a paradigm that works for a unique problem the FIRST time around. Not the 30th. Maybe your "old school" software engineering works in some "old school" industry you work in, but I think nearly every software engineering expert would agree that you're pulling this information out of your ass.

  72. What I find funny (Re: lameness detected) by mcc · · Score: 1

    writing a bad article or book can happen, but slashdot pointing and drawing attention for such publication is just lame.

    I've noticed that the just about all of the last four or five times that i've seen slashdot post a book review, someone has posted a comment complaining "why is it that all the book reviews on this site are always glowingly positive?"

    Now, for once, Slashdot is posting a book review where the reviewer didn't actually like the book, and we have someone complaining about Slashdot posting a negative review. Wheeee..

    This site is frequented by programmers, and some of them might have considered buying this book had they just run across it in a store. Now, they will think twice before buying it, and will have clear logical reasons for doing so. Slashdot has served its purpose here, it seems to me. What is it that bothers you about this, that Pete McBreen will have his self-esteem hurt?

  73. If any house was comparable to software . . . by Ardias · · Score: 2, Interesting

    ... it would be the Winchester Mystery House in San Jose. It has stairs that just dead end, doors that go nowhere, and unfinished rooms. This crazy old lady uses her vast amounts of money to pay carpenters to build a house for her. So, they turned a 6 room country farmhouse into a weird, rambling mansion. That old farmhouse is still in there at the center of the mansion, surrounded by hundreds of useless rooms so you could barely recognize which rooms were original.

    The carpenters had their pet projects, and some of the carpenters were obviously still in the apprentice phase. If the old lady didn't like how something turned out, she would just fire the carpenter on the spot, and hire somebody else. No wonder lots of those special projects never got finished. There was no architect, just low skill carpenters banging on nails.

    I have actually worked on a software project like this. It was thoroughly unmaintainable, with much of written be people who did not understand basic software design principles. A manager fired some guy just because the software crashed when the manager used it. So, the manager had to hire somebody else to replace him. No wonder there was so much unfinished work in that software.

    No design documents, no unit tests, no overall design, no modularity, and nothing was easily reused. There was no architect, just coders banging on keyboards. The core parts of the software have been rewritten so many times, and added onto so many times that you would never recognize the original code.

    I am glad I don't work there anymore. It was a nightmare job for reasons besides the code.

  74. Re:Comparing programming to "real world" endeavour by Anonymous Coward · · Score: 0

    This type of thing happens in the real world ALL THE TIME.


    On the types of projects where it happens "ALL THE TIME" (e.g., Boston's Big Dig), massive cost overruns are also the norm.
  75. Spelling vs. typos (Offtopic) by Anonymous Coward · · Score: 0
    Actually, if you are going to criticize bad spelling, why? I agree that often it is an indication of a lack of concern, but how are typos any different. In fact, I'd suggest that typos are worse.

    If a person makes a typo, he is obviously not re-reading what he wrote. That suggests he didn't care enough about the item to proof it.

    However, with bad spelling, the individual may not realize that the word is wrong, and may in fact have spent a lot of time pouring over the text.

    So, if you aren't going to pardon bad spelling, you CERTAINLY shouldn't pardon typos. However, both are generally catchable by spell checkers, so an argument could be made that neither are pardonable.

    Personally, I don't make that big a deal about either, unless they give me a hard time about it first... Or unless it is too frequent.

  76. Regarding this book, I disliked the review. by Anonymous Coward · · Score: 0

    I really cannot say this differently: I don't know if I could do a good review, but I know this one is flawed.

    First, as the book's author points out, "software engineering couldn't accept a great number of software reviews". I agree with this.

    This is a basic concept in engineering that reviewer seems to ignore: you have to be cost-conscious, sometimes you don't control things because it's too expensive.

    Craftmanship, OTOH, is about learning. Try to convince your boss, in a software engineering company, that you must spend money just so that *you* learn.

    Unless you're in a big "family" company (like IBM, e.g.), it won't happen. Cost rules. The whole "software engineering" idea is based on cost, from a management POV.

    From the review, I get that the book may be good, but the reviewer has yet to learn some facts of life.

    Just MHO.

  77. Tortoise and Hare by crucini · · Score: 1

    I saw the same thing. Two Electrical Contracting firms, A and B were working on the same site. A was an army of cheap, nonunion workers in rapid motion. The average age was probably 26. B was a bunch of mostly overweight middle-aged union electricians. I rarely saw B do any work - they were usually clustered around their plan table taking notes on yellow legal pads. When they did move, it was at the rate of divers on the ocean's floor. And yet, week by week their project progressed rapidly. "A", meanwhile had numerous cases of ripping out work that was not code compliant or was based on a misreading of the plans.

  78. Old School by pyrrho · · Score: 1

    All software used to be this way.

    In fact, games are no longer this way, or at least, it's not the profitable way.

    Games need to use libraries, need to have engines that can be brought forward instead of thrown out.

    In the old days the need to optimize for slow machines was a big pressure, you didn't have a general purpose 3D engine, you had something that produced a picture and underneath was really a bunch of special optimization tricks you didn't want to bring forward.

    Now, the natural progression of reuse is entering the game industry. Look how well the Sims is doing, partially because they can release the Date Pack (or whatever) and improve their system instead of replace it.

    and yes, I worked in the game industry (network focussed) for over 6 years.

    --

    -pyrrho

    1. Re:Old School by Anonymous Coward · · Score: 0

      and yes, I worked in the game industry (network focussed) for over 6 years.

      My name is Pyrrho, and I have no penis.

    2. Re:Old School by Anonymous Coward · · Score: 0

      Sorry to hear about your penis. Really.

    3. Re:Old School by pyrrho · · Score: 1

      I realize it looked like I was boasting, but I was not, there is nothing particularly special about working in the game industry except to support my comments about where the game industry was in terms of code reuse.

      It seemed boastful only because of your personal insecurity and --- what... your name really is Pyrrho? oh, sorry.

      --

      -pyrrho

  79. This was my Text Book by leishen · · Score: 0

    This was one of the text books for my software engineering class. It's a really entertaining read, actually. It's engaging like no other text book is, and it makes you think about quality. It also makes you (or at least me) think about the school system, and whether or not a classroom environment or an apprenticeship-type environment is the way to learn.

    The difference between this approach and others is just like the difference between Linux and Windows. Windows might look real nice, but it's bloated and not completely quality-built. Linux may have it's pains (depending on distro), but it's there and it's a solid and well-crafted foundation which will grow into the great house we're all looking for.

  80. Quality is free by Felipe+Hoffa · · Score: 1

    Ponder this:

    It's true that in most cases your clients and buyers won't value quality and won't pay more for it. But, what if building a quality product was cheaper and faster than building a buggy one?

    Fh
    Ps: More about this in Tom de Marco's classic Peopleware.

  81. 90% of all so-called programmers suck by flockofseagulls · · Score: 1

    50% of people claiming to be programmers are merely the most computer-savvy person in their immediate clique. They don't have the skills or experience to work on a real project. If you work at Starbucks but have a 300-line Perl script on your Linux "box" at home that downloads the weather report, you are not a programmer. If you have a Geocities web site with a CGI page counter, you are not a programmer, even if your grandma or co-workers at Kinkos can't even do that. Recognize these clowns by their goatees and black trenchcoats. Large herds are often in evidence at Fry's on weekends: look in the video card section.

    25% of people claiming to be programmers just chatter about Java and buy books and download the latest Java crap, but can't actually get anything to compile or run because their CLASSPATH is wrong. When they aren't talking about Java they're working on their own blogging program because none of the 42,000 blogging tools already written can do all of the things they need it to do. I suspect that these dorks also masturbate while playing Everquest. The most they can hope for is to get their fat face on the cover of a 900-page Wrox book.

    5% are the same as the Java dorks, but to be different they advocate an obscure language and act like everyone else is clueless. These people are also prone to excessive facial and body piercing. This group includes masochists who insist on doing everything with emacs and shell scripts. Often hard-core open source advocates who work at universities, Richard Stallman is their hero.

    10% of people claiming to be programmers learned some COBOL or Fortran back in college, and now lurk in the ventilation ducts of big companies and government agencies. They often regale co-workers with Y2K war stories and anecdotes about punch cards. These are the ones you see at Fry's buying the DCOM books and Novell certification guides from the sale bin. Colorful suspenders and big beards are the style. Jerry Pournelle is the textbook example of this group.

    That leaves 10% who don't suck. 10% who don't go around telling everyone they know how they can't realize their dream because no current computer is powerful enough for their unique vision of online role-playing. 10% who actually know what a pointer is from experience, rather than from articles about how C++ sucks. 10% who don't pretend to be musicians or skateboarders because they are secure with their programming skills. 10% who don't wear all black clothes or ironic thrift store garb. 10% who don't have a nervous breakdown if they have to use Window$.

    QED.

    1. Re:90% of all so-called programmers suck by Anonymous Coward · · Score: 0

      You forgot the ones who rant on Slashdot about other programmers, in the absence of any demonstrated programming skills of their own. But you wouldn't know anything about that.

  82. Re:Apprentices? Journeymen? by Anonymous Coward · · Score: 0

    -1, Funny. Well done, sir!

  83. Software Development Insight and Self Awareness by Michael+Snoswell · · Score: 1

    I've worked on many projects in the last 20years, some went very badly, some really well, some big military projects some small for commercial industry, some hobby, some finance some realtime etc etc.

    I think at this point I can safely say I see people who thinks they're software developers and those who *know* they're software developers. I've worked with both types. I'd say the "real" ones are those who've worked on a largish project (say a few man years) at least once from initial specification to design to coding to testing to deployment to maintenance/support - and done this all successfully. I'm staggered at the number of people who somehow think that if they coded someone else's design then they too can design code, or who wrote function specs who then think they can design code, or who can write wonderful design docs but can't code. Some people bullshit very well to cover their asses and get high pay and more senior positions, but the real software developers see through the crap. If you're in doubt look at something they did themselves from the ground up, look at how it works and look at the code. I don't care if it was written on weekends or took 2 weeks to do what should take 2 days (or visa versa). The truth is in the src code *and* the final running software (because I've seen programs that run that are a nightmare under the hood).

    And then some (many?) people think they're good and they're not. What can I say? That's the way in all industries. I was lucky enough to have my first programming job at a company called Software Craftsmen Pty Ltd back in the early 80s and they lived by the craftsmen ethic. In my general experience maybe one in 10 software developers is a craftsman and maybe 6 or 7 out of 10 think they are. The coders in a project with the courage perceive the truth and know who does the real work and who's opinion is worth seeking can still do good work themselves, but chances are they'll be in the same job and company in 5 years whereas the real developers would have moved on or up.

    my 2 cents

    --
    pithy comment
  84. Mommy, make it stop! by Anonymous Coward · · Score: 0

    Mother of God, pray for us now and at the hour of our death...

    The terror from "Unmaintainable Code" is so utter and complete I doubt I'll sleep for the next three nights...

  85. Take me with you, Wizzard of Oz! by jotaeleemeese · · Score: 1

    To that land where the rivers are made of honey, were it nevers rains, were there are no badies and were the projects' requirments never change!

    --
    IANAL but write like a drunk one.
  86. Which one was Toshiro Mifune? by jotaeleemeese · · Score: 1

    Because there was also another Samurai (played by him masterfully) that faked his way to Samuraihood because he was just an impostor, althoug a brave one. I think 90% of programmers are like this Samurai but vehemently claim to be like the others.

    People, get of your fat a@@es and rent and watch this movie.

    --
    IANAL but write like a drunk one.
  87. Re: Singletons suck by PhilHibbs · · Score: 1

    My fave is this one. Damn, the link's broken, try this instead.

  88. Amen, and amen. by natersoz · · Score: 1

    Preach it bruthuh.

  89. Here's an analogy no one's used yet... by MoNsTeR · · Score: 1

    I read the review and all the 3+ comments, what it made me think of constantly was gunsmithing. Specifically, pistolsmithing and the 1911.

    There are dozens of manufacturers of complete 1911s, raw frames and slides, barrels, and the various small parts. Quality ranges from total junk to family heirloom/museum showpiece. And you could say that what seperates the men from the boys so to speak, is the difference between engineering and craftsmanship.

    If you look at the big names in the commodity 1911 space, about $600-$800, you'll find usually servicable pistols that get the job done most of the time. A Kimber, Springfield, or Dan Wesson will generally work, but not be too pretty. Blued, nickeled, or chromed parts on stainless guns. Uneven frame/slide/ejector/extractor blending at the rear of the slide. Mediocre slide/frame fit. Impropertly tensioned extractors. Factory magazines that don't work. Burrs on feed ramps or sear noses. Grip safeties that are fit poorly or not at all. Polymer and metal-injection-molded parts.

    Some of these flaws are cosmetic, some are functional. Some are showstoppers on occasion, most are trivial or nitpicky. But they are flaws nonetheless, and any mass-production 1911 is going to have them.

    Move up the price ladder a bit and you get your STIs, Valtros Les Baers, Rock Rivers, and Wilson Combats. Now these are some damn fine 1911s, but they're still production guns. They're basically hand built, with great slide/frame fits, no burrs, polished ramps and throated barrels, blended grip safeties, etc etc etc. And they'll cost you $1000-$2000. However, they are still production guns that are bought off the shelf. If they don't make what you want, you have to go elsewhere, or have the modifications done afterwards.

    The real quality is in ground-up hand-built guns, from the likes of Dane Burns, Ted Yost, Ned Christiansen, Teddy Jacobson, Cylinder & Slide, Kodiak Precision, Strayer-Voight Infinity, etc. From $2500 to $6000 and up, you get exactly what you want, built by hand from scratch, using exactly the parts you want, and achieving exactly the level of perfection you're willing to pay for. And wait for, as many of these 'smiths and shops have waiting lists measured in years. These are the guns built by craftsmen.

    What all this boils down to is the classic dilemma, do it Right, Cheap, Quick: pick two. Kimbers and Springfields are available anywhere for a reasonable price, but may not live up to expectations: they are Quick and Cheap. Baers and Wilsons are in stock and waiting to ship, of excellent quality, and moderately bank-breaking: they are Right and Quick. Infinity's and Burns Custom's approach perfection, will last a lifetime, and cost as much as a used pickup truck: they are two picks' worth of Right. (Incidentallly, the path to Right and Cheap is DIY'ing it.)

    This is the same dilemma that's existed all along in software. Arguing for "craftsmanship" is just suggesting that you should relax your requirements on Quick and Cheap, and value Right more highly.

  90. what also doesn't work by Anonymous Coward · · Score: 0
    is when inept management will at most (and this not very often) use the buzz words and grunts that sound very much like the terms describing any sort of professional software development or engineering process. Instead of even instituting the most basic forms of requirements analysis, architecture documentation and dissemination to the team, actual design, control of resources, configuration management or anything else loosely resembling a coordinated team effort... these "managers" will merely snarl and bark a lot while nothing gets done. Ironically they can be frequently heard commenting about the complete lack of any merit of a system or application simply due its being open source and/or free on the basis that "you get what you pay for" and "anything 'hacked' together is not going to be stable or consistent, much less extensible for the future." Well, our customers seems to be paying out their collective wazoos for a bloated piece of overdue trash that can be replicated completely (minus the bugs and bloat) in one week on off hours including the presence of requirements lists, architecture and use-case diagrams, domain analysis documents, user and admin documents and administration automation tools.

    This is in my opinion due to the fact that the majority of decision makers are a bunch of no talent sheep that can so easily be led anywhere as long as the correct formula of superficial wrapping is applied. (You know... morons!) *My appologies to Gene Wilder*

  91. Redundant information... by Anonymous Coward · · Score: 0

    I don't care anymore about books like these.. I write only programs i like to write.. and in the time i need.. RIGHT.. i dont work as a programmer.. because i'd quit.. programmers are the assholes in every company.. and that will never change.. I'd also quit my CS studies..Now I study E-technics and will go for hardware..

    Software development is only enjoyable if you do it in your spare time..

  92. bullshit artists by Anonymous Coward · · Score: 0

    and how good can a team's output be when it is staffed primarily with liars who claim to know every conceivable language yet fail consistently to demonstrate even the basics of algorithmic comprehension and implementation ability. VB is for many a nice glue code... it is NOT core logic and is like using MS Access as a 100 simultaneous user database.