मैंने कॉलेज स्तर पर परिचयात्मक प्रोग्रामिंग सिखाई। यह ब्रेड-एंड-बटर कोर्स था, सभी फैकल्टी ने किया और मुझे लगता है कि हमने इसे काफी अच्छा किया है। हमने एक सामान्य पाठ का अनुसरण किया और सामान्य परीक्षाएं लीं, लेकिन हममें से प्रत्येक की अपनी कक्षा विधि थी जो काम करती थी। तब से एक लंबा समय हो गया है, लेकिन कभी-कभी मुझे प्रोग्रामिंग में कुछ बच्चों को ट्यूटर करना पड़ता है, और पूरी तस्वीर उसी के बारे में है।
जिस तरह से मैं कर रहा हूं वह नीचे से शुरू करना है, जितना संभव हो उतना ठोस। छात्रों को जो पता है वह एक संरचना है। उनके पास पहले से ही बहुत सारी अवधारणाएं हैं। मैं उन शीर्ष पर आगे की अवधारणाओं का निर्माण कर रहा हूं, और मैं उन अवधारणाओं को दूर कर रहा हूं जो वे प्रति-उत्पादक हो सकते हैं। उसी समय, मैं उन्हें करके सीखता हूं ।
मैंने Intel 8008 चिप, कुछ EPROM और कुछ सर्किट के साथ एक छोटा सा कंप्यूटर बनाया था। मैंने इसे थोड़ा युगल खेलने के लिए प्रोग्राम किया था जब I / O चिप एक युगल वक्ताओं से जुड़ा था। मैं समझाऊंगा कि कैसे छोटे कार्यक्रम ने काम किया, एक काउंटर को गिनने के लिए एक आंतरिक लूप के साथ। यह देरी के रूप में कार्य करेगा। तब यह आउटपुट बिट को टॉगल करेगा और इसे फिर से करेगा। यह थोड़ी देर के लिए ऐसा करेगा, और फिर एक और देरी के लिए स्विच करेगा, एक और पिच देगा, और इसी तरह। मेमोरी चिप में थोड़ा टाइमर था, और अगर मैं टाइमर इनपुट में से किसी एक के तहत कैपेसिटर लेड को टक करता, तो प्रोग्राम धीरे-धीरे वेइरी चलाएगा । कक्षा बोलने वालों को क्लिक करते हुए सुन सकती है, क्लिक करें, क्लिक करें ... मैं यह समझना चाहता था कि कक्षा एक समय में एक कदम पर कंप्यूटर बहुत सरल चीजें कर रही थी।। तब मैं संधारित्र सीसे को हुक कर देता, और "संगीत" फट जाता। (तालियां)
तब मैंने एक बहुत ही सरल दशमलव कंप्यूटर के लिए एक सिम्युलेटर बनाया था, जिसमें 1000 मेमोरी स्थान थे, जिनमें से प्रत्येक पर हस्ताक्षर किए गए 4-अंकीय दशमलव संख्या थी। इसमें बहुत सरल opcodes थे जैसे "add to संचायक", "कूद अगर नकारात्मक", और इसी तरह। मैं उन्हें इस "मशीन लैंग्वेज" में बहुत कम प्रोग्राम लिखूंगा, जैसे दो नंबर जोड़ना, या नंबर की सूची जोड़ना। तब वे इसे एकल-चरण द्वारा काम करते हुए देख सकते थे, या इसे "तेज" चलाने के लिए एंटर कुंजी दबाकर रख सकते थे।
इस बिंदु को इस अवधारणा में रखा गया था कि कंप्यूटर केवल विभिन्न बुनियादी कार्यों की बहुत कम संख्या में कर सकते हैं, और वे उन्हें एक-एक-बार करते हैं। यह उन धारणाओं का मुकाबला करने के लिए है जिनके पास कंप्यूटर जटिल हैं, और यह कि वे एक ही समय में सब कुछ करते हैं, और अपने दिमाग को बार में पढ़ते हैं।
वहां से हम एक "वास्तविक" भाषा (BASIC :) में प्रोग्रामिंग पर गए, जिसकी शुरुआत बहुत ही सरल लेकिन दिलचस्प कार्यक्रमों के साथ हुई, जो कि सशर्त, लूप, सरणियों, फाइलों, विलय, और इसी तरह से काम कर रहे थे। ऑब्जेक्ट को एक पर्याप्त कौशल सेट में रखना था ताकि वे अपने स्वयं के चुनने की एक परियोजना पर ले जा सकें, क्योंकि यह एकमात्र ऐसी चीज है जो प्रोग्रामिंग को दिलचस्प बनाती है - उपयोग जिसे आप इसे डाल सकते हैं। मैं परियोजनाओं के लिए कुछ विचार फेंकूंगा, और फिर वे इसे वहां से ले जाएंगे। मैं लिखित विचारों के लिए पूछूंगा, और फिर रिपोर्ट की प्रगति, उन्हें अंतिम समय तक स्थगित करने और फिर घबराहट से बचाने के लिए। मुझे लगता है कि परियोजनाएं सबसे अच्छा हिस्सा थीं, क्योंकि वे अपनी शक्ति के तहत सीख रहे थे।
कंप्यूटरों के बारे में एक बहुत ठोस समझ में यह शुरुआती आधार है कि बाद में अवधारणाओं को पढ़ाना बहुत आसान हो गया है, अन्यथा वास्तविक गति-बम्प्स होंगे, जैसे कि सरणियाँ या (बाद के पाठ्यक्रम में) संकेत। हम इस अद्भुत चीज़ के रूप में "अमूर्तता" की अवधारणा को महिमामंडित करते हैं, लेकिन इसे हवा से नहीं, बल्कि एक ठोस आधार पर निर्मित करने की आवश्यकता है।