Be a Craftsman

  • Comments posted to this topic are about the item Be a Craftsman

  • Man, you're on a roll with great topics and write-ups about those topics.

    In Jeff Attwood's article, he posted "what we do is craftsmanship, not engineering" and I have to take strong exception to that. A lot of folks practice what I call "crapmanship". 😉

    The mantra for many GUI programmers has become "If you have to write comments, your code isn't good enough" and then refuse to add even a simple header to explain the purpose of the class or even who wrote it and when. Crapmanship prevails and they've gotten real good at justifying it. Don't get me started on the use of Crapmanship tools like Hibernate and NHibernate... I love it when a GUI Developer justifies the performance problems of an "eager get" that has joins to 32 different tables with functions on the join criteria and also has the nerve to blame the performance problem on SQL Server. I also love the morons that designed the tables in such a fashion as to be a part of the reason the GUI Developer felt it necessary to do an "eager get".

    Shifting gears, let's also take a look at the Crapmanship that many writers of SQL practice whether they're GUI programmers or database programmers. Same problems occur there. No documentation, horribly formatted code, the use of all lower case or all upper case code, rampant use of RBAR, etc. I can't speak of programming technique in C# or Java, but if they practice the same Crapmanship there as what they do in T-SQL, the world is in big trouble.

    This editorial fits in with your last one... no one considers what will happen in the future even if they practice so called "best practices" because, IMHO, some of the best practices (like not including documentation in code) are wrong.

    Is code "experimental" in nature rather than "engineered"? I'd have to say it's certainly swung that way. No one really does any up-front planning at the code level anymore. No one says "Before we decide, can someone show us the impact on performance of these two different methods?" Nah... they say "here's what it should look like on the screen and what we want to see if you push this button." No one tells the developer "Look, dumbass, you can't use NHibernate here because it will crush performance."

    Getting back to people who write SQL... just go through this forum and look at the code that some folks offer as solutions to problems. It's quite indicative of what happens in the real world. Crappy to read and crappy performance.

    I strongly believe that code shouldn't actually be "engineered" because it stifles creativity and you may miss a wonderful new method of doing things if software design is draconian in nature. But I don't see much in the line of Craftmanship in this world of code. Not only is software engineering mostly dead, but so is the idea of Craftmanship in code because "good enough" will always be shippable in the eyes of management and in the minds of DILIGAF developers that simply want to get things off their plate or don't have the hair to say "No... and here's why".

    [font="Arial Black"]"In this order, make it work, make it fast, make it pretty... and it ain't done 'til it's pretty."[/font] --Jeff Moden, circa 1996

    --Jeff Moden


    RBAR is pronounced "ree-bar" and is a "Modenism" for Row-By-Agonizing-Row.
    First step towards the paradigm shift of writing Set Based code:
    ________Stop thinking about what you want to do to a ROW... think, instead, of what you want to do to a COLUMN.

    Change is inevitable... Change for the better is not.


    Helpful Links:
    How to post code problems
    How to Post Performance Problems
    Create a Tally Function (fnTally)

  • I'm with Steve and Jeff, but I would frame it differently. I think that computing is still in its infancy and the path towards craftsmanship, or professionalization, is a matter of growth that will take decades or even centuries to achieve. As an example, the first doctors (witchdoctors) screwed things up for many generations before they slowly codified standards of conduct and procedure.

    We are in a phase where business pushes for immediate results and, until they have suffered enough startling setbacks, we are going to have to deal with a lot of crappy programming. Are we ready to professionalize the trade? This might be a good time to create analogs to the AMA, medical boards, and mandatory internship programs before we certify someone as an "informatics engineer". But instead of "Microsoft Certified _blank_ Engineer" we would want something more independent, respectable even. Maybe we can spur ACM, IEEE, and academia to get something going?

    Wouldn't it be great, some day, to haul a creep in front of the informatics board for writing unmanageable code, despite repeated warnings and fines, then drum him out of the profession?

  • So long as Microsoft isn't responsible for the certs. I see no reason to know how to write in C# if I'm going to be a DBA or Database developer. 😉 It's a bit like saying that you have to be both a heart surgeon and a brain surgeon even if you only want to work on hearts.

    --Jeff Moden


    RBAR is pronounced "ree-bar" and is a "Modenism" for Row-By-Agonizing-Row.
    First step towards the paradigm shift of writing Set Based code:
    ________Stop thinking about what you want to do to a ROW... think, instead, of what you want to do to a COLUMN.

    Change is inevitable... Change for the better is not.


    Helpful Links:
    How to post code problems
    How to Post Performance Problems
    Create a Tally Function (fnTally)

  • A three year residency could be specialized in things like web development, graphics, databases, or networks. And the more challenging sub-specialties could have a fellowship after the residency.

    So, to be a DBA you would probably be done after the residency (hey, it ain't brain surgery!) However, it might not be a bad idea to have some exposure to procedural languages, with respect to RDBMS, because you may end up maintaining CLR routines on SQL Server. And, what if you had landed in the Teradata world? (I just did.) I'm only getting started with it, but it looks like you can't even create a user-defined function without compiling a little C.

  • I can't speak of programming technique in C# or Java, but if they practice the same Crapmanship there as what they do in T-SQL, the world is in big trouble.

    Well it is worse in C# that is the reason Microsoft product group developers and the developer forum staff wants stack trace because stack trace shows actually what the developer is doing. I want to see relevant code and relevant is the operative word because I only need to see related code.

    But instead of "Microsoft Certified _blank_ Engineer" we would want something more independent, respectable even. Maybe we can spur ACM, IEEE, and academia to get something going?

    I think ACM and IEEE had a software developer certification that I think was sub standard compared to Microsoft and Sun developer exams. I looked into taking it, the cost was high but there was no code if I remember right. The current Microsoft exams makes you a developer because the base exam 70-536 is one of the most comprehensive development exam I have seen.

    I think software will be craft if there is design, development, testing before deployment, only rich companies pay for such software. So there are very few developers who can take an idea and convert it to a deployed product.

    Kind regards,
    Gift Peddie

  • Jeff Moden (8/1/2009)


    Man, you're on a roll with great topics and write-ups about those topics.

    Glad you like them, and I'll try to keep them going.

  • David Korb (8/1/2009)


    ...because you may end up maintaining CLR routines on SQL Server.

    Heh... just having a little fun here... if you know T-SQL well enough, there isn't a need for CLR routines except maybe for a nice little Regex CLR and then you could get a specialist to create one for you. Once written, it needs no maintenance. 😉

    And, what if you had landed in the Teradata world? (I just did.) I'm only getting started with it, but it looks like you can't even create a user-defined function without compiling a little C.

    That's a bit like asking what if an MD suddenly had to become a Vet (which is just a difficult as being an MD, by the way). If that happened and like anyone else in that situation, I'd certainly take the time to ramp up in C and very quickly. Fortunately, Teradata isn't the only show in town.

    Just like a heart specialist, there's nothing wrong with specializing in the world of databases. In fact, there's nothing wrong in specializing in just one. Some will argue with that but consider this... as smart as they are, I probably wouldn't let a human heart specialist maintain the heart of my favorite race horse or vice versa.

    --Jeff Moden


    RBAR is pronounced "ree-bar" and is a "Modenism" for Row-By-Agonizing-Row.
    First step towards the paradigm shift of writing Set Based code:
    ________Stop thinking about what you want to do to a ROW... think, instead, of what you want to do to a COLUMN.

    Change is inevitable... Change for the better is not.


    Helpful Links:
    How to post code problems
    How to Post Performance Problems
    Create a Tally Function (fnTally)

  • I spent about 40 minutes crafting a reply, but when I hit "Preview" received a "The session identity provided has expired or could not be found." message. All the work was lost. Guess I'm done with this thread!

  • David Korb (8/2/2009)


    I spent about 40 minutes crafting a reply, but when I hit "Preview" received a "The session identity provided has expired or could not be found." message. All the work was lost. Guess I'm done with this thread!

    Ugh! I know what you mean. That's been a problem on this forum forever. I've been bit by it many times. I've gotten into the habit of copying what I typed before hitting any buttons and it's been a life saver.

    40 minutes, eh? What was the gist of it?

    --Jeff Moden


    RBAR is pronounced "ree-bar" and is a "Modenism" for Row-By-Agonizing-Row.
    First step towards the paradigm shift of writing Set Based code:
    ________Stop thinking about what you want to do to a ROW... think, instead, of what you want to do to a COLUMN.

    Change is inevitable... Change for the better is not.


    Helpful Links:
    How to post code problems
    How to Post Performance Problems
    Create a Tally Function (fnTally)

  • What was the gist of it?

    You can't always choose what you work on (well maybe _you_ can). 🙂

    A DBA residency would have generalized rotations, different employers and RDBMS. If you want a sub-specialty in SQL Server, then that can be a follow on fellowship.

    I went into my experience becoming an electrician through the IBEW apprenticeship. Lots of models to choose from medicine, engineering, and construction trades. The nuances of the training is the easy part. The hard part is unionizing IT workers.

  • I'm just going to skip over the words "unionize IT workers". It may be right for some but not for me, thank you.

    And, yeah... I've pretty much always chosen what I work on and how I work on it.

    --Jeff Moden


    RBAR is pronounced "ree-bar" and is a "Modenism" for Row-By-Agonizing-Row.
    First step towards the paradigm shift of writing Set Based code:
    ________Stop thinking about what you want to do to a ROW... think, instead, of what you want to do to a COLUMN.

    Change is inevitable... Change for the better is not.


    Helpful Links:
    How to post code problems
    How to Post Performance Problems
    Create a Tally Function (fnTally)

  • I've always viewed software as a craft, and viewed myself as a craftsman *not* an engineer. The definition of craftsman I like is: "a creator of great skill in the manual arts". Thus emphasizing software as craft and art, not engineering. And I'll add one more criteria: doing it for the love of the craft.

    Anyone can be *competent*, given enough time and persistance. But if you want to be *great* you have to have the passion for it, a delight in the craft itself, for its own sake.

    I think another reason software should be viewed as a craft is that we pretty much make one-off products, especially corporate developers. True, things like Windows are mass produced, but creating the first one is all hand-crafting. Yeah, there are templates and factories and automated testing and all the rest, but those are tools, just as much as a wood plane or a hammer.

    Craft for the win. 🙂

  • When I hear the term "craftsman", I associate that with a great house, great piece of furniture, or some truly lasting creation from a skilled, experienced and talented artist. I think we are all getting a bit too full of ourselves when we start using those terms for any kind of coding. What we do is not going to last - face it - there is not going to be some great-grandson of ours rushing his friends over to this house to show him some stored procedure that Grandpa wrote 100 years ago.

    My younger brother is a gourmet chef - has been for a couple decades. We were once talking about our careers and both commenting how we create things that dont last. They have to be appreciated in their moments. He whips up fantastic food, arranges a handsome plate of it, and people devour and its gone. Then he gets up the next day and does it all over again.

    When I see some of the coders I supervise these days, I kind of think of them the same way. The implement our web changes and updates, people consume those, and within a few weeks, sometimes months - they are gone - replaced by newer changes. Then they come in day after day, and do it all over again.

    In software, we are not building the great pyramids, hanging gardens of Babylon or anything even close. Yes, I appreciate talent, admire skilled developers, and want them to know I appreciate quality work - but its just electrons. Its not going to last very long and its just very hard for me to wrap my head around the idea of using the term "craftsman".

    I came up in this business in the age where you had to know and do it all. Today, younger developers seem to feel they dont need all that knowledge. Maybe they do SQL, but not .NET. Maybe they do Web work, but not apps. That kind of thinking hardly rings of "craftsman" to me. Sounds more like "specialist"...

    Still, I hold tightest to the same definition of my own development work as I always have. Through most of my career when asked what I did for a living my answer was usually the same, said with a smile - "I am a digital prostitute - you pay me and I do what you want, when you want it, where you want it, and how you want it done."

    There's no such thing as dumb questions, only poorly thought-out answers...
  • Interesting you mention cooking. 37 signals talks about inspirations from chef's and recently Andy Warren started cooking a bit and said it gave him an interesting perspective. Perhaps that should be something we get more developers to try!

Viewing 15 posts - 1 through 15 (of 43 total)

You must be logged in to reply to this topic. Login to reply