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.
