मैं 2000 से विश्वविद्यालय में प्रोग्रामिंग सिखा रहा हूं। एक बार मैं एक हरा शिक्षक था जो छात्रों के पास जाने से डरता था, क्योंकि मुझे स्मार्ट दिखना था, सब कुछ पता था, मुश्किल सवालों का जवाब देने में सक्षम था। तब मुझे एहसास हुआ कि मुश्किल सवालों का सेट सीमित था और, साल-दर-साल उन्हें सुनकर, मुझे ऐसे सभी सवालों के जवाब पता थे। लेकिन कहानी उस बारे में नहीं है।
शिक्षण के अलावा, मैं स्वयं सक्रिय रूप से (और सगाई में) प्रोग्रामिंग कर रहा था। और विश्वविद्यालय में पढ़ाना अब मेरे लिए एक शौक है, जो अधिक आर्थिक रूप से लाभहीन है, क्योंकि जब मैं छात्रों पर खर्च करता हूं, तो मैं विश्वविद्यालय से अधिक भुगतान करता हूं। लेकिन यह कहानी उस बारे में नहीं है।
और मैं साझा करना चाहता हूं कि कैसे, मेरी राय में, यह प्रोग्रामिंग में प्रशिक्षण के लायक है।
मुझे नहीं पता कि अन्य विश्वविद्यालयों में कैसे, लेकिन हमारी प्रोग्रामिंग में वे ऐसा सिखाते हैं। सैद्धांतिक व्याख्यान हैं जहां वे प्रोग्रामिंग भाषाओं और बुनियादी एल्गोरिदम और डेटा संरचनाओं (सॉर्टिंग, लिंक की गई सूची, ढेर, कतार इत्यादि, आदि) के बारे में बात करते हैं। व्यावहारिक कक्षाएं हैं जहां छात्र एक ही प्रयोगशाला कार्य करते हैं। वे आमतौर पर प्रति सेमेस्टर 3 से 5 तक होते हैं। सब ठीक लगने लगा है। एक सिद्धांत है और एक प्रथा है। अनुभव प्राप्त करें और अनुभव करें। लेकिन, मेरी राय में, अभ्यास काफी समान नहीं है। प्रत्येक छात्र अपने दलिया में पकाया जाता है, छोटे प्रोजेक्ट लिखता है और बहुत कम अनुभव प्राप्त होता है।
और अब पोस्ट के सार के लिए! मैं बहुत होशियार छात्रों के एक समूह में आया था। कभी स्कूल से, वे अच्छी तरह से प्रोग्राम करना जानते थे। और मैंने उनके साथ शास्त्रीय दृष्टिकोण को छोड़ने का फैसला किया। तब वे अपने पहले वर्ष में थे। मैंने सुझाव दिया कि वे प्रयोगशाला का काम नहीं करते हैं, लेकिन एक बड़ी संयुक्त परियोजना विकसित करते हैं। उनमें से कुछ ने इनकार कर दिया और साधारण लैब करने लगे, जबकि अधिकांश सहमत थे। मैंने सुझाव दिया कि वे गणितीय गणना (मैट्रिक्स गुणन, प्रतीक विभेदन आदि) के आयोजन के लिए एक क्लाइंट-सर्वर एप्लिकेशन लिखते हैं। गणित सर्वर पर स्थापित किया जाएगा, और क्लाइंट इनपुट डेटा सेट करने और परिणाम प्रदर्शित करने के लिए केवल एक विज़ुअल इंटरफ़ेस है। केवल एक सर्वर है, लेकिन क्लाइंट का एक टन हो सकता है। टीसीपी / आईपी के माध्यम से संचार। मैं आपको याद दिलाता हूं कि ये प्रथम वर्ष के छात्र थे। परिणाम सबसे अच्छा नहीं था, लेकिन प्रोटोटाइप ने भी काम किया! इसे त्रुटियों के साथ काम करने दें और यहां तक कि गिर जाए, लेकिन, मेरी राय में, यह एक योग्य परिणाम था!
एक साल बीत चुका है। लोग दूसरे वर्ष में चले गए। प्रोग्रामिंग शिक्षण जारी है। बोरिंग प्रयोगशालाओं के बजाय, एक संयुक्त परियोजना को फिर से विकसित करने के लिए जब मैंने प्रस्तावित किया तो उन्हें कोई आश्चर्य नहीं हुआ। यह समय अगली परियोजना का था। आभासी रोबोटों की प्रतियोगिताओं को आयोजित करने के लिए एक मंच विकसित करना आवश्यक था। यानी एक भूलभुलैया (बहु-कहानी) थी। रोबोट के पास हथियार थे। रोबोट व्यवहार के तर्क को स्थापित करने के लिए एक प्रोग्रामिंग भाषा विकसित की गई थी (पास्कल के समान थी)। सर्वर पर रोबोट एल्गोरिदम डाला गया था। इंजन चालू हो गया। और क्लाइंट अनुप्रयोगों पर रोबोटों की लड़ाई की कल्पना की गई थी। यह समस्या का सिर्फ सतही वर्णन है। मैं बताना चाहता हूं कि परियोजना तुच्छ से दूर थी।
और फिर काम में उबाल आने लगा। सबसे पहले, हमने सामूहिक रूप से टीके का मसौदा तैयार किया। मैंने लोगों के लिए Mediawiki डाल दिया। वहां उन्होंने टीके का संपादन किया। फिर कार्यान्वयन आया। सक्रिय रूप से इस्तेमाल किया SVN। OpenGL पर ग्राफिक्स। रोबोट के व्यवहार को निर्धारित करने के लिए प्रोग्रामिंग भाषा का एक दुभाषिया विकसित किया गया था (वैसे, छात्रों में से एक ने इसे अकेले किया था)। विकास प्रक्रिया में, वास्तुकला पर सबसे सक्रिय रूप से निर्णय लेने वाले नेता बाहर खड़े थे। कभी-कभी यह लगभग एक लड़ाई में आता था। समय-समय पर, अधिक सक्रिय "लात" मारते हैं जो अपने हिस्से के कार्यान्वयन को धीमा कर देते हैं। मैं अभी इस प्रक्रिया को देख रहा हूं। इस तरह का अनुभव अकेले लिखे गए प्रयोगशाला के काम से कहीं अधिक उपयोगी है। मैं इस तथ्य पर ध्यान आकर्षित करना चाहता हूं कि लोग वास्तव में स्मार्ट थे, और वे एक संयुक्त परियोजना में भाग लेने की तुलना में प्रयोगशाला काम करने में कम समय का परिमाण खर्च करेंगे। लेकिन उन्हें भी अच्छा लगा।
सच कहूं, तो मैंने इस समूह पर बहुत अधिक समय और ऊर्जा खर्च की, अगर मैंने सामान्य तरीके से व्यावहारिक अभ्यास किया था।
आगे क्या, आप पूछें? और फिर लोगों ने खुद को इस प्रकार दिखाया। समूह में से तीन ने टीम को इकट्ठा किया (टीम का एक और सदस्य मेरे साथ अध्ययन नहीं किया) और
Microsoft इमेजिन कप (इस वर्ष नहीं) के अंतर्राष्ट्रीय फाइनल में पहुंचा। उनमें से दो पहले से ही संयुक्त राज्य में काम कर रहे हैं। मुझे विश्वास है कि शिक्षण के साथ मेरा प्रयोग कम से कम थोड़ा सा था, लेकिन इस परिणाम को प्राप्त करने में उनकी मदद की।
मैं क्या हूँ? अब मैं पहले पाठ्यक्रमों में प्रोग्रामिंग नहीं सिखाता और अब ऐसे प्रयोग नहीं करता। और शायद व्यर्थ। यदि इस पोस्ट को प्रोग्रामिंग शिक्षकों द्वारा पढ़ा जाता है - इसके बारे में सोचें ... शायद यह कभी-कभी शास्त्रीय कैनन से दूर जाने के लायक है?
निष्कर्ष: यदि प्रक्रिया रोचक है तो ज्ञान और अनुभव प्राप्त करना हमेशा अधिक सुखद और आसान होता है। मैं यह तर्क नहीं देता कि मैं शुरू में समझदार छात्रों में आया था। लेकिन मैंने व्यक्तिगत रूप से देखा कि कैसे स्मार्ट लोग एक-दो घंटे में प्रयोगशाला का काम करते हैं ताकि उन्हें सिर्फ टेस्ट मिले। वे अपनी आत्मा को इस प्रक्रिया में नहीं डालते हैं और प्राप्त अनुभव शून्य के करीब है। यदि आप एक शिक्षक हैं और छात्रों की आँखों में एक चिंगारी देखते हैं - तो इसे दूर न होने दें!
पुनश्च यह संभव है कि मेरे छात्रों ने इस पद पर खुद को पहचान लिया। कई साल बीत गए, और मैं कुछ मिला सकता था। मुझे लिखने के लिए स्वतंत्र महसूस करें - मैं सही करूंगा।