Friday, September 24, 2010

The Hacker, The Novice, The Artist, and The Craftsman.

In my last blog  "Too Small to Refactor", I made the statement:
"Clean code has always been about money, and has never been about art."  
Apparently this took a few people by surprise.  One person comented:
"...I thought we were talking about craft, and the cost-cutting as a subproduct..."
So what is the difference between a craftsman and an artist?  And just to add some spice, how do they differ from a hacker and a novice?

I realize that I am making a Myers-Briggs type error.  People cannot truly be classified using binary attributes.  A person classified by MBTI as an introvert, certainly has some extrovert characteristics.  By the same token a programmer who shows some attributes of a hacker, probably also shows some attributes of a craftsman.

Still, I think the definitions of these terms can be useful as a way to classify programmer behaviors.

What is the difference between the Hacker, the Novice, the Artist, and the Craftsman?  It's all about their personal definition of "Done".

The Artist is done when the structure and behavior of the artist's code has achieved perfection in the artist's eyes.  There is no consideration of money spent, or money to be earned.  The artist does not care about ROI.  The artist does not care how long it takes.  The artist cares only about the final result.

An artist will spend hours, days, even weeks, on a single line of code.  An artist will throw away whole functions and modules because they somehow don't feel right.  An artist polishes, and polishes, and polishes in pursuit of some elusive goal of perfection.  

The Hacker is done when the behavior of the code achieves some personal goal.  The Hacker is not concerned with ROI.  The Hacker does not care about the code at all.  The Hacker does not care about how much, or how little, is spent creating the code.  The Hacker does not care if anyone else ever uses the code.  The Hacker only cares about making it work -- once.  After that, the Hacker loses interest.

The Novice is done as soon as the code works "well enough".  The Novice strives to minimize initial coding time.   The Novice is not concerned about ROI.  The future cost of the code is of no concern to the Novice.  Nor does the Novice care about the number of hidden and/or subtle defects left in the code.  The Novice simply wants to get to the next task as soon as possible.  The Novice is driven by schedule; or rather, the Novice is driven by pleasing managers who are driven by schedule.

The Craftsman is done when ROI has been maximized.  The Craftsman strives to be a good steward of the monies being spent.  The Craftsman want to make sure that every dollar goes as far as it can, and earns as much as it can in return.  Therefore the Craftsman makes sure the code works, and can be kept working with minimum extra cost. 

The Craftsman understands that most defects in behavior and structure will be very expensive to repair later and very inexpensive to eliminate now.  So the Craftsman pushes towards a very clean implementation.  But the Craftsman also recognizes that some rare defects in behavior and structure are going to cost more to eliminate than to tolerate; and so the Craftsman uses judgment, acquired over years, to maximize ROI.


  1. In terms of furniture production, we know from the growth of cheap furniture companies that true craftsman become a rare and endangered species. This is not because the cheap furniture is as good, but because it's good *enough*.

    I like to be a craftsman for my private projects, but I need to exercise more restraint when working professionally simply because if I don't I'll be priced out of the market. Most customers I know what something that's good enough.

    Or maybe that's the artist in me speaking? I agree that these classifications are useful for identifying attitudes, even if we exhibit more than one, or change our behaviour based on external influences.

  2. I do not for one second believe that "good enough" implies that you can not be a crafts-person. The crafts-people are doing things such that "good enough" doesn't slow down the entire companies development efforts over time ... they make sure that good enough is still unit tested, still has simplicity and still works as well as they can make it work. Those are the traits that make them a crafts-person and keep the company from suffering in the long run.

  3. I am definitely an Artist with Craftsman leanings. However the fact that I am conscious of this, and have been for a long time, fact helps lean further & further towards craftsmanship.

    The Novice title though should be separated into 2 categories; Novice who doesn't *yet* know any better and the ???? who either doesn't care or doesn't care enough to know better.

  4. ... you know what's interesting? How Unit Testing brings all these types in line.

  5. I apply these case by case... Having a degree in Art and a self educated developer, I will build "novice projects" for myself or for artistic expression. Built to "just work" but also built using my "artist sense", or "emotion & feeling" of what should stay or go.

    I also consult for clients, which have to be built to max ROI. Which I do, and do well (Or I wouldn't be self employed). Oh, and I have always been a hacker, I love finding new or unusual ways to make things work. Just offering a different point of view from someone who aspires to do it all.

  6. "People cannot truly be classified using binary attributes."

    But that's exactly what you are doing. You claim you are either a craftsman and care about ROI or you aren't a craftsman and don't care about ROI. Then you give some very broad reasons why you may not care about ROI, either by ignoring it or through ignorance. You are only acknowledging that there are many reasons that someone can disagree with you. But every time they are wrong while you remain right.

    I know a few management/lead types that are deeply concerned about ROI, and make the most breathtaking and boneheaded decisions because of it. They are not craftsman by any stretch of the imagination, except that they 1) aren't hackers, artists or n00bs and 2) "maximize" ROI.

    I remember when craftsmanship meant something other than "agreeing with the way I think".

  7. The term hacker was defined perhaps before you were born. You should read up on it:

  8. I feel like The Engineer should be in this list.

  9. @blowmage
    Is it really all about being right?

    The Artist, who writes clean code for its beauty and elegance, is probably your best bet on an open source project where there is no monetary ROI to calculate.

    The Hacker is probably great at delivering a throw-away prototype, or researching a new technology and determining pitfalls before integrating it into a system.

    The Novice doesn't force you to explain why sometimes faster is better than better when you have a time-critical bug or feature request in a legacy system that is complex and untested.

    That's not to say the Craftsman's input isn't valuable in all of these situations. If I had to pick only one of those traits to fill an entire team, I'd prefer Craftsmen. But then, I once heard someone say, "When all you have is a hammer, every problem starts to look like your thumb."

    Never be ashamed of a diverse toolbox, even if you don't use your wire-cutters as often as your hammers or your screwdrivers.

  10. Naive characterizations. Look at the any of the multiple models about stages of "expertise", such as Dreyfus. Although some characteristics you mention are more personality-based, and may exist across different stages of a career, the majority are simple stages in the advancement (or lack-there-of) within a craft.

    As for the "When ROI has been maximized", it is very Lean of you. And has about as much chance of existing in reality as a project without politics attached. And the sea being boiling hot. And pigs having wings (thank you Lewis Carroll).

  11. In "Professional Software Development", Steve McConnell says:

    When interviewing candidates for programming jobs, one of my favorite interview questions is, "How would you describe your approach to software development?" I give them examples such as carpenter, fire fighter, architect, artist, author, explorer, scientist, and archeologist, and I invite them to come up with their own answers. Some candidates try to second-guess what I want to hear; they usually tell me they see themselves as "scientists." Hot-shot coders tell me they see themselves as commandos or swat-team members. My favorite answer came from a candidate who said, "During software design, I'm an architect. When I'm designing the user interface, I'm an artist. During construction, I'm a craftsman. And during unit testing, I'm one mean son of a bitch!"

    Seriously though, I guess a good interview process should try to establish in which quadrant(s) (Artist, Craftsman, Hacker, Novice) a candidate's behaviour falls.

  12. اليك خدمات منزلية متقدمة تساعدنا علي الارتقاء بشركة ركن البيت في مدينة الدمام من خلال اعمالها المتميزة التي تقدمها في مجال النظافة والقضاء علي الحشرات فخدماتنا متنوعة مثل شركة تنظيف بالدمام التي تكون متخصصة في اعمال النظافة العامة التي تتمثل في المنشأت الكبيرة والصغيرة بجميع انواع واليك خدمة متميزة ايضا وهي شركة تنظيف فلل بالدمام التي تكون لديها كل الامكانيات المثالية التي تساعدنا في تنفيذ خدمات نظافة الفلل المستعملة والمفروشة بواسطة فريق فني لديه كل الامكانيات التي تساعده في تقديم ذلك ولديك خدمة ايضا نظافة الشقق بواسطة شركة تنظيف شقق بالدمام وعمل التنظيف اللازم لها بواسطة فريق لديه اعمال التميز والتنفيذ في تقديم الخدمات المخصصة في اعمال النظافة واليك خدمة مثالية نقدمها في القضاء علي الحشرات الصغيرة بواسطة مبيدات طبيعة تساعدنا في ذلك فتعاملك مع شركة مكافحة حشرات بالدمام لديها امكانيات متميزة تساعدك علي ان تخلصك من الحشرات لان تجد كل ذلك الا من خلال ركن البيت التي لديها كل الامكانيات في البحث عن شركة رش مبيدات بالدمام التي تقوم بالرش بواسطة فني مختص معه الادوات اللازمة للقيام بذلك وعطائك الضمانات اللازمة علي ذلك واليك خدمة نقل اثاث منزلية تساعدك في الوصول الي مكانك الجديد بواسطة شركة نقل اثاث بالدمام التي لديها كل الامكانيات والسيارات التي تساعدك علي تحقيق ذلك

  13. This blog is so nice to me. I will continue to come here again and again. Visit my link as well. Good luck
    cara menggugurkan kandungan
    obat penggugur kandungan

  14. تمتع الان معنا مع افضل المميزات وباقل الخصومات التى نقدمة الان من صيانة كاريير المتحخصص فى كافة انةواع الصيانة الان فى مصر وعلى اعلى مستوى ممكن وباقل الاسعار المختلفة الان من توكيل كاريير التى نقدمة الان فى مصر صيانة تكييفات كاريير

  15. سارع الان بالتوالص معن مع افضل فريق الان على اعلى مستوى ممكن وباقل الخصومات الممكن من شركة حراسات امينة التى نقدمة الان , كما اننا نقدم افضل العروض الان من شركة امن وحراسه فى كافة المحافظات وباقل الاسعار المخلتفة

  16. يمكنكم الان الحصول على افضل الخصومات التىة نقدمة الان من دار مسنين بمدينة نصر التى نقدمة الان وعلى اعلى ومستوى ممكن الان فى مصر دار مسنين التى نقدمة الان

  17. تمتع الان معنا مع افضل المميزات من زراعة الشعر الان من زراعة الشعر فى تركيا التى لا احد يقدمة الان , كما اننا نقدم افضل مركز زراعة الشعر التى نقدمة الان فى كافة انحاء تركيا

  18. تواصل الان معنا مع افضل المميزات العالمية الان وعلى اعلى مستوى ممكن الان وباقل التكاليف الممكن من مظلات سيارات التى نقدمة الان للحافظ على السيارات الان , كما اننا نقدم افضل مظلات حدائق الان ايضا وباقل التكالبف الان ونقدم افضل سواتر قماش

  19. الان يمكنكم الحصول على افضل فريق الان من المتخصصون فى كافة انواع صيانة يونيون اير الان فى مصر , كما اننا نقدم افضل الخصومات الان من توكيل يونيون اير فى مصر التى نقدمة الان فى مصر يمكنكم الان الحصول على الان فى مصر

  20. الان يمكنكم الحصو على افضل الخصومات الان فى مصر وعلى اعلى مستوى ممكن من شركة تصميم مواقع التى نقدمة الان باقل الاسعار المختلفة من شركة تسويق الكتروني الان وباقل الخصومات الممكن

  21. تعرف الان عهلى افضل تجهيزات مطاعم الخصومات والمميزات الان من تجهيزات محلات الان فى مصر لاننا نقدم افض المعدات ,العالمية الن وعلى تجهيزات سوبر ماركت افضل المميزات