Wednesday, March 17, 2010

Are you a good craftsman?

In a previous post I ranted about CTOs who allow their products to accumulate technical debt.

Over the past few months, however, I've come to realize that the fault does not lie only with management: the level of craftsmanship displayed by the average coder is dismal -- at least in the environment where I move (spain, startups, new media, PHP). Today I stumbled upon this video by Uncle Bob Martin which makes me realize that the same tragedy also happens elsewhere [well, I already knew, but Uncle Bob provides visual proof -- check it out].

We could go back and forth discussing who is to blame: the employers who don't know how to choose and train their personnel? The people who postulate themselves as programmers without even knowing what they don't know? Others who know what they don't know, but are too lazy or too stubborn to learn and apply it? Our colleges and universities, who don't train would-be programmers properly? But.. what's the point? What would I do with that blame?

Applying the "think globally, act locally" principle, I've decided to start with my direct environment, where I can make the most impact: my team and, first and foremost, myself.

But, what should I do?
 
Let's face reality: the craft of computer programming is less than 60 years old. If you compare it to pottery, we would be in 24940 BCE. New programming languages appear, expand, and are forgotten every [mercurian] year. Even programming paradigms cycle fast enough that it's hard to keep track of their names. It's not enough to become good once: I and my team-mates can only be good software craftsmen by actively keeping track of all these developments, learning how to apply them, and applying them wisely and courageously.

So I vow to:

1.- Spend a few hours every week reading blogs & books about the craft of computer programming, and learning to apply what I read.
2.- Make everything in my hands to make my team mates do the same (which should be a lot, as I am their functional manager).
3.- Have the courage of applying these new learnings at work whenever we firmly believe doing so is in the best interest of our employer.


I hope this will make me a good software craftsman.

And you? What are you doing to be a good craftswoman or craftsman?

4 comments:

  1. Review toons of source code (e.g. apache web server, mysql, unix)
    Read good books like:
    http://mitpress.mit.edu/sicp/full-text/book/book.html
    http://www.cs.brown.edu/~sk/Publications/Books/ProgLangs/

    CS paradigms and most concepts have been more or less the same during the past 30 years, changing paradigms is a very enriching experience! You may try:
    http://norvig.com/jscheme.html
    http://www.swi-prolog.org/
    Some smalltalk (even google, read and hack http://www.littlesmalltalk.org/ )
    etc.

    ReplyDelete
  2. Excellent suggestions. Indeed moving across paradigms is an enriching exercise. Thanks!

    I disagree however that paradigms have not changed in the last 30 years -- although it's true that most concepts have been around for at least this long.

    From Wikipedia:

    "Object-oriented programming (OOP) is a programming paradigm that [...] was not commonly used in mainstream software application development until the early 1990s"

    Aspect-oriented is even newer. In a smaller scale, we have e.g. Ruby-on-rails "convention over configuration" which only became (moderately) wide-spread during the last decade. Orthogonally to these "program paradigms", we have the "programming paradigms", where evolutive design and TDD are the latest major innovations. And I'm talking only about the ones which have enjoyed some wide adoption.

    ReplyDelete
  3. I wish I had seen this post earlier. I think it is useful to study lisp, since it has access to all the paradigms in its grasp. However, for a lot of people, the fact that it looks like an anti-ALGOL language with just brackets for syntax, it can feel uncomfortable to use. An alternative is to use a more modern lisp language like python or javascript. With more recent development of javascript, especially the v8 engine, javascript is becoming a complete solution for both client and server side general programming. A good implementation of this is node.js.

    With regard to the comment about paradigms not changing in the past 30 years, I think it would be more accurate to say that they have not been mainstream (blame sun's promotion of java and the guy that made a horrible sea monster called c++ by sticking home-made legs on to c)

    ReplyDelete
  4. Wow…what else can I say? You are awesome dude. Now I know why I must try my hand at freelancing. After I read your blog, I realized that my time has come to kickstart my career as a freelancer. Many people are making lots of money through selling my logo design,article writing services platforms. So, why can’t I?

    ReplyDelete