Friday, October 28, 2011

It's Alive

I and my friend are both in the process of building our houses (I actually already moved in, but the process never ends ;)).
Needless to say, that we invested a lot of energy (and money) to oversee the construction.

Somehow, during one of our talks, we touched a very interesting observation. We both hired an architect (a real one, not a software architect :)) and we both benefited from the great ideas these architects brought to the table.

You see, the house I am building is just a simple 5 rooms apartment, which will stay for me the same 5 rooms apartment regardless where the kitchen will be located. However, just from a quick glance at the sketches, my architect is able to spot things, that usually would take me a long time to identify and to appreciate as a better utilization of the space and the structure.

The interesting thing is that the same process happens to me while working with code.
Somehow the code becomes alive when I am looking at it.

These aren't just simple assignments or method calls. These aren't just simple lines of code.
When I read and write software (*) I see relations and responsibilities...
I see "real" interactions between objects trying to talk together in order to accomplish a task.
It is quite amazing, as sometimes I am able to "visualize" the code in front of me: It forms a story.

Usually I can follow the story by spotting who said what to whom; As all great stories I can spot the places where somebody said too much or tipped something to somebody he shouldn't. Following the plot, I can identify the core characters (the must components); Without them there is no point in the story at all. Watching the interactions enables me to visualize different abstraction levels; Those in turn will reveal the required actions on the core (or other) characters.

Definitely, I can continue on and on with the analogy.
Yet, I am not the first one to point about the relation between writing in general and writing (constructing) software.

If you really want to become a great programmer you should read (and write) code as a story; Visualize and watch the plot!

(*) The reading is intentionally before the writing

Friday, October 21, 2011

Fostering Software Craftsmanship (or How to Build Successful Teams) - Hebrew

Last month I presented a short lecture about Fostering Software Craftsmanship (or How to Build Successful Teams) to one of the top notch technological units in IDF.

The lecture is a hybrid of management and engineering skills.
It focuses on the dissonance between the needed software engineering skills in the industry and what happens in the reality. The main idea in the talk is that using Software Craftsmanship principles as individuals and as TEAMs makes it possible to create high quality groups that produce great products.

The lecture is in Hebrew and I hope that you will find it interesting...