views:

557

answers:

15

In the ending conference of Agiles 2008 (Buenos Aires, Argentina) some of the lectures talk about becoming craftsman instead of engineers. What do you think about that?

Edit: I add a link to a Tobias Mayer Blog link

+3  A: 

If being crafstmen includes being a good Engineer. Then my answer is a sound YES!

vmarquez
I agree with you. You can't be one or the other. Programming is both a craft, and a science. Kind of like architecture. A bad architect will make an ugly build that is strong, or a weak building that is pretty, or a weak and ugly building. A good architect will build beautiful strong buildings.
Kibbee
A: 

One of the questions I consider on a daily basis is how much of the value I add to my company can be obtained from a machine. If you consider "craftsman" to imply creativity and "engineering" to mean logic, then the engineer can be replaced long before the craftsman.

On the other hand, this is an embarrassingly shallow (and probably offensive) analysis and doesn't at all adequately represent the value I add as an engineer. But it keeps me from becoming complacent. Or arrogant. Most of the time. :-)

Adam Liss
A: 

Definitely. Craftsmanship is the next level. Of course it's a personal decision, but.. there, you can see on which side of the fence I stand.

FOR
+1  A: 

I believe that the majority of software engineering done at the moment is not actually engineering in a professional sense of the word. If you were to build a bridge that fell down because an unusual event happened (e.g. cyclone etc) that would be classed as a poor job. However in (some) software it is acceptable for something to crash when given unexpected input. If we really were applying engineering principles to software, it should be able to handle these circumstances gracefully. It really should not be acceptable to be able to produce very poor products and still have people buy them, and put up with the poor behaviour.

I don't believe we need to change what we are called, we need to verify that the product that we produce works properly and is not just a house of cards.

mdec
I believe that logic is flawed. If you build a bridge, it shouldn't fall under conditions you would expect to happen. A bridge in Michigan shouldn't be expected to handle class 5 hurricane winds. Building it to do so is bad engineering, because you are making it more expensive then it needs to be.
Kibbee
In the same way, building software should be done in a way that it works under expected conditions. Also, programs should indeed degrade gracefully under bad input. Only bad programs crash when they get bad input. Good software reports the errors to the operator.
Kibbee
Sorry, I should have clarified that I was referring to events that should happen, i.e. a program that takes a command line argument of a file name should not crash if the file does not exist.
mdec
Well... Speak for your own code! -smile- ...I have code that has managed pipelines, ships and oil refineries for over 25 years with nary a (discovered!) bug. And I have code that has processed tens of millions of cycles over 11 years with nary a (discovered!) bug! It _is_ possible. (end part 1)
Richard T
(cont.) Real-time programmers - who usually control hardware - MUST get it right because lives depend on it. Similarly, the 11 year system I referenced was for NASA... It's a discipline. You can learn to write bullet-proof code. Know what you are doing and BE CAREFUL (pedantic/anal) - it works.
Richard T
A: 

It kind of reminds me of the development of this very StackOverflow site ;)

Not everything in here is absolutely based on engineering foolproof techniques (Scott Hanselman was kind of appealed by the idea of a web server running on the same box than the database), but as Joel Spolsky said in his book, it is about being Smart and getting things done, and that requires craftsmanship.

Of course, you can still be... hum... both ;)

VonC
+3  A: 

Craftsmanship is a very good description of good programming. It combines the logic and science of software engineering, but combined with art. Good programmers produce elegantly written code that works as well as it looks.

Jim C
Exactly, people do not realize how any artist also has to deal with a lot of field specific engineering in a way. Think about photographers and camera settings, or painters and specific kinds of paint/canvas/brushes... programming is no different except the output is meant to be practical.
Kendall Helmstetter Gelner
I agree in principle, but I have to point out that the 'Science of Software Engineering' doesn't exist, as such, today.
Ken Gentle
A: 

Good Engineers make software that they want to show off

Good Craftsmen write code that they want to show off

Do both :)

Alex Gartrell
A: 

I don't think so.

To me, 'engineering' implies discipline. 'Craftmenship' implies being ad hoc and chaotic.

Most programmers are already undisciplined and chaotic in their processes enough.

Edit: It seems that a lot of you don't agree with me. Could you please explain your definition of a 'craft' then?

TraumaPony
And the thousands of craftsmen who built the old world thank you for your appreciation of the foundation they gave to you. Modern feats of "engineering" are less resilient ... just look at bridges.
The Wicked Flea
Think of all the things that those craftsmen built that HAVEN'T survived to this day.
TraumaPony
Think of how many were disassembled or outright destroyed, this greatly outnumbers the amount that were "destroyed" by age.
The Wicked Flea
'Craftsmen' build what are considered 'heirloom', beautiful, elegant works. There is little 'ad hoc' or 'chaotic' about the practices of a Craftsman.
Ken Gentle
(The Wicked Flea) "destroyed" by engineers of this age.
Setori
@Ken G: I don't want beautiful code if it is full of bugs, due to it being built without planning, testing et al. I prefer my code to _work_. If it's 'beautiful', all the better, but if it's beautiful but doesn't work, then what's the point of it?
TraumaPony
+7  A: 

A 'craftsman' build superior products using techniques that are personal, not necessarily widely known and generally with a very personal integrity and reputation. Learning to be a craftsman takes years of learning techniques from other craftsmen and developing ones own personal style.

An Engineer builds on the widely accepted knowledge and practice of Engineering Disciplines. An Engineer may seek and gain a Professional Engineer status. 'Software Engineering', as such, doesn't exist yet. There are many excellent Software Developers and Software Development practices. Yet software doesn't lend itself to the same application of applied knowledge and expertise as Mechanical, Civil, Chemical, Electrical/Electronic, Materials Engineering.

Give it some time, though. At this point (~75 years in to it), Civil Engineering didn't have the Right Triangle yet. We're still evolving the practices, principals and knowledge to make Software Engineering possible.

I believe that we, as a profession, need Engineering disciplines and techniques to eventually deliver predictable, repeatable results at lower costs than we currently do. Craftsmanship is a step in the process.

IMNSHO.

Ken Gentle
A: 

I remember a blogger speaking about this, let me be so kind and regurgitate some of it.

  • Science (from the Latin scientia, meaning "knowledge" or "knowing") is the effort to discover, and increase human understanding of how the physical world works. link

  • Art is the products of human creativity. link

Computers are a human creation, therefore programming, based on computers, and not based on the physical world (the quantum physicists snorting away), therefor software engineering cannot be a science, in the strictest sense of the meaning. So on a more creative note, might as well calling ourselves software artists.

____ deals with abstract topics, forming and creating and culling concepts, expressing in a visually pleasing manner to convey meaning.

Substitute ___ with the word 'art' or 'software'. both make sense.

After detaching from these silly names and label and just accepting software for what it is, only then can we make proper use of these labels without entanglement of thought, that gives you room to just study the disciplines of the art, and strive to improve yourself. Treat it as if you were to study the art of making samurai swords, by simply doing it. Likewise execute the principles as the samurai warrior uses that same sword to slash through the torso of his enemy. (hopefully we will realise that the true enemy is our attachment to these terms and label)

Setori
+1  A: 

I think this "we can't just be X, we need to be Y to be a good programmer" is mostly a question of semantics. We feel the need to point out that a lot of programmers (the X's) may be in many ways talented, but somehow miss the mark. We propose a definition of those who have that "something extra" (the Y's).

Let's side-step the naming debate, and simply say that a good programmer is a balanced mixture of mathematical, logical, and creative skills. The word that defines the perfect balance is subjective, as are the levels of each skill required. Better to talk in terms of specific qualities lacking or exemplary when talking of someone or a scenario.

Just to throw my own subjective wording in to the mix - I like Linus's use of the word "taste". I'll go for a scientific engineer with taste.

Draemon
A: 

Frank Lloyd Wright was definitely a craftsman, but his houses have lots of structural problems and, I imagine, can be pain to actually live in.

I prefer Robert Martin's injunction at Agile 2008 (Toronto) -- be professional, write clean code not crap.

To me this implies both sound engineering principles and attention to detail, including usability.

tvanfosson
A: 

You need to be a craftsman when you apply proven techniques to solve a problem. You need to be an engineer when you solve a problem that has no proven techniques associated to the solution.

Daniel Auger
A: 

I am starting to get the sense that we are hitting multiple concurrent nails with a one serial hammer. It wont work because the tools that we use, operate in a completely different paradigm of understanding. The world is parallel and concurrent the majority of todays software is serial. (despite shared state threads - as you need to lock the data, but if the program dies while data is locked - woe is you) messaging based concurrency might be a solution to this problem.

I believe software engineering will come to more mature level once we can create truely concurrent programs, simplistically.

luckily with the moore having some trouble optimizing cpus further we are being forced into this domain of programming. Enter the lambda.

Setori
+1  A: 

An agile team that is able to sustain the delivery of working software that meets business objectives uses engineering practices (test driven development, simple and evolutionary design, continuous integration, shared code base etc.). Does that make the team engineers? Collaboration with a product owner to delivery business value that pleases the business is a craft. Does that make the team craftsmen?

I believe the point being made is that a team should use the best engineering practices along with collaboration to craft the delivery of the best working software possible. Craftsmanship is pride in your work. Engineering practices is a tool used by the team to ensure that the team delivers quality software and can continue to do so indefinitely.

Cam Wolff