Learn Craftsmanship of the Software -- How to write the code in maintainable, reusable and extensible way