In programming, on occasion, optimization can be one of the last things taken into account.

In the long run, this could prove costly.

Many times, making a few small changes can catch a lot of love hanging fruits which really improves performance.


In programming, having great tools is invaluable. Producing good quality tools and utilities is an important part of the software engineering life cycle.


It is something to theoretically know something. It is totally something else to apply it practically.

This is part of the life long education that one goes through.

This principle also applies in the programming world.

One can know all the algorithms and theories. However applying these concepts in practical problems is what differentiates good programmers.


In terms of easing usage and development of software, having great documentation is crucial.

It cannot be emphasized enough.

Providing good examples and usage guides is always a great help.


General tools that can be used in many software projects is one of the most important pieces of the software life cycle. Most projects absolutely rely on a few well known and trusted tools in the design/execution phase. Toolchains are sets of software tools that work together. A great example of a generic framework in this area is the free, open source CMake.


In any data structure where a node has multiple children, there needs to be a way to disambiguate child nodes with the same value. This is helpful when figuring out the path to the nodes. One approach is to always use a unique identifier when constructing the path for each node in addition to its value.

Writing code

One can always find ways of writing clean code in an iterative manner.

When writing new code, the process usually involves something like:

  1. Write some code which ‘works’
  2. Run some test cases
  3. Go back and clean up the code
  4. Rerun the tests
  5. Further clean up the code
  6. Etc etc

Process to write code

Writing code is not a trivial exercise when done for the first time. However, having sufficient training material and reference documents helps a lot.

This is not available in many projects which are too new, too old etc. In such situations, the coder needs to do a lot of improvisation and head scratching especially if fixing bugs in someone else’s code.