- कॉलेज के दिनों से जारी 25 साल की प्रोग्रामिंग यात्रा को पीछे मुड़कर देखते हुए, यह संस्मरण तकनीक से अधिक लोगों, रिश्तों और अनुभवों पर केंद्रित है
- कॉलेज के कंप्यूटर लैब में संयोग से सीखी गई HTML की Source View के 10 मिनट की झलक, एक लंबे समय तक व्यक्तिगत वेबसाइट बनाने और बनाए रखने की शुरुआत बनी
- 8086 प्रोसेसर के reset vector पर jump करके सिस्टम को reboot करने वाला एक छोटा प्रयोग, एक सहपाठी के मन में जिज्ञासा से शुरू होने वाले सीखने के रवैये को गहराई से बिठा गया
- spaghetti code debugging, set-top box animation की व्यावहारिक विफलता, CTF प्रतियोगिता में शीर्ष रैंक जैसी ठोकरों और विकास की घटनाएँ बार-बार दोहराई गईं
- समय के साथ यह महसूस हुआ कि problem-solving की क्षमता प्रतिभा नहीं बल्कि अनुभव का परिणाम है, और अंततः बचता है विशेषज्ञता, नैतिकता और लोगों के साथ पेश आने का तरीका
वेब की शुरुआत: सोर्स देखना(Viewing the Source)
- 2001 में कॉलेज में दाख़िले के तुरंत बाद, शाम के समय कंप्यूटर लैब में वेब देखते हुए
susam.com टाइप करने के साथ पहली बार वेब से परिचय हुआ
- पास बैठा एक सीनियर, जिसे कंधे के ऊपर से देखा जा रहा था, Internet Explorer के View > Source मेन्यू को खोलकर समझाता है कि वेबसाइट दरअसल HTML में लिखा हुआ टेक्स्ट है
- Notepad खोलकर
<BODY><FONT COLOR="RED">HELLO</FONT></BODY> जैसी सरल HTML सीधे लिखी गई और ब्राउज़र में यह कैसे दिखती है, उसका प्रदर्शन किया गया
- उस समय
FONT tag का व्यापक उपयोग होता था और HTML tag को बड़े अक्षरों में लिखने की परंपरा आम थी
- फ़ॉन्ट का आकार और रंग बदलना, center align करना, background color बदलना जैसी चीज़ें दिखाकर वेब के काम करने का एक छोटा परिचय दिया गया
- यह समझाना मुश्किल से 10 मिनट चला, लेकिन उसके बाद World Wide Web अचानक कम रहस्यमय और कहीं अधिक दिलचस्प लगने लगा
- समझाने के बाद उस सीनियर ने सीट वापस नहीं की और खुद वेब इस्तेमाल करता रहा, इसलिए सीटों की कमी के कारण वापस हॉस्टल लौटना पड़ा
susam.com डोमेन पहले से एक Turkish cuisine business के पास था, इसलिए उसे register नहीं किया जा सका, और बाद में .net domain चुना गया
- यही संक्षिप्त मुलाक़ात आगे चलकर अपनी व्यक्तिगत वेबसाइट बनाने और लंबे समय तक चलाते रहने की यात्रा की शुरुआत बनी
रीसेट वेक्टर(The Reset Vector)
- कॉलेज के दिनों में कंप्यूटर लैब में Intel 8086 आधारित MS-DOS मशीन पर assembly language में elevator control program लिखते समय की घटना
- क्लास में सीखी हुई बात याद आई कि 8086 reset होने पर CS:IP FFFF:0000 पर सेट होता है
- यह जानने की जिज्ञासा हुई कि
DEBUG.EXE में उस address पर jump करने से क्या होगा, और इसे सीधे चलाकर देखा गया
C:\>DEBUG -G =FFFF:0000 command चलाते ही सिस्टम तुरंत reboot हो गया
- इसे देख रहा एक मित्र, जो हर semester topper रहता था, बहुत चौंक गया और पूछा कि ऐसा सोचने का ख़याल कैसे आया
- एक हफ़्ते बाद वह हॉस्टल आकर बोला कि भले ही उसके अंक हमेशा सबसे ज़्यादा रहे हों, लेकिन किसी छोटी-सी जानकारी को याद करके खुद परखने वाली जिज्ञासा उसमें नहीं है
- उसने कहा कि अब वह सिर्फ़ टॉपर बनने का लक्ष्य नहीं रखेगा, बल्कि सीखी हुई चीज़ों को खोजते, परखते और आनंद लेकर पढ़ेगा
- बाद में भी उसके अंक ऊँचे रहे, लेकिन वह फिर कभी प्रथम स्थान पर नहीं आया
- प्रोसेसर के reset entry point पर jump करने का वह एक प्रयोग, किसी के सीखने के रवैये को प्रतिस्पर्धा से खोज की ओर मोड़ने का कारण बन गया
Man in the Middle और पहली engineering भूमिका
- कॉलेज से निकलने के बाद पहली नौकरी में e-banking product की technical support team में तैनाती मिली, जहाँ एक विशेष component deploy करने के लिए installer चलाने का काम मिला
- Python में लिखा installer target environment के बारे में कमज़ोर मान्यताओं के कारण अक्सर fail हो जाता था, इसलिए पहले हफ़्ते में installer को स्थिर किया गया और step-by-step user guide लिखी गई
- code सुधारने से ज़्यादा user guide को बेहतर प्रतिक्रिया मिली
- बार-बार होने वाले support कार्य की सीमाएँ महसूस होने लगीं और अधिक गंभीर development काम चाहने पर कई बार team transfer का अनुरोध किया गया
- अंततः दूसरे शहर में स्थित Archie(architecture) team के interview का अवसर मिला
- Archie team, e-banking product को संभालने वाले web framework और core architecture components पर काम करती थी
- API routing, authentication·authorization, cookie management आदि को Java Servlet और JSP से in-house implement किया गया था
- यह संरचना Spring या Django जैसे open source framework आने से पहले बनाई गई थी
- banking environment में उपयोग होने के कारण कड़े security testing और periodic audit अनिवार्य थे
- 2006 के telephone interview में SQL injection और XSS mitigation जैसे security सवालों के जवाब दिए गए, लेकिन MITM(Man in the Middle) शब्द पहली बार सुनने पर यह मान लिया गया कि इसकी जानकारी नहीं है
- interviewer ने कहा, “PKI और MITM को अच्छी तरह पढ़िए. हम corporate banking product में digital signature feature implement करने वाले हैं.”
- इसके बाद कई हफ़्तों तक RFC documents, public key infrastructure(PKI) और public key cryptography standards का गहन अध्ययन किया गया
- शुरुआत में यह कठिन और बोझिल लगा, लेकिन समय के साथ यह एक सहज और परिष्कृत प्रणाली की तरह समझ में आने लगा
- नए शहर में जाने के लगभग एक महीने बाद open source Bouncy Castle library का उपयोग करके digital signature feature पूरा किया गया
- उसके बाद भी product के कई core हिस्सों पर काम करते हुए, सैकड़ों बैंकों और लाखों उपयोगकर्ताओं द्वारा इस्तेमाल किए जाने वाले परिपक्व सिस्टम में अपना code शामिल होने का अनुभव मिला
- manager एक बेहतरीन mentor थे, और उनका समर्थन लंबे समय तक आत्मविश्वास की नींव बना रहा
- लगभग 20 साल बाद भी वह product चल रहा है, और कभी-कभी ग्राहक की तरह browser developer tools खोलने पर तब लिखे code के निशान दिख जाते हैं
स्पेगेटी कोड(Spaghetti Code)
- 2007~2008 के आसपास OpenTV set-top box के लिए widget development के proof of concept(PoC) कार्य में भाग लिया गया
- अत्यंत सीमित C language environment में code लिखते समय widget के बीच-बीच में crash होने की समस्या आई
- उलझे हुए logic और बेतरतीब pointer operations के कारण, अपनी ही लिखी हुई चीज़ समझना मुश्किल हो गया और code spaghetti code की स्थिति में पहुँच गया
- चार सदस्यों वाली टीम के lead और architect को code tarball के रूप में सौंपा गया
- जिस समस्या को कई घंटों तक हल नहीं किया जा सका, architect ने code मिलने के सिर्फ़ 5 मिनट के भीतर एक ख़ास file में pointer bug के रूप में सही-सही पहचान लिया
- वह एक line ठीक करते ही crash तुरंत गायब हो गया
- इस अनुभव से एहसास हुआ कि भले ही खुद को काफ़ी अच्छा समझा जा रहा था, लेकिन अच्छा software developer बनने की राह अभी लंबी है
- उसके बाद कई वर्षों तक बढ़ते हुए, अब software complexity संभालने की क्षमता उस समय की तुलना में कहीं अधिक हो चुकी है
Animated Television Widgets
- उसी दौर के एक दूसरे project में Java ME(Micro Edition) आधारित set-top box platform के लिए widget development की ज़िम्मेदारी थी
- project तीन पक्षों के सहयोग से चल रहा था
- हमारी कंपनी: software vendor की भूमिका
- बड़ी telecom company: DTH television service brand की मालिक
- set-top box manufacturer: hardware और platform का प्रदाता
- telecom company की ओर से पूछा गया कि widget पर slide in·out जैसी animation effects लागू की जा सकती हैं या नहीं
- partner meeting में set-top box manufacturer ने साफ़ कहा कि वह set-top box animation support नहीं करता और यह संभव नहीं है
- यह सोचा गया कि अगर widget draw किया जा सकता है, तो उसकी position थोड़ी-थोड़ी बदलकर बार-बार redraw करके animation संभव हो सकती है
- इसी सिद्धांत से emulator पर सही चलने वाला demo बनाया गया
- अगली meeting में demo दिखाए जाने पर set-top box manufacturer ने कड़ी प्रतिक्रिया दी और तुरंत काम रोकने की माँग की
- वजह यह थी कि उसने आधिकारिक तौर पर जिस चीज़ को असंभव कहा था, यह उसके विपरीत था
- telecom company के प्रतिनिधि ने दख़ल देकर कहा, “जिस feature को आप असंभव कह रहे थे, ये लोग उसे चला कर दिखा रहे हैं,” और
manufacturer होकर अपनी ही product performance न जानना कैसे संभव है कहकर कड़ी फटकार लगाई
- बाद में वास्तविक hardware पर test करने पर पता चला कि emulator में smooth दिखने वाली animation TV screen पर स्पष्ट झटकों के साथ दिख रही थी
- कई हफ़्तों तक frame rate adjustment, buffering method change और rendering loop optimization की कोशिश की गई
- सीमित embedded hardware performance की सीमा सामने आई, जो computation और rendering का भार संभाल नहीं पा रही थी
- अंततः telecom company ने यह तय किया कि “अधकचरी animation से बेहतर है कि animation न हो,” और feature को ही हटा दिया गया
- नतीजे में set-top box manufacturer का आकलन व्यावहारिक रूप से सही साबित हुआ
अच्छी आशीषें(Good Blessings)
- 2009 में RSA Security में लगभग एक साल काम करने के बाद, गणित और algorithm केंद्रित अधिक बौद्धिक काम की तलाश हुई
- RSA Laboratories के chief scientist Dr. Burt Kaliski ने सीधे बातचीत का प्रस्ताव दिया और career direction पर सलाह दी
- उसी सलाह के आधार पर एक नई team में शामिल होकर बाद के 6 साल वहीं काम किया गया
- parser generator, formal language specification और implementation
- petabyte-scale database के indexing और query engine development
- लगभग हर दिन कुछ नया सीखते हुए career का सबसे आनंददायक समय बिताया
- कई साल बाद यह महसूस हुआ कि वह छोटी-सी बातचीत career trajectory बदलने वाली थी, और उसके लिए आभार व्यक्त करते हुए email भेजी गई
- Dr. Kaliski के उत्तर में यह पंक्ति शामिल थी
- जैसे दूसरे लोगों ने उनकी career में निवेश किया, वैसे ही बढ़ते हुए लोगों को प्रोत्साहन देना उनका उद्देश्य है
- एक पीढ़ी से अगली पीढ़ी तक अच्छी आशीषें पहुँचाना
CTF स्कोरबोर्ड(The CTF Scoreboard)
- 2019 तक आते-आते, अब शुरुआती 20s का नया engineer नहीं बल्कि कई वर्षों से C/C++ आधारित low-level networking और database systems बना रहा एक mid-career staff engineer था
- career अब Go और Python आधारित microservices development को lead करने वाले नए चरण में जा रहा था
- व्यक्तिगत projects के कारण Python और Go पहले से उपयोग में थे, इसलिए यह बदलाव अपेक्षाकृत स्वाभाविक था
- October Cybersecurity Awareness Month के अवसर पर कंपनी के भीतर CTF(Capture the Flag) प्रतियोगिता आयोजित हुई
- इसमें SQL injection, weak cryptography, binary reversing, stack overflow exploit जैसी कई तरह की technical puzzles थीं
- प्रतिस्पर्धा और time limit वाले problem-solving से दबाव महसूस होने के बावजूद भाग लिया गया, और लगभग 8 घंटे में समस्याओं के करीब 90% हल करके पहला स्थान मिला
- प्रतियोगिता के दौरान सहकर्मी अक्सर डेस्क पर आकर प्रगति देखते, हैरानी जताते और यह दफ़्तर की चर्चा बन गया
- संयोग से दो युवा सहकर्मियों की बातचीत सुनाई दी, जिनका बहुत सम्मान किया जाता था
- उनमें से एक ने उपलब्धि की बहुत प्रशंसा की, तो दूसरे ने जवाब दिया, “अरे, इसने C में 10 साल से ज़्यादा काम किया है.”
- युवावस्था में ऐसी problem-solving को ‘होशियारी’ माना जाता था, लेकिन अब यह स्वाभाविक रूप से अनुभव का परिणाम समझी जाती है
- भले ही technical achievements को अनुभव का परिणाम माना जाए, आगे चलकर विशेषज्ञता, नैतिकता और सहकर्मियों के प्रति रवैये से अच्छा प्रभाव छोड़ने की इच्छा है
समग्र पुनरावलोकन
- 25 साल की computing यात्रा जिज्ञासा से शुरू होकर प्रयोग, सहयोग, कृतज्ञता और आत्मचिंतन तक पहुँचने वाली धारा रही है
- दिखने वाली technical achievements से अधिक, उस प्रक्रिया में बने लोगों और सीखने के रिश्ते लंबे समय तक साथ रहते हैं
- हर दौर का अनुभव एक-दूसरे से जुड़ते हुए लगातार विकास और विनम्रता के रूप में जमा होता गया
- software development career का सार अंततः code से अधिक, सीखने और साथ काम करने वाले लोगों की कहानी है
अभी कोई टिप्पणी नहीं है.