
संभवतः, प्रत्येक प्रोग्रामर की एक स्थिति थी जब लोग आईटी से पूरी तरह से अपरिचित थे, उन्होंने उन्हें यह बताने के लिए कहा कि उनके पेशे का सार क्या है। ऐसा हुआ कि ज्यादातर लोगों के लिए "प्रोग्रामर" की अवधारणा या तो चश्मे और स्वेटर के साथ बंद गीक के साथ जुड़ी हुई है, या कुछ शानदार लाल आंखों वाले किशोर हैकर के साथ - लेकिन कोई नहीं जानता
कि वह
वास्तव में क्या करता है।
डरावनी शर्तों और कोड अंशों को डराए बिना उन्हें इसके बारे में कैसे बताएं?
कट के तहत, मैं इस तरह की कहानी को पुन: पेश करूंगा, साथ ही प्रोग्रामिंग के बारे में कुछ मिथकों को भी दूंगा।
- प्रोग्रामर क्या करते हैं? यह बताना इतना आसान नहीं है ... मुझे पहले उत्तर दें: आप संक्षेप में कैसे वर्णन कर सकते हैं, उदाहरण के लिए, एक सर्जन के पेशे का सार?
- सर्जन ऑपरेशन करता है।
- हाँ, महान विवरण! अच्छा, बोलो, एक फुटबॉल खिलाड़ी?
- वह फुटबॉल खेलता है!
- हाँ, और सर्जन "सर्जरी में लगे हुए हैं।" और अगर जड़ शब्दों के बिना?
- गेंद को मारना?
- यह पक्का है। लेकिन "विकसित कार्यक्रमों" को छोड़कर एक प्रोग्रामर क्या करता है?
- ...
- प्रोग्रामर कोड लिखता है । आपके प्रोग्राम का स्रोत कोड, कुछ विशेष प्रोग्रामिंग भाषा में संकलित है। अधिक सटीक रूप से, पहले वह अपने डेटा की संरचनाओं पर सोचता है, फिर वह इन संरचनाओं के साथ काम करने के लिए एल्गोरिदम को संकलित करता है - अच्छी तरह से, और फिर वह इसे कोड के रूप में प्रस्तुत करता है।
- "डेटा संरचना" क्या है? क्या वह एक कंप्यूटर को नियंत्रित नहीं करता है, एक बटन को धक्का देता है?
- एह ...मिथक # 1: एक प्रोग्रामर कंप्यूटर के साथ काम करता है
लोगों को यह बताने की कोशिश करें कि कोड लिखने के लिए प्रोग्रामर को कंप्यूटर की आवश्यकता नहीं है। कोड की शुद्धता की जांच के लिए, इसकी जांच के लिए - लेकिन कोड को स्वयं लिखना और पेपर पर एल्गोरिथ्म आरेख तैयार करना संभव है (हालाँकि यह निश्चित रूप से मॉनिटर स्क्रीन पर ऐसा करने के लिए अधिक सुविधाजनक है)। डेवलपर केवल इस पेपर पर कुछ निर्देशों, आदेशों या विशिष्ट डेटा (संख्या, पाठ) का एक सेट लिखता है। और जो कोई भी इस सेट को निष्पादित करता है - एक कंप्यूटर, एक फोन या एक विशेष रूप से स्मार्ट रोबोट - इतना महत्वपूर्ण नहीं है। प्रोग्रामर डेटा के साथ काम करता है, मशीनों के साथ नहीं।
- अच्छा, ठीक है?
- यही है, प्रोग्रामर सिर्फ मशीन को बताता है कि वह क्या करना चाहेगा - और वह इसे करती है?
- ठीक है, हाँ, लगभग।
- जैसा कि बॉस अधीनस्थों को आदेश देता है?
- पसंद है।
- और अगर कार इसे किसी तरह से अलग करना चाहती है?
- मेरा मतलब है?
"ठीक है, वह कुछ पसंद नहीं कर रही है।" या सिर्फ प्रदर्शन नहीं करना चाहते हैं।
- तो, चलो एक बार और स्पष्ट करें कि सभी ...मिथक नंबर 2: मशीन सोच सकती है
किसी कारण से, काफी संख्या में लोग वास्तव में सोचते हैं कि कंप्यूटर में किसी प्रकार की बुद्धि है। वास्तव में - यह सिर्फ लोहे के टुकड़ों का एक सेट है जो यह नहीं जानता कि कैसे सोचना है। वे केवल संख्यात्मक डेटा को संग्रहीत करना जानते हैं। लोहे के ऐसे टुकड़े का एक हिस्सा डीमैगनेटाइज्ड है - जिसका अर्थ है कि यह शून्य है। चुम्बकित - इकाई। इसके अलावा, वे इन इकाइयों को जोड़ सकते हैं और घटा सकते हैं, अधिक जटिल संख्याएँ बना सकते हैं (बाइनरी नंबर सिस्टम का उल्लेख नहीं करना बेहतर है)। कंप्यूटर खुद नहीं जानता कि कुछ और कैसे करना है, केवल संख्याओं को स्टोर करें और उनके साथ काम करें। यह एक माइंडलेस ब्लॉकहेड है जो केवल प्रोग्रामर के कमांड को निष्पादित करता है।
- सामान्य तौर पर, किसी भी प्रोग्राम का कोड कमांड का एक सेट होता है, और कंप्यूटर उन्हें बेवकूफी से अंजाम देता है।
- यही है, वह टीमों के सार को खुद नहीं समझता है? लेकिन वह उस पाठ को कैसे देखता है जिसे मैं स्क्रीन पर दर्ज करता हूं?
- जब आप साइकिल पर पैडल करते हैं - क्या वह समझता है कि उसे अब आगे बढ़ने की जरूरत है?
- नहीं, लेकिन यह चल रहा है क्योंकि इसकी चेन पैडल रोटेशन को व्हील रोटेशन में बदल देती है।
- बिल्कुल! इसके अलावा, कंप्यूटर आपके द्वारा दर्ज किए गए पाठ को संख्याओं के समूह में परिवर्तित करता है ।
- कैसे?
- पाठ के प्रत्येक वर्ण का अपना एक संख्यात्मक कोड होता है, जिसे कंप्यूटर जानता है। इसे एन्कोडिंग कहा जाता है। उदाहरण के लिए, अंग्रेजी "ए" संख्या 97 से एन्कोडेड है, और बराबर चिह्न 61 नंबर से एन्कोडेड है।
- इसलिए, मशीन उस पाठ को समझ सकती है जो हम उसे बताते हैं?
"नहीं, वह" समझती है "बात नहीं। और केवल इस पाठ को कैसे संग्रहीत किया जाए, और इसे कैसे एक्सेस किया जाए।
- यह पता चला है कि हम पहले पाठ में प्रवेश करते हैं, फिर कंप्यूटर इसे वर्णों में तोड़ता है, और प्रत्येक वर्ण को पहले से ही एक संख्या के रूप में दर्शाया जाता है?
- ठीक है। जटिल संरचनाओं को सरल लोगों के रूप में प्रस्तुत किया जाता है , जिसे मशीन "समझता है"।
बताओ, एक आवासीय भवन में क्या होता है?
- खैर ... फर्श से।
- और फर्श किससे बने हैं? और इसी तरह।
- फर्श - दीवारों से। और दीवारें ईंटों से बनी हैं। और ईंटें ...
- यहां कंप्यूटर के लिए नंबर हैं - यह घर के लिए ईंटों के समान है। प्रतीक दीवारें हैं। अलग प्रस्ताव - फर्श। और किताबें पूरे घर हैं! लेकिन प्रोग्रामर्स को बिल्डरों पर एक फायदा है।
- क्या?
- बिल्डर पूरे फर्श का निर्माण नहीं कर सकता है, वह हमेशा ईंटों को बिछाने के लिए मजबूर होता है। यहां तक कि अगर किसी तरह का भारी-भरकम क्रेन उसे तैयार फर्श बनाने की अनुमति देता है, तो वह पूरे घर या आवासीय क्वार्टर का निर्माण उनके साथ नहीं कर पाएगा। एक प्रोग्रामर कर सकते हैं! चूंकि उन्होंने अंतिम पाठ को समझने के लिए मशीन को पहले से ही "प्रशिक्षित" किया था, इसलिए, उन्होंने क्रेन को एक कार्रवाई में एक तैयार घर बनाने के लिए "प्रशिक्षित" किया था।
- यही है, एक प्रोग्रामर अधिक से अधिक जटिल डेटा संरचनाओं का उपयोग कर सकता है?
- हां। इसलिए, उनके काम के पहले घटकों में मानव-पठनीय डेटा (पाठ, छवि, ध्वनि) को पहले से ही कंप्यूटर द्वारा समझे गए सरल डेटा के संयोजन के रूप में प्रस्तुत करना है। एक डेवलपर व्यावहारिक रूप से "खरोंच से" एक ऐसी संरचना बनाता है जिसे किसी व्यक्ति को समझने वाली चीज़ का पूरी तरह से वर्णन करना चाहिए - और इस तरह से कि यह संरचना आसानी से विस्तार योग्य और परिवर्तनशील है (आखिरकार, एक प्रोग्राम को अक्सर कुछ नई सुविधाओं को पेश करना पड़ता है)।
- वह! यह पता चला है कि वह हटाने योग्य पैनलों से रबड़ के घरों का निर्माण कर रहा है!
- ऐसा कुछ। हालांकि, उसे न केवल यह वर्णन करना होगा कि उसे क्या बनाने की जरूरत है - बल्कि यह भी कि यह सब कैसे बनाया जाए। यही है, एक एल्गोरिथ्म के साथ आओ। यह उनके काम का दूसरा घटक है।
- क्या प्रोग्रामर हर क्रिया के लिए एक एल्गोरिथ्म लेकर आता है?
- बिल्कुल सही। इसलिए, बहुत सारे एल्गोरिदम प्राप्त किए जाते हैं। लेकिन उनके काम को इस तथ्य से सुविधाजनक बनाया गया है कि कुछ कार्यों में अन्य शामिल हो सकते हैं जो पहले से ही उनके द्वारा पहले ही वर्णित किए गए हैं।
"और यहाँ एक प्रोग्रामिंग भाषा उनकी सहायता के लिए आती है?"
- वास्तव में नहीं ...मिथक संख्या 3: एल्गोरिदम को संकलित करने के लिए एक प्रोग्रामिंग भाषा की आवश्यकता होती है
नहीं, भाषा सिर्फ एक उपकरण है। एक संगीतकार के लिए एक गिटार की तरह। अकेले गिटार बजाने की क्षमता प्रसिद्धि की गारंटी नहीं देती है - क्योंकि लोग, एक नियम के रूप में, खुद संगीत की प्रशंसा करते हैं, न कि तार को जल्दी और स्पष्ट रूप से खींचने की क्षमता। दूसरी ओर, यह संभावना नहीं है कि कोई भी एक बुरे गिटारवादक को देखने आएगा, चाहे वह कितना भी बढ़िया प्रदर्शन करे। हां के साथ: इसके सिंटैक्स और संबंधित बारीकियों का ज्ञान बहुत महत्वपूर्ण है, साथ ही साथ सुंदर और स्पष्ट कोड लिखने की क्षमता भी। हालांकि, यदि कोई व्यक्ति एल्गोरिदम और डेटा संरचनाओं की रचना करना नहीं जानता है, तो उसे एक अच्छा प्रोग्रामर नहीं कहा जा सकता है।
कंप्यूटर प्रोग्रामिंग भाषा को सीधे समझ नहीं पाता है। पहले की तरह, वह प्रत्येक भाषा कमांड को "सरलतम" कमांड के सेट के रूप में प्रस्तुत करता है (संख्या को सहेजें, संख्या को रीसेट करें, इसमें एक जोड़ें), जिसे वह निष्पादित करने में सक्षम है। प्रोग्रामर भाषा को "समझता" है, और मशीन केवल इसे निष्पादित करती है। वास्तव में, कोई भी प्रोग्रामिंग भाषा कमांड का एक सेट है जो इसके साथ संवाद करने के लिए काम करती है।
- सच है, कई मौजूदा प्रोग्रामिंग भाषाओं में पहले से ही "स्वयं में" पूर्व-संकलित एल्गोरिदम का एक सेट है जो डेवलपर तैयार किए गए लोगों के रूप में उपयोग कर सकता है। इसलिए, भाषा फिर भी एल्गोरिदम के संकलन को थोड़ा आसान बनाती है।
- यही है, अगर एक प्रोग्रामर ने कुछ एल्गोरिदम संकलित किया है, तो अन्य इसे तुरंत उपयोग कर सकते हैं?
- हाँ, और ऐसा हर समय होता है। यह एक कारण है कि आईटी उद्योग इतनी तेजी से विकास कर रहा है। हालाँकि, आपको नए एल्गोरिदम स्वयं बनाने होंगे ।
- और अभी कुछ बनाते हैं!
- आराम से। एक क्लासिक उदाहरण: आपके पास 1000 पृष्ठों वाली एक पुस्तक है। आपको इसमें खोलने की आवश्यकता है, उदाहरण के लिए, 875 वां पेज। आप इसे कैसे करेंगे?
- ठीक है, मैं सिर्फ पहली से 875 वें भाग में था, बस।
- हाँ, और आपको प्रत्येक पृष्ठ की संख्या को देखना होगा। और कल्पना करें कि यदि उनके सभी कोने एक साथ फंस गए हैं - तो कितना समय बीत जाएगा? लेकिन मेरे लिए केवल 3 पृष्ठों को छांटना काफी है!
- कैसे?
- सबसे पहले, मैं उस पेज को चुनूंगा जो किताब के बीच में है, यानी 500 वां। तब मैं देखूंगा: गठित पृष्ठ के किस भाग में गिरावट होनी चाहिए?
- दूसरे में। और फिर क्या?
"एक ही बात।" मैं केंद्रीय पेज को खोलते हुए, अंतराल को 500 वें से 1000 वें दो में फिर से विभाजित कर दूंगा। यह 750 वें पृष्ठ से 1000 वें तक के अंतराल में परिणाम देगा, इसमें मैं फिर से एक केंद्र चुनूंगा। संख्या क्या होगी?
- 750 प्लस 125 ... तो यह 875 है!
- आप बताइए। केवल 3 क्रियाएं! यहां तक कि अगर मैं केंद्रीय पृष्ठ का चयन करते समय काफी सटीक नहीं हूं, तब भी मुझे आपके मुकाबले बहुत तेजी से सही लगता है। इस एल्गोरिथम को "डाइकोटॉमी" कहा जाता है। हालांकि वास्तविकता में, प्रोग्रामर बहुत अधिक जटिल एल्गोरिदम का उपयोग करते हैं।
"और क्या आप इसे कागज पर लिख सकते हैं?"
- बिल्कुल। वहां मेरी कलम कहां है?छद्म कोड :
( , _);
(_ = _)
;
(_ < _)
( , );
( , );
— , ?
— … , .
— , .
— ?
— , «» (, ?). , «» «» . — .
— ?
— .
— ?
— !№4: —
, , . , , . . — . , . , , ( ) — ().
, . , , . , . , , : - , . — , , …
— , - , .
— — ?
— , . , - , - . , …
— , !
— .
— , , ?
— , ! ...:
, . , — , , ;)