I think of software lies somewhere nebulously between craftsmanship and engineering.
There's a flavor of pure craftsman/artisan that can make an excellent product with overall little "technical" knowledge. A traditional potter works much on instinct, texture, feel. He might know how to select a clay by color, not knowing or even thinking about the constituent minerals. Water is added in eye-measured doses.
Then, there's a flavor of pure engineer that executes most of his tasks in structured, industry-prescribed, formally-verified, deterministic ways. Particle aerospace engineers are the extreme in this category--they're a slave to the formal methods that rule their design, build, and test processes.
But we software "engineers" float back and forth between the two--and all the time. One minute, we might hacking together a throwaway script that checks if Amazon has toilet paper. The next: writing a test for a rules engine that tests every corner case in a truth table. Or proving that some algo runs in O(log n) time.
Most craftsmen/artisans lie somewhere on this spectrum, but I feel we software "engineers" wobble around a large swath.
So, call us software engineers, call us software craftsmen--they both apply.
I think of software lies somewhere nebulously between craftsmanship and engineering.
There's a flavor of pure craftsman/artisan that can make an excellent product with overall little "technical" knowledge. A traditional potter works much on instinct, texture, feel. He might know how to select a clay by color, not knowing or even thinking about the constituent minerals. Water is added in eye-measured doses.
Then, there's a flavor of pure engineer that executes most of his tasks in structured, industry-prescribed, formally-verified, deterministic ways. Particle aerospace engineers are the extreme in this category--they're a slave to the formal methods that rule their design, build, and test processes.
But we software "engineers" float back and forth between the two--and all the time. One minute, we might hacking together a throwaway script that checks if Amazon has toilet paper. The next: writing a test for a rules engine that tests every corner case in a truth table. Or proving that some algo runs in O(log n) time.
Most craftsmen/artisans lie somewhere on this spectrum, but I feel we software "engineers" wobble around a large swath.
So, call us software engineers, call us software craftsmen--they both apply.