- यह लेख वास्तव में मौजूद नहीं होने वाले, लेकिन software developers को पढ़ाए जाने चाहिए ऐसे यथार्थवादी और व्यंग्यात्मक computer science courses का प्रस्ताव रखता है
- हर कोर्स आधुनिक developer culture की समस्याओं या पक्षपाती सोच को आलोचनात्मक ढंग से उजागर करता है
- उदाहरण के लिए, object-oriented paradigm में अंधविश्वास, command-line tools के UX की अनदेखी, धीमी languages की performance को लेकर गलतफ़हमी जैसे विषय शामिल हैं
- इसमें developers की मनोवैज्ञानिक आसक्तियों और अल्प-उत्पादक आदतों पर केंद्रित विषय भी शामिल हैं
- कुल मिलाकर, यह computer science education की सीमाओं और developer culture में आत्मचिंतन की ज़रूरत को हास्यपूर्ण ढंग से पेश करता है
CSCI 2100: object-oriented programming को भूलना
- यह कोर्स ऐसे variables और functions की अवधारणा सीखने के बारे में है जो object hierarchy का हिस्सा नहीं हैं
- object-oriented केंद्रित सोच से बाहर निकलकर, functional programming की लचीलापन और सादगी को समझने की कोशिश करता है
- “function” को “method” की तुलना में ज़्यादा सामान्य और पुन: प्रयोज्य अवधारणा के रूप में पेश किया जाता है
- prerequisite के रूप में कोई भी ऐसा कोर्स मान्य है जिसमें “abstract base class” शब्द का उपयोग हुआ हो
- इसका उद्देश्य object-oriented paradigm पर अत्यधिक निर्भरता को तोड़ना और programming की मूल सोच को फिर से स्थापित करना है
CSCI 3300: शास्त्रीय software अध्ययन
- ऐतिहासिक रूप से महत्वपूर्ण software products का विश्लेषण और चर्चा करने वाला कोर्स
- उदाहरणों में VisiCalc, AppleWorks, Robot Odyssey, Zork, MacPaint शामिल हैं
- इसका फ़ोकस user interface (UI) और hardware constraints ने रचनात्मकता को कैसे प्रभावित किया इस पर है
- अतीत की सीमाओं के बीच जन्मी नवाचारों के ज़रिए, यह आधुनिक software design के मूल सिद्धांतों पर फिर से ध्यान दिलाता है
CSCI 4020: धीमी language में तेज़ code लिखना
- यह बताता है कि interpreted languages (जैसे Python) में भी high-performance code कैसे लिखा जा सकता है
- उच्च स्तर पर performance analysis करते हुए, C++ स्तर की efficiency हासिल करने की रणनीतियों की पड़ताल करता है
- इसका लक्ष्य code की नाज़ुकता कम करना और development का आनंद बनाए रखना दोनों है
- “धीमी language तो धीमी ही होती है” जैसी धारणा को तोड़ते हुए, यह language design और runtime environment में optimization की संभावनाएँ दिखाता है
CSCI 2170: command-line tools का user experience (UX)
- command-line आधारित programs के user experience design principles पर आधारित एक introductory course
- output की प्रासंगिकता, पठनीयता और संक्षिप्तता इसके मुख्य विषय हैं
- UNIX के
ls command को उदाहरण बनाकर, बहुत ज़्यादा options और जटिल interface की समस्या का विश्लेषण किया जाता है
- यह ज़ोर देता है कि command-line tools को भी graphical UI की तरह user-centered design की ज़रूरत होती है
PSYC 4410: programmer की आसक्ति का मनोविज्ञान
- software developers में आम तौर पर दिखने वाली अल्प-उत्पादक आसक्तियों और बाध्यकारी सोच के पैटर्न की पड़ताल
- जैसे: code formatting, taxonomy, type systems, files को ज़रूरत से ज़्यादा बाँटना
- किसी अनजान system का सामना करने पर दिखने वाली तुरंत नकारात्मक आलोचनात्मक प्रतिक्रिया (knee-jerk criticism) का मनोवैज्ञानिक विश्लेषण
- developers के cognitive bias और perfectionism की प्रवृत्ति को समझते हुए, collaboration और creativity के बीच संतुलन खोजने वाला कोर्स
समग्र संदर्भ
- यह सूची कोई वास्तविक course plan नहीं, बल्कि computer science education और developer culture पर व्यंग्यात्मक आलोचना है
- हर course तकनीक-केंद्रित सोच की blind spots को उजागर करता है और developers को विचारों में लचीलापन और आत्मचिंतन के लिए प्रेरित करता है
- 2015 की पोस्ट होने के बावजूद, इसमें उठाए गए मुद्दे आज भी उतने ही प्रासंगिक हैं
1 टिप्पणियां
Hacker News की राय
CSCI 3300: Classical Software Studies
Alan Kay दशकों से इस बात पर ज़ोर देते आए हैं कि हम उन विचारों को बार-बार फिर से खोज रहे हैं जो 70 के दशक के आखिर तक पहले ही स्थापित हो चुके थे
एक कलाकार जैसे कला का इतिहास सीखता है, वैसे ही प्रोग्रामर को भी computer science का इतिहास सीखना चाहिए — उनकी इस निराशा से सहमति है
hardware performance पर निर्भर computing की तुलना कला से करना कुछ ज़बरदस्ती जैसा लगता है
यह मान लेना कि 1970 की problem-solving शैली 2025 में भी ज्यों-की-त्यों लागू होगी, वास्तविकता को नज़रअंदाज़ करना है
हर पीढ़ी का यह मान लेना कि उसने इसे पहली बार खोजा है — यह बार-बार होने वाली पुनर्खोज दिलचस्प है
अतीत की समस्याएँ और उनके समाधान सीखना कभी भी समय की बर्बादी नहीं है
उस प्रक्रिया के ज़रिए मुझे Unix और commercial software के विकास की गहरी समझ मिली, और Alan Kay की बात से मैं पूरी तरह सहमत हो गया
CSCI 3240: Ignoring Hype
यह ऐसा course होगा जिसमें सिखाया जाएगा कि नए platform या library के hype को कैसे नज़रअंदाज़ किया जाए
इसके बाद CSCI 3120: Novelty Driven Development होगा, जिसमें उल्टा trend के साथ चलते हुए रुचि बनाए रखना सिखाया जाएगा
दोनों courses एक साथ नहीं लिए जा सकते
ऐसे ही दूसरे courses में meeting skills (PSYC 4870), organizational friction को स्वीकार करना (PSYC 5630) वगैरह शामिल हो सकते हैं,
जो workplace में communication और motivation की वास्तविकताओं को कवर करें
CSCI 4810: The Refusal Lab
यह एक lab course होगा जिसमें अनैतिक product requests और deadline pressure की simulation की जाएगी, और पास होने के लिए उन्हें professional standards के आधार पर ठुकराना होगा
Debugging course का प्रस्ताव
ऐसा course होना चाहिए जिसमें bug की root cause ढूँढ़ना और अलग-अलग tools का उपयोग करना सिखाया जाए
printसे debugging करते हैंinteractive debugging के उद्धारकर्ता पर बात करने के लिए भी समय होना चाहिए
CSCI 0001: Functional programming and type theory
अकादमिक दुनिया की जटिल terminology और formulas ने functional programming को लोकप्रिय होने से रोके रखा है
अब समय आ गया है कि सीधे सीखा जाए कि monad आखिर endofunctor की category में monoid क्यों है
CSCI 4020: Writing Fast Code in Slow Languages
यह ऐसा course होगा जो धीमी languages (VB, Ruby आदि) के ज़रिए algorithmic complexity सिखाए, और दिखाए कि Ruby का O(N), C++ के O(N²) को हरा सकता है
और BASIC का अप्रत्याशित रूप से तेज़ निकलना मुझे चौंका गया था
उससे यह महसूस हुआ कि AI में Python इतना उपयोगी क्यों है
linear memory में vectorized code, heap में बिखरे data की तुलना में कहीं अधिक तेज़ होता है
पिछली series का संग्रह
“Computer science courses that don't exist, but should” series आगे भी जारी रही है, जैसे
2015 edition (247 comments),
2017 edition,
2018 edition
इससे मुझे कॉलेज के दिनों का Software Archaeology course याद आता है
वह 1970 के दशक के compiler exercises को फिर से implement करने वाली class थी,
और उस समय वह बेकार लगी थी, लेकिन बाद में system design को समझने में उसने बहुत मदद की
पुराने bugs, wiki, version history और team history को ट्रैक करने की क्षमता अनिवार्य है
आज बहुत से computer science programs वास्तव में coding vocational schools जैसे बन गए हैं
छात्र frameworks का उपयोग तो कर लेते हैं, लेकिन language design philosophy या systems के evolution को नहीं समझते
यह नहीं भूलना चाहिए कि computing केवल implementation नहीं, बल्कि विचारों और आइडियाज़ का अध्ययन भी है
accreditation standards की वजह से curriculum को बहुत ज़्यादा बदलना आसान नहीं है
CSCI 3210: Modern text encoding and processing
यह ऐसा course होगा जिसमें Unicode और UTF-8 सिखाए जाएँ, और ‘1 character = 1 byte’ वाली सोच छोड़ी जाए
इसमें encoding के साथ-साथ search, sorting, font rendering, emoji handling भी शामिल होंगे
बुनियादी विषय है, लेकिन इसे सच में ठीक से समझने वाले बहुत कम हैं