Tuesday 19 January 2010

"Perfect is a verb, not an adjective" [1]

Learning new stuff is paramount in our line of work. I know, I know Cobol coders might tell you otherwise, and yeah, cobol coders might be home free, but the rest of us mortals need to keep up with the pace technology dictates. Or at least not to fall behind irreversibly much. Because then you might become the subject of Murphy's law, saying "If a hammer is all you have, everything you see will appear to look like a nail". It seems trivial, yet many software companies' don't seem to be sporting any learning or improving. Employers and employees alike seem to be confident in and/or content with their current experience and skills. Obviously it's extra effort short term to spend time and energy to learn new things, but with newer and better tools and techniques you can deliver better sotfware in shorter time. In fact the benefits and the profit are so plain to see, that it doesn't need any further explanation or examples, but then again this post would be ridiculously short.

Once you start looking up new stuff, or rather - because it might be something old - stuff you don't know, it becomes second nature, and you don't even notice all the advantages it gives you, or the way programming becomes easier with recently acquired knowledge. So it's difficult to pick any one example from our past year but I settled for mocking frameworks.
When we got to know TDD we dived into writing lots and lots of incomprehensible unit and functional tests nobody understood or was able to maintain. Then we stumbled upon mocking frameworks, and how we could live without one, beats the hell out of me now. We started to use Rhino Mocks, but soon enough our unit tests once again started to look like a can of worms, so this time intentionally searching for a cure, we found out about the AAA-concept (it's short for arrange/act/assert, but I can't find the exact link anymore; go google it up!). Finally we learned that we can use the lambda-expression to make our code even cleaner and readable. We learned and learned till unit testing and object mocking is less and less of a technical problem, and we can concentrate more on what we are trying to express and accomplish with our tests.
Again this example it's not even about new stuff, it's just stuff we hadn't known before. Keep learning and remember there are other useful tools than just the hammer.

References:
[1] Kent Beck: Extreme Programming Explained 2nd Edition

1 comment:

athalay said...

I think, the key is:

1. Whether you are able to notice that you need to improve at a point, or you just keep using your existing knowledge, habits and your good ol' hammer.

For this, it is crucial to have the courage (consisting of the person's own courage and the support of the project management), but that only comes (from my experience) if your viewpoint is already widened (by researches, experience, etc).

2. You find the (preferably) best solution for your problem

The ultimate goal is to widen your viewpoint as much as possible by following new (main) areas of the technology platform you are using. Actually the so-called 'architects' - I start to not like this phrase - should follow all areas of software development, because for a specific problem they should advice and deliver the best solution (including platform, architecture, etc) as possible!

Also scratching the surface of new things is good for start, but many times, it's not enough. The most valuable features of new things/frameworks/platforms (eg. WPF, EF) from which you can leverage the most, requires a little deep down digging in them. This requires effort (time & cost!) but will save your a$$ (actually your future) if you invest in it. And don't forget, you'll get knowledge with them which brings the courage which you may require.