Wednesday, October 7, 2015

Know where you are

I am constantly bombarded by noise. Texts, Videos, Links, SMS, Calls, Chats plus a host of Apps. Some are OK, but a lot are simply noise adding to the mental harassment. 

I do not know if you all feel this, but I do. Every day, Every moment.

It was not like this when I was in school. That was in the 80s.

I had few friends. Quite close we were. We used to play all the time, read books from the local library, swim in a river, play Table Tennis and of course a lot of Cricket. 

School and then my Engineering also. Quite silent. No Facebook and WhatsApp, No mobile, no email. Spend time with friends, code in the lab, read in the library, watch movies.

Same continued at work. I was fixing kernel panics and coding drivers for a Unix flavour. So we used to use ‘chat’ on the VT100s on command line with fellow workers. We used emails quite a lot among us. The world was yet to wake up to Hotmail and the like. FB was out of sight and so was Google and so was the internet browsing at large. 

Then there was this explosion like a big bang in the late nineties and accelerated crazily through the dawn of the millennium.

I was deep into Telecom, protocol stacks and moving up the system ladder into the world of applications, building crude versions of WhatsApp and Angry birds on the earliest of the smart phones. We were all wondering what the killer app would be only to realise later that it is not going to be one, but many.

Now 2015 and I am surrounded by tons of noise. 

Not everything is added by others. I go voluntarily and hang out. Earlier this was a calm period for my brain or some void. Now it is filled with noisy bytes.

And I am sure this is going to increase enormously as we go along.

The best part of one’s life is when your time is channelized to the right things on hindsight.

This is easy to say, but highly difficult even without the digital noise.

With internet, it is a humongous task.

Everything has its negative. The greatest invention of humans has its negative in completely losing ourselves. Our time.

Machines have already triumphed over Mankind. 

I feel there will be few people awake out there.

But I do have some hope. We created this. We can wriggle out of it as well. Somehow.

Wednesday, July 1, 2015

On coding and timelines

Coding and creating apps or software out of it needs time and space. It should be treated as an art like painting , sculpting or writing a novel. By this I do not mean to compare in the sense of the abstract or subjective nature of other art forms. But mainly from the point of view of giving its due time to completion. Like you cannot put a gun on some ones head and generate a great novel, you cannot do the same with writing code also.

It is a misunderstanding that you can have an army of people to manage and manage the managers and generate beautiful and meaningful software products. Corporations have people mainly to handle people or customers. But when the same thing extends all the way to putting a gun on the head of a developer and make him sling code, monitoring it with spreadsheets and project plans, the whole thing loses its beauty. It is like making a beautiful painting with a team effort. I am not again saying this in the sense that software should be developed only by individuals. I mean it mainly that it would be beautiful to have highly skilled and experienced individuals write good apps all by themselves if it is possible.

Coding is not the same as hunting. When you face a mortal enemy you need support. Or when it is voluminous you need assistance. But coding is not about any of these. It is about finding the most elegant and beautiful way to solve a problem using a programming language. This is better done by a very few experienced and skilful programmers than a group of hunters going about without a clue.

Making a team write a software is not analogous to a conductor playing out a symphony with a troupe. In this case the notes for each of the musician is laid out , rehearsal is done and the conductor has got the final outcome in his head. This is not at all the case with software developed by a team. It is probably 10% of it. A large portion is simply chaos and unwieldy with a ball of mud after a while. When you have just an individual coding the software who has the experience and  vision of the final outcome, it becomes a lot easier to cater to the 'ups' and 'downs' as it happens while keeping the code still beautiful. May be there can be a few more skilled individuals working together. But when you start to have 'projects' with a lot of people who do not code tracking it, the coding is seen as a factory output. When? How long? Why so much time? Why can't we cut short here? Why should we do this feature? etc.

Part of the issue comes from the case that the person who codes do not understand the big picture. So you need the other who understands the big picture. But he cannot code. It is like the story of a lame guy walked around by a blind guy carrying him on the shoulders. The lame guy keeps telling where to go or navigates and the blind guy moves in that direction carrying him. While practicality does not allow the luxury of a single person who has the vision and the skill to make it happen in many situations, it should be seen at least to the extent that the vision and the timelines to achieve it should in no way compromise on the elegant nature of the code. In fact, part of the vision should be to 'also produce an elegant code'. Having a manageable, readable and clean code is like half the distance crossed already in your effort to build a product. A well written code saves a lot of time when you start to scale in terms of features down the line.

Iterative nature of adding features is good, but the iterations of coding should be done in such a way that one builds over the other easily. It should not be a thoughtless , hurried release and then throw away to do the next.

The best coders use less code to achieve more. DRY (Don't Repeat Yourself) principle is of utmost importance. When you can write code in a way majority of your features are resting on few building blocks which in turn rest on even more fundamental blocks of code, it is a clean construction. You can communicate your code very easily to others. Human brains operate on abstraction. When large parts of your code can be abstracted to some usable, easy to remember function it becomes very easy to get the picture and the flow. And further dissection can be done cleanly into smaller parts, it is a delight to maintain, enhance and operate a piece of software.


Writing bad code and getting a market share for your software is like conquering new territories in the colonial era only to leave them soon. You better not do it.