programmers
CS50x 2026 – व्याख्यान 0: Scratch ----व्याख्यान प्रतिलेख (अंग्रेज़ी से हिंदी अनुवाद)

पठनीयता के लिए हल्का संपादित: भराव वाले शब्द हटाए गए हैं और स्पष्ट प्रतिलेखन-त्रुटियाँ सुधारी गई हैं।
CS50 में आपका स्वागत है
ठीक है, तो यह है। OK। यह CS50 है, हार्वर्ड विश्वविद्यालय का कंप्यूटर विज्ञान के बौद्धिक उपक्रमों और प्रोग्रामिंग की कला से परिचय। मेरा नाम डेविड मालन है, और यह सप्ताह 0 है, और आज के अंत तक आप न सिर्फ़ यह जान जाएँगे कि यहाँ ये बल्ब क्या लिखते हैं, बल्कि इससे कहीं ज़्यादा जानेंगे।
एआई और प्रोग्रामिंग का भविष्य
पर क्यों न हम सबसे पहले उस हाथी की बात करें जो कमरे में मौजूद है, यानी कृत्रिम बुद्धिमत्ता (आर्टिफ़िशियल इंटेलिजेंस), जो पिछले कुछ वर्षों में लगता है हर जगह छाई हुई है, और कहा गया है कि यह प्रोग्रामिंग को बदल देगी, और यह बिल्कुल सच है। दरअसल पिछले कई वर्षों से ऐसा ही रहा है। यह आगे और भी बढ़ता ही जाएगा, लेकिन यह बेहद रोमांचक समय है। मेरा मानना है कि यह वास्तव में एक अच्छी बात है, क्योंकि अब एआई का कई रूपों में उपयोग करके आप कंप्यूटर से कह सकते हैं कि वह आपकी किसी समस्या को हल करने में मदद करे। आप अपने कोड में कोई बग या गलती ढूँढ सकते हैं।
इससे भी बेहतर, अब आप बढ़ती हद तक एआई को बता सकते हैं कि आप अपने सॉफ़्टवेयर में कौन-सी अतिरिक्त सुविधाएँ जोड़ना चाहते हैं, और यह बहुत बड़ी बात है, क्योंकि उद्योग में भी वर्षों से, दशकों से मनुष्य किसी न किसी रूप में प्रोग्रामिंग करते आ रहे हैं, उत्पाद और समस्याओं के समाधान बनाते हुए। सच्चाई यह है कि आप और मैं, मनुष्य होने के नाते, लंबे समय से अड़चन (बॉटलनेक) रहे हैं। दिन में बस इतने ही घंटे होते हैं। आपकी टीम या कंपनी में बस इतने ही लोग होते हैं, और जितने बग आप हल करना चाहते हैं और जितनी सुविधाएँ लागू करना चाहते हैं, वे कहीं ज़्यादा हैं। लेकिन साथ ही, बुनियादी बातें समझना आपके लिए अब भी बहुत ज़रूरी है।
और वाक़ई, CS50 जैसी कक्षा का मक़सद आपको प्रोग्रामिंग सिखाना कभी नहीं रहा। वह तो ऐसी कक्षा लेने के दुष्प्रभावों (साइड इफ़ेक्ट्स) में से एक है, लेकिन समग्र लक्ष्य यह है कि आपको सोचना सिखाया जाए, यानी इनपुट लेकर सही आउटपुट कैसे दिया जाए, और इन तथा अन्य उपकरणों में महारत कैसे हासिल की जाए। और इसलिए सेमेस्टर के अंत तक आप न सिर्फ़ Scratch जैसी भाषाओं से परिचित होंगे, जिसे हम आज छुएँगे अगर आपने इसे पहले नहीं देखा है, बल्कि C, Python और SQL, HTML, CSS और JavaScript जैसी भाषाओं से भी। आप ख़ुद नई चीज़ें सीख पाएँगे और अंततः कंप्यूटरों को बढ़ती हद तक यह बता पाएँगे कि आप उनसे क्या करवाना चाहते हैं, लेकिन तब भी आप चालक की सीट पर होंगे, जैसा कि कहते हैं। आप पायलट होंगे, आप संचालक (कंडक्टर) होंगे, जो भी आपका पसंदीदा रूपक हो।
और मेरे हिसाब से यही बात आज भी शुरुआती सामग्री, बुनियादी सामग्री सीखने को इतना सशक्त बनाती है, क्योंकि आप जानेंगे कि आख़िरकार आप किस बारे में बात कर रहे हैं और आप वास्तव में क्या हल कर सकते हैं। हम पहले भी इससे गुज़र चुके हैं, जैसे जब कैलकुलेटर आए थे। तब भी, मैं कहूँगा कि इतने सालों बाद भी जोड़ और घटाव करना आना मूल्यवान है। फिर भी मुझे अपनी गणित की कुछ कक्षाएँ याद आती हैं, मुझे याद है कि कॉलेज में मैंने अवकलज (डेरिवेटिव) और समाकलन (इंटीग्रल) निकालने के इतने सारे तरीके सीखे। और उस प्रक्रिया के छठे तरीके के बाद मुझे लगा, ठीक है, मैं समझ गया। मुझे विचार समझ आ गया।
क्या मुझे सच में इतने सारे तरीके जानने की ज़रूरत है? और यहाँ भी, एआई और कोड के साथ, क्या आप बढ़ती हद तक विचारों में महारत हासिल कर सकते हैं और फिर उन्हीं समस्याओं को हल करने में मदद के लिए किसी कोपायलट, किसी सहायक पर निर्भर हो सकते हैं? तो चलिए इसमें से कुछ हम ख़ुद करके देखते हैं। दरअसल, आपको बस एक झलक देने के लिए कि आप जल्द ही ख़ुद क्या कर पाएँगे, मुझे आगे बढ़कर Visual Studio Code नाम की एक चीज़ खोलने दीजिए, जिसे संक्षेप में VS Code भी कहते हैं। यह लोकप्रिय, काफ़ी हद तक ओपन सोर्स या मुफ़्त सॉफ़्टवेयर है, जिसे असली दुनिया के लोग इस्तेमाल करते हैं।
उद्योग में कोड लिखने के लिए, और यह मूलतः एक टेक्स्ट एडिटर है, नोटपैड जैसा, अगर आप उससे परिचित हैं, या टेक्स्टएडिट जैसा, कुछ-कुछ गूगल डॉक्स जैसा, लेकिन उसमें बोल्ड करने, रेखांकित करने जैसी चीज़ें नहीं होतीं जो आपको वर्ड प्रोसेसिंग प्रोग्रामों में मिलती हैं। और यह उसका CS50 वाला संस्करण है।
कोड का स्वाद: एक सरल चैटबॉट बनाना
अगले सप्ताह हम आपका इससे और ज़्यादा परिचय कराएँगे, लेकिन अभी बस आपको इसका स्वाद देते हैं कि ऐसे वातावरण (एनवायरनमेंट) में आप क्या कर सकते हैं। तो मैं VS Code चला रहे इस प्रोग्राम पर चला जाता हूँ, और स्क्रीन के इस निचले हिस्से में आपको एक तथाकथित टर्मिनल दिखाई देगा। इसके बारे में भी अगले सप्ताह और बात होगी, पर इसी टर्मिनल विंडो में मैं ऐसे कमांड लिख सकता हूँ जो कंप्यूटर को बताते हैं कि मैं उससे क्या करवाना चाहता हूँ। उदाहरण के लिए, मान लीजिए, सिर्फ़ चर्चा की ख़ातिर, कि मैं अपना ख़ुद का चैटबॉट बनाना चाहता हूँ, ChatGPT या Gemini या Claude नहीं, बल्कि कुछ अर्थों में अपना ही एक बनाते हैं।
तो मैं chat.py नाम का एक प्रोग्राम कोड करूँगा, और आप शायद जानते होंगे कि मैं यहाँ एक भाषा इस्तेमाल कर रहा हूँ, जिसे बस Python कहते हैं, और अगर आपको यह अपरिचित है, तो आप अच्छी संगत में हैं। आप इसे भी कुछ ही हफ़्तों में सीख जाएँगे। और विंडो के ऊपरी हिस्से की फ़ाइल में मैं अपना कोड लिख सकता हूँ और विंडो के निचले हिस्से में मैं अपना कोड चला सकता हूँ। तो देखिए, आजकल हमारे पास जो एआई तकनीकें पहले से मौजूद हैं, उनके सहारे अपना ख़ुद का चैटबॉट लिखना भी अपेक्षाकृत कितना आसान हो गया है।
मैं आगे बढ़कर import जैसा एक कमांड टाइप करूँगा। मैं आगे बढ़कर यह टाइप करूँगा: from openai import OpenAI। हम आख़िरकार सीखेंगे कि इसका मतलब क्या है, पर मैं जो करने जा रहा हूँ वह यह है कि मैं अपना प्रोग्राम किसी और के द्वारा दिए गए एक API, यानी एप्लिकेशन प्रोग्रामिंग इंटरफ़ेस, के ऊपर लिखूँगा, जिसे OpenAI नाम की एक बड़ी कंपनी उपलब्ध कराती है, और वे ऐसी सुविधाएँ और कार्यक्षमता दे रहे हैं जिनके विरुद्ध अब मैं कोड लिख सकता हूँ। मैं एक तथाकथित क्लाइंट बनाऊँगा, यानी मेरा अपना एक प्रोग्राम जो इस OpenAI सॉफ़्टवेयर का उपयोग करेगा।
और फिर मैं आगे बढ़कर इस सॉफ़्टवेयर से एक जवाब माँगूँगा, और मैं उसे client.responses.create के बराबर रखूँगा, इस सबका जो भी मतलब हो, और फिर इन कोष्ठकों (पैरेंथेसिस) के भीतर मैं यह कहूँगा। इस अंतर्निहित API को मैं जो इनपुट देना चाहता हूँ वह, उद्धरण चिह्नों में, कुछ ऐसा है: "एक वाक्य में बताओ, CS50 क्या है?" बिल्कुल वैसे ही जैसे मैं ख़ुद ChatGPT से पूछता। अगर आप ChatGPT जैसी चीज़ों से और आम तौर पर आज के एआई से परिचित हैं, तो आप जानते हैं कि मॉडल नाम की एक चीज़ होती है, जो सांख्यिकीय मॉडलों जैसी होती हैं और अंततः यही तय करती हैं कि एआई क्या कर सकते हैं। मैं आगे बढ़कर कहूँगा model बराबर, उद्धरण चिह्नों में, GPT 5, जो कम से कम आज की तारीख़ तक सबसे नया और सबसे बेहतरीन संस्करण है।
अब अपनी टर्मिनल विंडो में मैं एक अलग कमांड चलाऊँगा, python chat.py, और बशर्ते मैंने इस प्रोग्राम में कोई टाइपिंग की गलती न की हो, मुझे यह कर पाना चाहिए कि मैं OpenAI से, ChatGPT.com के ज़रिए नहीं, बल्कि अपने ही कोड से, किसी सवाल का जवाब पूछ सकूँ। लेकिन मैं जानना चाहता हूँ कि उस सवाल का जवाब क्या है, इसलिए मैं वास्तव में उस जवाब को प्रिंट करवाना चाहता हूँ, यह कहकर: print response.output_text। यानी इन 10 पंक्तियों से, और यह 10 पंक्तियाँ भी नहीं हैं क्योंकि इनमें से कुछ ख़ाली हैं, मैंने अपना ख़ुद का चैटबॉट लागू कर दिया है, जो फ़िलहाल हार्ड कोडेड है, यानी स्थायी रूप से इस तरह कॉन्फ़िगर किया गया है कि वह मेरे लिए सिर्फ़ एक ही सवाल का जवाब दे। तो देखते हैं, उँगलियाँ क्रॉस करके।
CS50 हार्वर्ड विश्वविद्यालय का परिचयात्मक कंप्यूटर विज्ञान पाठ्यक्रम है, कंप्यूटर विज्ञान के बौद्धिक उपक्रम और प्रोग्रामिंग की कला। अजीब ढंग से जाना-पहचाना, जो समस्या-समाधान, एल्गोरिदम, डेटा संरचनाएँ और बहुत कुछ कवर करता है, C, Python और SQL जैसी भाषाओं का उपयोग करते हुए। ठीक है, दिलचस्प, पर चलिए प्रोग्राम को और गतिशील (डायनेमिक) बनाते हैं। मान लीजिए आप ऐसा कोड लिखना चाहते हैं जो वास्तव में इंसान से पूछे कि उसका सवाल क्या है, क्योंकि बहुत जल्दी हम इस एक सवाल से कुछ ज़्यादा जानना चाहेंगे। तो यहाँ ऊपर मैं आगे बढ़कर अपना कोड बदलूँगा और कुछ टाइप करूँगा।
इस तरह टाइप करूँगा: prompt बराबर input कोष्ठकों के साथ। इस पर भी फिर कभी और बात होगी, लेकिन मैं उपयोगकर्ता से जो माँगने जा रहा हूँ वह यह है कि वह मुझे एक असली प्रॉम्प्ट दे। यानी एक सवाल जिसका जवाब मैं चाहता हूँ कि यह एआई दे। और यहाँ नीचे, आप देखेंगे, भले ही आपने पहले कभी प्रोग्रामिंग न की हो, कि मैं कुछ ऐसा कर सकता हूँ जो काफ़ी सहज-बोधगम्य है, क्योंकि पंक्ति 5 अब इंसान से इनपुट माँग रही है। मान लेते हैं कि यह बराबर का चिह्न इसका मतलब है कि उस जवाब को prompt नाम के एक वेरिएबल में रख दो, जहाँ वेरिएबल बिल्कुल गणित की तरह होते हैं।
X या Y या Z। चलिए इसे आगे बढ़कर prompt में रख लेते हैं। तो OpenAI को मैं अब जो इनपुट देना चाहता हूँ वह वही असली प्रॉम्प्ट है। यानी यह एक प्लेसहोल्डर है जिसमें वह सब कुछ होगा जो इंसान ने कीबोर्ड से टाइप किया। अब अगर मैं वही कमांड फिर से चलाऊँ, python chat.py, एंटर दबाऊँ, उँगलियाँ क्रॉस करूँ, तो मुझे अब डायनेमिक प्रॉम्प्टिंग दिखेगी।
तो मैं कौन-सा सवाल पूछना चाहूँगा? चलिए इसे फिर से एक वाक्य में कहते हैं, अरे, एक वाक्य में, CS50 क्या है? एंटर। और अब जवाब आता है जो शायद लगभग वही है लेकिन थोड़ा अलग, उसका एक रूपांतर, पर शायद हम इसे और भी संक्षेप में निचोड़ सकते हैं। चलिए इसे फिर से चलाते हैं?
python chat.py और चलिए कहते हैं, एक शब्द में, CS50 क्या है, और देखते हैं कि अंतर्निहित एआई मानता है या नहीं। और थोड़े विराम के बाद, एक शब्द में पाठ्यक्रम, तो यह बहुत ग़लत नहीं है, और शायद अब हम इसके साथ थोड़ा मज़ा कर सकते हैं। एक शब्द में, कौन बेहतर है, शायद हार्वर्ड या स्टैनफ़ोर्ड, प्रश्नचिह्न। उम्मीद है आपने सही चुना होगा।
देखते हैं। जवाब है। निर्भर करता है। ठीक है, तो उसने वास्तव में बात नहीं मानी, लेकिन ध्यान दीजिए कि मैं इस कोड में बार-बार क्या करता जा रहा हूँ। मैं बार-बार इंसान की तरह प्रॉम्प्ट देता जा रहा हूँ, जैसे एक वाक्य में, एक शब्द में।
ख़ैर, अगर आप चाहते हैं कि एआई एक ख़ास तरीके से व्यवहार करे, तो क्यों न हम अंतर्निहित सिस्टम को ही बता दें कि वह उस तरह व्यवहार करे, ताकि इंसान को बार-बार एक वाक्य में, एक वाक्य में, एक शब्द में, न कहना पड़े। तो हम एक और सुविधा पेश कर सकते हैं जिसकी चर्चा आप आजकल उद्योग में सुनेंगे, जो है सिर्फ़ उपयोगकर्ता का प्रॉम्प्ट नहीं, जिसे मैं अब अस्थायी रूप से user prompt नाम दे दूँगा, बस यह साफ़ करने के लिए कि वह उपयोगकर्ता की ओर से आ रहा है। मैं एक तथाकथित सिस्टम प्रॉम्प्ट भी दूँगा, उसे कुछ मानकीकृत निर्देशों के बराबर रखकर जिनका मैं चाहता हूँ कि एआई पालन करे, जैसे, उद्धरण चिह्नों में, "अपना उत्तर एक वाक्य तक सीमित रखो।" और अब, इनपुट के रूप में user prompt देने के अलावा, मैं OpenAI को यह भी बताऊँगा कि वह System prompt नाम के इस दूसरे वेरिएबल से आने वाले इन निर्देशों का उपयोग करे।
तो दूसरे शब्दों में, मैं अब भी वही अंतर्निहित सेवा इस्तेमाल कर रहा हूँ, पर अब मैं उसे सिर्फ़ वह नहीं दे रहा जो उपयोगकर्ता ने टाइप किया, बल्कि यह मानकीकृत पाठ भी, "अपना उत्तर एक वाक्य तक सीमित रखो", ताकि मुझ जैसे इंसान को अब यह करना न पड़े। अब वापस अपने टर्मिनल पर चलते हैं, python chat.py एक बार फिर चलाते हैं, और इस बार हमसे प्रॉम्प्ट माँगा जाएगा, पर अब मैं बस पूछ सकता हूँ, CS50 क्या है, प्रश्नचिह्न। और मुझे संभवतः पहले जैसा ही एक सही और मिलता-जुलता जवाब मिलेगा।
और वाक़ई, यह हार्वर्ड विश्वविद्यालय का प्रमुख (फ़्लैगशिप) परिचयात्मक कंप्यूटर विज्ञान पाठ्यक्रम है। तो यह भी बिल्कुल सटीक लगता है।
रबर डक: CS50 का अपना एआई ट्यूटर
लेकिन अब हम इसके साथ भी थोड़ा मज़ा कर सकते हैं, और आप शायद जानते होंगे कि आजकल के ये GPT एक तरह से व्यक्तित्व (पर्सनैलिटी) वाले होते हैं। आप उन्हें किसी न किसी तरह से व्यवहार करने के लिए बाध्य कर सकते हैं। तो क्यों न हम अपने सिस्टम प्रॉम्प्ट में जाकर कुछ मज़ेदार-सा कहें, जैसे "ऐसे बर्ताव करो जैसे तुम एक बिल्ली हो।" और अब आख़िरी बार प्रॉम्प्ट पर वापस चलते हैं। python chat.py फिर चलाएँगे, प्रॉम्प्ट में कहेंगे CS50 क्या है, और एंटर दबाने की आख़िरी शानदार अदा के साथ।
हमें क्या वापस मिलता है? CS50 हार्वर्ड विश्वविद्यालय का परिचयात्मक कंप्यूटर विज्ञान पाठ्यक्रम है जो प्रोग्रामिंग, एल्गोरिदम, डेटा संरचनाएँ और समस्या-समाधान सिखाता है, और यह ऑनलाइन मुफ़्त उपलब्ध है, म्याऊँ। तो इस ख़ास व्यवहार को करवाने के लिए इतना ही काफ़ी था। कहने का मतलब यह है कि प्रोग्रामिंग से आपके पास लगभग 10 पंक्तियों के पाठ में काफ़ी शक्तिशाली चीज़ें बनाने की क्षमता आ जाती है, जिनमें से सब कुछ शायद आप अभी न समझते हों, पर ऐसी कक्षा का मक़सद ही यही है, शायद ऐसी मज़ेदार-सी चीज़ें, लेकिन असल में यह उन्हीं बुनियादी इकाइयों (प्रिमिटिव्स) का उपयोग कर रही है जिनसे CS50 का अपना वर्चुअल रबर डक बना है, और आने वाले हफ़्तों में हम इसके बारे में और बात करेंगे, पर लंबी कहानी छोटी करके, प्रोग्रामिंग की दुनिया में यह एक तरह का चलन है कि अपनी मेज़ पर सचमुच एक रबर डक रखा जाए, या वास्तव में कोई भी निर्जीव प्यारी-सी चीज़ ऐसी ही
जैसी यह है, क्योंकि जब आप किसी समस्या से जूझ रहे होते हैं, अपने कोड में किसी बग या गलती से, और आपके पास कोई दोस्त, कोई टीचिंग असिस्टेंट, कोई माता-पिता या कोई और नहीं होता जो आपसे ज़्यादा जानकार हो।
कोड के बारे में, जहाँ प्रोग्रामिंग के हलकों में आपको सचमुच रबर डक से बात करने के लिए प्रोत्साहित किया जाता है, और अपनी उलझन को शब्दों में कहने और अपने विचारों को इतना व्यवस्थित करने की उसी प्रक्रिया में कि आप उन्हें किसी दूसरे व्यक्ति या यहाँ तक कि डक को समझा सकें, अक्सर वह मुहावरेदार बल्ब जल उठता है और आपको एहसास होता है, मैं तो बेवकूफ़ी कर रहा हूँ, अब अपने ही विचारों में मुझे अपनी अतार्किकता या गलती सुनाई दे रही है। और आप वह समस्या भी हल कर लेते हैं। तो CS50, इससे प्रेरणा लेकर, आपको कंप्यूटर के रूप में एक वर्चुअल डक देगा। और वाक़ई, सेमेस्टर के दौरान आप जिन अन्य URL का उपयोग करेंगे उनमें से एक यह है, CS50.ai, जो पिछले URL, CS50.dev, में भी अंतर्निहित है, जहाँ ये वे एआई हैं जिन्हें आप CS50 में समस्याएँ हल करने के लिए इस्तेमाल कर सकते हैं और आपको ऐसा करने के लिए प्रोत्साहित किया जाता है।
जैसा कि आप पाठ्यक्रम की रूपरेखा (सिलेबस) के क्रम में देखेंगे, CS50 के अपने सॉफ़्टवेयर के अलावा एआई-आधारित सॉफ़्टवेयर का उपयोग करना उचित नहीं है। अनुमति नहीं है, चाहे वह Claude हो, Gemini हो, ChatGPT हो या इसी तरह का कोई और। लेकिन रास्ते में न सिर्फ़ मुझ जैसे इंसानों की ओर, आपके टीचिंग असिस्टेंट और कक्षा के अन्य लोगों की ओर, बल्कि CS50 के अपने एआई-आधारित सॉफ़्टवेयर की ओर भी रुख़ करना उचित है और बहुत प्रोत्साहित किया जाता है। और आप पाएँगे कि यह वर्चुअल डक इस तरह डिज़ाइन किया गया है कि वह जितना हो सके एक अच्छे इंसानी
ट्यूटर की तरह व्यवहार करे, जैसा आप असली दुनिया के किसी असली इंसान से अपेक्षा करेंगे, जो कंप्यूटर विज्ञान जानता हो, जो जानता हो कि आपको हल तक कैसे ले जाया जाए, आदर्श रूप से उसे सीधे-सीधे बताकर और परोसकर बिगाड़े बिना। तो इस बात के साथ, यही एक तरह से अंतिम लक्ष्य है, कि आप इस तरह का कोड और उससे भी ज़्यादा लिख सकें।
कंप्यूटर विज्ञान क्या है?
लेकिन चलिए वाक़ई शुरुआत से शुरू करते हैं और देखते हैं कि हम उन शून्यों और एकों से, जिनमें कंप्यूटर बोलते हैं, कैसे वापस कृत्रिम बुद्धिमत्ता तक पहुँच सकते हैं। तो कंप्यूटर विज्ञान पाठ्यक्रम के नाम में है, Computer Science 50, पर वह क्या है? दरअसल यह बस सूचना का अध्ययन है। आप उसे कैसे निरूपित (रिप्रेज़ेंट) करते हैं? आप उसे कैसे प्रोसेस करते हैं?
और कंप्यूटर विज्ञान से बहुत गहराई से जुड़ी हुई चीज़ वह है जिसे दुनिया कम्प्यूटेशनल थिंकिंग (संगणनात्मक चिंतन) कहती है, जो बस कंप्यूटर विज्ञान, यानी CS, के विचारों को आम तौर पर असली दुनिया की समस्याओं पर लागू करना है। और वास्तव में, मैं कहूँगा कि अंततः कंप्यूटर विज्ञान असल में यही है। यह समस्या-समाधान के बारे में है, और भले ही हम कंप्यूटरों का उपयोग करते हैं, आप रास्ते में प्रोग्रामिंग सीखते हैं, ये वास्तव में बस उपकरण और कार्यप्रणालियाँ हैं जिनका लाभ आप समस्याओं को हल करने के लिए उठा सकते हैं। अब इसका मतलब क्या है?
तो, एक समस्या को शायद सबसे आसानी से इस तरह की एक सरल तस्वीर में संक्षिप्त किया जा सकता है। हमारे पास कुछ इनपुट है, जो
वह समस्या जैसा है जिसे हम हल करना चाहते हैं, और आउटपुट, जो वह लक्ष्य है जिसके लिए हम समाधान चाहते हैं। और फिर यहाँ बीच में कहीं वह मुहावरेदार ब्लैक बॉक्स है, वह एक तरह की गुप्त चटनी (सीक्रेट सॉस) जो उस इनपुट को आउटपुट तक पहुँचाती है। तो यही, मैं कहूँगा, सारतः समस्या-समाधान है और इस तरह कंप्यूटर विज्ञान भी। लेकिन हमें सहमत होना होगा, ख़ासकर अगर हम उपकरणों, मैक, पीसी, फ़ोन, जो भी हो, का उपयोग करने जा रहे हैं, कि हम सब सूचना को, इनपुट और आउटपुट को, किसी मानकीकृत तरीके से कैसे निरूपित करें?
क्या अंग्रेज़ी से? या किसी और चीज़ से?
उँगलियों पर गिनती: यूनरी (Unary)
ख़ैर, आप सब शायद जानते हैं, भले ही आप कंप्यूटर वाले लोग न हों, कि दिन के अंत में कंप्यूटर किसी न किसी तरह शून्य और एक का ही इस्तेमाल करते हैं। बस यही उनकी पूरी वर्णमाला है। और वास्तव में, आप शायद पहले से ही ऐसी कुछ प्रणालियों से परिचित हों। तो यूनरी संकेतन (नोटेशन) का मतलब है कि आप मूलतः एक ही अंक का उपयोग करते हैं, जैसे अपने हाथ की उँगलियाँ। उदाहरण के लिए, यूनरी, यानी आधार एक (बेस 1), ऐसी चीज़ है जो आप अपने ही मानवीय हाथ पर कर सकते हैं। तो मिसाल के तौर पर, एक मानवीय हाथ से मैं कितना ऊँचा गिन सकता हूँ?
ठीक है, तो उम्मीद है 1, 2, 3, 4, 5, और अगर आप 6 से 11 और 10 और आगे तक गिनना चाहते हैं, तो आपको, जैसा कि आप जानते हैं, दूसरा हाथ या पैर की उँगलियाँ वग़ैरह निकालनी पड़ेंगी, क्योंकि यह काफ़ी सीमित है।
समझदारी से गिनती: बाइनरी (आधार 2)
लेकिन अगर मैं थोड़ा और सोचूँ, सिर्फ़ यूनरी का इस्तेमाल करने के बजाय, तो क्या हो अगर मैं कोई अलग प्रणाली इस्तेमाल करूँ? बाइनरी जैसी किसी चीज़ के बारे में क्या ख़्याल है? अगर आप थोड़ा और सोचें, तो एक मानवीय हाथ पर आप कितना ऊँचा गिन सकते हैं? तो 31, कहता है कोई जिसने पहले कंप्यूटर विज्ञान पढ़ा है, पर ऐसा क्यों है? इसकी कल्पना करना थोड़ा कठिन है, है ना?
क्योंकि 1, 2, 3, 4, 5 से ऐसा लगता है कि बस पाँच संभावित पैटर्न हैं, लेकिन वह तब है जब आप सिर्फ़ उन उँगलियों की कुल संख्या देख रहे हों जो वास्तव में ऊपर हैं, यानी कुल 5 या कुल 4 या 1 या ऐसा ही कुछ। लेकिन क्या हो अगर हम इस बात को भी ध्यान में रखें कि कौन-सी उँगलियाँ ऊपर हैं, यानी उनका पैटर्न, और बस मानकीकृत कर दें कि उनमें से हर उँगली क्या दर्शाती है? तो शायद हम सब सहमत हों, जैसे कि एक अच्छा कंप्यूटर भी होगा, कि शायद कोई भी उँगली ऊपर न होने का मतलब संख्या 0 है। और अगर हम 1 तक गिनना चाहें, तो सबसे स्पष्ट वाला लेते हैं।
यह अब 1 है। लेकिन 2 को इस तरह दिखाने के बजाय, जो मेरी पहली सहज प्रवृत्ति थी, शायद 2 बस यह हो सकता है, सिर्फ़ दूसरी उँगली ऊपर, ऐसे, और इसका मतलब है कि अब हम 3 को दर्शाने के लिए दो उँगलियाँ ऊपर इस्तेमाल कर सकते हैं। मेरा प्रस्ताव है कि हम सिर्फ़ बीच की उँगली ऊपर करके, सबको नाराज़ करते हुए, 4 को दर्शा सकते हैं। मैं शायद कुछ कठिनाई के साथ इन दो उँगलियों से 5, 6, 7 दर्शा सकता हूँ। मैं सिर्फ़ 3 उँगलियों का इस्तेमाल करके पहले ही 7 तक पहुँच चुका हूँ।
और वास्तव में, अगर हम और ऊपर, और ऊपर जाते रहें, तो मुझे यक़ीन है कि मैं 31 तक पहुँच सकता हूँ, यानी 32 संभावित संयोजनों के लिए, लेकिन पहला वाला 0 था। तो हम इतना ही ऊँचा गिन सकते हैं। हम इस संबंध को बस एक पल में जोड़ेंगे, पर मैंने वहाँ जो करना शुरू किया वह आधार 2 (बेस 2) कहलाता है। सिर्फ़ उँगलियाँ ऊपर या उँगलियाँ नीचे रखने के बजाय, मैं उन उँगलियों की स्थितियों को ध्यान में रख रहा हूँ और इस उँगली को, इस उँगली को, इस उँगली को, और आगे इसी तरह, अलग-अलग अर्थ दे रहा हूँ, कहिए अलग-अलग भार। तो बाइनरी प्रणाली वाक़ई सभी कंप्यूटरों की प्रणाली है।
बिट, बाइट और बाइनरी संख्याएँ
और आप यहाँ कुछ शब्दावली से परिचित होंगे। "बाइनरी डिजिट" ऐसा शब्द नहीं है जो वास्तव में कोई बोलता हो, पर उसका संक्षिप्त रूप होगा बिट (bit)। तो अगर आपने बिट के बारे में सुना है, और हम जल्द ही बाइट, फिर किलोबाइट, मेगाबाइट, गीगाबाइट, टेराबाइट और उससे आगे भी देखेंगे, तो यह बस एक बिट को दर्शाता है, यानी एक अकेला बाइनरी अंक, या तो 0 या 1। 0 को शायद सबसे सरल ढंग से इस तरह दर्शाया जा सकता है कि बस एक उँगली नीचे रखी जाए, या कंप्यूटरों की दुनिया में, जिनके पास बिजली की सुविधा होती है, चाहे दीवार के सॉकेट से या शायद बैटरी से, आप जानते हैं हम क्या कर सकते हैं? हम बस सार्वभौमिक रूप से तय कर सकते हैं कि जब कोई बल्ब बंद होता है, तो वह चीज़ शून्य को दर्शाती है, और जब बल्ब
चालू होता है, तो वह चीज़ इसके बजाय 1 को दर्शाएगी। अब ऐसा क्यों? देखिए, बिजली कितनी सरल चीज़ है, है ना? या तो वह बह रही है या नहीं बह रही, और इसलिए हमें यह चिंता भी नहीं करनी पड़ती कि उसमें से कितनी बह रही है। अगर आपको वोल्टेज के बारे में थोड़ा-बहुत धुँधला-सा याद है, तो हम मोटे तौर पर शून्य वोल्ट जैसे हो सकते हैं।
हमारे लिए वहाँ कुछ उपलब्ध नहीं है, या शायद यह 5 वोल्ट है या बीच का कुछ और। लेकिन बाइनरी के सिर्फ़ शून्य और एक रखने की अच्छी बात यह है कि यह असली दुनिया से बहुत अच्छी तरह मेल खाती है, जैसे किसी लाइट स्विच को चालू और बंद करना। आप बस थोड़ी-सी बिजली या उसकी अनुपस्थिति का उपयोग करके सूचना को निरूपित कर सकते हैं। तो मेरा इससे क्या मतलब है? मान लीजिए हम सिर्फ़ बाइनरी, यानी केवल शून्य और एक, का उपयोग करके गिनना शुरू करना चाहते हैं।
तो चलिए इन्हें रूपक के तौर पर इन बल्बों जैसा सोचते हैं, और वास्तव में मुझे इनमें से कुछ बल्ब उठाने दीजिए, और मैं प्रस्ताव रखता हूँ कि अगर हम संख्या 0 को दर्शाना चाहते हैं, तो तर्कसंगत है कि यहाँ एक अकेला बल्ब जो बंद है, उसे 0 को दर्शाने के लिए मान लिया जाए। अब व्यवहार में, कंप्यूटरों के अंदर छोटे-छोटे बल्ब नहीं होते, लेकिन उनके अंदर छोटे-छोटे स्विच ज़रूर होते हैं, लाखों नन्ही चीज़ें जिन्हें ट्रांज़िस्टर कहते हैं, जिनका चालू होना उसे थोड़ी-सी बिजली पकड़ने देता है और प्रभावी रूप से एक रूपकात्मक बल्ब को जला देता है, या स्विच बंद हो सकता है। ट्रांज़िस्टर बंद हो सकता है और इस तरह बिजली को बिखर जाने दे सकता है, और अब आपके पास बस एक 0 होता है।
दुर्भाग्य से, भले ही मैं कुछ बिजली दे सकता हूँ, यह रही वह बैटरी जिसका मैंने ज़िक्र किया था कि ज़रूरी है, भले ही हमारे पास कुछ बिजली उपलब्ध हो, मैं इस तरह 1 तक गिन सकता हूँ। लेकिन मैं कैसे गिनूँ? हार्डवेयर की समस्या: सिर्फ़ एक बल्ब से मैं एक से ऊपर कैसे गिनूँ? हाँ, तो मुझे उनमें से और चाहिए। तो मुझे यहाँ एक और उठाने दीजिए, और अब मैं इसे इसके बग़ल में रख सकता हूँ, और यह भी मैं दावा करूँगा कि अब भी संख्या एक ही है।
लेकिन अगर मैं उनमें से 2 को चालू करूँ, तो इसका मतलब होगा कि मैं 2 तक गिन सकता हूँ। और अगर मैं अब एक और उठा लूँ तो मैं 3 तक गिन सकता हूँ, लेकिन ज़रा रुकिए, मैं कुछ गलत कर रहा हूँ, क्योंकि 3 मानवीय उँगलियों से वे कितना ऊँचा गिन पाए थे? कुल 7, 0 से शुरू करते हुए। तो मैंने यहाँ कुछ गलत किया है, लेकिन मुझे उस पैटर्न के बारे में थोड़ा और चतुर होने दीजिए जिसका मैं वास्तव में उपयोग कर रहा हूँ। शायद यह अब भी 1 हो सकता है, लेकिन जैसे मेरी उँगली ऊपर गई थी और इसके दूसरे संस्करण में सिर्फ़ एक उँगली ऊपर थी, वैसे ही यह वह हो सकता है जिसे हम 2 के रूप में दर्शाते हैं।
3 के रूप में मैं किसे चालू करूँ, आपका बायाँ या आपका दायाँ? तो आप सही हैं, क्योंकि अब यह उससे मेल खाता है जो मैं कुछ देर पहले अपनी उँगलियों के साथ कर रहा था, और मैंने दावा किया था कि हम 3 को इस तरह दर्शा सकते हैं। अगर हम 4 को दर्शाना चाहते हैं, तो ठीक है। हमें इसे बंद करना होगा, इसे बंद करना होगा, और इसे चालू, और यह किसी तरह 4 है, और चलिए सीधे 7 तक चलते हैं। 7 को दर्शाने के लिए कौन-से चालू करने होंगे?
ठीक है, तो यहाँ सभी। अब अगर आप उन लोगों में से नहीं हैं जिन्होंने सहज रूप से बस कह दिया कि सभी, तो आख़िर यह हो क्या रहा है? इस कमरे में आधे लोग कैसे जानते हैं कि ये पैटर्न क्या होने चाहिए? ख़ैर, शायद आपको याद आ रहा है कि मैंने अपनी उँगलियों से क्या किया था, लेकिन पता चलता है कि आप ऐसी प्रणालियों से पहले से ही काफ़ी परिचित हैं, भले ही आपने इसे कोई नाम न दिया हो। इंसानी दुनिया में, असली दुनिया में, हममें से ज़्यादातर लोग रोज़ तथाकथित आधार 10 (बेस 10) प्रणाली से निपटते हैं, जिसे अन्यथा इस नाम से भी जाना जाता है
डेसिमल (दशमलव), "dec" का संकेत 10 की ओर है, क्योंकि दशमलव प्रणाली में आपके पास 0 से 9 तक 10 अंक उपलब्ध होते हैं। बाइनरी प्रणाली में हमारे पास सिर्फ़ 2 थे, "bi" का संकेत 2 की ओर है, तो 0 और 1। और यूनरी में हमारे पास बस 1 था, एक अकेला अंक, या तो वहाँ या नहीं। तो दशमलव प्रणाली में हमारे पास खेलने के लिए बस ज़्यादा शब्दावली है, और फिर भी आप और मैं यह स्कूल के दिनों से करते आ रहे हैं। तो यह स्पष्ट रूप से संख्या 123 है।
लेकिन क्यों? तकनीकी रूप से यह बस तीन प्रतीक हैं, 1, 2, 3, लेकिन हममें से ज़्यादातर का दिमाग़ तुरंत कहता है, ठीक है, 123, बिल्कुल साफ़, बिल्कुल स्वाभाविक। लेकिन किसी बिंदु पर आपको, मेरी तरह, शायद सिखाया गया था कि यह इकाई का स्थान है और यह दहाई का स्थान है और यह सैकड़े का स्थान है, और आगे इसी तरह। और 1, 2, 3 प्रतीकों का यह पैटर्न 123 इसलिए है कि हम सब कुछ फटाफट मानसिक गणित कर रहे होते हैं, और मैं, ख़ैर, वह 100 गुणा 1 जमा 10 गुणा 2 जमा 1 गुणा 3 है, ठीक है,
इस तरह हमें 100 जमा 20 जमा 3 मिलता है, जो हमें वह संख्या देता है जिसे हम सब गणितीय रूप से 123 के रूप में जानते हैं।
ख़ैर, पता चलता है कि चाहे आप दशमलव का इस्तेमाल कर रहे हों या बाइनरी या अन्य आधार प्रणालियाँ जिनकी चर्चा हम पाठ्यक्रम में आगे करेंगे, प्रणाली मूल रूप से वही रहती है। चलिए इसे थोड़ा सामान्यीकृत करते हैं। यहाँ किसी आधार प्रणाली में एक तीन-अंकीय संख्या है, विशेष रूप से दशमलव में, और यह मैं सिर्फ़ इसलिए जानता हूँ कि इनमें से हर संख्या के ऊपर मेरे पास प्लेसहोल्डर लगे हैं। लेकिन अगर हम यहाँ थोड़ा गणित करें, 1, 10, 100, 1000, 10,000, और आगे इसी तरह, तो पैटर्न क्या है? ख़ैर, तकनीकी रूप से यह 10 की घात 0 है, 10 की घात 1, 10 की घात 2, और आगे इसी तरह, और हम 10 का उपयोग इसलिए कर रहे हैं क्योंकि उन कॉलमों में से हर एक में हम 10 अंकों तक का उपयोग कर सकते हैं।
लेकिन अगर हम उनमें से कुछ अंक हटा दें और दशमलव से बाइनरी पर आ जाएँ, जिसकी प्रेरणा यह है कि किसी कंप्यूटर के लिए बिजली के चालू या बंद होने में अंतर करना, बिजली के 10 अनूठे स्तर निकालकर उनमें भेद करने की तुलना में, कहीं ज़्यादा आसान है। आप ऐसा कर सकते हैं। हार्डवेयर में इसे बनाना कष्टदायक और कठिन होगा, आप कर सकते हैं, पर बस चालू और बंद कहना कहीं ज़्यादा सरल है। इस तरह यह एक अच्छी सरल दुनिया है। तो चलिए आधार को 10 से 2 में बदलते हैं, और इससे हमें क्या मिलता है?
ख़ैर, अगर अब हम गणित को खोलें, तो वह 2 की घात 0 यानी 1 है, 2 की घात 1 यानी 2, 2 की घात 2 यानी 4। तो मानसिक गणित अब वही होने वाला है, लेकिन कॉलम कुछ अलग दर्शाते हैं। तो उदाहरण के लिए, अगर मैं इन सबको फिर से बंद कर दूँ,
ताकि मेरे पास बंद, बंद, बंद हो, जिसे अन्यथा 000 कहते हैं, तो वह 0 है, क्योंकि 4 गुणा 0 जमा 2 गुणा 0 जमा 1 गुणा 0 अब भी मुझे 0 ही देता है। इसके विपरीत, अगर मैं शायद सिर्फ़ इसे चालू कर दूँ जो पूरी तरह बाईं ओर है, तो वह 4 गुणा 1 है, क्योंकि चालू 1 को दर्शाता है और बंद 0 को, जमा 2 गुणा 0 जमा 1 गुणा 0, जो मुझे 4 देता है।
और अगर मैं इन दोनों को भी चालू कर दूँ ताकि तीनों अब चालू, चालू, चालू हों, यानी 111, तो वह 4 गुणा 1 जमा 2 गुणा 1 जमा 1 गुणा 1 है। इससे हमें 7 मिलता है, और हम इसमें और ज़्यादा बिट जोड़ते जा सकते हैं। वास्तव में, अगर हम संख्यात्मक रूप से पूरे ऊपर तक जाएँ, तो बाइनरी में हम उस संख्या को इस तरह दर्शाएँगे जिसे आप और मैं 0 के रूप में जानते हैं। यह रहा कि हम 1 को कैसे दर्शाएँगे। यह रहा कि हम 2 और 3 और 4 और 5 को कैसे दर्शाएँगे, और आप अपने मन की आँखों से इसे कुछ-कुछ देख सकते हैं।
अब क्योंकि मेरे पास सिर्फ़ शून्य और एक हैं और कोई 2 या 3 नहीं, 9 की तो बात ही छोड़िए, मैं मूल रूप से एक पल में 1 आगे ले जाने (कैरी) वाला हूँ, अगर हम कुछ गणित कर रहे होते। तो 5 से 6 पर जाने के लिए, इसीलिए 1 बीच वाले कॉलम में पहुँच जाता है, और यहाँ 7 पर जाने के लिए अब हमें 111 मिलता है, यानी चालू, चालू, चालू। मैं 8 को कैसे दर्शाऊँ? एक और शून्यों का उपयोग करके, हाँ, हाँ, तो हमें एक और अंक जोड़ना पड़ेगा। हमें एक अतिरिक्त अंक का उपयोग करके समस्या पर हार्डवेयर फेंकना होगा, ताकि हमारे पास वास्तव में 8 को दर्शाने वाला एक कॉलम हो। अब, एक अलग बात के तौर पर, और इसके बारे में हम जल्द ही बात करेंगे, अगर आपके पास कोई अतिरिक्त अंक
उपलब्ध न हो, अगर आपके कंप्यूटर में, कहें, पर्याप्त मेमोरी न हो, तो आप ग़लती से 0, 1, 2, 3, 4, 5, 6, 7 तक गिन सकते हैं।
और फिर ग़लती से वापस 0 पर पहुँच सकते हैं, क्योंकि अगर चौथे बिट को रखने की जगह नहीं है, तो आपके पास संख्या का सिर्फ़ एक हिस्सा बचता है, और आख़िरकार असली दुनिया में इससे हर तरह की समस्याएँ पैदा होंगी। तो मुझे आगे बढ़कर इन्हें वापस रखने दीजिए और यह प्रस्ताव रखने दीजिए कि अब हमारे पास एक प्रणाली है, अगर आप इस तरह संख्याएँ गिनने पर सहमत हों, जिसके ज़रिए हम सूचना को किसी मानक तरीके से निरूपित कर सकते हैं, और भीतर, अंदरखाने, सारा उपकरण। इसे काम करवाने के लिए थोड़ी बिजली चाहिए। उसे चीज़ों को चालू करने में सक्षम होना चाहिए, यानी कुछ ट्रांज़िस्टर का उपयोग, और उसे उन चीज़ों को बंद करने में भी सक्षम होना चाहिए ताकि एक की जगह शून्य दर्शाए जा सकें। लेकिन हक़ीक़त यह है कि 2 बिट, 3 बिट, 4 बिट असली दुनिया में बहुत उपयोगी नहीं हैं, क्योंकि 3 बिट के साथ भी आप 7 तक गिन सकते हैं, 4 के साथ आप 15 तक गिन सकते हैं।
ये बहुत बड़ी संख्याएँ नहीं हैं, इसलिए वास्तव में एक बार में 8 बिट की माप-इकाइयों का उपयोग करना ज़्यादा आम है। बाइट (byte) बिल्कुल वही है। 1 बाइट 8 बिट के बराबर होता है। तो अगर आपने कभी किलोबाइट, मेगाबाइट, गीगाबाइट की बोलचाल इस्तेमाल की है, तो वह बस कुछ संख्या में बिट का ज़िक्र है, लेकिन उनमें से 8 मिलकर एक अकेला बाइट बनाते हैं। तो उदाहरण के लिए यहाँ एक बाइट भर के बिट हैं, कुल 8।
मैंने सारे अतिरिक्त प्लेसहोल्डर जोड़ दिए हैं, और यह दशमलव में कौन-सी संख्या दर्शाता है, भले ही आप 8 बाइनरी अंकों को देख रहे हों? यह बस 0 है, क्योंकि जैसे
सचमुच हर कॉलम 0 है। अब यह थोड़ा और मानसिक गणित है, लेकिन जब तक आप इसे पहले से न जानते हों, क्या हो अगर मैं सारे शून्यों को एक में बदल दूँ? मैं सभी 8 बल्ब चालू कर देता हूँ, यह कौन-सी संख्या है? हाँ, तो 255।
अब आपमें से जिन्होंने इसे तुरंत नहीं पकड़ा, कोई बात नहीं। आप निश्चित रूप से गणित हाथ से कर सकते थे। मैं कहूँगा आपमें से कुछ के पास इस तरह की प्रणाली कैसे करनी है, इसका पूर्व ज्ञान है, लेकिन 255 का मतलब है कि अगर आप 0 से गिनना शुरू करें और 255 तक पूरा जाएँ। ठीक है, तो यह कुल 256 संभावनाएँ हुईं। जब आप शून्यों और एकों के पैटर्न की कुल संख्या में 0 को भी शामिल करते हैं, और यह कंप्यूटर विज्ञान की उन आम संख्याओं में से एक होने वाली है, 256।
क्यों? क्योंकि यह किसी चीज़ के 8 का ज़िक्र कर रही है, 2 की घात 8 आपको 256 देती है, और इसलिए आप ऐसे कुछ मान आम तौर पर देखेंगे। पुराने ज़माने में 256, कंप्यूटर स्क्रीन पर सिर्फ़ 256 रंग दिखा सकते थे। कुछ ग्राफ़िक्स फ़ॉर्मैट जो आप आजकल डाउनलोड करते हैं, सिर्फ़ 256 रंगों तक का ही उपयोग कर सकते हैं, क्योंकि, जैसा कि हम देखेंगे, वे सिर्फ़, उदाहरण के लिए, 8 बिट का उपयोग कर रहे हैं और इसलिए वे इंद्रधनुष के बस इतने ही रंगों को निरूपित कर सकते हैं।
तो यही वह तरीका है जिससे हम सिर्फ़ शून्यों और एकों से, कंप्यूटर के अंदर की बिजली से, उन असली संख्याओं को संग्रहीत करने तक पहुँच सकते हैं जिनसे हम परिचित हैं, और ईमानदारी से कहूँ तो हम 255 से भी ऊपर जा सकते हैं। 255 से ऊपर गिनने के लिए आपको क्या चाहिए?
एक 9वाँ बिट, एक 10वाँ बिट, 11वाँ बिट और आगे इसी तरह, और पता चलता है कि आजकल आम परिपाटियाँ, और हम इसे कोड में भी देखेंगे, एक बार में 32 बिट तक का उपयोग करना है। तो यह बिट का एक अच्छा-ख़ासा हिस्सा है, और कोई मोटा अंदाज़ा लगाना चाहेगा कि अगर आपके पास 32 बिट उपलब्ध हों तो आप कितना ऊँचा गिन सकते हैं? अरे, अब कम लोग हैं, हाँ, पीछे वाले।
हाँ, तो यह लगभग 4 अरब है, और अगर आप ऋणात्मक संख्याएँ भी दर्शाना चाहें तो तकनीकी रूप से 2 अरब, लेकिन उस सवाल पर हम फिर लौटेंगे, पर 2 की घात 32 लगभग 4 अरब है। हालाँकि, आजकल मैक और पीसी के साथ जो आपके गोद में रखे होंगे और यहाँ तक कि आपके फ़ोन में भी 64 बिट का उपयोग करना और भी ज़्यादा आम है, जो इतनी बड़ी संख्या है कि मुझे अभी तुरंत यह भी नहीं पता कि उसका उच्चारण कैसे करें। उसमें बहुत सारे क्रमचय (परम्यूटेशन) हैं। 2 की घात 64 संभावित क्रमचय, लेकिन यह बढ़ते हुए आम होता जा रहा है। और एक अलग बात के तौर पर, बस एआई की हमारी चर्चा से बात जोड़ने के लिए, इन पिछले कुछ वर्षों में, ख़ासकर एआई के इस पागलपन-भरे दिलचस्प दौर में, हमारे जीने के कारणों में से एक यह है कि कंप्यूटर इतने ज़्यादा तेज़ होते गए हैं, समय के साथ चरघातांकी (एक्सपोनेंशियल) रूप से।
उनके पास उपलब्ध मेमोरी कहीं ज़्यादा है। ख़ासकर इंटरनेट पर इतना ज़्यादा डेटा मौजूद है। इन मॉडलों को प्रशिक्षित करने के लिए, कि यह हार्डवेयर के उस गणित और सांख्यिकी से, जिसकी चर्चा हम कक्षा में आगे करेंगे, वास्तव में मिल जाने का एक दिलचस्प संगम है, जो अंततः उन उपकरणों को संभव बनाता है, जैसे वह बिल्ली जो हमने अभी बनाई।
लेकिन ज़ाहिर है कंप्यूटर सिर्फ़ गणित नहीं हैं, और वास्तव में हम इस कक्षा में अपने आप में बहुत कम गणित का उपयोग करेंगे। और इसलिए चलिए बहुत जल्दी सिर्फ़ शून्यों और एकों से आगे बढ़ते हैं और वर्णमाला के अक्षरों की बात करते हैं, मान लीजिए अंग्रेज़ी में।
यह रहा अक्षर A। मान लीजिए आप इस अक्षर का उपयोग किसी ईमेल, किसी टेक्स्ट संदेश या किसी भी अन्य प्रोग्राम में करना चाहते हैं। कंप्यूटर अंदरखाने क्या कर रहा होता है? कंप्यूटर अंग्रेज़ी का बड़ा अक्षर A कैसे संग्रहीत कर सकता है, अगर दिन के अंत में कंप्यूटर के पास सिर्फ़ दीवार या बैटरी से मिलने वाली बिजली का एक स्रोत है, और उसके पास बहुत सारे स्विच हैं जिन्हें वह चालू और बंद कर सकता है और बिजली को 8 या 32 या 64 या जितने की भी इकाइयों में मान सकता है? कंप्यूटर अक्षर A को कैसे निरूपित कर सकता है?
हाँ, हमें उसे एक तरह से एक पहचान देनी होगी, एक पूर्णांक (इंटीजर) के रूप में। दूसरे शब्दों में, दिन के अंत में, अगर आपका पूरा कैनवास, कहिए, सिर्फ़ शून्यों और एकों से बना है, तो आज हर सवाल का जवाब यही होने वाला है। इन समस्याओं के समाधान के रूप में आपके पास सिर्फ़ शून्य और एक हैं। हमें बस सहमत होना है कि शून्यों और एकों का कौन-सा पैटर्न और इसलिए कौन-सा पूर्णांक, कौन-सी संख्या, अक्षर A को दर्शाने के लिए इस्तेमाल होगी। और उम्मीद है कि जब हम शून्यों और एकों के उस पैटर्न को सही संदर्भ में देखें, तो हम उसे वास्तव में A के रूप में देखेंगे।
अक्षरों का निरूपण: ASCII
तो अगर हम कंप्यूटर के अंदर झाँकें, कहिए, किसी टेक्स्ट मैसेजिंग प्रोग्राम या वर्ड प्रोसेसर या ऐसी किसी भी चीज़ के संदर्भ में, तो वह पैटर्न उम्मीद है कि बड़े अक्षर A के रूप में समझा जाएगा। लेकिन अगर मैं Mac OS या Windows या अपने फ़ोन का कैलकुलेटर प्रोग्राम खोलूँ, तो मैं चाहूँगा कि शून्यों और एकों का वही पैटर्न इसके बजाय संख्या के रूप में समझा जाए। अगर मैं Photoshop खोलूँ, जैसा कि हम जल्द ही देखेंगे, तो मैं चाहूँगा कि शून्यों और एकों का वही पैटर्न संभवतः एक रंग के रूप में समझा जाए, वीडियो और ध्वनि वग़ैरह की तो बात ही छोड़िए, लेकिन यह सब बस शून्य और एक ही है। और इसलिए भले ही कुछ मिनट पहले वह चैट प्रोग्राम लिखते समय मुझे कंप्यूटर को यह बताने की चिंता नहीं करनी पड़ी कि यह टेक्स्ट है, यह संख्या है, यह कुछ और है, लेकिन जैसे-जैसे हम ख़ुद कोड लिखेंगे, हम देखेंगे कि आप, प्रोग्रामर के रूप में, इस पर नियंत्रण रखेंगे कि कंप्यूटर को बताएँ कि शून्यों और एकों के किसी पैटर्न के साथ कैसा बर्ताव करना है, उसे बताते हुए कि यह एक संख्या है, यह एक रंग है, यह एक अक्षर है या कुछ और। तो हम अक्षर A को कैसे निरूपित करें?
ख़ैर, पता चलता है कि सालों पहले एक कमरे में इंसानों के एक समूह ने तय किया कि शून्यों और एकों का यह पैटर्न वैश्विक रूप से अंग्रेज़ी के बड़े अक्षर A के रूप में जाना जाएगा। अगर आप फटाफट मानसिक गणित करें तो वह संख्या क्या है? तो वाक़ई 65, क्योंकि हमारे पास 64 के स्थान पर 1 था और इकाई के स्थान पर 1। तो 65, बस इतना ही। यह अच्छा होता
अगर यह बस संख्या 1 या शायद संख्या 0 होती, लेकिन कम से कम बड़े अक्षर A के बाद उन्होंने चीज़ों को संगत रखा, ताकि अगर आप अक्षर B दर्शाना चाहें, तो वह 66 होगा।
C 67 होगा, क्योंकि इस कमरे के इंसानों ने, उस समय के अमेरिकियों के एक समूह ने, उस पर मानकीकरण किया जिसे ASCII कहते हैं, यानी American Standard Code for Information Interchange (सूचना के आदान-प्रदान के लिए अमेरिकी मानक कोड)। इससे फ़र्क़ नहीं पड़ता कि संक्षिप्त नाम किसका प्रतिनिधित्व करता है, यह बस एक मैपिंग थी। किसी ने, मूल रूप से, काग़ज़ के एक टुकड़े पर वर्णमाला के अक्षर और उनके संगत नंबर लिखने शुरू किए ताकि बाद में सभी कंप्यूटर वही मानक निरूपण बोल सकें। और यह उसका एक अंश है। इस मामले में हम 7 बिट भर का हिस्सा देख रहे हैं, लेकिन आख़िरकार हमने अक्षरों को दर्शाने के लिए कुल मिलाकर 8 बिट का उपयोग किया, और इनमें से कुछ काफ़ी रहस्यमय हैं, शायद उन पर और बात किसी और समय हो, लेकिन यहाँ नीचे अगर हम सिर्फ़ एक कॉलम को हाइलाइट करें, तो हम देखेंगे कि वाक़ई इस चीट शीट पर 65 बड़ा A है, 66 B है, 67 C है, और आगे इसी तरह।
तो क्यों न हम यहाँ एक छोटा-सा अभ्यास करें। यहाँ मुझे शून्यों और एकों का कौन-सा पैटर्न दिख रहा है? मेरे पास 3 बाइट हैं, यानी 8 बिट के 3 समूह, और भले ही अब कॉलमों के ऊपर कोई प्लेसहोल्डर नहीं हैं, यह क्या है? संख्या। यह 60 है। हाँ, तो हमारे पास 1, 2, 4, 8, 16, 32, 64 के कॉलम हैं।
तो वाक़ई यह संख्या 72 होने वाली है, 72। यह वह नहीं है जो कंप्यूटर वैज्ञानिक अपना दिन गुज़ारते हुए करते हैं। यह
बस उसे पक्का करने के लिए है जो हमने अभी देखा, और मैं पहले ही बता देता हूँ। बाक़ी संख्याएँ 72, 73, 33 हैं, और इस कमरे में कोई भी यह कर सकता था अगर वह काग़ज़ का एक टुकड़ा निकालता, पता लगाता कि कॉलम क्या हैं, और बस थोड़ा फटाफट मानसिक या लिखित गणित करता, लेकिन कहने का मतलब यह है कि मान लीजिए आपको अभी-अभी कोई टेक्स्ट संदेश या ईमेल मिला, और अगर आपके पास कंप्यूटर के अंदर झाँककर देखने की क्षमता होती कि आपको इंटरनेट पर अभी-अभी शून्यों और एकों का कौन-सा पैटर्न मिला, मान लीजिए शून्यों और एकों का वह पैटर्न बिट के 3 बाइट था, जो गणित करने पर संख्याएँ 72, 73, 33 हैं।
तो, यह रही फिर से चीट शीट। आपको कौन-सा संदेश मिला? हाँ, तो यह है hi। क्यों? क्योंकि 72 H है और 73 I है।
अब आपमें से कुछ ने काफ़ी ज़ोर देकर कहा hi, क्यों? ख़ैर, 33, जो आप तब तक नहीं जान पाएँगे जब तक आप उसे देख न लें या कोई आपको बता न दे, विस्मयादिबोधक चिह्न (एक्सक्लेमेशन पॉइंट) है। तो अगर आप अभी किसी को टेक्स्ट करें, अगर आपने पहले से नहीं किया है, HI और विस्मयादिबोधक चिह्न, सारे बड़े अक्षरों में, तो आप मूल रूप से किसी तरह इंटरनेट के ज़रिए उस प्राप्तकर्ता को 3 बाइट की सूचना भेज रहे होंगे, और क्योंकि उनका फ़ोन भी इसी तरह ASCII समझता है, क्योंकि उसे सालों पहले ऐसा करने के लिए प्रोग्राम किया गया था, वह जानता है कि आपको HI और विस्मयादिबोधक चिह्न दिखाना है, कोई संख्या नहीं, वह भी 3 संख्याएँ, या रंग या बिल्कुल कुछ और नहीं। तो यहाँ हमारे पास hi है, लगातार 3 अंकों में।
यहाँ और क्या ध्यान देने लायक है? ख़ैर, इस चीट शीट में भी कुछ मज़ेदार-सी जानकारियाँ (ट्रिविया) छिपी हैं। तो यहाँ फिर से A, B, C, D, E, F, G और आगे इसी तरह है, 65 से नीचे की ओर। मुझे यहाँ बस छोटे अक्षरों को हाइलाइट करने दीजिए, 97, 98, 99, और आगे इसी तरह। अगर मैं इधर से उधर जाऊँ, तो क्या किसी को इन दोनों के बीच का सुसंगत पैटर्न दिख रहा है?
हाँ, तो छोटे अक्षर बड़े अक्षरों से 32 की दूरी पर हैं। ख़ैर, हमें यह कैसे पता? देखिए, 97 घटा 65 है, हाँ, 32। 98 घटा 66 है, ठीक है, 32, और यह पैटर्न जारी रहता है। इसका क्या मतलब है?
ख़ैर, कंप्यूटर जानते हैं कि यह कैसे करना है। ज़्यादातर आम इंसानों को इस जानकारी की ज़रूरत नहीं होती, लेकिन इसका मतलब यह है कि अगर आप बाइनरी में अपने ट्रांज़िस्टरों के चालू और बंद होने से कोई पैटर्न निरूपित कर रहे हैं, और यह वह पैटर्न है जो बड़े अक्षर A को दर्शाता है, इसीलिए हमारे पास 64 के स्थान पर 1 और इकाई के स्थान पर 1 है, तो कंप्यूटर इसी अक्षर को छोटा (लोअरकेस) कैसे करेगा? हाँ। बिल्कुल सही। कंप्यूटर को बस इतना करना है कि 32 के स्थान वाले इस एक बिट को 1 में बदल दे, क्योंकि हमारी चर्चा के अनुसार गणितीय रूप से इसका प्रभाव उसमें, जो भी संख्या हो, 32 जोड़ देने जैसा होता है।
तो पता चलता है कि आप सिर्फ़ एक अकेला बिट बदलकर पाठ को बड़े अक्षरों से छोटे अक्षरों में, या वापस बड़े में, बदल सकते हैं। कुल 8 बिट के उस पैटर्न के भीतर। ठीक है, क्यों न हम इसे एक और छोटे अभ्यास से पक्का करें? हमारे पास शायद यहाँ एक मौक़ा है कि हम आपको कक्षा की बिल्कुल शुरुआत में ही कुछ स्ट्रेस बॉल दे दें। क्या हमें मंच पर आने के लिए 8 स्वयंसेवक मिल सकते हैं, शायद यहाँ और यहाँ और यहाँ बाईं ओर से।
मुझे बिल्कुल दाईं ओर चलने दीजिए। देखते हैं। ठीक है, यहाँ ऊँचा हाथ, वह हाथ जो वहाँ सबसे ऊँचा है, हाँ, हम नज़रें मिला रहे हैं। बिल्कुल पीछे वाले के बारे में क्या ख़्याल है, क्या, रुकिए, देखते हैं, चलिए यहाँ क्रिमसन स्वेटशर्ट में आइए, और यहाँ सफ़ेद शर्ट में कौन? ऊपर आइए।
क्या मैंने सही गिना? चलिए कहते हैं, नीचे आइए। आप 8 लोग। मैंने सही नहीं गिना, है ना? 1, 2, 3, 4, 5, 6।
यह विडंबना है कि मैं यहाँ सही नहीं गिन रहा। बाईं ओर ग्रे में कौन? ठीक है। अरे, ठीक है, यहाँ काले में। नीचे आइए।
ठीक है, उम्मीद है कि यह 8 है: 1, 2, 3, 4, 5, 6, 7। 7। मुझे पूरा यक़ीन है। ठीक है, 8, लो हो गया। ठीक है।
तो चलिए आगे बढ़कर यह अभ्यास करते हैं। मेरे पास यहाँ पहले से छपी हुई कुछ काग़ज़ की शीटें हैं। अगर आप में से हर कोई वही करना चाहता है जो आप कर रहे हैं और बाएँ से दाएँ पंक्ति में खड़ा हो जाए, तो आप में से हर कोई मूल रूप से एक प्लेसहोल्डर को निरूपित करेगा। तो हमारे पास यहाँ इकाई का स्थान है, पूरी तरह यहाँ, और फिर हमारे पास दो वाला स्थान है। और चौथा स्थान और आठ वाला।
16, 32, 64, 128, और हम माइक्रोफ़ोन लेकर आते हैं। अगर आप में से हर कोई एक छोटा-सा नमस्ते कहना चाहे, अपना नाम, शायद अपना डॉर्म या हाउस, और कंप्यूटर विज्ञान के अलावा कुछ और जो आप पढ़ रहे हैं या पढ़ना चाहते हैं। हाय, मैं आउट हूँ। ठीक है। मैं ऐलिसन हूँ।
मैं Mathews में फ़्रेशमैन हूँ, और मुझे चढ़ाई (क्लाइंबिंग) पसंद है और मैं CS और Econ के बारे में सोच रही हूँ। 2। हाय, मैं लिली हूँ। इस साल मैं Hurlbut में हूँ और मैं सरकार (गवर्नमेंट) के साथ CS करने के बारे में सोच रही हूँ। आपसे मिलकर अच्छा लगा।
हाय, हाय, मैं सीन हूँ। मैं Candidate Hall में हूँ और मैं एस्ट्रोफ़िज़िक्स और CS करने के बारे में सोच रहा हूँ। स्वागत है। हाय, मैं जॉर्डन हूँ। मैं एप्लाइड मैथ के साथ CS और Econ में विशेषज्ञता कर रहा हूँ, और मैं Widsworth में हूँ, और मुझे जिम जाना पसंद है।
16। हाय, मैं शिव हूँ। मैं गणित पढ़ रहा हूँ और मैं Canada में हूँ। बढ़िया। हाय, मैं सोफ़िया हूँ।
मैं Thayer में हूँ और मैं इलेक्ट्रिकल इंजीनियरिंग करने के बारे में सोच रही हूँ। स्वागत है। हाय, मेरा नाम मैरी है, और मैं Canada B में हूँ और मुझे CS, भौतिकी और एस्ट्रोफ़िज़िक्स वाक़ई पसंद हैं। हाय, मैं ऐलिसा हूँ। मैं Holworthy में हूँ।
मैं गणित या भौतिकी पढ़ने के बारे में भी सोच रही हूँ, और मुझे भी चढ़ना पसंद है। बढ़िया। आप सबका स्वागत है। तो उनकी काग़ज़ की शीटों के पीछे एक छोटी-सी चीट शीट है जो बताती है कि उन्हें 3 राउंडों में से हर एक में क्या करना है। हम मिलकर तीन अक्षरों का एक शब्द बनाने जा रहे हैं।
आप सब दर्शकों के रूप में, आपके ऊपर एक चीट शीट है जो संख्याओं को, यानी अक्षरों से उनके मेल को, दर्शाती है। इन लोगों को ज़रूरी नहीं कि पता हो कि वे क्या वर्तनी बना रहे हैं। वे सिर्फ़ यह जानते हैं कि हर कोई अकेले क्या बना रहा है। तो अगर आपकी काग़ज़ की शीट
आपको किसी राउंड में शून्य दर्शाने को कहे, तो बस वहाँ थोड़ा अटपटे ढंग से खड़े रहिए, कोई हाथ ऊपर नहीं। लेकिन अगर आपकी काग़ज़ की शीट पर आपको 1 दर्शाने को कहा गया है, तो बस एक हाथ ऊपर उठाइए ताकि दर्शकों को साफ़ दिखे कि आप 1 दर्शा रहे हैं, शून्य नहीं।
और यहाँ लक्ष्य यह पता लगाना है कि हम ASCII नाम की इस प्रणाली का उपयोग करके क्या वर्तनी बना रहे हैं। ठीक है, राउंड 1, शुरू कीजिए। यह कौन-सी संख्या है? मैं सुन रहा हूँ आप बस ज़ोर से बोल सकते हैं। कौन-सी संख्या?
66 या B। तो आप B की वर्तनी बना रहे हैं। ठीक है, हाथ नीचे। राउंड 2। और गणित।
बेझिझक ज़ोर से बोलिए। अरे, मैंने सुन लिया, हाँ, 79, जो है, अरे, ठीक है, तो हमारे पास BO है। हाथ नीचे, तीसरा और अंतिम राउंड, शुरू कीजिए। संख्या। हाँ, 87, जो कौन-सा अक्षर है? W, जो बनाता है? Bow (झुककर अभिवादन)। अगर आप अब अपना झुककर अभिवादन करना चाहें।
अरे, ठीक है, लीजिए। आप लोग इन्हें रख सकते हैं। ठीक है, धन्यवाद। ठीक है, आप लोग वह वापस देखिए। हमारे स्वयंसेवकों को धन्यवाद।
बहुत बढ़िया किया। हमने वाक़ई bow की वर्तनी बना ली, और यह सिर्फ़ इसलिए है कि हम सबने सूचना को बिल्कुल एक ही तरीके से निरूपित करने पर मानकीकरण किया है, इसीलिए जब आप अपने फ़ोन या कंप्यूटर पर BOW टाइप करते हैं, तो प्राप्तकर्ता को बिल्कुल वही दिखता है। लेकिन इस चर्चा में ध्यान देने लायक बात यह है कि आप बहुत सारे शब्दों की वर्तनी नहीं बना सकते, जैसे, हाँ, अंग्रेज़ी, ठीक है, वह तो हमने
कवर कर लिया। लेकिन संभावना है कि आप ध्यान दे रहे होंगे, इस पर निर्भर करते हुए कि आप ख़ुद कौन-सी मानवीय भाषाएँ पढ़ते या बोलते हैं, कि आपके कीबोर्ड से बहुत सारे प्रतीक ग़ायब हो सकते हैं। उदाहरण के लिए, हमारे पास यहाँ उच्चारण-चिह्न वाले (एक्सेंटेड) अक्षर हैं, बहुत-सी एशियाई भाषाओं में।
संख्याओं और अक्षरों की उस चीट शीट में हम जितने समा सकते थे, उससे कहीं ज़्यादा ग्लिफ़ (वर्ण-आकृतियाँ) हैं।
ASCII से आगे: यूनिकोड और इमोजी
और इसलिए ASCII ही वह एकमात्र प्रणाली नहीं है जिसका उपयोग दुनिया करती है। यह सबसे शुरुआती प्रणालियों में से एक थी, लेकिन आधुनिक समय में हम ASCII के एक सुपरसेट पर आ गए हैं जिसे आम तौर पर यूनिकोड (Unicode) के नाम से जाना जाता है, और यूनिकोड ASCII की तुलना में कहीं ज़्यादा बिट का उपयोग करता है, इतने कि हमारे पास उन सभी छोटी चीज़ों के लिए भी जगह है जिन्हें हम आजकल लगातार भेजते रहते हैं। ये स्पष्ट रूप से चित्र हैं जिन्हें आप अपने फ़ोन या कंप्यूटर से भेज सकते हैं, लेकिन तकनीकी रूप से ये वर्ण (कैरेक्टर) हैं। तकनीकी रूप से ये बस शून्यों और एकों के पैटर्न हैं जिन्हें इसी तरह पूरी दुनिया में एक ख़ास तरह से दिखने के लिए मानकीकृत किया गया है, लेकिन ये यह एक इमोजी कीबोर्ड है, इस अर्थ में कि
आप वर्ण भेज रहे हैं। आप अपने आप में चित्र नहीं भेज रहे। वर्ण स्पष्ट रूप से चित्रों की तरह दिखाए जाते हैं, लेकिन वास्तव में ये किसी अलग फ़ॉन्ट के वर्णों जैसे ही हैं, और वह फ़ॉन्ट संयोग से बहुत रंगीन और चित्रात्मक (ग्राफ़िकल) भी है। तो यूनिकोड, सिर्फ़ 7 या 8 बिट का उपयोग करने के बजाय, जो
अगर आप फटाफट मानसिक गणित करें, अगर ASCII सिर्फ़ 7 या मान लीजिए 8 बिट का उपयोग करता है, तो अकेले ASCII में आप कितने संभावित वर्ण निरूपित कर सकते हैं? 256, क्योंकि अगर हम वह फटाफट मानसिक गणित करें, 2 की घात 8, 256 संभावनाएँ, बस इतना ही।
वह अंग्रेज़ी के लिए काफ़ी है, क्योंकि आप सारे बड़े अक्षर, छोटे अक्षर, संख्याएँ और बहुत सारे विराम-चिह्न भी ठूँस सकते हैं, लेकिन कुछ अन्य विराम-चिह्न प्रतीकों के लिए यह काफ़ी नहीं है, बहुत-सी अन्य मानवीय भाषाओं की तो बात ही छोड़िए। और इसलिए यूनिकोड कंसोर्टियम। उसका जीवन में काम यह रहा है कि वह सभी मानवीय भाषाओं का, भूत, वर्तमान और उम्मीद है कि भविष्य का भी, एक डिजिटल निरूपण तैयार करे, सिर्फ़ 7 या 8 बिट नहीं बल्कि शायद प्रति वर्ण 16 बिट, 24 बिट, या अरे, यहाँ तक कि प्रति वर्ण 32 बिट का उपयोग करके। और जैसा पहले कहा था, अगर आपके पास 32 बिट तक उपलब्ध हों, तो आप कुल मिलाकर लगभग 4 अरब वर्ण निरूपित कर सकते हैं, और यह तो बस एक है। इन इमोजी की लोकप्रियता और उपलब्धता में एक तरह से विस्फोट होने के कारणों में से एक, इतने सारे पैटर्न हैं कि इन सब शून्यों और एकों के साथ हम और करेंगे भी क्या।
लेकिन इससे भी अहम बात यह है कि इमोजी को इस तरह डिज़ाइन किया गया है कि वे लोगों, स्थानों, चीज़ों और भावनाओं को ऐसे ढंग से निरूपित करें जो मानवीय भाषा से परे हो। लेकिन तब भी वे कुछ हद तक व्याख्या के लिए खुले हैं। वास्तव में, यह रहा मेरे ख़्याल से 32 शून्यों और एकों का एक पैटर्न। मेरा अंदाज़ा है कि कोई यहाँ फटाफट मानसिक गणित नहीं करेगा, लेकिन यह
किस दशमलव संख्या को दर्शाता है, अगर हम वाक़ई उसके साथ गणित करें, जहाँ इकाई का स्थान पूरी तरह बाईं ओर है, तो वह संख्या 4 अरब, 36, 991,106 है, यानी 4,036,991,106। किसे पता है यह क्या है?
यह a नहीं है, और यह बड़े A या छोटे a के आसपास भी कहीं नहीं है, लेकिन यह उन सबसे लोकप्रिय इमोजी में से एक है जो आप आम तौर पर अपने फ़ोन, लैपटॉप या किसी और उपकरण पर भेज सकते हैं, यानी। यह चीज़ यहाँ, "ख़ुशी के आँसुओं वाला चेहरा", जो संभावना है कि आपने हाल ही में भेजा या पाया होगा, लेकिन दिलचस्प बात यह है कि भले ही आपमें से बहुतों के पास iPhone हों और आप वही चित्र देखते और भेजते हों, आप देखेंगे कि अगर आप किसी ऐसे दोस्त को देखें जिसके पास Android या कोई और उपकरण है, शायद आप Meta का मैसेंजर प्रोग्राम या Telegram या कोई और मैसेजिंग सेवा इस्तेमाल कर रहे हों। कभी-कभी ये इमोजी थोड़े अलग दिखते हैं। क्यों? क्योंकि यूनिकोड ने जो किया है वह यह कि उसने तय किया कि एक इमोजी होगा जिसे, माफ़ कीजिए, "ख़ुशी के आँसुओं वाला चेहरा" कहा जाएगा।
फिर Apple और Google और Microsoft और अन्य, वे एक तरह से स्वतंत्र हैं कि जैसा उचित समझें उसकी व्याख्या करें। तो आप यहाँ स्क्रीन पर जो देख रहे हैं वह iOS ऑपरेटिंग सिस्टम का एक हालिया संस्करण है। Google का उसी का संस्करण कुछ ऐसा दिखता है, और Telegram पर, अगर आपके पास एनिमेशन चालू हैं, तो "ख़ुशी के आँसुओं वाले चेहरे" का वही विचार वास्तव में एनिमेटेड होता है, लेकिन हर मामले में वह शून्यों और एकों का वही पैटर्न है, लेकिन फिर, मूल रूप से उन सबके पास अलग-अलग ग्राफ़िकल फ़ॉन्ट हैं जो आपको यह दिखाते हैं कि उनमें से हर
एक चित्र वास्तव में क्या है। ठीक है, तो वे हर एक, माफ़ कीजिए, चित्र हैं।
तो वे हर एक चित्र हैं।
रंगों का निरूपण: RGB
पर कंप्यूटर उन्हें कैसे निरूपित कर रहा है? दिन के अंत में हमने संख्याएँ निरूपित की हैं, हमने अक्षर निरूपित किए हैं, लेकिन इन चीज़ों का क्या, रंग। तो हम लाल या हरा या नीला कैसे निरूपित करें, बीच के हर दूसरे रंग की तो बात ही छोड़िए। दिन के अंत में हमारे पास सिर्फ़ एक कैनवास उपलब्ध है, हाँ। तो पूर्णांक, बिल्कुल वही उत्तर जो पहले था।
हमें बस सहमत होना है कि लाल के लिए हम कौन-सी संख्या इस्तेमाल करें, हरे के लिए क्या इस्तेमाल करें, नीले के लिए क्या इस्तेमाल करें, और हम इसके लिए कोई मानकीकृत पैटर्न बना सकते हैं। वास्तव में, ऐसा करने की सबसे आम तकनीकों में से एक, और असली दुनिया में ऐसा करने के सबसे आम तरीकों में से एक, तीन रंगों के संयोजन का उपयोग करना है, कुछ मात्रा में लाल, कुछ मात्रा में हरा, और कुछ मात्रा में नीला, और उन्हें साथ मिलाना ताकि इंद्रधनुष का लगभग कोई भी रंग मिल सके जो आप चाहें। यह उस चीज़ की एक तरह की तस्वीर है जिसके साथ मैं बड़ा हुआ, पुराने ज़माने में, जब मिडिल स्कूल में हम फ़िल्में या कोई कार्यक्रम देखते थे, और कक्षा में एक तरह से प्रोजेक्टर की स्क्रीन यहाँ होती थी। यह पुराने ज़माने का प्रोजेक्टर है जिसमें 3 अलग-अलग लेंस हैं, जिनमें से एक
कुछ मात्रा में हरा प्रोजेक्ट करता है, कुछ मात्रा में लाल, कुछ मात्रा में नीला, और जब तक लेंस सही ढंग से इस तरह संरेखित हों कि सब स्क्रीन पर एक ही गोले या आयताकार क्षेत्र की ओर इशारा करें, आप पुराने ज़माने के वीडियो में अनगिनत रंगों को जीवंत होते देखते।
इतने सालों बाद भी मुझे अब तक याद है कि हम उससे टिककर बैठ जाते थे क्योंकि वह बहुत गर्म होता था और आप उसे महसूस कर सकते थे, सो जाने का यह एक आसान तरीका है, पर प्राथमिक स्कूल के दिनों में। लेकिन हम आजकल भी वही बुनियादी रंग प्रणाली इस्तेमाल करते हैं, आधुनिक प्रोग्रामों में भी, जैसे Photoshop। तो चलिए उसे अमूर्त कर लेते हैं, सिर्फ़ तीन रंगों पर ध्यान देते हैं, कुछ मात्रा में लाल, हरा और नीला, और चर्चा की ख़ातिर प्रस्ताव रखते हैं कि हम मिलाना चाहते हैं एक मध्यम मात्रा का लाल, एक मध्यम मात्रा का हरा, और बस थोड़ा-सा नीला। उदाहरण के लिए, मान लीजिए हम 72 मात्रा का लाल, 73 मात्रा का हरा, और 33 मात्रा का नीला इस्तेमाल करेंगे, RGB। अब ये संख्याएँ ही क्यों? ख़ैर, ASCII या यूनिकोड के संदर्भ में, जो उसका एक सुपरसेट ही है, यह क्या वर्तनी बनाता है?
Hi, लेकिन फिर, अगर आप इसके बजाय इन 3 संख्याओं वाली, या वास्तव में बिट के इन 3 बाइट वाली, कोई फ़ाइल Photoshop में खोलें, तो आप उम्मीद करेंगे कि उन्हें स्क्रीन पर अक्षरों के रूप में नहीं, बल्कि इसके बजाय स्क्रीन पर किसी बिंदु के रंग के रूप में समझा जाएगा। तो पता चलता है कि आम तौर पर जब आपके पास इन संख्याओं में से तीन साथ होती हैं, तो उनमें से हर एक एक बाइट का उपयोग करती है, यानी 8 बिट। तो
आपके पास 0 लाल या 255 लाल हो सकता है, 0 हरा या 255 हरा, या 0 से 255 तक नीला। तो 0 का मतलब कुछ नहीं, 255 अधिकतम है। तो अगर हम इन्हें साथ मिलाएँ, कल्पना कीजिए बस उस प्रोजेक्टर की तरह जो इन तीन रंगों को एक केंद्रीय बिंदु में समेट रहा है।
कोई अंदाज़ा लगाना चाहेगा कि अगर आप उन मात्राओं में कुछ लाल, कुछ हरा, कुछ नीला मिलाएँ तो आपको क्या मिलेगा, और बहुत पहले की बात? हाँ, आपको पीले का एक गहरा शेड मिलेगा। मैंने यहाँ प्रोजेक्टर के लिए उसे थोड़ा चमकीला कर दिया है, लेकिन आपको लगभग यही पीले का शेड मिलेगा, और हम इन संख्याओं के साथ दिन भर खेल सकते हैं और अगर हम अलग-अलग रंग दर्शाना चाहें तो इसी तरह के नतीजे पा सकते हैं। और वाक़ई, चाहे वह Photoshop हो या कोई और प्रोग्राम, आप इन मात्राओं को हर तरह के अनुपात में मिलाकर अलग-अलग रंग पा सकते हैं। तो अगर आपके पास 0, 0, 0 होता, यानी न लाल, न हरा, न नीला, तो अंदाज़ा लगाइए कि कंप्यूटर में वह कौन-सा रंग होगा।
तो वह काला होगा, यानी उन तीनों रंगों की अनुपस्थिति, लेकिन अगर आप उनमें से हर एक की अधिकतम मात्रा मिलाएँ, 255 लाल और हरा और नीला, तो वह आपको सफ़ेद देगा। अब अगर आपमें से किसी ने पहले वेब पेज बनाए हैं या Photoshop जैसे प्रोग्राम इस्तेमाल करते हैं, तो आपने 00 जैसी संख्याएँ देखी होंगी। या FF। लंबी कहानी छोटी करके, वह 0 और 255 के बीच की संख्याओं को निरूपित करने की बस एक और आधार प्रणाली है, लेकिन उस पर हम सेमेस्टर में आगे लौटेंगे जब हम अपने कुछ फ़िल्टर बनाएँगे, Instagram जैसे ढंग से अपनी ही
छवियों में हेरफेर करते हुए। तो ये रंग कहाँ से आ रहे हैं या हम इन्हें वास्तव में कहाँ देख सकते हैं?
ख़ैर, यह उसी इमोजी, "ख़ुशी के आँसुओं वाले चेहरे", की बस एक तस्वीर है। अगर मैं उस पर थोड़ा ज़ूम करूँ और शायद फिर से ज़ूम करूँ, तो आप देखना शुरू कर सकते हैं, अगर आप उसे पर्याप्त बड़ा करें या कभी-कभी अपनी आँखें उपकरण के पर्याप्त पास ले जाएँ, तो आप वास्तव में अलग-अलग बिंदु या वर्ग देख सकते हैं। इन्हें आम तौर पर पिक्सेल (pixels) कहा जाता है, और ये बस वे अलग-अलग बिंदु हैं जो सामूहिक रूप से रचना करते हैं, यानी कहने का मतलब है कि अगर इन बिंदुओं में से हर एक, जो चित्र का हिस्सा है, एक अलग रंग का होने वाला है, जैसे यह वाला पीला है, यह वाला भूरा है, और बीच में बहुत सारे हैं, तो आप उन पिक्सेलों में से हर एक का रंग निरूपित करने के लिए कुछ संख्या के बिट का उपयोग कर रहे हैं। तो अगर आप RGB प्रणाली के उपयोग की कल्पना करें, तो वह 8 + 8 + 8 बिट है, यानी 24 बिट या 3 बाइट, बस। इन बिंदुओं में से हर एक का रंग याद रखने के लिए।
तो अब अगर आप सोचें कि आपने कभी GIF डाउनलोड की है, एक PNG फ़ाइल, एक JPEG, या कोई और फ़ाइल फ़ॉर्मैट, तो उसे आम तौर पर फ़ाइल साइज़ में मापा जाता है, जैसे मेगाबाइट। आम तौर पर इसका मतलब लाखों बाइट होता है। क्यों? क्योंकि अगर यह काफ़ी बड़ी तस्वीर या काफ़ी बड़ा चित्र है, तो उन बिंदुओं में से हर एक कम से कम 3 बाइट लेता प्रतीत होता है। और अगर आप गणित करें, अगर आपके पास हज़ारों बिंदु हैं, जिनमें से हर एक 3 बाइट का उपयोग करता है, तो आप तेज़ी से मेगाबाइट तक पहुँच जाएँगे, या उससे भी बड़े, जैसे
मिसाल के तौर पर वीडियो। लेकिन फिर, यह बस शून्यों और एकों के पैटर्न हैं और जब तक प्रोग्रामर जानता है कि वह क्या कर रहा है और कंप्यूटर को बताता है कि उन शून्यों और एकों को कैसे समझना है, और समतुल्य रूप से, जब तक सॉफ़्टवेयर जानता है कि इन शून्यों और एकों को देखे और उन्हें संख्याओं या अक्षरों या रंगों के रूप में समझे, तब तक हमें वही दिखना चाहिए जो हम निरूपित करना चाहते थे।
ठीक है, तो वे संख्याएँ, वे रंग और चित्र हैं। आप में से कितनों ने बचपन में इन छोटी फ़्लिप बुक से खेला है, जिनमें जैसे 100 अलग-अलग छोटे चित्र होते हैं और आप उन्हें बहुत तेज़ी से पलटते हैं और आपको वह दिखता है जो किताब के रूप में एनिमेशन जैसा लगता है? ख़ैर, यह मूल रूप से एक वीडियो है, तो इसलिए वीडियो क्या है या आप कैसे सोच सकते हैं कि वीडियो क्या है? यह बस ढेर सारे चित्रों का स्क्रीन पर से गुज़रना है, या तो काग़ज़ पर या आजकल डिजिटल रूप से आपके फ़ोन या लैपटॉप पर, और यह एक तरह से अच्छा है क्योंकि हम अब इन निचले स्तर के निर्माण-खंडों के आधार पर अधिक दिलचस्प मीडिया बना रहे हैं और यह एक आवर्ती विषय होने वाला है।
चित्र और वीडियो
हमने सचमुच शून्यों और एकों से शुरुआत की। हम ऊपर अक्षरों तक पहुँचे। फिर हम ऊपर चित्रों और रंगों तक, और इस तरह चित्रों तक पहुँचे। अब हम वीडियो के संदर्भ में पदानुक्रम (हायरार्की) के इस स्तर पर हैं, क्योंकि वीडियो क्या है। यह प्रति सेकंड लगभग 30 चित्रों का स्क्रीन पर से
गुज़रना है, या शायद उससे थोड़ा कम, जो सामूहिक रूप से हमारे दिमाग़ को यह सोचने में बहका देता है कि हम चलती तस्वीरें (मोशन पिक्चर्स) देख रहे हैं, और यह फ़िल्मों के लिए पुराने ज़माने का शब्द है, पर वह सचमुच यही था जो वह था।
मोशन पिक्चर्स, यह फ़िल्म आपको प्रति सेकंड 30 तस्वीरें दिखा रही थी, और वह गति जैसा दिखता है, भले ही आप बस चित्र देख रहे हों, बिल्कुल इस फ़्लिप बुक की तरह, बहुत तेज़ी से एक के बाद एक। संगीत का क्या? ख़ैर, अगर आपकी सामग्री फिर से सिर्फ़ शून्य और एक हैं, तो आप संगीत के स्वरों को निरूपित करने की बात कैसे सोच सकते हैं? भले ही आप संगीतकार न हों, आप स्क्रीन पर यहाँ ऐसे संगीत को कैसे निरूपित करेंगे? हाँ।
ठीक है, तो आवृत्ति (फ़्रीक्वेंसी), यानी वह स्वर जो आप वास्तव में उपकरण से सुन रहे हैं। स्वरों की आवृत्ति के अलावा और क्या मायने रख सकता है? हाँ। तो स्वर की गति, शायद अवधि, जैसे अगर आप किसी असली पियानो के बारे में सोचें, कि आप कुंजी को कितनी देर तक दबाए रखते हैं या नहीं, और क्या? तो आयाम (एम्प्लिट्यूड), शायद कितनी ज़ोर से, जैसे उस ध्वनि को पैदा करने के लिए आपने कीबोर्ड को कितनी ज़ोर से दबाया। तो सरलीकरण के जोखिम पर मुझे प्रस्ताव रखने दीजिए, हम इन स्वरों में से हर एक को 3 संख्याओं का उपयोग करके निरूपित कर सकते हैं, शायद 0 से 255 या कोई और सीमा, जो स्वर की आवृत्ति या तार (पिच) को दर्शाती हो।
अवधि और तीव्रता (लाउडनेस), और जब तक उन सभी शून्यों और एकों वाली फ़ाइल पाने वाला व्यक्ति जानता है कि उन्हें एक बार में तीन-तीन करके कैसे समझना है, मुझे यक़ीन है आप
किसी और के साथ एक संगीत फ़ाइल साझा कर सकते हैं जिसे वे बिल्कुल उसी तरह सुन सकें जैसा आपने ख़ुद चाहा था।
निरूपण पर प्रश्न
मुझे यहाँ रुककर देखने दीजिए कि क्या अब कोई प्रश्न हैं, क्योंकि हमने पहले ही शून्यों और एकों से अब वीडियो और ध्वनि तक की सीढ़ी चढ़ ली है। हाँ, सामने। अक्षर जैसे 65 क्या होगा और फिर संख्या 5। तो कंप्यूटर अक्षर 65 और संख्या 65 में अंतर कैसे करता है? यह संदर्भ पर निर्भर है।
तो सीधे शब्दों में, और यह हम अगले ही सप्ताह देखेंगे, प्रोग्रामर कंप्यूटर को बताता है कि सूचना को संख्या के रूप में दिखाना है या अक्षर के रूप में, या समतुल्य रूप से, एक बार प्रोग्राम किए जाने पर, सॉफ़्टवेयर जानता है कि जब वह कोई .gif फ़ाइल या .jpeg या कुछ और खोलता है, तो उन शून्यों और एकों को रंगों के रूप में समझना है, न कि जैसे। Microsoft Word फ़ाइल के लिए DOCX या ऐसी किसी चीज़ के रूप में। अन्य प्रश्न? इनमें से किसी भी निरूपण पर, हाँ, सामने, जैसे वह एक चीज़, बिल्कुल संक्षेप में।
ज़रूर, तो क्या हम आधार 10 और आधार 2 पर जा सकते हैं? तो आधार 10 सचमुच वही संख्याएँ हैं जो आप और मैं रोज़ इस्तेमाल करते हैं। यह आधार 10 इस अर्थ में है कि आपके पास 10 अंक उपलब्ध हैं, 0 से 9, और असली दुनिया में आप जो भी संख्याएँ निरूपित करना चाहें, उन्हें 0 का उपयोग करके बनाया जाना चाहिए
