Monday, April 06, 2009

Prioritization

कोई भी सॉफ्टवेर डेवेलोपमेंट अनेक छोटे-छोटे विभाजन करके आगे बढता है | कुछ सरल, तो कुछ कठिन ; कुछ छोटे जिन्हें एक व्यक्ति अकेले ही बस कुछ घड़ी में पूर्ण कर दे , तो कुछ इतने विशाल ५० व्यक्तिओं कई मॉस में भी न पूर्ण करें | जैसे भी कार्य हो, अन्यामंसक होना अत्यन्त दुखदाई बन सकता है |

उद्धरण के लिए - समझो के रास्ते-चलते कोई आपका थैला छीन कर भाग जाये | आम तौर पर कोई भी व्यक्ति चोर का पीछा करने वाला होता है। अब पीछा करते करते यदि चोर अपने किसी साथी को थैला थमा दे, और दोनों अलग अलग रास्ता भागें तो निर्णय करने में यह ध्यान रखे के वह साथी संभवतः लंबा नाच नचाने कि त्यारी कर आया है। उसका पीछा करना कठिन होना ही है। साथी ही में प्रथम चोर को पकड़ने कि संभावना अधिक है, और चोर पकड़ा गया, तो चोरी तो पकड़ी जानी ही है।

अतः हमारे साथ जब कोई नवयुवक चाकरी करने आए तो उन्हें समझाना अनिवार्य होता है कि वे महारथी अर्जुन के तरह अपने कार्य के सफल पूर्ति के ओर अग्रसर रहें, चूँकि किसी और कार्य पर ध्यान बांटना भी हार है |

-------------------------------------------------------------------------------------------------

We do our development work focussed on lots of tasks; some complex, some simple, and some plain unwieldly. Working on complex tasks, it's easy to get distracted and lose track of the original task; something that can be expensive.

Therefore one of the notes we have for newbies is -

Stay focussed on your in-hand task, because digressing means you've already lost.

For instance, say
  1. You're shopping
  2. Someone snatches your shopping-bag, and runs off
  3. You chase the thief
  4. The thief tosses the bag at an accomplice, who runs off too
  5. Options now are -
  • Continue chasing the original snatcher
  • Chase the accomplice who just showed up (probably refreshed, and full of stamina)

It makes sense to opt for (a), because catching hold of the snatcher implies a higher probability of regaining your belongings.

Saturday, April 04, 2009

Applied Programming: Reuse

Information Technology / Programmer wannabes invariably have the word 'Reuse' drummed into them almost from the first day as a student. This is one probable reason we Indians are usually good programmers. We reuse everything, even our Soul ( see: reincarnation )

Jokes apart, the reuse that is drummed into an IT student is usually in the context of OOP, or programming where we talk of reusing the code written once to be used elsewhere. The term reuse, though, goes much further. We reuse a great many things without even realizing it. For instance, software development contracts will often have similar, even almost identical clauses. The reason is that similar problems are expected to arise, and therefore are dealt with in a similar manner. Whilst these rudimentary applications of reuse are valuable, reuse itself can be far more valuable by way of mentoring (something that only came to mind after I read this)

The reason I choose to link mentoring to the concept of reuse is because mentoring provides an apprentice with the opportunity to capitalize upon the experience of the mentor. Organizations such as IBM, Microsoft, InfoSys have mentor programmes to help their employees growth.

What should I look for in a mentor?
The thoughts that come to my mind are -
  1. Trust & Communication (the two must go together)
  2. Better than average understanding of the domain (Finance, Software...) under which the mentoring occurs
  3. Better than average Time Management skills, and as a corollary - not a workaholic
  4. Compatibility
I put in the third point - Time Management - with some diffidence because -
  • It simply doesn't make sense to assign someone as a mentor, only to find they're not able to justice to either their primary role or their mentor role.
  • The apprentice might pick up the bad-skills too
  • Poor time-management might also mean a stressed work-style; in the long run this could be detrimental to health, and to teamwork.
In winding up, reusing knowledge gained by others is something we do all the time - right from the first 'A' at school, this continues throughout life. The broader form of reuse of experience by Mentoring provides a means to build a relationship between the mentor and an apprentice that could potentially be capitalized upon by the organization.