एक पूरी तरह विकसित Exercism ट्रैक में दो तरह के अभ्यास होते हैं: कॉन्सेप्ट अभ्यास और प्रैक्टिस अभ्यास। ये दोनों मूल रूप से अलग हैं और एक-दूसरे को अच्छी तरह पूरा करते हैं।
किसी ट्रैक के कॉन्सेप्ट अभ्यास ऐसे अभ्यास होते हैं जो उन अलग-अलग कॉन्सेप्ट को सिखाने के लिए बनाए जाते हैं जो किसी खास प्रोग्रामिंग भाषा की बुनियाद बनते हैं। ये कॉन्सेप्ट मिलकर एक सिलेबस बनाते हैं।
इस दस्तावेज़ में आपके ट्रैक के लिए सिलेबस को सफलतापूर्वक डिज़ाइन करने के संकेत और सुझाव दिए गए हैं।
सिलेबस का अंतिम उद्देश्य छात्रों को इस लायक बनाना है कि वे लक्ष्य भाषा में आइडियोमैटिक कोड पढ़ और लिख सकें और उसमें सहज महसूस करें।
हर कॉन्सेप्ट अभ्यास बहुत ही केंद्रित होता है। यह एक छोटा और सटीक कदम होता है जो छात्र को भाषा के बारे में कुछ समझने की तरफ बढ़ाता है। यह सिर्फ उन्हीं कॉन्सेप्ट पर आधारित होता है जो पहले पेश किए जा चुके हैं।
अभ्यास हल करने से छात्र उस कॉन्सेप्ट से परिचित होने की प्रक्रिया शुरू करता है। समझ मुख्य रूप से करने से आती है, समझाने से बहुत कम। समझाने वाली सामग्री इसलिए होती है ताकि छात्र को उन विचारों से परिचित कराया जाए जिनकी उसे अभ्यास हल करने के लिए ज़रूरत होगी (इसीलिए फाइल का नाम "introduction.md" चुना गया है)।
हम चाहते हैं कि छात्र तुरंत कोड लिखना शुरू कर सकें, बिना पहले सब कुछ समझे। इसके लिए हम ब्यौरों को जान-बूझकर छोड़ देते हैं और बहुत सी चीज़ें बिना समझाए छोड़ देते हैं। जहाँ मुमकिन हो, हम चीज़ों को आसान बनाते हैं और कोड स्टब देते हैं। इससे शुरुआत का मानसिक बोझ कम होता है और ज्ञान को बैठने के लिए समय और जगह मिलती है। ऐसा करके हम यह नहीं कह रहे कि छात्र को ये चीज़ें जानने की ज़रूरत नहीं है, हम यह कह रहे हैं कि उन्हें ये चीज़ें अभी जानने की ज़रूरत नहीं है।
अक्सर शुरुआती अभ्यासों में गैर-आइडियोमैटिक कोड रखना पड़ता है। इसकी वजह यह है कि शुरू में छात्र के लिए भाषा का ज़्यादातर हिस्सा अनजाना होता है और ज़्यादातर कॉन्सेप्ट अभी पेश नहीं किए गए होते। शुरुआती अभ्यासों में गैर-आइडियोमैटिक कोड की छूट देकर हम छात्रों को अनजाने इलाके में कुछ बड़े कदमों की जगह जाने-पहचाने इलाके में कई छोटे कदम लेने देते हैं। नतीजा यह होता है कि वे कम अड़चनों के साथ जल्दी आइडियोमैटिक कोड के स्तर तक पहुँच जाते हैं।
अभ्यास एक पेड़ की तरह व्यवस्थित होते हैं, जिसमें सबसे ऊपर एक परिचयात्मक अभ्यास शुरुआती बिंदु होता है। बाद के अभ्यास ऐसे कॉन्सेप्ट सिखाते हैं जो पहले सिखाए गए कॉन्सेप्ट को समझने पर निर्भर करते हैं।
यह देखना फायदेमंद हो सकता है कि दूसरे भाषा ट्रैक ने अपने कॉन्सेप्ट अभ्यास कैसे बनाए हैं। दूसरे भाषा ट्रैक के कॉन्सेप्ट अभ्यासों के उदाहरण आप यहाँ देख सकते हैं।
फिर भी, अगर आप दूसरे अभ्यासों को अपने अभ्यास की शुरुआत बनाने का फैसला करते हैं, तो ध्यान रखें कि बनने वाला अभ्यास उस कॉन्सेप्ट के बारे में हो जैसा वह आपकी भाषा में मौजूद है। कभी-कभी कॉन्सेप्ट थोड़े-थोड़े अलग होते हैं, कभी बिल्कुल अलग। कभी-कभी कॉन्सेप्ट दूसरी भाषाओं में होते ही नहीं।
सिलेबस, और इसलिए कॉन्सेप्ट का पेड़, उन्हीं कॉन्सेप्ट को दर्शाना चाहिए जो इस खास भाषा में मौजूद हैं।
सिर्फ इसलिए कॉन्सेप्ट शामिल न कीजिए कि दूसरे ट्रैक में हैं।
कुछ मामलों में ऐसा कॉन्सेप्ट जोड़ने का मन कर सकता है क्योंकि लोगों को अक्सर मौजूद कॉन्सेप्ट इस्तेमाल करके उसके बिना काम चलाना पड़ता है। ऐसा करने की जगह उस कॉन्सेप्ट को पेश कीजिए जो भाषा वाकई इस्तेमाल करती है, और सोचिए कि एक अभ्यास जोड़ा जाए जो बताए कि ऐसी स्थिति में उसका इस्तेमाल कैसे किया जाए।
उदाहरण के लिए, Go में एनम नहीं होते। इसकी जगह Go का कॉन्सेप्ट पेड़ कॉन्स्टेंट पेश करता है और सिखाता है कि ऐसी स्थिति में कॉन्स्टेंट का इस्तेमाल कैसे किया जाए जहाँ दूसरी भाषाओं में आप एनम इस्तेमाल करते।
मदद माँगने में संकोच न कीजिए। बेहतर है कि शुरू में ही या अभ्यास पर काम करते समय पूछ लें, बजाय इसके कि कोड रिव्यू के दौरान चर्चा करनी पड़े।
GitHub पर आप @exercism/learning-mode टीम का ज़िक्र कर सकते हैं। Exercism फोरम पर Exercism Support श्रेणी में एक इश्यू खोलिए।
हमारे अनुभव ने हमें सिखाया है कि सिलेबस विकसित करने का सबसे व्यावहारिक तरीका यह है कि कॉन्सेप्ट के पेड़ को स्वाभाविक रूप से बढ़ाया जाए, सबसे आसान कॉन्सेप्ट से शुरुआत करके। हमें सब कुछ पहले से डिज़ाइन नहीं करना पड़ता, और असल में यह आम तौर पर फायदेमंद होता है कि ज़्यादा दूर तक न सोचा जाए।
हम सबसे कम ज़रूरी कॉन्सेप्ट से शुरुआत करते हैं, यानी उनसे जो भाषा में कुछ भी लिखने के लिए सबसे बुनियादी हैं। हम कोशिश करते हैं कि शुरुआत ऐसे कॉन्सेप्ट से हो जो औसत डेवलपर को सबसे ज़्यादा परिचित हों। परिचित होना अच्छा है। परिचित होना उलझाने वाला नहीं होता।
याद रखिए, मंज़िल आइडियोमैटिक कोड लिखना है, लेकिन वहाँ तक पहुँचने के छोटे कदम हमेशा आइडियोमैटिक नहीं होते। परिचित चीज़ें इस्तेमाल करना, भले ही वे उस भाषा में कोड का बढ़िया उदाहरण न हों, छात्र को उस कोड की तरफ तेज़ी से बढ़ने में मदद करता है जो उस भाषा के लिए ज़्यादा आम है।
पूरे कॉन्सेप्ट पेड़ को पहले से बनाने की कोशिश करने की जगह बस पहले अभ्यास से शुरुआत कीजिए। पहले अभ्यास का उद्देश्य यह है कि छात्र जितनी कम अड़चन के साथ सीखना शुरू कर सके, उतना अच्छा। वे इस भाषा में कोड कैसा दिखता है, यह जानने-समझने की तरफ पहला कदम रख रहे हैं। हो सकता है वे कोड का एक छोटा टुकड़ा लिखें, या अभ्यास पूरा करने के लिए किसी स्टब में बस दो-चार चीज़ें जोड़ें। इस अभ्यास तक पहुँचने के लिए छात्र पहले ही "Hello, World!" हल कर चुके हैं। लेकिन "Hello, World!" में वे सिर्फ शब्दावली बदल रहे होते हैं। भाषा का सारा सिंटैक्स अभी भी अनजाना हो सकता है। कोशिश कीजिए कि छात्र को जल्दी जीत मिले और वे सिंटैक्स की बुनियादी ज़रूरतों से इतना परिचित हो जाएँ कि आगे भरोसे के साथ बढ़ सकें।
पहला अभ्यास विकसित करने के बारे में और पढ़िए।
पहला अभ्यास कुछ ऐसे अभ्यास अनलॉक करना चाहिए जो बुनियादी कॉन्सेप्ट पेश करें। ये प्रिमिटिव या बुनियादी टाइप और उन टाइप पर होने वाले साधारण ऑपरेशन जैसी चीज़ें होंगी।
अगले अभ्यास विकसित करने के बारे में और पढ़िए।
यहीं से अक्सर दिलचस्प होना शुरू होता है। इस मोड़ पर आप बहुत कुछ पेश कर सकते हैं। आप तय कैसे करते हैं कि आगे कौन-से कॉन्सेप्ट उठाने हैं?
इससे कोई खास फर्क नहीं पड़ता। जब तक आप कहीं से भी शुरुआत करते हैं जो उचित लगे, सब ठीक रहेगा।
कॉन्सेप्ट का पेड़ बढ़ाने के संदर्भ में हमारे हिसाब से "उचित" का मतलब क्या है, इसके बारे में और पढ़िए।
एक अच्छा कॉन्सेप्ट अभ्यास बहुत ही केंद्रित होता है और आदर्श रूप से सिर्फ एक कॉन्सेप्ट सिखाता है। इसे हल करने का आम तौर पर सिर्फ एक ही अपेक्षित तरीका होता है। यह प्रैक्टिस अभ्यासों के उलट है, जो खुले अंत वाले होते हैं और खोजबीन के लिए जगह देते हैं।
एक अच्छा कॉन्सेप्ट अभ्यास आम तौर पर खराब प्रैक्टिस अभ्यास होता है, और इसका उलटा भी सच है। चूँकि प्रैक्टिस अभ्यासों और कॉन्सेप्ट अभ्यासों के उद्देश्य बिल्कुल अलग हैं, हम प्रैक्टिस अभ्यास लेकर उन्हें कॉन्सेप्ट अभ्यास में नहीं बदलते। हम सारे कॉन्सेप्ट अभ्यास शुरू से लिखते हैं या उन्हें ऐसी कहानियों पर आधारित करते हैं जो खास तौर पर सरल कॉन्सेप्ट सिखाने के लिए बनाई गई हों।
कभी-कभी आपको लगेगा कि गतिरोध है। कॉन्सेप्ट A को समझने के लिए कॉन्सेप्ट B की ज़रूरत है, और B को समझने के लिए A की।
ऐसे में चीज़ों को आसान बनाइए। एक की कुछ जटिलता को छोड़ दीजिए, ताकि आप छात्रों को दूसरे से परिचित करा सकें। यह कहना बिल्कुल ठीक है कि किसी चीज़ को बाद में और गहराई से पेश किया जाएगा, और अभी छात्र को सिर्फ इतना ही समझना है।
कॉन्सेप्ट चरणों में और समय के साथ और गहराई से समझ में आते हैं।
हर कॉन्सेप्ट अभ्यास की एक कहानी होती है।
अगर आप किसी दूसरे ट्रैक से अभ्यास फोर्क कर रहे हैं, तो उस अभ्यास की कहानी पहले से होगी। ऐसी स्थिति में आप तैयार हैं।
यह देखने के लिए कि कोई मौजूदा कहानी है जिसे आप इस्तेमाल कर सकते हैं या कोई अभ्यास जिसे आप फोर्क कर सकते हैं, कहानियों की सूची देखिए।
अगर आपके पास कॉन्सेप्ट है पर कहानी नहीं, तो हमारा सुझाव है कि कोड का एक छोटा, सरल उदाहरण लिखिए जो उस कॉन्सेप्ट का इस्तेमाल करे जिसे आप पेश कर रहे हैं। फिर उस कोड के इर्द-गिर्द कहानी गढ़िए। कहानी को बहुत ही सरल रखिए। ज़रूरी नहीं कि वह अच्छी कहानी हो। उसके लिए कोई मज़बूत कथानक या पात्रों का विकास ज़रूरी नहीं। वह बस दो-चार पंक्तियों की हो सकती है।
कहानियों के आइडिया Exercism टीम के साथ बाँटिए। उपयुक्त कहानियाँ गढ़ने का हमें खूब अनुभव है।
कहानी तैयार होने के बाद शायद आपको कोड में थोड़ा बदलाव करना पड़े ताकि वह कहानी से मेल खाए।
सिलेबस पर काम करने में दो अलग-अलग पर आपस में जुड़ी गतिविधियाँ शामिल हैं:
हमने पाया है कि व्यापक समुदाय को अभ्यास बनाने में योगदान देने के लिए जोड़ना मज़ेदार भी है और समृद्ध करने वाला भी। लेकिन सिलेबस का डिज़ाइन खुद ऐसे योगदानकर्ताओं की छोटी टीम के साथ संभालना आसान होता है जो सभी पूरे सिलेबस और उसकी सारी बारीकियों को समझने में लगे हों।
फिर भी, हमारा सुझाव है कि सिलेबस डिज़ाइन टीम पहले पाँच-छह कॉन्सेप्ट खुद तैयार करे, उससे पहले कि समुदाय के योगदान के लिए रास्ता खोला जाए। इससे यह पक्का करने में मदद मिलती है कि सिलेबस डिज़ाइनरों की मुख्य टीम के लोग व्यापक समुदाय के लोगों के पुल रिक्वेस्ट की समीक्षा करने से पहले खुद उस प्रक्रिया को समझ लें।
इन ऊँचे स्तर के कॉन्सेप्ट के लिए इश्यू बनाना भी आसान होता है, और समुदाय के सदस्यों के लिए इन पर काम करना ज़्यादा मज़ेदार होता है, क्योंकि चिंता करने के लिए कम बंदिशें होती हैं।
हम अभी तक यह नहीं समझ पाए हैं कि कॉन्सेप्ट अभ्यास बनाने के लिए इश्यू सबसे अच्छे तरीके से कैसे बनाए जाएँ।
कुछ ट्रैक में हमने खुद कॉन्सेप्ट के लिए और अभ्यास के लिए अलग-अलग अभ्यास बनाने की कोशिश की है। दूसरे ट्रैक में हमने ऐसे इश्यू बनाने की कोशिश की है जिनमें काम पूरा करने के लिए एक चेकलिस्ट हो। कुल मिलाकर, हमें लगता है कि यह अभी भी बहुत भारी है, और हम इसका बेहतर तरीका ढूँढना चाहेंगे।
जब आप इश्यू बनाना शुरू करें, तो इस प्रक्रिया के बारे में हमसे बात कीजिए, और आगे कैसे बढ़ना है यह समझने में हम पूरी कोशिश करेंगे।
जैसे-जैसे हम इससे निपटने के बेहतर तरीके सीखेंगे, हम यह दस्तावेज़ अपडेट करते रहेंगे।