We as developers, or programmers, or coders, or whatever you would like to call your self, face a particular problem that is common to all of us, unless you’re like a Brian Kernighan or Guido van Rossum. That problem is remembering or keeping track of the knowledge you gain. Because for programmers, the stuff they learn at school, lays only the foundation of things we will encounter in our work. The real struggle starts after we leave school. Because the knowledge base of IT or programming is a rapidly and constantly changing. That is fact. It may be troublesome or weary to keep up to date of all things you want to know. The foundation you gain at school only can help you so much. I’m not saying that they don’t matter, they are of utmost important when it comes to gaining real comprehension over just following some steps some other nerd has listed down. It must be always a self learning process, to stay up to par with the rapidly changing technical world.
But in completing a technical task practically requires so much practical knowledge of whatever technology you are using. More often than not, we might have to deal with more than one technology at once, or we might have to reapply whatever solution that we have researched for again after a year or so. We put lot of effort in finding a solution for a coding problem. When programming, thinking takes more time than actual coding. If we do not keep track of what we have done, we just might forget about the solution altogether and all that research effort is a huge waste.
That is why I saw the importance of personal documentation. It has helped me immensely in my work. That’s why I thought of sharing about this with you. This might not be that much of a surprise to you other bloggers out there. But there are some who just cringe at the thought of documentation or writing something. Ironically they are sometimes coders too. I hope this post shines some light on the importance of the matter.
I first saw the use of this when I was working with Blender as a committer for my Google Summer of Code projects. There it was necessary to keep a log of your work to complete the project.
This is actually not personal documentation, but I gathered lots of my process and habits from this. It was later when I started to work only, that I really started using Personal documentation. At first I was faced with a challenging problem that was to do with serialization in .Net. There was a lot of stuff I researched on and pretty soon it was overwhelming, and I needed a place or a method to organize my thoughts and process.
So I naturally turned to writing. It just came intuitively that writing down my thoughts would help me solve the problem. And it did! This has helped me numerous times in solving pretty challenging problems in various environments.
But later on I started doing it more methodically. I still use a personal word document to track stuff. It may sound so primitive what with all the online services. But I didn’t put much thought in to it when I initially started it, just thought about writing, and went to the first solution that came to my mind. I still do it, but in the lookout for more elegant solutions. http://dillinger.io/ looks promising. This will straightaway help with blogs too. But I’m open to other suggestions. Please drop a comment and enlighten me. The features that would be useful would be collapsible headers, easy navigation and version control would be a plus.
You can use any number of categories you like. But what I kept using, from the days of blender was these
- To keep track of the various tasks you gotta do, I list anything and everything that I want to do here too. And also
- In progress
- Keep track of what you are doing at the moment. Might be several things in parallel. The usefulness is quite obvious. For any particularly challenging problem, thought, experiments, and plans can be included here and be trialed as you want. For example a problem with several solutions. I can strike out the solutions I try which really narrows down to the best solution there is. You just can’t miss anything.
- This keeps track of what has been completed. Really a copy and paste of whatever that was completed from In progress. So you don’t forget the solutions.
- While searching for a particular problem, I go on some trains of thoughts on the general use of technology, that might not have to do with the problem you are dealing with. For example if anything that you see while researching and find intereseting can be put here. For later reference. It’s not just material. I record my thoughts here too, This is the section that is most important to you if you are a blogger. Because you discuss universal things here.
- Any other notes, research data, debug values, whatever.
Be creative in finding the categories that truly calls to you. Experiment and have fun. For example, All of my project doesn’t have these categories, I have different categories for different projects.
Just recently this has helped me so much, I was working on a bug in a new project, and I documented everything as per my habit. I documented the complex process of a file importing this project used as searching for a solution. But only a month later I was facing another similar bug, and my sorry mind has forgotten the flow I went though before. So I was delighted to find that I have documented that time. Saved me a heck of a lot of time.
This is clearly not a selfish thing. I have used my documentation for my blogging as well. Any solution that you discover is precious to you and is equally or more precious to other developers too. Because of the vastly expanding knowledge, solutions are very valuable. The technologies have their own tutorials and guides and API documentations, but when it comes to practical problems, we are the ones who discover the real solutions. Therefore It’s actually a crime you commit on programming, if you let those precious solutions go without being shared. The knowledge base is highly disorganized. Google helps, only if we have the content. So don’t think of your blogs as something that lands you jobs. They are of extreme importance to the whole IT world. I’m sure the records I kept on my work on Blender have helped others on the matter, at least I wish so.
One might argue that you don’t always have the time to do this. That is a dilemma we face as developers our whole frikking life don’t we? But overall, the effort that you put in to this would not be a waste at all, this will ease the life of you and your fellow developers. Otherwise any effort that you put in doing just your work without sharing your knowledge, is a waste of effort considering the big picture, as you might waste others and even your time too, if someone has to research the solutions again. So lets ease each others developer lives with a little bit of effort.