Today's post is not so technical but still
talks about the software existential philosophy in an informal manner. I
remember when I was an amateur, was fixated/obsessed on every cool software
ideology. It’s like having a spanner/fix and trying to apply that on every
single bolt/problem I came across. This is quite common in early stages of any
profession, where the pursuer doesn't have a big picture about domain of
interest, and hence doesn't have judgement or acumen to weigh pros and cons of
an approach. On turning back, one realizes how naive we have been. Time has
come now that, we see panoramic view of the software domain (relatively
speaking), we laugh at ourselves and it’s quite a revelation too.
Now, how does
above story fit into software story? One learns hard way that architectural / design
principles and concepts are not silver bullet, in the sense that, they cannot
be applied like the spanner on every bolt we come across. We need to
consciously and meticulously weigh and factor the advantages and disadvantages
in a disinterested/unbiased fashion. Like if you take, one shouldn't be fanatical
on principle - "flexibility of code" and apply in every scenario,
region, routine and sub routine of code. This on the other hand obfuscates
things and becomes a maintenance nightmare. One should use his/her best
judgment in applying these principles. This can arise only by experience and
experiments.

