in reply to Re: Programming Versus Engineering
in thread (OT) Programming as a craft

I'm not sure I follow your analogy.

Craftsmen build things? Non-craftsmen don't build things? Craftsmen don't plan? Architects aren't good at specifics?

What if you hired a painter to design your housing development? Would he be as bad at it as your carpenter might be because a painter is a craftsman? Can an architect not be a craftsman?

Let me be specific: I believe that the source code is the design. Compiling is the manufacturing. Engineering is, what, measuring the tensile strength of a stable quicksort algorithm?

Replies are listed 'Best First'.
Re: Re: Re: Programming Versus Engineering
by jZed (Prior) on Dec 16, 2003 at 07:09 UTC
    Yes craftsmen design things, but the nature of what they design is different from what engineers design. A carpenter is expected to be good at designing and creating objects like cabinets and doors, using primarily the single material of wood and a few screws. If the carpenter is also good at designing and creating complex multi-object, multi-material things like houses and housing developments, that's cool, but it's not something we'd assume from knowing they are a carpenter. Some architects can build cabinets, but that doesn't neccessarily relate to whether they are good architects or not.

    A webmaster who has become proficient at CGI scripts to do simple tasks might also be able to design an enterprise-wide software strategy, but it's not something we'd assume from knowing they are a webmaster. Most of us here at the Monastery can take potshots at particular bits of how PM works, but it's gods like you who have the whole picture.

    An engineer is someone who understands how a complex group of things built from a diverse set of materials work in conjunction with each other and who is capable of designing and planning a system that will safely perform the functions it needs to. I'd say some programmers could be described the same way.

      Okay, so if the important part of being an engineer is the safe design and synthesis of an object as a whole from diverse materials, then a general contractor is an engineer while a carpenter or a drywaller isn't.

      If I were nitpicky, I'd ask if a semiconductor engineer were really a craftsman, because he's expected to be good at designing and creating chips, using primarily the single material of silicon and a few transistors.

      I think what you're really trying to say is "Engineers design complex things and craftsmen don't." That's a fair opinion. I completely disagree, but I think it's much closer to your opinion than the silly metaphors I dragged you to. :)

        the silly metaphors I dragged you to. :)

        :-)

        I don't use these metaphors just to play with words, I am trying to forumlate arguments that can be used in situations where management is making decisions without consulting technical staff. In such cases I will say something along the lines of "You can plan a bridge building project without consulting the metal-workers, but if you plan it without consulting the engineers, remind me not to drive over that bridge."

Re: Re: Re: Programming Versus Engineering
by Anonymous Monk on Dec 16, 2003 at 19:18 UTC
    Let me be specific: I believe that the source code is the design. Compiling is the manufacturing. Engineering is, what, measuring the tensile strength of a stable quicksort algorithm?

    I think it is a serious mistake to equate code with design. Granted, an agile methodology intermixes design and coding in an iterative and mutually informing process, and the final code (and documentation) may be the only tangible artifact produced, but that still does not mean the code *is* the design.

    As for engineering, yes there certainly is engineering in software development, running the gamut from the ad-hoc or experiential engineering that any builder / tinker / craftsman etc might display, to algorithm analysis, to the design of language features that increase assertions of correctness (within particular domains of correctness).

      I think it is a serious mistake to equate code with design.

      Why?

        The code is the product, not the design. It is rather easy to think of code as a design or blueprint for a compiler, but a compiler (or interpreter) doesn't *build* a software product from a blueprint, it merely translates it a software product (the source code) from a human readable/executable representation into a machine readable/executable representation. Machine code is still just code after all, there is nothing more *product* like about it above and beyond the source code it was compiled from.