The FOSS system is strong today and covers most areas of software infrastructure. If one wants to build expertise in a new area for eg., for carrying out technical research & prototying, a good option would be to read open-source rather than just read available documentation (which may be scarce or incomplete or even obsolete). In the agile world more of useful software and less of internal software documentation is being produced, and therefore the art of reading & quickly comprehending other people's code can greatly benefit an engineer in the coming times. I believe that this skill today is equally (if not more important) than leraning to code great or big.
For eg., you can read SIP protocol using SIP RFCs, but one step better would be to read code of FOSS SIP implementations. It tells you how that software is written, what it supports, how good its quality is (incase you want to reuse it for your prototype/development project). Plus it can tell you what are the key implementation challenges in implementing SIP. Another example would be Caching technology.
However there is a difference in data and information. If you read 5 cache open sources and come out with a list of key design elements & functionality it supports and what it dosen't at the end of 1 month, it is not the most productive outcome. One should be able to identify key design techniques, question it using the 5-why principle as to why things are done like that to being out the core problems and challenges. For eg, the information that a cache uses its own custom overlay filesystem is of little use than the knowldege that disk I/O is key performance & scalability challenge in a cache implementation. It will lead you to consider using SSDs and High RPM disks or 64 bit implemntation for big RAM disks apart from doing a special filesystem for massive I/O on a regular disk. This is system level knowledge not just a software issue and could be solved even in hardware as a design alternative.
Ofcourse regularly reading code helps you develop as a software designer & developer by learning from the good and bad practices (even algorithms) of other people's codes. I repeat that going ahead this will be a very key skill to look for developers to acquire in a fast paced produce development environment.
No comments:
Post a Comment