यह Erik Schierboom के साथ एक इंटरव्यू है, जिसमें वे और Jeremy Walker फंक्शनल प्रोग्रामिंग, Exercism ट्रैक को बनाए रखने, और Exercism के हलों के आने वाले स्टैटिक एनालिसिस पर बात करते हैं।
नमस्ते Erik. पहले Exercism Contributor Spotlight में शामिल होने के लिए धन्यवाद! हम आपके काम को उजागर करना चाहते थे, क्योंकि ऐसा लगता है कि आप Exercism के हर हिस्से में योगदान देते हैं और पूरे प्रोजेक्ट पर काम करने से आपको कुछ शानदार समझ भी मिली है!
तो शुरुआत के लिए बताइए, आप सबसे पहले Exercism से कैसे जुड़े?
2014 में मैंने एक फंक्शनल प्रोग्रामिंग कोर्स किया था, जिसमें Scala भाषा इस्तेमाल होती थी। वह कोर्स पूरा करने के बाद मैंने अपनी Scala स्किल्स और बेहतर करने के लिए संसाधन ढूँढे, और मुझे Exercism मिला। थोड़ी ही देर में मैं इसमें रम गया और Exercism के दूसरे भाषा ट्रैक भी करने लगा। लोग मेरे हलों पर जो कमेंट छोड़ते थे, उनसे मुझे बहुत फायदा हुआ, और इसी वजह से मैंने भी C# ट्रैक के हलों पर कमेंट करना शुरू किया। कुछ समय बाद मुझसे C# ट्रैक का मेंटेनर बनने को कहा गया, और मैंने खुशी से यह स्वीकार कर लिया। पाँच साल बाद आज मैं C# और F# ट्रैक का मेंटर हूँ, C#, F# और Scala ट्रैक का मेंटेनर हूँ, और क्रॉस-ट्रैक प्रॉब्लम स्पेसिफिकेशंस पर काम करने में मदद करता हूँ।
बहुत बढ़िया। तो आप Exercism से उसके शुरुआती दौर में ही जुड़ गए थे। जो लोग नहीं जानते, उनके लिए बता सकते हैं कि Exercism मेंटेनर होने का मतलब क्या होता है?
ज़रूर। सामान्य तौर पर कहें तो एक Exercism मेंटेनर ट्रैक की "सेहत" के लिए ज़िम्मेदार होता है। व्यवहार में इसका मतलब बहुत सी चीज़ें हो सकती हैं, जैसे नए अभ्यास बनाना, मौजूदा अभ्यास अपडेट करना, या दूसरे मेंटेनरों के पुल रिक्वेस्ट देखना। एक और ज़रूरी बात यह है कि ट्रैक के अभ्यासों का क्रम सही हो, ताकि विद्यार्थियों को सीखने का सबसे अच्छा अनुभव मिल सके। ध्यान रहे कि मेंटेनर होने का मतलब यह नहीं है कि आपको ऊपर बताए गए सारे काम करने ही पड़ेंगे; मेंटेनर के लिए सिर्फ एक-दो कामों पर ध्यान देना भी पूरी तरह ठीक है।
धन्यवाद! तो C#, F# और Scala पर ध्यान देने के अलावा आपने Exercism के लगभग हर भाषा ट्रैक पर काम किया है। एक सीखने वाले के नज़रिए से आपके कोई खास पसंदीदा ट्रैक हैं?
हालाँकि मैंने जिस भी ट्रैक पर काम किया, उससे बहुत कुछ सीखा, लेकिन मेरा पसंदीदा ट्रैक Haskell ही होगा। यह न सिर्फ बहुत बढ़िया भाषा है जिसमें ढेरों दिलचस्प कॉन्सेप्ट हैं, बल्कि इसके मेंटरों की गुणवत्ता भी लाजवाब थी। दूसरे पसंदीदा ट्रैक Kotlin और F# हैं। Kotlin और F# इतने बढ़िया तरीके से डिज़ाइन की गई और इतनी व्यावहारिक भाषाएँ हैं कि मुझे इनमें प्रोग्रामिंग करना बहुत पसंद है।
हाँ, Haskell के मेंटरों के बारे में मैंने बहुत अच्छी बातें सुनी हैं! मुझे लगता है कि इतने सारे ट्रैक करने से आपको कोडिंग के बारे में ढेरों दिलचस्प बातें सीखने को मिली होंगी। क्या उस अनुभव से आपने कुछ खास चीज़ें सीखीं?
अरे हाँ, ढेरों चीज़ें! अलग-अलग तरह की भाषाओं के साथ काम करने से समस्याओं को देखने के कई अलग तरीके सामने आते हैं। इन सब तरीकों ने किसी न किसी रूप में मेरी कोडिंग शैली को प्रभावित किया है, हालाँकि सबसे ज़्यादा असर शायद फंक्शनल भाषाओं का पड़ा है। अब मैं जहाँ मौका मिलता है, फंक्शनल कॉन्सेप्ट इस्तेमाल करता हूँ, उन भाषाओं में भी जो फंक्शनल नहीं हैं (और वे धीरे-धीरे फंक्शनल फीचर अपना रही हैं)।
मैंने यह भी सीखा कि हर भाषा अलग होती है, पर वास्तव में बहुत सी भाषाएँ काफी मिलती-जुलती हैं। इसलिए जब आप दो-तीन भाषाएँ जान लेते हैं, तो नई भाषा सीखना बहुत आसान हो जाता है। जैसे Haskell आता है तो आप शायद F# या Scala अपेक्षाकृत जल्दी सीख लेंगे। इसलिए नई भाषाएँ सीखना करियर के लिए भी अच्छा कदम हो सकता है, क्योंकि तब आप आसानी से एक भाषा से दूसरी भाषा में बदल सकते हैं।
मैंने भी यही पाया है। दूसरों से सीखने का फायदा कई गुना होता है! व्यावहारिक तौर पर देखें तो अलग-अलग भाषाओं के लिए जो-जो सेटअप करने पड़ते हैं, उन्हें आपने कैसे सँभाला? नया IDE सीखने की सोच ही मुझे अक्सर थोड़ी डरावनी लगती है। जब आप भाषाएँ कर रहे थे, तो क्या आपने उसी एडिटर के साथ काम किया जिसे आप जानते थे, या फिर अलग-अलग एडिटर आज़माए ताकि हर भाषा को उसके अपने अंदाज़ में इस्तेमाल करने का अनुभव मिल सके?
कुछ भाषाओं के लिए नया डेवलपमेंट एनवायरनमेंट सेट करना पहले थोड़ा झंझट भरा हुआ करता था, पर आजकल ज़्यादातर भाषाएँ काफी आसानी से सेट हो जाती हैं। फिर मैं ऐसा IDE ढूँढने की कोशिश करता हूँ जो उस भाषा के लिए सबसे अच्छा अनुभव दे। चूँकि मैं बारी-बारी से Windows और Mac OS पर काम करता हूँ, इसलिए IDE का क्रॉस-प्लेटफॉर्म होना भी ज़रूरी है। एक बेहतरीन क्रॉस-प्लेटफॉर्म IDE की मिसाल Visual Studio Code है, जिसे मैं Haskell, JavaScript, TypeScript, Elm और Elixir ट्रैक के लिए इस्तेमाल करता हूँ। बाकी ट्रैक के लिए मैं JetBrains IDE इस्तेमाल करता हूँ: C# और F# के लिए Rider, Java, Scala और Kotlin के लिए IntelliJ IDEA, और अंत में Ruby के लिए RubyMine (ध्यान दें: ये भी क्रॉस-प्लेटफॉर्म IDE हैं)। जैसा कि आप देख सकते हैं, हर भाषा के लिए सबसे अच्छा अनुभव पाने के लिए मैं कई एडिटर इस्तेमाल करता हूँ (हालाँकि JetBrains के सारे IDE साफ़ तौर पर काफी मिलते-जुलते हैं)।
एक काम की बात: अगर आप किसी ओपन-सोर्स प्रोजेक्ट में कोर कंट्रिब्यूटर हैं, तो JetBrains आपको मुफ्त ओपन-सोर्स लाइसेंस के लिए आवेदन करने देता है!
यह तो बहुत काम की बात है। धन्यवाद! तो आप C#, F# और Scala के मेंटेनर हैं। इन भाषाओं में आपको खास तौर पर क्या खींचता है?
2002 में रिलीज़ होते ही C# मेरी पसंदीदा भाषा बन गई। यह बढ़िया तरीके से डिज़ाइन की गई, सुंदर भाषा है, जिसके टूल और डॉक्यूमेंटेशन भी शानदार हैं। यह भाषा काफी तेज़ी से बदलती भी रहती है, यानी सीखने के लिए हमेशा कुछ नया रहता है! एक और फायदा यह है कि यह शानदार .NET (Core) फ्रेमवर्क पर चलती है।
F# से भी पहली नज़र में ही प्यार हो गया। इसके सुंदर सिंटैक्स और (फंक्शनल) भाषा फीचरों के समृद्ध सेट की वजह से मैंने पाया कि मैं कम कोड में ज़्यादा काम कर सकता हूँ, खासकर डोमेन मॉडलिंग करते समय। यह बहुत व्यावहारिक भाषा भी है, जिसमें ऑब्जेक्ट-ओरिएंटेड फीचर हैं और मौजूदा .NET कोड के साथ बढ़िया इंटरऑप है (यह उसी .NET (Core) फ्रेमवर्क पर चलती है जिस पर C# चलती है)। इसकी एक और खूबी इसके टूल हैं, जो फंक्शनल भाषाओं के लिए उपलब्ध सबसे अच्छे टूल में से हैं। ऊपर से, fsharpforfunandprofit वेबसाइट पर इसका परिचय मेरे अब तक के सबसे पसंदीदा भाषा-परिचयों में से एक है।
Scala ही वह भाषा थी जिसने मुझे फंक्शनल प्रोग्रामिंग से मिलाया, इसलिए वह मेरे दिल में एक खास जगह रखती है। F# की तरह यह भी व्यावहारिक भाषा है, और वजहें भी लगभग वही हैं। Java के इकोसिस्टम में इसके जुड़ाव की वजह से इसने फंक्शनल प्रोग्रामिंग को काफी लोकप्रिय बनाने में मदद की है।
दिलचस्प बात है कि आपकी फंक्शनल प्रोग्रामिंग की शुरुआत Scala से हुई, आप F# के मेंटर हैं, पर सबसे अच्छा ट्रैक Haskell को मानते हैं। जो कोई Exercism पर फंक्शनल प्रोग्रामिंग में उतरना चाहता है, आप उसे इनमें से पहले कौन सी आज़माने की सलाह देंगे?
बढ़िया सवाल! मेरा वोट F# को जाता है, क्योंकि मुझे लगता है कि इसे सीखना सबसे आसान है। इसकी मुख्य वजह यह है कि F# बाकी दोनों से कम जटिल है। शुरुआत करते समय F# के शानदार टूल और डॉक्यूमेंटेशन भी बड़ा फायदा देते हैं। इतना कहने के बाद भी, मैं ज़रूर सलाह दूँगा कि F# ट्रैक पूरा करने के बाद Haskell ट्रैक भी शुरू कीजिए, क्योंकि Haskell में कुछ ऐसे शानदार, एडवांस्ड फीचर हैं जो F# में नहीं हैं।
Exercism के भविष्य को लेकर हमारी जो कई योजनाएँ हैं, उनसे आप अच्छी तरह परिचित रहे हैं। प्रोजेक्ट के लिए कोई ऐसी चीज़ है जिससे आप खास तौर पर उत्साहित हैं?
जिन सुधारों की योजना बन रही है, उन सबमें मुझे हलों के स्टैटिक एनालिसिस से सबसे ज़्यादा उत्साह है। योजना यह है कि हम एक ऐसा सिस्टम बनाएँगे जो सबमिट किए गए हलों पर खुद-ब-खुद कमेंट कर सकेगा, यानी प्रोग्राम के ज़रिए उन हलों को आम गलतियों और सुझावों के लिए जाँचेगा। इससे मेंटरों को बहुत मदद मिलेगी, क्योंकि अब उन्हें इन आम गलतियों और सुझावों पर कमेंट नहीं करना पड़ेगा और वे ज़्यादा दिलचस्प समस्याओं पर ध्यान दे सकेंगे।
अगर आपको दिलचस्पी है, तो मेरा (शुरुआती) प्रोटोटाइप देखिए, C# ट्रैक एनालाइज़र, जो .NET Compiler Platform का इस्तेमाल करके C# कोड का स्टैटिक एनालिसिस करता है।
हाँ, स्टैटिक एनालिसिस मेरे लिए भी लगभग सबसे रोमांचक चीज़ है। यह देखकर बहुत अच्छा लगता है कि आपका प्रोटोटाइप तैयार भी है। मुझे लगता है कि स्टैटिक एनालिसिस से जो रफ्तार मिलेगी, वह Exercism को बहुत बेहतर बना देगी, और मैं इस बात से बहुत उत्साहित हूँ कि हम इसे बढ़ाकर बिल्कुल नए लोगों को कोडिंग सिखाने तक कैसे ले जा सकते हैं। मुझे लगता है कि यह सच में गेम-चेंजर है।
अंतिम सवाल, क्या आपके कोई ऐसे निजी प्रोजेक्ट या उद्देश्य हैं जो आपके दिल के करीब हों और जिनका आप ज़िक्र करना चाहें?
मेरे लिए Exercism से जुड़ना, उसके ओपन-सोर्स कोड बेस में योगदान देना और लोगों को मेंटर करना बेहद संतोषजनक अनुभव रहा है। मैंने ढेरों चीज़ें सीखीं, कुछ बेहद शानदार लोगों को जाना, और मुझे लगता है कि मैं बहुत से लोगों की मदद कर सका हूँ।
मैं लोगों को भी प्रोत्साहित करना चाहूँगा कि वे देखें कि क्या वे भी जुड़ सकते हैं। अगर कोई भाषा आपको बहुत पसंद है और आप लोगों को वह सीखने में मदद करना चाहते हैं, तो Exercism पर मेंटर के तौर पर साइन अप कीजिए। अगर आपको कोड लिखना ज़्यादा पसंद है, तो कोई ओपन-सोर्स प्रोजेक्ट चुनिए और उसमें योगदान दीजिए। मेरा वादा है, यह सुनने में जितना डरावना लगता है उससे कहीं कम डरावना है, और इसे करके आपको बहुत अच्छा लगेगा!
शानदार! बातचीत के लिए समय निकालने और Exercism पर आपके सारे काम के लिए धन्यवाद!