4 पॉइंट द्वारा GN⁺ 2025-10-25 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • यह लेख वास्तव में मौजूद नहीं होने वाले, लेकिन 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 टिप्पणियां

 
GN⁺ 2025-10-25
Hacker News की राय
  • CSCI 3300: Classical Software Studies
    Alan Kay दशकों से इस बात पर ज़ोर देते आए हैं कि हम उन विचारों को बार-बार फिर से खोज रहे हैं जो 70 के दशक के आखिर तक पहले ही स्थापित हो चुके थे
    एक कलाकार जैसे कला का इतिहास सीखता है, वैसे ही प्रोग्रामर को भी computer science का इतिहास सीखना चाहिए — उनकी इस निराशा से सहमति है

    • जब मैं RIT में पढ़ता था, तब ‘History of Computing’ नाम का एक elective course था। उसमें abacus से शुरू करके mainframe और networking तक सब कवर किया जाता था, और आज भी उसके lecture notes उपलब्ध हैं
    • कला या दर्शन का इतिहास हज़ारों सालों में फैला है, लेकिन computing का इतिहास मुश्किल से एक पीढ़ी या दो-तीन पीढ़ियों जितना ही है
      hardware performance पर निर्भर computing की तुलना कला से करना कुछ ज़बरदस्ती जैसा लगता है
      यह मान लेना कि 1970 की problem-solving शैली 2025 में भी ज्यों-की-त्यों लागू होगी, वास्तविकता को नज़रअंदाज़ करना है
    • GitHub पर मैंने “यह Ansible से कैसे अलग है?” जैसे सवाल पर “मैंने Ansible का नाम पहली बार सुना है” जैसा जवाब देखा है
      हर पीढ़ी का यह मान लेना कि उसने इसे पहली बार खोजा है — यह बार-बार होने वाली पुनर्खोज दिलचस्प है
    • founders के साथ काम करते समय अक्सर ऐसा होता है कि पहले से मौजूद concepts को जैसे अभी-अभी नया बनाया गया हो, उस तरह पेश किया जाता है
      अतीत की समस्याएँ और उनके समाधान सीखना कभी भी समय की बर्बादी नहीं है
    • कॉलेज में एक बार ‘operating system history essay’ असाइनमेंट था, और मैंने OS X (Snow Leopard) चुना था
      उस प्रक्रिया के ज़रिए मुझे 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 के आधार पर ठुकराना होगा

    • CSCI 4812: The Career Lab में उस वास्तविकता को कवर किया जाएगा जिसमें सहकर्मी अनैतिक माँगें मानकर आगे बढ़ जाते हैं, और बाद में बचा हुआ काम आपको संभालना पड़ता है
    • वास्तव में कई degree programs में ethics से जुड़े courses शामिल होते हैं
    • लेकिन आखिरकार universities स्नातकों की employability को प्राथमिकता देती हैं
  • Debugging course का प्रस्ताव
    ऐसा course होना चाहिए जिसमें bug की root cause ढूँढ़ना और अलग-अलग tools का उपयोग करना सिखाया जाए

    • chemistry lab की तरह, छात्रों को bugs से भरा हुआ legacy codebase दिया जाए और जब वे सभी tests pass करा दें तभी course खत्म हो — ऐसा format अच्छा होगा
    • साथ ही दूसरे लोगों का code पढ़ना और मौजूदा structure (Chesterton’s fence) को बिना सोचे-समझे न तोड़ना भी सीखना चाहिए
    • बहुत से senior engineers आज भी print से debugging करते हैं
      interactive debugging के उद्धारकर्ता पर बात करने के लिए भी समय होना चाहिए
  • CSCI 0001: Functional programming and type theory
    अकादमिक दुनिया की जटिल terminology और formulas ने functional programming को लोकप्रिय होने से रोके रखा है
    अब समय आ गया है कि सीधे सीखा जाए कि monad आखिर endofunctor की category में monoid क्यों है

    • pure functions, context window के भीतर भी, बहुत स्वाभाविक रूप से काम करते हैं
  • CSCI 4020: Writing Fast Code in Slow Languages
    यह ऐसा course होगा जो धीमी languages (VB, Ruby आदि) के ज़रिए algorithmic complexity सिखाए, और दिखाए कि Ruby का O(N), C++ के O(N²) को हरा सकता है

    • बचपन में पढ़ी एक किताब में FORTRAN के bubble sort और BASIC के quicksort की तुलना देखी थी,
      और BASIC का अप्रत्याशित रूप से तेज़ निकलना मुझे चौंका गया था
    • मैंने एक practical भी किया था जिसमें Python loops को numpy vector operations और tensorflow operations में बदलकर speed difference मापा गया था
      उससे यह महसूस हुआ कि AI में Python इतना उपयोगी क्यों है
    • अगर रोज़ Python इस्तेमाल करने वाले engineers यह समझ जाएँ कि उनका code धीमा क्यों है, तो वह सचमुच बहुत उपयोगी होगा
    • कई बार algorithmic complexity से भी बड़ा अंतर hardware utilization बनाता है
      linear memory में vectorized code, heap में बिखरे data की तुलना में कहीं अधिक तेज़ होता है
    • संदर्भ पुस्तक: Visual Basic Algorithms Ready-to-Run
  • पिछली 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 को समझने में उसने बहुत मदद की

    • वास्तव में digital detective work बड़े codebases में बेहद महत्वपूर्ण है
      पुराने bugs, wiki, version history और team history को ट्रैक करने की क्षमता अनिवार्य है
  • आज बहुत से computer science programs वास्तव में coding vocational schools जैसे बन गए हैं
    छात्र frameworks का उपयोग तो कर लेते हैं, लेकिन language design philosophy या systems के evolution को नहीं समझते
    यह नहीं भूलना चाहिए कि computing केवल implementation नहीं, बल्कि विचारों और आइडियाज़ का अध्ययन भी है

    • हालांकि कुछ बड़े state universities अब भी 25 साल पहले जैसी core course structure बनाए हुए हैं
      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 भी शामिल होंगे
    बुनियादी विषय है, लेकिन इसे सच में ठीक से समझने वाले बहुत कम हैं