कंप्यूटर प्रोग्रामिंग: Difference between revisions
No edit summary |
|||
Line 1: | Line 1: | ||
{{Short description|Process to create executable computer programs}} | {{Short description|Process to create executable computer programs}} | ||
{{software development process}} | {{software development process}} | ||
[[ कंप्यूटर प्रोग्राम | '''कंप्यूटर | [[ कंप्यूटर प्रोग्राम | '''कंप्यूटर प्रोग्रामिंग''']] एक विशेष [[ गणना ]] (या अधिक सामान्यतः, एक विशिष्ट [[ कम्प्यूटिंग ]] परिणाम को पूरा करने) की प्रक्रिया है, आमतौर पर एक [[ निष्पादन ]] योग्य कंप्यूटर प्रोग्राम को डिजाइन और निर्माण करके। प्रोग्रामिंग में विश्लेषण, [[ कलन विधि ]] उत्पन्न करना, [[ प्रोफाइलिंग (कंप्यूटर प्रोग्रामिंग) ]] एल्गोरिदम की सटीकता और संसाधन खपत, और एल्गोरिदम के कार्यान्वयन (आमतौर पर एक चुनी हुई [[ प्रोग्रामिंग भाषा ]] में, जिसे आमतौर पर कोडिंग कहा जाता है) जैसे कार्य शामिल हैं।<ref>{{cite web|url=http://yearofcodes.tumblr.com/what-is-coding|title=What is coding|last=Bebbington|first=Shaun|year=2014|website=Tumblr|url-status=live|archive-url=https://web.archive.org/web/20200429195646/https://yearofcodes.tumblr.com/what-is-coding|archive-date=2020-04-29|access-date=2014-03-03}}</ref><ref>{{cite web|url=http://yearofcodes.tumblr.com/what-is-programming|title=What is programming|last=Bebbington|first=Shaun|year=2014|website=Tumblr|url-status=live|archive-url=https://web.archive.org/web/20200429195958/https://yearofcodes.tumblr.com/what-is-programming|archive-date=2020-04-29|access-date=2014-03-03}}</ref> प्रोग्राम का [[ सोर्स कोड ]] एक या एक से अधिक भाषाओं में लिखा जाता है जो [[ प्रोग्रामर ]]्स के लिए समझ में आता है, न कि [[ मशीन कोड ]], जिसे सीधे [[ सेंट्रल प्रोसेसिंग यूनिट ]] द्वारा निष्पादित किया जाता है। प्रोग्रामिंग का उद्देश्य निर्देशों का एक क्रम खोजना है जो किसी [[ संगणक ]] पर किसी कार्य के प्रदर्शन (जो कि एक [[ ऑपरेटिंग सिस्टम ]] जितना जटिल हो सकता है) को स्वचालित करेगा, अक्सर किसी समस्या को हल करने के लिए। इस प्रकार कुशल प्रोग्रामिंग को आमतौर पर कई अलग-अलग विषयों में विशेषज्ञता की आवश्यकता होती है, जिसमें [[ डोमेन ([[ सॉफ्टवेयर [[ अभियांत्रिकी ]] ]]) ]], विशेष एल्गोरिदम और औपचारिक [[ तर्क ]] का ज्ञान शामिल है। | ||
प्रोग्रामिंग के साथ और संबंधित कार्यों में सॉफ्टवेयर परीक्षण, [[ डिबगिंग ]], स्रोत कोड रखरखाव, [[ स्वचालन बनाएँ ]] का कार्यान्वयन, और व्युत्पन्न आर्टिफैक्ट (सॉफ़्टवेयर विकास) का प्रबंधन, जैसे कंप्यूटर प्रोग्राम का मशीन कोड शामिल है। इन्हें प्रोग्रामिंग प्रक्रिया का हिस्सा माना जा सकता है, लेकिन अक्सर [[ सॉफ्टवेयर डेवलपमेंट ]] शब्द का इस्तेमाल इस बड़ी प्रक्रिया के लिए किया जाता है, जिसमें प्रोग्रामिंग, कार्यान्वयन या कोड के वास्तविक लेखन के लिए आरक्षित कोडिंग शब्द होता है। सॉफ्टवेयर इंजीनियरिंग सॉफ्टवेयर विकास प्रथाओं के साथ इंजीनियरिंग तकनीकों को जोड़ती है। [[ रिवर्स इंजीनियरिंग ]] एक संबंधित प्रक्रिया है जिसका उपयोग डिजाइनरों, विश्लेषकों और प्रोग्रामर द्वारा समझने और फिर से बनाने / फिर से लागू करने के लिए किया जाता है।<ref name="Eilam">{{cite book | last = Eliam | first = Eldad | title = Reversing: Secrets of Reverse Engineering | publisher = Wiley | date = 2005 | pages = 3 | isbn = 978-0-7645-7481-8}}</ref> | प्रोग्रामिंग के साथ और संबंधित कार्यों में सॉफ्टवेयर परीक्षण, [[ डिबगिंग ]], स्रोत कोड रखरखाव, [[ स्वचालन बनाएँ ]] का कार्यान्वयन, और व्युत्पन्न आर्टिफैक्ट (सॉफ़्टवेयर विकास) का प्रबंधन, जैसे कंप्यूटर प्रोग्राम का मशीन कोड शामिल है। इन्हें प्रोग्रामिंग प्रक्रिया का हिस्सा माना जा सकता है, लेकिन अक्सर [[ सॉफ्टवेयर डेवलपमेंट ]] शब्द का इस्तेमाल इस बड़ी प्रक्रिया के लिए किया जाता है, जिसमें प्रोग्रामिंग, कार्यान्वयन या कोड के वास्तविक लेखन के लिए आरक्षित कोडिंग शब्द होता है। सॉफ्टवेयर इंजीनियरिंग सॉफ्टवेयर विकास प्रथाओं के साथ इंजीनियरिंग तकनीकों को जोड़ती है। [[ रिवर्स इंजीनियरिंग ]] एक संबंधित प्रक्रिया है जिसका उपयोग डिजाइनरों, विश्लेषकों और प्रोग्रामर द्वारा समझने और फिर से बनाने / फिर से लागू करने के लिए किया जाता है।<ref name="Eilam">{{cite book | last = Eliam | first = Eldad | title = Reversing: Secrets of Reverse Engineering | publisher = Wiley | date = 2005 | pages = 3 | isbn = 978-0-7645-7481-8}}</ref> | ||
=='''इतिहास'''== | |||
[[File:Ada lovelace.jpg|thumb|[[ लवलेस है | '''लवलेस है''']] ''', जिनके नोट्स [[ लुइगी मेनाब्रिया | लुइगी मेनाब्रिया]] के पेपर के अंत में जोड़े गए थे, में [[ विश्लेषणात्मक इंजन | विश्लेषणात्मक इंजन]] द्वारा प्रसंस्करण के लिए डिज़ाइन किया गया पहला एल्गोरिदम शामिल था। उन्हें अक्सर इतिहास की पहली कंप्यूटर प्रोग्रामर के रूप में पहचाना जाता है।''']] | |||
==इतिहास== | {{See also|कंप्यूटर प्रोग्राम इतिहास|प्रोग्रामर इतिहास|प्रोग्रामिंग भाषाओं का इतिहास}} | ||
[[File:Ada lovelace.jpg|thumb|[[ लवलेस है ]], जिनके नोट्स [[ लुइगी मेनाब्रिया ]] के पेपर के अंत में जोड़े गए थे, में [[ विश्लेषणात्मक इंजन ]] द्वारा प्रसंस्करण के लिए डिज़ाइन किया गया पहला एल्गोरिदम शामिल था। उन्हें अक्सर इतिहास की पहली कंप्यूटर प्रोग्रामर के रूप में पहचाना जाता है।]] | |||
{{See also| | |||
[[ कार्यक्रम (मशीन) ]] सदियों से अस्तित्व में है। 9वीं शताब्दी की शुरुआत में, फ़ारसी [[ बानू मूसा ]] भाइयों द्वारा एक प्रोग्राम योग्य [[ संगीत अनुक्रमक ]] का आविष्कार किया गया था, जिन्होंने [[ सरल उपकरणों की पुस्तक ]] में एक स्वचालित यांत्रिक [[ बांसुरी ]] वादक का वर्णन किया था।<ref name=Koetsier>{{Citation |last1=Koetsier |first1=Teun |year=2001 |title=On the prehistory of programmable machines: musical automata, looms, calculators |journal=Mechanism and Machine Theory |volume=36 |issue=5 |pages=589–603 |publisher=Elsevier |doi=10.1016/S0094-114X(01)00005-2 |postscript=.}}</ref><ref>{{cite journal |last1=Kapur |first1=Ajay |last2=Carnegie |first2=Dale |last3=Murphy |first3=Jim |last4=Long |first4=Jason |title=Loudspeakers Optional: A history of non-loudspeaker-based electroacoustic music |journal=[[Organised Sound]] |date=2017 |volume=22 |issue=2 |pages=195–205 |doi=10.1017/S1355771817000103 |publisher=[[Cambridge University Press]] |issn=1355-7718|doi-access=free }}</ref> 1206 में, अरब इंजीनियर [[ अल जजारी ]] ने एक प्रोग्राम करने योग्य [[ ड्रम मशीन ]] का आविष्कार किया, जहां खूंटे और [[ सांचा ]] के माध्यम से विभिन्न ताल और ड्रम पैटर्न को चलाने के लिए एक संगीत यांत्रिक [[ आटोमैटिक मशीन ]] बनाया जा सकता है।<ref>{{Cite journal|title=The Museum of Music: A History of Mechanical Instruments|first=Charles B.|last=Fowler|journal=Music Educators Journal|volume=54|issue=2|date=October 1967|pages=45–49|doi=10.2307/3391092|jstor=3391092|s2cid=190524140}}</ref><ref name=Sharkey>[[Noel Sharkey]] (2007), [https://web.archive.org/web/20070629182810/http://www.shef.ac.uk/marcoms/eview/articles58/robot.html A 13th Century Programmable Robot], [[University of Sheffield]]</ref> 1801 में, [[ जैक्वार्ड करघा ]] कार्यक्रम को बदलकर पूरी तरह से अलग बुनाई का उत्पादन कर सकता था - [[ कार्ड स्टॉक ]] कार्डों की एक श्रृंखला जिसमें छेद किए गए थे। | [[ कार्यक्रम (मशीन) ]] सदियों से अस्तित्व में है। 9वीं शताब्दी की शुरुआत में, फ़ारसी [[ बानू मूसा ]] भाइयों द्वारा एक प्रोग्राम योग्य [[ संगीत अनुक्रमक ]] का आविष्कार किया गया था, जिन्होंने [[ सरल उपकरणों की पुस्तक ]] में एक स्वचालित यांत्रिक [[ बांसुरी ]] वादक का वर्णन किया था।<ref name=Koetsier>{{Citation |last1=Koetsier |first1=Teun |year=2001 |title=On the prehistory of programmable machines: musical automata, looms, calculators |journal=Mechanism and Machine Theory |volume=36 |issue=5 |pages=589–603 |publisher=Elsevier |doi=10.1016/S0094-114X(01)00005-2 |postscript=.}}</ref><ref>{{cite journal |last1=Kapur |first1=Ajay |last2=Carnegie |first2=Dale |last3=Murphy |first3=Jim |last4=Long |first4=Jason |title=Loudspeakers Optional: A history of non-loudspeaker-based electroacoustic music |journal=[[Organised Sound]] |date=2017 |volume=22 |issue=2 |pages=195–205 |doi=10.1017/S1355771817000103 |publisher=[[Cambridge University Press]] |issn=1355-7718|doi-access=free }}</ref> 1206 में, अरब इंजीनियर [[ अल जजारी ]] ने एक प्रोग्राम करने योग्य [[ ड्रम मशीन ]] का आविष्कार किया, जहां खूंटे और [[ सांचा ]] के माध्यम से विभिन्न ताल और ड्रम पैटर्न को चलाने के लिए एक संगीत यांत्रिक [[ आटोमैटिक मशीन ]] बनाया जा सकता है।<ref>{{Cite journal|title=The Museum of Music: A History of Mechanical Instruments|first=Charles B.|last=Fowler|journal=Music Educators Journal|volume=54|issue=2|date=October 1967|pages=45–49|doi=10.2307/3391092|jstor=3391092|s2cid=190524140}}</ref><ref name=Sharkey>[[Noel Sharkey]] (2007), [https://web.archive.org/web/20070629182810/http://www.shef.ac.uk/marcoms/eview/articles58/robot.html A 13th Century Programmable Robot], [[University of Sheffield]]</ref> 1801 में, [[ जैक्वार्ड करघा ]] कार्यक्रम को बदलकर पूरी तरह से अलग बुनाई का उत्पादन कर सकता था - [[ कार्ड स्टॉक ]] कार्डों की एक श्रृंखला जिसमें छेद किए गए थे। | ||
Line 18: | Line 15: | ||
[[File:PunchCardDecks.agr.jpg|thumb|डेटा और निर्देश एक बार बाहरी [[ छिद्रित कार्ड ]]ों पर संग्रहीत किए जाते थे, जिन्हें क्रम में रखा जाता था और प्रोग्राम डेक में व्यवस्थित किया जाता था।]] | [[File:PunchCardDecks.agr.jpg|thumb|डेटा और निर्देश एक बार बाहरी [[ छिद्रित कार्ड ]]ों पर संग्रहीत किए जाते थे, जिन्हें क्रम में रखा जाता था और प्रोग्राम डेक में व्यवस्थित किया जाता था।]] | ||
1880 के दशक में [[ हरमन होलेरिथ ]] ने मशीन-पठनीय रूप में डेटा संग्रहीत करने की अवधारणा का आविष्कार किया।<ref>{{cite web|url=http://www.columbia.edu/acis/history/hollerith.html|title=Columbia University Computing History – Herman Hollerith|last=da Cruz|first=Frank|date=2020-03-10|website=Columbia University|publisher=Columbia.edu|url-status=live|archive-url=https://web.archive.org/web/20200429210742/http://www.columbia.edu/cu/computinghistory/hollerith.html|archive-date=2020-04-29|access-date=2010-04-25}}</ref> बाद में उनके 1906 टाइप I टेबुलेटर में एक प्लगबोर्ड ([[ प्लग बोर्ड ]]) जोड़ा गया, जिससे इसे विभिन्न नौकरियों के लिए प्रोग्राम किया जा सकता था, और 1940 के दशक के अंत तक, [[ यूनिट रिकॉर्ड उपकरण ]] जैसे कि [[ IBM 602 ]] और [[ IBM 604 ]] को इसी तरह से कंट्रोल पैनल द्वारा प्रोग्राम किया गया था। , जैसा कि पहले [[ इलेक्ट्रॉनिक कंप्यूटर ]] थे। हालाँकि, 1949 में पेश किए गए [[ संग्रहीत-प्रोग्राम कंप्यूटर ]] की अवधारणा के साथ, प्रोग्राम और डेटा दोनों को [[ स्मृति ]] में उसी तरह से स्टोर और हेरफेर किया गया था।<ref>{{cite web |title=Memory & Storage {{!}} Timeline of Computer History {{!}} Computer History Museum |url=https://www.computerhistory.org/timeline/memory-storage/ |website=www.computerhistory.org |access-date=3 June 2021}}</ref> | 1880 के दशक में [[ हरमन होलेरिथ ]] ने मशीन-पठनीय रूप में डेटा संग्रहीत करने की अवधारणा का आविष्कार किया।<ref>{{cite web|url=http://www.columbia.edu/acis/history/hollerith.html|title=Columbia University Computing History – Herman Hollerith|last=da Cruz|first=Frank|date=2020-03-10|website=Columbia University|publisher=Columbia.edu|url-status=live|archive-url=https://web.archive.org/web/20200429210742/http://www.columbia.edu/cu/computinghistory/hollerith.html|archive-date=2020-04-29|access-date=2010-04-25}}</ref> बाद में उनके 1906 टाइप I टेबुलेटर में एक प्लगबोर्ड ([[ प्लग बोर्ड ]]) जोड़ा गया, जिससे इसे विभिन्न नौकरियों के लिए प्रोग्राम किया जा सकता था, और 1940 के दशक के अंत तक, [[ यूनिट रिकॉर्ड उपकरण ]] जैसे कि [[ IBM 602 ]] और [[ IBM 604 ]] को इसी तरह से कंट्रोल पैनल द्वारा प्रोग्राम किया गया था। , जैसा कि पहले [[ इलेक्ट्रॉनिक कंप्यूटर ]] थे। हालाँकि, 1949 में पेश किए गए [[ संग्रहीत-प्रोग्राम कंप्यूटर ]] की अवधारणा के साथ, प्रोग्राम और डेटा दोनों को [[ स्मृति ]] में उसी तरह से स्टोर और हेरफेर किया गया था।<ref>{{cite web |title=Memory & Storage {{!}} Timeline of Computer History {{!}} Computer History Museum |url=https://www.computerhistory.org/timeline/memory-storage/ |website=www.computerhistory.org |access-date=3 June 2021}}</ref> | ||
=== मशीन की भाषा === | === मशीन की भाषा === | ||
मशीन कोड प्रारंभिक कार्यक्रमों की भाषा थी, जिसे विशेष मशीन के निर्देश सेट में लिखा जाता था, अक्सर [[ बाइनरी अंक प्रणाली ]] संकेतन में। असेंबली भाषाएं जल्द ही विकसित की गईं कि प्रोग्रामर को प्रत्येक ऑपरेशन कोड के लिए संक्षिप्त नाम और पते निर्दिष्ट करने के लिए सार्थक नामों के साथ एक टेक्स्ट प्रारूप (जैसे, ADD X, TOTAL) में निर्देश निर्दिष्ट करने दें। हालाँकि, क्योंकि एक असेंबली भाषा एक मशीनी भाषा के लिए एक अलग संकेतन से थोड़ी अधिक है, [[ निर्देश सेट आर्किटेक्चर की तुलना ]] वाली दो मशीनों में भी अलग-अलग असेंबली भाषाएँ होती हैं। | मशीन कोड प्रारंभिक कार्यक्रमों की भाषा थी, जिसे विशेष मशीन के निर्देश सेट में लिखा जाता था, अक्सर [[ बाइनरी अंक प्रणाली ]] संकेतन में। असेंबली भाषाएं जल्द ही विकसित की गईं कि प्रोग्रामर को प्रत्येक ऑपरेशन कोड के लिए संक्षिप्त नाम और पते निर्दिष्ट करने के लिए सार्थक नामों के साथ एक टेक्स्ट प्रारूप (जैसे, ADD X, TOTAL) में निर्देश निर्दिष्ट करने दें। हालाँकि, क्योंकि एक असेंबली भाषा एक मशीनी भाषा के लिए एक अलग संकेतन से थोड़ी अधिक है, [[ निर्देश सेट आर्किटेक्चर की तुलना ]] वाली दो मशीनों में भी अलग-अलग असेंबली भाषाएँ होती हैं। | ||
[[File:IBM402plugboard.Shrigley.wireside.jpg|thumb|[[ आईबीएम 402 लेखा मशीन ]] के लिए वायर्ड प्लगबोर्ड। तार कार्ड रीडर से पल्स स्ट्रीम को काउंटर और अन्य आंतरिक तर्क से और अंततः प्रिंटर से जोड़ते हैं।]] | [[File:IBM402plugboard.Shrigley.wireside.jpg|thumb|[[ आईबीएम 402 लेखा मशीन ]] के लिए वायर्ड प्लगबोर्ड। तार कार्ड रीडर से पल्स स्ट्रीम को काउंटर और अन्य आंतरिक तर्क से और अंततः प्रिंटर से जोड़ते हैं।]] | ||
===संकलक भाषाएं=== | ===संकलक भाषाएं=== | ||
{{See also| | {{See also|संकलक}} | ||
उच्च-स्तरीय भाषाओं ने प्रोग्राम को विकसित करने की प्रक्रिया को सरल और अधिक समझने योग्य, और अंतर्निहित [[ संगणक धातु सामग्री ]] से कम बाध्य किया। | उच्च-स्तरीय भाषाओं ने प्रोग्राम को विकसित करने की प्रक्रिया को सरल और अधिक समझने योग्य, और अंतर्निहित [[ संगणक धातु सामग्री ]] से कम बाध्य किया। | ||
पहला कंपाइलर संबंधित टूल, [[ ए-0 सिस्टम ]], 1952 में विकसित किया गया था<ref>{{cite journal |last1=Ridgway|first1=Richard|date=1952|title=Compiling routines|url=https://dl.acm.org/citation.cfm?id=808980|journal=Proceeding ACM '52 Proceedings of the 1952 ACM National Meeting (Toronto)|series=ACM '52|pages=1–5|doi=10.1145/800259.808980|isbn=9781450379250|s2cid=14878552}}</ref> [[ ग्रेस हूपर ]] द्वारा, जिन्होंने 'कंपाइलर' शब्द भी गढ़ा।<ref name="wikles1968">[[Maurice V. Wilkes]]. 1968. Computers Then and Now. Journal of the Association for Computing Machinery, 15(1):1–7, January. p. 3 (a comment in brackets added by editor), "(I do not think that the term compiler was then [1953] in general use, although it had in fact been introduced by Grace Hopper.)"</ref><ref name="computerhistory.org">[http://www.computerhistory.org/events/lectures/cobol_06121997/index.shtml] The World's First COBOL Compilers {{webarchive |url=https://web.archive.org/web/20111013021915/http://www.computerhistory.org/events/lectures/cobol_06121997/index.shtml |date=13 October 2011 }}</ref> [[ फोरट्रानी ]], पहली व्यापक रूप से इस्तेमाल की जाने वाली उच्च-स्तरीय भाषा जिसका कार्यात्मक कार्यान्वयन है, 1957 में सामने आया,<ref name = bergstein>{{cite web|url=http://www.nbcnews.com/id/17704662|title=Fortran creator John Backus dies |last=Bergstein|first=Brian|date=2007-03-20|website=NBC News|url-status= live|archive-url=https://web.archive.org/web/20200429211030/http://www.nbcnews.com/id/17704662|archive-date=2020-04-29 |access-date=2010-04-25}}</ref> और कई अन्य भाषाएँ जल्द ही विकसित हुईं- विशेष रूप से, [[ COBOL ]] का उद्देश्य व्यावसायिक डेटा प्रोसेसिंग और कंप्यूटर अनुसंधान के लिए Lisp (प्रोग्रामिंग भाषा) है। | पहला कंपाइलर संबंधित टूल, [[ ए-0 सिस्टम ]], 1952 में विकसित किया गया था<ref>{{cite journal |last1=Ridgway|first1=Richard|date=1952|title=Compiling routines|url=https://dl.acm.org/citation.cfm?id=808980|journal=Proceeding ACM '52 Proceedings of the 1952 ACM National Meeting (Toronto)|series=ACM '52|pages=1–5|doi=10.1145/800259.808980|isbn=9781450379250|s2cid=14878552}}</ref> [[ ग्रेस हूपर ]] द्वारा, जिन्होंने 'कंपाइलर' शब्द भी गढ़ा।<ref name="wikles1968">[[Maurice V. Wilkes]]. 1968. Computers Then and Now. Journal of the Association for Computing Machinery, 15(1):1–7, January. p. 3 (a comment in brackets added by editor), "(I do not think that the term compiler was then [1953] in general use, although it had in fact been introduced by Grace Hopper.)"</ref><ref name="computerhistory.org">[http://www.computerhistory.org/events/lectures/cobol_06121997/index.shtml] The World's First COBOL Compilers {{webarchive |url=https://web.archive.org/web/20111013021915/http://www.computerhistory.org/events/lectures/cobol_06121997/index.shtml |date=13 October 2011 }}</ref> [[ फोरट्रानी ]], पहली व्यापक रूप से इस्तेमाल की जाने वाली उच्च-स्तरीय भाषा जिसका कार्यात्मक कार्यान्वयन है, 1957 में सामने आया,<ref name = bergstein>{{cite web|url=http://www.nbcnews.com/id/17704662|title=Fortran creator John Backus dies |last=Bergstein|first=Brian|date=2007-03-20|website=NBC News|url-status= live|archive-url=https://web.archive.org/web/20200429211030/http://www.nbcnews.com/id/17704662|archive-date=2020-04-29 |access-date=2010-04-25}}</ref> और कई अन्य भाषाएँ जल्द ही विकसित हुईं- विशेष रूप से, [[ COBOL ]] का उद्देश्य व्यावसायिक डेटा प्रोसेसिंग और कंप्यूटर अनुसंधान के लिए Lisp (प्रोग्रामिंग भाषा) है। | ||
Line 34: | Line 27: | ||
=== स्रोत कोड प्रविष्टि === | === स्रोत कोड प्रविष्टि === | ||
{{See also| | {{See also|पंच्ड कार्ड युग में कंप्यूटर प्रोग्रामिंग}} | ||
प्रोग्राम ज्यादातर पंच कार्ड या [[ कागज का टेप ]] का उपयोग करके दर्ज किए गए थे। 1960 के दशक के अंत तक, [[ डेटा स्टोरेज डिवाइस ]] और [[ कंप्यूटर टर्मिनल ]] इतने सस्ते हो गए थे कि सीधे कंप्यूटर में टाइप करके प्रोग्राम बनाए जा सकते थे। [[ पाठ संपादक ]]ों को भी विकसित किया गया था जो [[ पंच कार्ड सॉर्टर ]] की तुलना में परिवर्तन और सुधार को अधिक आसानी से करने की अनुमति देते थे। | प्रोग्राम ज्यादातर पंच कार्ड या [[ कागज का टेप ]] का उपयोग करके दर्ज किए गए थे। 1960 के दशक के अंत तक, [[ डेटा स्टोरेज डिवाइस ]] और [[ कंप्यूटर टर्मिनल ]] इतने सस्ते हो गए थे कि सीधे कंप्यूटर में टाइप करके प्रोग्राम बनाए जा सकते थे। [[ पाठ संपादक ]]ों को भी विकसित किया गया था जो [[ पंच कार्ड सॉर्टर ]] की तुलना में परिवर्तन और सुधार को अधिक आसानी से करने की अनुमति देते थे। | ||
Line 44: | Line 37: | ||
|title=NIST To Develop Cloud Roadmap |date=November 5, 2010 | |title=NIST To Develop Cloud Roadmap |date=November 5, 2010 | ||
|quote=Computing initiative seeks to remove barriers to cloud adoption in security, interoperability, portability and reliability.}}</ref> | |quote=Computing initiative seeks to remove barriers to cloud adoption in security, interoperability, portability and reliability.}}</ref> | ||
*विश्वसनीयता इंजीनियरिंग#सॉफ्टवेयर विश्वसनीयता: किसी प्रोग्राम के परिणाम कितनी बार सही होते हैं। यह एल्गोरिदम की वैचारिक शुद्धता और प्रोग्रामिंग गलतियों को कम करने पर निर्भर करता है, जैसे संसाधन प्रबंधन में गलतियाँ (जैसे, [[ बफ़र अधिकता ]] और [[ दौड़ की स्थिति ]]) और तर्क त्रुटियां (जैसे कि शून्य से विभाजन या ऑफ-बाय-वन त्रुटियां)। | *विश्वसनीयता इंजीनियरिंग#सॉफ्टवेयर विश्वसनीयता: किसी प्रोग्राम के परिणाम कितनी बार सही होते हैं। यह एल्गोरिदम की वैचारिक शुद्धता और प्रोग्रामिंग गलतियों को कम करने पर निर्भर करता है, जैसे संसाधन प्रबंधन में गलतियाँ (जैसे, [[ बफ़र अधिकता ]] और [[ दौड़ की स्थिति ]]) और तर्क त्रुटियां (जैसे कि शून्य से विभाजन या ऑफ-बाय-वन त्रुटियां)। | ||
*[[ मजबूती (कंप्यूटर विज्ञान) ]]: त्रुटियों के कारण एक प्रोग्राम कितनी अच्छी तरह समस्याओं का अनुमान लगाता है (बग नहीं)। इसमें गलत, अनुपयुक्त या भ्रष्ट डेटा, मेमोरी, ऑपरेटिंग सिस्टम सेवाओं और नेटवर्क कनेक्शन जैसे आवश्यक संसाधनों की अनुपलब्धता, उपयोगकर्ता त्रुटि, और अप्रत्याशित पावर आउटेज जैसी स्थितियां शामिल हैं। | *[[ मजबूती (कंप्यूटर विज्ञान) ]]: त्रुटियों के कारण एक प्रोग्राम कितनी अच्छी तरह समस्याओं का अनुमान लगाता है (बग नहीं)। इसमें गलत, अनुपयुक्त या भ्रष्ट डेटा, मेमोरी, ऑपरेटिंग सिस्टम सेवाओं और नेटवर्क कनेक्शन जैसे आवश्यक संसाधनों की अनुपलब्धता, उपयोगकर्ता त्रुटि, और अप्रत्याशित पावर आउटेज जैसी स्थितियां शामिल हैं। | ||
Line 76: | Line 66: | ||
==== शतरंज एल्गोरिदम एक उदाहरण के रूप में ==== | ==== शतरंज एल्गोरिदम एक उदाहरण के रूप में ==== | ||
शतरंज खेलने के लिए कंप्यूटर प्रोग्रामिंग करना 1950 का एक पेपर था जिसने एक मिनीमैक्स एल्गोरिथम का मूल्यांकन किया जो एल्गोरिथम जटिलता के इतिहास का हिस्सा है; आईबीएम के [[ डीप ब्लू (शतरंज कंप्यूटर) ]] पर एक पाठ्यक्रम [[ स्टैनफोर्ड विश्वविद्यालय ]] में कंप्यूटर विज्ञान पाठ्यक्रम का हिस्सा है।<ref>{{cite web|url=https://stanford.edu/~cpiech/cs221/apps/deepBlue.html|title=Deep Blue|last=Piech|first=Chris|quote=In 1950, Claude Shannon published ... "Programming a Computer for Playing Chess", ... "minimax" algorithm}}</ref> | शतरंज खेलने के लिए कंप्यूटर प्रोग्रामिंग करना 1950 का एक पेपर था जिसने एक मिनीमैक्स एल्गोरिथम का मूल्यांकन किया जो एल्गोरिथम जटिलता के इतिहास का हिस्सा है; आईबीएम के [[ डीप ब्लू (शतरंज कंप्यूटर) ]] पर एक पाठ्यक्रम [[ स्टैनफोर्ड विश्वविद्यालय ]] में कंप्यूटर विज्ञान पाठ्यक्रम का हिस्सा है।<ref>{{cite web|url=https://stanford.edu/~cpiech/cs221/apps/deepBlue.html|title=Deep Blue|last=Piech|first=Chris|quote=In 1950, Claude Shannon published ... "Programming a Computer for Playing Chess", ... "minimax" algorithm}}</ref> | ||
=== तरीके === | === तरीके === | ||
अधिकांश औपचारिक सॉफ्टवेयर विकास प्रक्रियाओं में पहला कदम आवश्यकताओं का विश्लेषण है, इसके बाद मूल्य मॉडलिंग, कार्यान्वयन और विफलता उन्मूलन (डीबगिंग) निर्धारित करने के लिए परीक्षण किया जाता है। उन कार्यों में से प्रत्येक के लिए कई अलग-अलग दृष्टिकोण मौजूद हैं। [[ आवश्यकताओं के विश्लेषण ]] के लिए लोकप्रिय एक दृष्टिकोण है केस विश्लेषण का उपयोग करें। कई प्रोग्रामर [[ चुस्त सॉफ्टवेयर विकास ]] के रूपों का उपयोग करते हैं जहां औपचारिक सॉफ्टवेयर विकास के विभिन्न चरणों को एक साथ छोटे चक्रों में एकीकृत किया जाता है जिसमें वर्षों के बजाय कुछ सप्ताह लगते हैं। सॉफ्टवेयर विकास प्रक्रिया के कई दृष्टिकोण हैं। | अधिकांश औपचारिक सॉफ्टवेयर विकास प्रक्रियाओं में पहला कदम आवश्यकताओं का विश्लेषण है, इसके बाद मूल्य मॉडलिंग, कार्यान्वयन और विफलता उन्मूलन (डीबगिंग) निर्धारित करने के लिए परीक्षण किया जाता है। उन कार्यों में से प्रत्येक के लिए कई अलग-अलग दृष्टिकोण मौजूद हैं। [[ आवश्यकताओं के विश्लेषण ]] के लिए लोकप्रिय एक दृष्टिकोण है केस विश्लेषण का उपयोग करें। कई प्रोग्रामर [[ चुस्त सॉफ्टवेयर विकास ]] के रूपों का उपयोग करते हैं जहां औपचारिक सॉफ्टवेयर विकास के विभिन्न चरणों को एक साथ छोटे चक्रों में एकीकृत किया जाता है जिसमें वर्षों के बजाय कुछ सप्ताह लगते हैं। सॉफ्टवेयर विकास प्रक्रिया के कई दृष्टिकोण हैं। | ||
Line 88: | Line 76: | ||
=== भाषा के उपयोग को मापना === | === भाषा के उपयोग को मापना === | ||
{{Main| | {{Main|प्रोग्रामिंग भाषा की लोकप्रियता को मापना}} | ||
यह निर्धारित करना बहुत मुश्किल है कि सबसे लोकप्रिय आधुनिक प्रोग्रामिंग भाषाएं कौन सी हैं। प्रोग्रामिंग भाषा की लोकप्रियता को मापने के तरीकों में शामिल हैं: भाषा का उल्लेख करने वाले नौकरी विज्ञापनों की संख्या की गणना करना,<ref>{{cite web|url = http://www.computerweekly.com/Articles/2007/09/11/226631/sslcomputer-weekly-it-salary-survey-finance-boom-drives-it-job.htm |title = SSL/Computer Weekly IT salary survey: finance boom drives IT job growth|date = 11 September 2007|first = Nicholas |last =Enticknap|url-access = registration}}</ref> बेची गई पुस्तकों की संख्या और भाषा सिखाने वाले पाठ्यक्रम (यह नई भाषाओं के महत्व को अधिक महत्व देता है), और भाषा में लिखी गई कोड की मौजूदा पंक्तियों की संख्या का अनुमान (यह COBOL जैसी व्यावसायिक भाषाओं के उपयोगकर्ताओं की संख्या को कम करके आंकता है)। | यह निर्धारित करना बहुत मुश्किल है कि सबसे लोकप्रिय आधुनिक प्रोग्रामिंग भाषाएं कौन सी हैं। प्रोग्रामिंग भाषा की लोकप्रियता को मापने के तरीकों में शामिल हैं: भाषा का उल्लेख करने वाले नौकरी विज्ञापनों की संख्या की गणना करना,<ref>{{cite web|url = http://www.computerweekly.com/Articles/2007/09/11/226631/sslcomputer-weekly-it-salary-survey-finance-boom-drives-it-job.htm |title = SSL/Computer Weekly IT salary survey: finance boom drives IT job growth|date = 11 September 2007|first = Nicholas |last =Enticknap|url-access = registration}}</ref> बेची गई पुस्तकों की संख्या और भाषा सिखाने वाले पाठ्यक्रम (यह नई भाषाओं के महत्व को अधिक महत्व देता है), और भाषा में लिखी गई कोड की मौजूदा पंक्तियों की संख्या का अनुमान (यह COBOL जैसी व्यावसायिक भाषाओं के उपयोगकर्ताओं की संख्या को कम करके आंकता है)। | ||
Line 94: | Line 82: | ||
=== डिबगिंग === | === डिबगिंग === | ||
{{main| | {{main|डिबगिंग}} | ||
[[File:First Computer Bug, 1945.jpg|thumb|कंप्यूटर में समस्या पैदा करने वाला पहला ज्ञात वास्तविक बग एक कीट था, जो हार्वर्ड मेनफ्रेम के अंदर फंसा हुआ था, जिसे 9 सितंबर, 1947 की लॉग बुक प्रविष्टि में दर्ज किया गया था।<ref>{{cite web| url = https://www.nationalgeographic.org/thisday/sep9/worlds-first-computer-bug| title = Photograph courtesy Naval Surface Warfare Center, Dahlgren, Virginia, from National Geographic Sept. 1947| date = July 15, 2020}}</ref> सॉफ़्टवेयर दोष के लिए बग पहले से ही एक सामान्य शब्द था जब यह कीट पाया गया था।]] | [[File:First Computer Bug, 1945.jpg|thumb|कंप्यूटर में समस्या पैदा करने वाला पहला ज्ञात वास्तविक बग एक कीट था, जो हार्वर्ड मेनफ्रेम के अंदर फंसा हुआ था, जिसे 9 सितंबर, 1947 की लॉग बुक प्रविष्टि में दर्ज किया गया था।<ref>{{cite web| url = https://www.nationalgeographic.org/thisday/sep9/worlds-first-computer-bug| title = Photograph courtesy Naval Surface Warfare Center, Dahlgren, Virginia, from National Geographic Sept. 1947| date = July 15, 2020}}</ref> सॉफ़्टवेयर दोष के लिए बग पहले से ही एक सामान्य शब्द था जब यह कीट पाया गया था।]] | ||
सॉफ्टवेयर विकास प्रक्रिया में डिबगिंग एक बहुत ही महत्वपूर्ण कार्य है क्योंकि किसी प्रोग्राम में दोष होने के कारण इसके उपयोगकर्ताओं के लिए महत्वपूर्ण परिणाम हो सकते हैं। कुछ भाषाएँ कुछ प्रकार के दोषों के लिए अधिक प्रवण होती हैं क्योंकि उनके विनिर्देशन के लिए अन्य भाषाओं की तरह अधिक जाँच करने के लिए संकलक की आवश्यकता नहीं होती है। [[ स्थिर कोड विश्लेषण ]] उपकरण का उपयोग कुछ संभावित समस्याओं का पता लगाने में मदद कर सकता है। आम तौर पर डिबगिंग में पहला कदम समस्या को पुन: उत्पन्न करने का प्रयास करना है। यह एक गैर-तुच्छ कार्य हो सकता है, उदाहरण के लिए समानांतर प्रक्रियाओं या कुछ असामान्य सॉफ़्टवेयर बग के साथ। साथ ही, विशिष्ट उपयोगकर्ता परिवेश और उपयोग इतिहास समस्या को पुन: उत्पन्न करना मुश्किल बना सकता है। | सॉफ्टवेयर विकास प्रक्रिया में डिबगिंग एक बहुत ही महत्वपूर्ण कार्य है क्योंकि किसी प्रोग्राम में दोष होने के कारण इसके उपयोगकर्ताओं के लिए महत्वपूर्ण परिणाम हो सकते हैं। कुछ भाषाएँ कुछ प्रकार के दोषों के लिए अधिक प्रवण होती हैं क्योंकि उनके विनिर्देशन के लिए अन्य भाषाओं की तरह अधिक जाँच करने के लिए संकलक की आवश्यकता नहीं होती है। [[ स्थिर कोड विश्लेषण ]] उपकरण का उपयोग कुछ संभावित समस्याओं का पता लगाने में मदद कर सकता है। आम तौर पर डिबगिंग में पहला कदम समस्या को पुन: उत्पन्न करने का प्रयास करना है। यह एक गैर-तुच्छ कार्य हो सकता है, उदाहरण के लिए समानांतर प्रक्रियाओं या कुछ असामान्य सॉफ़्टवेयर बग के साथ। साथ ही, विशिष्ट उपयोगकर्ता परिवेश और उपयोग इतिहास समस्या को पुन: उत्पन्न करना मुश्किल बना सकता है। | ||
Line 102: | Line 90: | ||
डिबगिंग अक्सर एकीकृत विकास वातावरण के साथ किया जाता है। [[ GDB ]] जैसे स्टैंडअलोन डिबगर्स का भी उपयोग किया जाता है, और ये अक्सर कम दृश्य वातावरण प्रदान करते हैं, आमतौर पर [[ कमांड लाइन ]] का उपयोग करते हुए। कुछ पाठ संपादक जैसे [[ Emacs ]] GDB को उनके माध्यम से एक दृश्य वातावरण प्रदान करने की अनुमति देते हैं। | डिबगिंग अक्सर एकीकृत विकास वातावरण के साथ किया जाता है। [[ GDB ]] जैसे स्टैंडअलोन डिबगर्स का भी उपयोग किया जाता है, और ये अक्सर कम दृश्य वातावरण प्रदान करते हैं, आमतौर पर [[ कमांड लाइन ]] का उपयोग करते हुए। कुछ पाठ संपादक जैसे [[ Emacs ]] GDB को उनके माध्यम से एक दृश्य वातावरण प्रदान करने की अनुमति देते हैं। | ||
==प्रोग्रामिंग भाषाएं | ==प्रोग्रामिंग भाषाएं== | ||
{{Main| | {{Main|प्रोग्रामिंग भाषा|प्रोग्रामिंग भाषाओं की सूची}} | ||
{{See also| | {{See also|कंप्यूटर प्रोग्राम भाषाएँ}} | ||
विभिन्न प्रोग्रामिंग भाषाएं प्रोग्रामिंग की विभिन्न शैलियों का समर्थन करती हैं (जिन्हें [[ प्रोग्रामिंग प्रतिमान ]] कहा जाता है)। उपयोग की जाने वाली भाषा का चुनाव कई बातों पर निर्भर करता है, जैसे कंपनी की नीति, कार्य के लिए उपयुक्तता, तीसरे पक्ष के पैकेज की उपलब्धता, या व्यक्तिगत वरीयता। आदर्श रूप से, कार्य के लिए सबसे उपयुक्त प्रोग्रामिंग भाषा का चयन किया जाएगा। इस आदर्श से ट्रेड-ऑफ में पर्याप्त प्रोग्रामर ढूंढना शामिल है जो एक टीम बनाने के लिए भाषा जानते हैं, उस भाषा के लिए कंपाइलर्स की उपलब्धता, और दक्षता जिसके साथ किसी भाषा में लिखे गए प्रोग्राम निष्पादित होते हैं। भाषाएँ निम्न-स्तर से उच्च-स्तर तक एक अनुमानित स्पेक्ट्रम बनाती हैं; निम्न-स्तरीय भाषाएँ आमतौर पर अधिक मशीन-उन्मुख होती हैं और निष्पादित करने में तेज़ होती हैं, जबकि उच्च-स्तरीय भाषाएँ अधिक सारगर्भित और उपयोग में आसान होती हैं लेकिन कम तेज़ी से निष्पादित होती हैं। आमतौर पर निम्न-स्तरीय भाषाओं की तुलना में उच्च-स्तरीय भाषाओं में कोड करना आसान होता है। | विभिन्न प्रोग्रामिंग भाषाएं प्रोग्रामिंग की विभिन्न शैलियों का समर्थन करती हैं (जिन्हें [[ प्रोग्रामिंग प्रतिमान ]] कहा जाता है)। उपयोग की जाने वाली भाषा का चुनाव कई बातों पर निर्भर करता है, जैसे कंपनी की नीति, कार्य के लिए उपयुक्तता, तीसरे पक्ष के पैकेज की उपलब्धता, या व्यक्तिगत वरीयता। आदर्श रूप से, कार्य के लिए सबसे उपयुक्त प्रोग्रामिंग भाषा का चयन किया जाएगा। इस आदर्श से ट्रेड-ऑफ में पर्याप्त प्रोग्रामर ढूंढना शामिल है जो एक टीम बनाने के लिए भाषा जानते हैं, उस भाषा के लिए कंपाइलर्स की उपलब्धता, और दक्षता जिसके साथ किसी भाषा में लिखे गए प्रोग्राम निष्पादित होते हैं। भाषाएँ निम्न-स्तर से उच्च-स्तर तक एक अनुमानित स्पेक्ट्रम बनाती हैं; निम्न-स्तरीय भाषाएँ आमतौर पर अधिक मशीन-उन्मुख होती हैं और निष्पादित करने में तेज़ होती हैं, जबकि उच्च-स्तरीय भाषाएँ अधिक सारगर्भित और उपयोग में आसान होती हैं लेकिन कम तेज़ी से निष्पादित होती हैं। आमतौर पर निम्न-स्तरीय भाषाओं की तुलना में उच्च-स्तरीय भाषाओं में कोड करना आसान होता है। | ||
सॉफ्टवेयर विकास के लिए प्रोग्रामिंग भाषाएं आवश्यक हैं। वे सबसे सरल अनुप्रयोगों से लेकर सबसे परिष्कृत तक, सभी सॉफ़्टवेयर के लिए बिल्डिंग ब्लॉक हैं। | सॉफ्टवेयर विकास के लिए प्रोग्रामिंग भाषाएं आवश्यक हैं। वे सबसे सरल अनुप्रयोगों से लेकर सबसे परिष्कृत तक, सभी सॉफ़्टवेयर के लिए बिल्डिंग ब्लॉक हैं। | ||
Line 120: | Line 108: | ||
==प्रोग्रामर== | ==प्रोग्रामर== | ||
{{Main| | {{Main|प्रोग्रामर|सॉफ्टवेयर इंजीनियर}} | ||
कंप्यूटर प्रोग्रामर वे होते हैं जो कंप्यूटर सॉफ्टवेयर लिखते हैं। उनकी नौकरियों में आमतौर पर शामिल हैं: | कंप्यूटर प्रोग्रामर वे होते हैं जो कंप्यूटर सॉफ्टवेयर लिखते हैं। उनकी नौकरियों में आमतौर पर शामिल हैं: | ||
{{div col|colwidth=30em}} | {{div col|colwidth=30em}} | ||
Line 133: | Line 121: | ||
*सॉफ़्टवेयर परीक्षण | *सॉफ़्टवेयर परीक्षण | ||
*[[ विनिर्देश ]] | *[[ विनिर्देश ]] | ||
{{div col end}}यद्यपि मीडिया में प्रोग्रामिंग को कुछ हद तक गणितीय विषय के रूप में प्रस्तुत किया गया है, कुछ शोध से पता चलता है कि अच्छे प्रोग्रामर के पास प्राकृतिक मानव भाषाओं में मजबूत कौशल है, और यह कि कोड सीखना एक [[ विदेशी भाषा ]] सीखने के समान है।<ref>{{Cite journal|last1=Prat|first1=Chantel S.|last2=Madhyastha|first2=Tara M.|last3=Mottarella|first3=Malayka J.|last4=Kuo|first4=Chu-Hsuan|date=2020-03-02|title=Relating Natural Language Aptitude to Individual Differences in Learning Programming Languages|journal=Scientific Reports|language=en|volume=10|issue=1|pages=3817|doi=10.1038/s41598-020-60661-8|pmid=32123206|issn=2045-2322|pmc=7051953|bibcode=2020NatSR..10.3817P}}</ref> | {{div col end}}यद्यपि मीडिया में प्रोग्रामिंग को कुछ हद तक गणितीय विषय के रूप में प्रस्तुत किया गया है, कुछ शोध से पता चलता है कि अच्छे प्रोग्रामर के पास प्राकृतिक मानव भाषाओं में मजबूत कौशल है, और यह कि कोड सीखना एक [[ विदेशी भाषा ]] सीखने के समान है।<ref>{{Cite journal|last1=Prat|first1=Chantel S.|last2=Madhyastha|first2=Tara M.|last3=Mottarella|first3=Malayka J.|last4=Kuo|first4=Chu-Hsuan|date=2020-03-02|title=Relating Natural Language Aptitude to Individual Differences in Learning Programming Languages|journal=Scientific Reports|language=en|volume=10|issue=1|pages=3817|doi=10.1038/s41598-020-60661-8|pmid=32123206|issn=2045-2322|pmc=7051953|bibcode=2020NatSR..10.3817P}}</ref> | ||
=='''यह भी देखें'''{{Portal|Computer programming}}== | |||
{{Main|कंप्यूटर प्रोग्रामिंग की रूपरेखा}} | |||
==यह भी देखें | |||
{{Portal|Computer programming}} | |||
{{Main| | |||
{{div col|colwidth=20em}} | {{div col|colwidth=20em}} | ||
*[[ एसीसीयू (संगठन) ]] | *[[ एसीसीयू (संगठन) ]] | ||
Line 153: | Line 138: | ||
*[[ कंप्यूटिंग में महिलाओं की समयरेखा ]] | *[[ कंप्यूटिंग में महिलाओं की समयरेखा ]] | ||
{{div col end}} | {{div col end}} | ||
=='''संदर्भ'''== | |||
==संदर्भ== | |||
{{reflist|30em}} | {{reflist|30em}} | ||
=== स्रोत === | === स्रोत === | ||
* {{Cite book|url=https://archive.org/details/historyofmodernc00ceru|title=History of Computing|last=Ceruzzi|first=Paul E.|publisher=MIT Press|year=1998|isbn=9780262032551|location=Cambridge, Massachusetts|url-access=registration|via=EBSCOhost}} | * {{Cite book|url=https://archive.org/details/historyofmodernc00ceru|title=History of Computing|last=Ceruzzi|first=Paul E.|publisher=MIT Press|year=1998|isbn=9780262032551|location=Cambridge, Massachusetts|url-access=registration|via=EBSCOhost}} | ||
Line 166: | Line 145: | ||
*{{Cite journal|last=Gürer|first=Denise|s2cid=6626310|date=1995|title=Pioneering Women in Computer Science|url=https://courses.cs.washington.edu/courses/csep590/06au/readings/p175-gurer.pdf|journal=Communications of the ACM|volume=38|issue=1|pages=45–54|doi=10.1145/204865.204875}} | *{{Cite journal|last=Gürer|first=Denise|s2cid=6626310|date=1995|title=Pioneering Women in Computer Science|url=https://courses.cs.washington.edu/courses/csep590/06au/readings/p175-gurer.pdf|journal=Communications of the ACM|volume=38|issue=1|pages=45–54|doi=10.1145/204865.204875}} | ||
*{{Cite journal|last=Smith|first=Erika E.|date=2013|title=Recognizing a Collective Inheritance through the History of Women in Computing|url=http://search.ebscohost.com/login.aspx?direct=true&db=lfh&AN=90670848&site=ehost-live|journal=CLCWeb: Comparative Literature & Culture: A WWWeb Journal|volume=15|issue=1|pages=1–9|via=EBSCOhost|url-access=subscription }} | *{{Cite journal|last=Smith|first=Erika E.|date=2013|title=Recognizing a Collective Inheritance through the History of Women in Computing|url=http://search.ebscohost.com/login.aspx?direct=true&db=lfh&AN=90670848&site=ehost-live|journal=CLCWeb: Comparative Literature & Culture: A WWWeb Journal|volume=15|issue=1|pages=1–9|via=EBSCOhost|url-access=subscription }} | ||
==अग्रिम पठन== | ==अग्रिम पठन== | ||
* | * ए.के. हार्टमैन, ''[https://web.archive.org/web/20090211113048/http://worldscibooks.com/physics/6988.html कंप्यूटर सिमुलेशन के लिए प्रैक्टिकल गाइड]'', सिंगापुर: [[World Scientific|विश्व वैज्ञानिक]] (2009) | ||
* | * ए. हंट, डी. थॉमस, और डब्ल्यू. कनिंघम, द प्रैग्मैटिक प्रोग्रामर। जर्नीमैन से मास्टर तक, एम्स्टर्डम: एडिसन-वेस्ले लॉन्गमैन (1999) | ||
* | * ब्रायन डब्ल्यू कर्निघन, द प्रैक्टिस ऑफ़ प्रोग्रामिंग, पियर्सन (1999) | ||
* [[Gerald Weinberg| | * [[Gerald Weinberg|वेनबर्ग, जेराल्ड एम.]], कंप्यूटर प्रोग्रामिंग का मनोविज्ञान, न्यूयॉर्क: वैन नॉस्ट्रैंड रेनहोल्ड (1971) | ||
* [[Edsger W. Dijkstra]], | * [[Edsger W. Dijkstra|एड्सगर डब्ल्यू डिज्क्स्ट्रा]], प्रोग्रामिंग का एक अनुशासन, प्रेंटिस-हॉल (1976) | ||
* | * ओ.-जे. डाहल, [[Edsger W. Dijkstra|ई.डब्ल्यू.डिज्क्स्ट्रा]], कार। होरे, स्ट्रक्चर्ड प्रोग्रामिंग, अकादमिक प्रेस (1972) | ||
* [[David Gries]], | * [[David Gries|डेविड ग्रिज़]], प्रोग्रामिंग का विज्ञान, स्प्रिंगर-वेरलाग (1981) | ||
* | * | ||
Line 185: | Line 160: | ||
{{Wikibooks|Windows Programming}} | {{Wikibooks|Windows Programming}} | ||
{{Wikiversity|Computer Programming}} | {{Wikiversity|Computer Programming}} | ||
*{{Commons category-inline| | *{{Commons category-inline|कंप्यूटर प्रोग्रामिंग}} | ||
*{{Wikiquote-inline| | *{{Wikiquote-inline|प्रोग्रामिंग}} | ||
<!--Please see this URL before adding external links here: http://meta.wikimedia.org/wiki/When_should_I_link_externally--> | <!--Please see this URL before adding external links here: http://meta.wikimedia.org/wiki/When_should_I_link_externally--> | ||
* {{curlie| | * {{curlie|कंप्यूटर/सॉफ़्टवेयर/सॉफ़्टवेयर इंजीनियरिंग/|सॉफ्टवेयर इंजीनियरिंग}} | ||
{{Computer science}} | {{Computer science}} | ||
{{DEFAULTSORT:Computer Programming}}[[Category:कंप्यूटर प्रोग्रामिंग| ]] | {{DEFAULTSORT:Computer Programming}}[[Category:कंप्यूटर प्रोग्रामिंग| ]] | ||
[[Category: कंप्यूटर|प्रोग्रामिंग]] | [[Category: कंप्यूटर|प्रोग्रामिंग]] |
Revision as of 18:11, 5 October 2023
Part of a series on |
Software development |
---|
कंप्यूटर प्रोग्रामिंग एक विशेष गणना (या अधिक सामान्यतः, एक विशिष्ट कम्प्यूटिंग परिणाम को पूरा करने) की प्रक्रिया है, आमतौर पर एक निष्पादन योग्य कंप्यूटर प्रोग्राम को डिजाइन और निर्माण करके। प्रोग्रामिंग में विश्लेषण, कलन विधि उत्पन्न करना, प्रोफाइलिंग (कंप्यूटर प्रोग्रामिंग) एल्गोरिदम की सटीकता और संसाधन खपत, और एल्गोरिदम के कार्यान्वयन (आमतौर पर एक चुनी हुई प्रोग्रामिंग भाषा में, जिसे आमतौर पर कोडिंग कहा जाता है) जैसे कार्य शामिल हैं।[1][2] प्रोग्राम का सोर्स कोड एक या एक से अधिक भाषाओं में लिखा जाता है जो प्रोग्रामर ्स के लिए समझ में आता है, न कि मशीन कोड , जिसे सीधे सेंट्रल प्रोसेसिंग यूनिट द्वारा निष्पादित किया जाता है। प्रोग्रामिंग का उद्देश्य निर्देशों का एक क्रम खोजना है जो किसी संगणक पर किसी कार्य के प्रदर्शन (जो कि एक ऑपरेटिंग सिस्टम जितना जटिल हो सकता है) को स्वचालित करेगा, अक्सर किसी समस्या को हल करने के लिए। इस प्रकार कुशल प्रोग्रामिंग को आमतौर पर कई अलग-अलग विषयों में विशेषज्ञता की आवश्यकता होती है, जिसमें [[ डोमेन ([[ सॉफ्टवेयर अभियांत्रिकी ]]) ]], विशेष एल्गोरिदम और औपचारिक तर्क का ज्ञान शामिल है।
प्रोग्रामिंग के साथ और संबंधित कार्यों में सॉफ्टवेयर परीक्षण, डिबगिंग , स्रोत कोड रखरखाव, स्वचालन बनाएँ का कार्यान्वयन, और व्युत्पन्न आर्टिफैक्ट (सॉफ़्टवेयर विकास) का प्रबंधन, जैसे कंप्यूटर प्रोग्राम का मशीन कोड शामिल है। इन्हें प्रोग्रामिंग प्रक्रिया का हिस्सा माना जा सकता है, लेकिन अक्सर सॉफ्टवेयर डेवलपमेंट शब्द का इस्तेमाल इस बड़ी प्रक्रिया के लिए किया जाता है, जिसमें प्रोग्रामिंग, कार्यान्वयन या कोड के वास्तविक लेखन के लिए आरक्षित कोडिंग शब्द होता है। सॉफ्टवेयर इंजीनियरिंग सॉफ्टवेयर विकास प्रथाओं के साथ इंजीनियरिंग तकनीकों को जोड़ती है। रिवर्स इंजीनियरिंग एक संबंधित प्रक्रिया है जिसका उपयोग डिजाइनरों, विश्लेषकों और प्रोग्रामर द्वारा समझने और फिर से बनाने / फिर से लागू करने के लिए किया जाता है।[3]
इतिहास
कार्यक्रम (मशीन) सदियों से अस्तित्व में है। 9वीं शताब्दी की शुरुआत में, फ़ारसी बानू मूसा भाइयों द्वारा एक प्रोग्राम योग्य संगीत अनुक्रमक का आविष्कार किया गया था, जिन्होंने सरल उपकरणों की पुस्तक में एक स्वचालित यांत्रिक बांसुरी वादक का वर्णन किया था।[4][5] 1206 में, अरब इंजीनियर अल जजारी ने एक प्रोग्राम करने योग्य ड्रम मशीन का आविष्कार किया, जहां खूंटे और सांचा के माध्यम से विभिन्न ताल और ड्रम पैटर्न को चलाने के लिए एक संगीत यांत्रिक आटोमैटिक मशीन बनाया जा सकता है।[6][7] 1801 में, जैक्वार्ड करघा कार्यक्रम को बदलकर पूरी तरह से अलग बुनाई का उत्पादन कर सकता था - कार्ड स्टॉक कार्डों की एक श्रृंखला जिसमें छेद किए गए थे।
कोड ब्रेकिंग एल्गोरिदम भी सदियों से मौजूद हैं। 9वीं शताब्दी में, मध्ययुगीन इस्लाम कैनेडियन में गणित ने क्रिप्टोग्राफिक संदेशों को डिक्रिप्ट करने पर एक पांडुलिपि में एन्क्रिप्टेड कोड को समझने के लिए एक क्रिप्टोग्राफ़िक एल्गोरिदम का वर्णन किया। उन्होंने आवृत्ति विश्लेषण द्वारा क्रिप्ट विश्लेषण का पहला विवरण दिया, जो सबसे पुराना कोड-ब्रेकिंग एल्गोरिथम था।[8] पहला कंप्यूटर प्रोग्राम आम तौर पर 1843 का है, जब गणितज्ञ एडा लवलेस ने बर्नौली संख्या ओं के अनुक्रम की गणना करने के लिए एक एल्गोरिदम प्रकाशित किया, जिसका उद्देश्य चार्ल्स बैबेज के विश्लेषणात्मक इंजन द्वारा किया जाना था।[9]
1880 के दशक में हरमन होलेरिथ ने मशीन-पठनीय रूप में डेटा संग्रहीत करने की अवधारणा का आविष्कार किया।[10] बाद में उनके 1906 टाइप I टेबुलेटर में एक प्लगबोर्ड (प्लग बोर्ड ) जोड़ा गया, जिससे इसे विभिन्न नौकरियों के लिए प्रोग्राम किया जा सकता था, और 1940 के दशक के अंत तक, यूनिट रिकॉर्ड उपकरण जैसे कि IBM 602 और IBM 604 को इसी तरह से कंट्रोल पैनल द्वारा प्रोग्राम किया गया था। , जैसा कि पहले इलेक्ट्रॉनिक कंप्यूटर थे। हालाँकि, 1949 में पेश किए गए संग्रहीत-प्रोग्राम कंप्यूटर की अवधारणा के साथ, प्रोग्राम और डेटा दोनों को स्मृति में उसी तरह से स्टोर और हेरफेर किया गया था।[11]
मशीन की भाषा
मशीन कोड प्रारंभिक कार्यक्रमों की भाषा थी, जिसे विशेष मशीन के निर्देश सेट में लिखा जाता था, अक्सर बाइनरी अंक प्रणाली संकेतन में। असेंबली भाषाएं जल्द ही विकसित की गईं कि प्रोग्रामर को प्रत्येक ऑपरेशन कोड के लिए संक्षिप्त नाम और पते निर्दिष्ट करने के लिए सार्थक नामों के साथ एक टेक्स्ट प्रारूप (जैसे, ADD X, TOTAL) में निर्देश निर्दिष्ट करने दें। हालाँकि, क्योंकि एक असेंबली भाषा एक मशीनी भाषा के लिए एक अलग संकेतन से थोड़ी अधिक है, निर्देश सेट आर्किटेक्चर की तुलना वाली दो मशीनों में भी अलग-अलग असेंबली भाषाएँ होती हैं।
संकलक भाषाएं
उच्च-स्तरीय भाषाओं ने प्रोग्राम को विकसित करने की प्रक्रिया को सरल और अधिक समझने योग्य, और अंतर्निहित संगणक धातु सामग्री से कम बाध्य किया। पहला कंपाइलर संबंधित टूल, ए-0 सिस्टम , 1952 में विकसित किया गया था[12] ग्रेस हूपर द्वारा, जिन्होंने 'कंपाइलर' शब्द भी गढ़ा।[13][14] फोरट्रानी , पहली व्यापक रूप से इस्तेमाल की जाने वाली उच्च-स्तरीय भाषा जिसका कार्यात्मक कार्यान्वयन है, 1957 में सामने आया,[15] और कई अन्य भाषाएँ जल्द ही विकसित हुईं- विशेष रूप से, COBOL का उद्देश्य व्यावसायिक डेटा प्रोसेसिंग और कंप्यूटर अनुसंधान के लिए Lisp (प्रोग्रामिंग भाषा) है।
ये संकलित भाषाएं प्रोग्रामर को ऐसे प्रोग्राम लिखने की अनुमति देती हैं जो वाक्यात्मक रूप से समृद्ध हैं, और अमूर्त (कंप्यूटर विज्ञान) कोड के लिए अधिक सक्षम हैं, जिससे संकलन घोषणाओं और अनुमानों के माध्यम से अलग-अलग मशीन निर्देश सेटों को लक्षित करना आसान हो जाता है। प्रोग्रामिंग को आसान बनाने के लिए कंपाइलर्स ने कंप्यूटर की शक्ति का उपयोग किया[15]प्रोग्रामर्स को इन्फिक्स नोटेशन का उपयोग करके फॉर्मूला दर्ज करके गणना निर्दिष्ट करने की अनुमति देकर।
स्रोत कोड प्रविष्टि
प्रोग्राम ज्यादातर पंच कार्ड या कागज का टेप का उपयोग करके दर्ज किए गए थे। 1960 के दशक के अंत तक, डेटा स्टोरेज डिवाइस और कंप्यूटर टर्मिनल इतने सस्ते हो गए थे कि सीधे कंप्यूटर में टाइप करके प्रोग्राम बनाए जा सकते थे। पाठ संपादक ों को भी विकसित किया गया था जो पंच कार्ड सॉर्टर की तुलना में परिवर्तन और सुधार को अधिक आसानी से करने की अनुमति देते थे।
आधुनिक प्रोग्रामिंग
गुणवत्ता की आवश्यकताएं
विकास का दृष्टिकोण जो भी हो, अंतिम कार्यक्रम को कुछ मूलभूत गुणों को पूरा करना चाहिए। निम्नलिखित गुण सबसे महत्वपूर्ण में से हैं:[16]
- विश्वसनीयता इंजीनियरिंग#सॉफ्टवेयर विश्वसनीयता: किसी प्रोग्राम के परिणाम कितनी बार सही होते हैं। यह एल्गोरिदम की वैचारिक शुद्धता और प्रोग्रामिंग गलतियों को कम करने पर निर्भर करता है, जैसे संसाधन प्रबंधन में गलतियाँ (जैसे, बफ़र अधिकता और दौड़ की स्थिति ) और तर्क त्रुटियां (जैसे कि शून्य से विभाजन या ऑफ-बाय-वन त्रुटियां)।
- मजबूती (कंप्यूटर विज्ञान) : त्रुटियों के कारण एक प्रोग्राम कितनी अच्छी तरह समस्याओं का अनुमान लगाता है (बग नहीं)। इसमें गलत, अनुपयुक्त या भ्रष्ट डेटा, मेमोरी, ऑपरेटिंग सिस्टम सेवाओं और नेटवर्क कनेक्शन जैसे आवश्यक संसाधनों की अनुपलब्धता, उपयोगकर्ता त्रुटि, और अप्रत्याशित पावर आउटेज जैसी स्थितियां शामिल हैं।
- प्रयोज्य ता: एक कार्यक्रम का श्रमदक्षता शास्त्र : वह आसानी से जिसके साथ कोई व्यक्ति अपने इच्छित उद्देश्य के लिए या कुछ मामलों में अप्रत्याशित उद्देश्यों के लिए भी कार्यक्रम का उपयोग कर सकता है। इस तरह के मुद्दे अन्य मुद्दों की परवाह किए बिना इसकी सफलता को बना या बिगाड़ सकते हैं। इसमें टेक्स्टुअल, ग्राफिकल और कभी-कभी हार्डवेयर तत्वों की एक विस्तृत श्रृंखला शामिल होती है जो प्रोग्राम के यूजर इंटरफेस की स्पष्टता, सहजता, सामंजस्य और पूर्णता में सुधार करती है।
- सॉफ्टवेयर पोर्टेबिलिटी : कंप्यूटर हार्डवेयर और ऑपरेटिंग सिस्टम प्लेटफॉर्म की वह रेंज जिस पर प्रोग्राम के सोर्स कोड को संकलित /दुभाषिया (कंप्यूटिंग) और चलाया जा सकता है। यह विभिन्न प्लेटफार्मों द्वारा प्रदान की जाने वाली प्रोग्रामिंग सुविधाओं में अंतर पर निर्भर करता है, जिसमें हार्डवेयर और ऑपरेटिंग सिस्टम संसाधन, हार्डवेयर और ऑपरेटिंग सिस्टम का अपेक्षित व्यवहार और स्रोत कोड की भाषा के लिए प्लेटफॉर्म-विशिष्ट कंपाइलर्स (और कभी-कभी लाइब्रेरी) की उपलब्धता शामिल है।
- रखरखाव: सुधार करने या अनुकूलित करने, सॉफ्टवेयर बग और भेद्यता (कंप्यूटिंग) को ठीक करने या इसे नए वातावरण में अनुकूलित करने के लिए किसी प्रोग्राम को उसके वर्तमान या भविष्य के डेवलपर्स द्वारा आसानी से संशोधित किया जा सकता है। अच्छे आचरण[17] प्रारंभिक विकास के दौरान इस संबंध में फर्क करते हैं। यह गुण सीधे अंतिम उपयोगकर्ता के लिए स्पष्ट नहीं हो सकता है, लेकिन यह दीर्घकालिक रूप से किसी कार्यक्रम के भाग्य को महत्वपूर्ण रूप से प्रभावित कर सकता है।
- एल्गोरिदमिक दक्षता/प्रदर्शन इंजीनियरिंग : एक प्रोग्राम द्वारा खपत किए जाने वाले सिस्टम संसाधनों का माप (प्रोसेसर समय, मेमोरी स्पेस, डिस्क जैसे धीमे उपकरण, नेटवर्क बैंडविड्थ और कुछ हद तक यहां तक कि उपयोगकर्ता इंटरैक्शन): कम, बेहतर। इसमें संसाधनों का सावधानीपूर्वक प्रबंधन भी शामिल है, उदाहरण के लिए अस्थायी फ़ाइल ों को साफ करना और स्मृति रिसाव को समाप्त करना। यह अक्सर एक चुनी हुई प्रोग्रामिंग भाषा की छाया में चर्चा की जाती है। हालांकि भाषा निश्चित रूप से प्रदर्शन को प्रभावित करती है, यहां तक कि धीमी भाषाएं, जैसे कि पायथन (प्रोग्रामिंग भाषा) , मानवीय दृष्टिकोण से कार्यक्रमों को तुरंत निष्पादित कर सकती हैं। गति, संसाधन उपयोग और प्रदर्शन उन प्रोग्रामों के लिए महत्वपूर्ण हैं जो सिस्टम की अड़चन (सॉफ्टवेयर) हैं, लेकिन प्रोग्रामर समय का कुशल उपयोग भी महत्वपूर्ण है और लागत से संबंधित है: अधिक हार्डवेयर सस्ता हो सकता है।
स्रोत कोड की पठनीयता
कंप्यूटर प्रोग्रामिंग में, पठनीयता से तात्पर्य उस सहजता से है जिसके साथ एक मानव पाठक स्रोत कोड के उद्देश्य, नियंत्रण प्रवाह और संचालन को समझ सकता है। यह पोर्टेबिलिटी, उपयोगिता और सबसे महत्वपूर्ण रखरखाव सहित उपरोक्त गुणवत्ता के पहलुओं को प्रभावित करता है।
पठनीयता महत्वपूर्ण है क्योंकि प्रोग्रामर अपना अधिकांश समय नए स्रोत कोड को लिखने के बजाय पढ़ने, समझने, पुन: उपयोग करने और मौजूदा स्रोत कोड को संशोधित करने में व्यतीत करते हैं। अपठनीय कोड अक्सर बग, अक्षमता और कोड दोहराव की ओर ले जाता है। एक अध्ययन में पाया गया कि कुछ सरल पठनीयता परिवर्तनों ने कोड को छोटा बना दिया और इसे समझने के लिए समय को काफी कम कर दिया।[18] एक सुसंगत प्रोग्रामिंग शैली के बाद अक्सर पठनीयता में मदद मिलती है। हालाँकि, पठनीयता केवल प्रोग्रामिंग शैली से अधिक है। कोड को कुशलतापूर्वक संकलित और निष्पादित करने के लिए कंप्यूटर की क्षमता के साथ बहुत कम या कुछ भी नहीं होने वाले कई कारक, पठनीयता में योगदान करते हैं।[19] इनमें से कुछ कारकों में शामिल हैं:
- विभिन्न इंडेंट स्टाइल (व्हाट्सएप)
- टिप्पणी (कंप्यूटर प्रोग्रामिंग)
- अपघटन (कंप्यूटर विज्ञान)
- वस्तुओं के लिए नामकरण परंपराएं (प्रोग्रामिंग) (जैसे चर, वर्ग, कार्य, प्रक्रियाएं, आदि)
इसके प्रस्तुतिकरण और सामग्री पहलुओं को अलग करना (जैसे इंडेंट, लाइन ब्रेक, रंग हाइलाइटिंग, और इसी तरह) अक्सर स्रोत कोड संपादक द्वारा नियंत्रित किया जाता है, लेकिन सामग्री पहलू प्रोग्रामर की प्रतिभा और कौशल को दर्शाते हैं।
कोड संरचना और प्रदर्शन के लिए गैर-पारंपरिक दृष्टिकोण अपनाकर पठनीयता संबंधी चिंताओं को हल करने के इरादे से विभिन्न दृश्य प्रोग्रामिंग भाषा ओं को भी विकसित किया गया है। एकीकृत विकास वातावरण (I.D.Es) का उद्देश्य ऐसी सभी सहायता को एकीकृत करना है। कोड रिफैक्टरिंग जैसी तकनीकें पठनीयता को बढ़ा सकती हैं।
एल्गोरिदमिक जटिलता
कंप्यूटर प्रोग्रामिंग का अकादमिक क्षेत्र और इंजीनियरिंग अभ्यास दोनों ही मुख्य रूप से किसी दिए गए वर्ग की समस्याओं के लिए सबसे कुशल एल्गोरिदम की खोज और कार्यान्वयन से संबंधित हैं। इस उद्देश्य के लिए, एल्गोरिदम को तथाकथित बिग ओ नोटेशन का उपयोग करके ऑर्डर में वर्गीकृत किया जाता है, जो इनपुट के आकार के संदर्भ में संसाधन उपयोग, जैसे निष्पादन समय या मेमोरी खपत को व्यक्त करता है। विशेषज्ञ प्रोग्रामर विभिन्न प्रकार के अच्छी तरह से स्थापित एल्गोरिदम और उनकी संबंधित जटिलताओं से परिचित हैं और इस ज्ञान का उपयोग एल्गोरिदम चुनने के लिए करते हैं जो परिस्थितियों के लिए सबसे उपयुक्त हैं।
शतरंज एल्गोरिदम एक उदाहरण के रूप में
शतरंज खेलने के लिए कंप्यूटर प्रोग्रामिंग करना 1950 का एक पेपर था जिसने एक मिनीमैक्स एल्गोरिथम का मूल्यांकन किया जो एल्गोरिथम जटिलता के इतिहास का हिस्सा है; आईबीएम के डीप ब्लू (शतरंज कंप्यूटर) पर एक पाठ्यक्रम स्टैनफोर्ड विश्वविद्यालय में कंप्यूटर विज्ञान पाठ्यक्रम का हिस्सा है।[20]
तरीके
अधिकांश औपचारिक सॉफ्टवेयर विकास प्रक्रियाओं में पहला कदम आवश्यकताओं का विश्लेषण है, इसके बाद मूल्य मॉडलिंग, कार्यान्वयन और विफलता उन्मूलन (डीबगिंग) निर्धारित करने के लिए परीक्षण किया जाता है। उन कार्यों में से प्रत्येक के लिए कई अलग-अलग दृष्टिकोण मौजूद हैं। आवश्यकताओं के विश्लेषण के लिए लोकप्रिय एक दृष्टिकोण है केस विश्लेषण का उपयोग करें। कई प्रोग्रामर चुस्त सॉफ्टवेयर विकास के रूपों का उपयोग करते हैं जहां औपचारिक सॉफ्टवेयर विकास के विभिन्न चरणों को एक साथ छोटे चक्रों में एकीकृत किया जाता है जिसमें वर्षों के बजाय कुछ सप्ताह लगते हैं। सॉफ्टवेयर विकास प्रक्रिया के कई दृष्टिकोण हैं।
लोकप्रिय मॉडलिंग तकनीकों में ऑब्जेक्ट-ओरिएंटेड एनालिसिस एंड डिज़ाइन (OOAD ) और मॉडल-संचालित वास्तुकला (मॉडल-ड्रिवेन आर्किटेक्चर) शामिल हैं। एकीकृत मॉडलिंग भाषा (यूनिफाइड मॉडलिंग लैंग्वेज) ओओएडी और एमडीए दोनों के लिए इस्तेमाल किया जाने वाला एक नोटेशन है।
डेटाबेस डिज़ाइन के लिए उपयोग की जाने वाली एक समान तकनीक इकाई-संबंध मॉडल (इकाई-रिलेशनशिप मॉडल) है।
कार्यान्वयन तकनीकों में अनिवार्य भाषाएं (वस्तु उन्मुख कार्यकर्म | ऑब्जेक्ट-ओरिएंटेड या प्रक्रियात्मक प्रोग्रामिंग ), कार्यात्मक प्रोग्रामिंग और तर्क प्रोग्रामिंग शामिल हैं।
भाषा के उपयोग को मापना
यह निर्धारित करना बहुत मुश्किल है कि सबसे लोकप्रिय आधुनिक प्रोग्रामिंग भाषाएं कौन सी हैं। प्रोग्रामिंग भाषा की लोकप्रियता को मापने के तरीकों में शामिल हैं: भाषा का उल्लेख करने वाले नौकरी विज्ञापनों की संख्या की गणना करना,[21] बेची गई पुस्तकों की संख्या और भाषा सिखाने वाले पाठ्यक्रम (यह नई भाषाओं के महत्व को अधिक महत्व देता है), और भाषा में लिखी गई कोड की मौजूदा पंक्तियों की संख्या का अनुमान (यह COBOL जैसी व्यावसायिक भाषाओं के उपयोगकर्ताओं की संख्या को कम करके आंकता है)।
कुछ भाषाएँ विशेष प्रकार के अनुप्रयोगों के लिए बहुत लोकप्रिय हैं, जबकि कुछ भाषाएँ नियमित रूप से कई अलग-अलग प्रकार के अनुप्रयोगों को लिखने के लिए उपयोग की जाती हैं। उदाहरण के लिए, कॉर्पोरेट डेटा केंद्रों में COBOL अभी भी मजबूत है[22] अक्सर बड़े मेनफ़्रेम कंप्यूटर पर, इंजीनियरिंग अनुप्रयोगों में फोरट्रान , वर्ल्ड वाइड वेब विकास में स्क्रिप्टिंग भाषाएं, और उपकरणों के नियंत्रण के लिए सॉफ्टवेयर में सी (प्रोग्रामिंग भाषा) । कई एप्लिकेशन अपने निर्माण और उपयोग में कई भाषाओं के मिश्रण का उपयोग करते हैं। नई भाषाओं को आम तौर पर नई कार्यक्षमता के साथ एक पूर्व भाषा के सिंटैक्स के आसपास डिज़ाइन किया गया है, (उदाहरण के लिए C++ , C में ऑब्जेक्ट-ओरिएंटेशन जोड़ता है, और Java (प्रोग्रामिंग भाषा) C++ में मेमोरी मैनेजमेंट और बाईटकोड जोड़ता है, लेकिन परिणामस्वरूप, दक्षता खो देता है और निम्न-स्तरीय हेरफेर की क्षमता)।
डिबगिंग
सॉफ्टवेयर विकास प्रक्रिया में डिबगिंग एक बहुत ही महत्वपूर्ण कार्य है क्योंकि किसी प्रोग्राम में दोष होने के कारण इसके उपयोगकर्ताओं के लिए महत्वपूर्ण परिणाम हो सकते हैं। कुछ भाषाएँ कुछ प्रकार के दोषों के लिए अधिक प्रवण होती हैं क्योंकि उनके विनिर्देशन के लिए अन्य भाषाओं की तरह अधिक जाँच करने के लिए संकलक की आवश्यकता नहीं होती है। स्थिर कोड विश्लेषण उपकरण का उपयोग कुछ संभावित समस्याओं का पता लगाने में मदद कर सकता है। आम तौर पर डिबगिंग में पहला कदम समस्या को पुन: उत्पन्न करने का प्रयास करना है। यह एक गैर-तुच्छ कार्य हो सकता है, उदाहरण के लिए समानांतर प्रक्रियाओं या कुछ असामान्य सॉफ़्टवेयर बग के साथ। साथ ही, विशिष्ट उपयोगकर्ता परिवेश और उपयोग इतिहास समस्या को पुन: उत्पन्न करना मुश्किल बना सकता है।
बग के पुनरुत्पादन के बाद, प्रोग्राम के इनपुट को डिबग करना आसान बनाने के लिए सरल बनाने की आवश्यकता हो सकती है। उदाहरण के लिए, जब एक कंपाइलर में एक बग कुछ बड़े स्रोत फ़ाइल को पदच्छेद करते समय इसे क्रैश कर सकता है, तो परीक्षण केस का सरलीकरण जिसके परिणामस्वरूप मूल स्रोत फ़ाइल से केवल कुछ पंक्तियां होती हैं, वही क्रैश को पुन: उत्पन्न करने के लिए पर्याप्त हो सकती है। परीक्षण-और-त्रुटि/विभाजन-और-जीत की आवश्यकता है: प्रोग्रामर मूल परीक्षण मामले के कुछ हिस्सों को हटाने का प्रयास करेगा और जांच करेगा कि समस्या अभी भी मौजूद है या नहीं। जीयूआई में समस्या को डीबग करते समय, प्रोग्रामर मूल समस्या विवरण से कुछ उपयोगकर्ता इंटरैक्शन को छोड़ने का प्रयास कर सकता है और जांच सकता है कि बग प्रकट होने के लिए शेष क्रियाएं पर्याप्त हैं या नहीं। स्क्रिप्टिंग और ब्रेकपाइंट िंग भी इसी प्रक्रिया का हिस्सा है।
डिबगिंग अक्सर एकीकृत विकास वातावरण के साथ किया जाता है। GDB जैसे स्टैंडअलोन डिबगर्स का भी उपयोग किया जाता है, और ये अक्सर कम दृश्य वातावरण प्रदान करते हैं, आमतौर पर कमांड लाइन का उपयोग करते हुए। कुछ पाठ संपादक जैसे Emacs GDB को उनके माध्यम से एक दृश्य वातावरण प्रदान करने की अनुमति देते हैं।
प्रोग्रामिंग भाषाएं
विभिन्न प्रोग्रामिंग भाषाएं प्रोग्रामिंग की विभिन्न शैलियों का समर्थन करती हैं (जिन्हें प्रोग्रामिंग प्रतिमान कहा जाता है)। उपयोग की जाने वाली भाषा का चुनाव कई बातों पर निर्भर करता है, जैसे कंपनी की नीति, कार्य के लिए उपयुक्तता, तीसरे पक्ष के पैकेज की उपलब्धता, या व्यक्तिगत वरीयता। आदर्श रूप से, कार्य के लिए सबसे उपयुक्त प्रोग्रामिंग भाषा का चयन किया जाएगा। इस आदर्श से ट्रेड-ऑफ में पर्याप्त प्रोग्रामर ढूंढना शामिल है जो एक टीम बनाने के लिए भाषा जानते हैं, उस भाषा के लिए कंपाइलर्स की उपलब्धता, और दक्षता जिसके साथ किसी भाषा में लिखे गए प्रोग्राम निष्पादित होते हैं। भाषाएँ निम्न-स्तर से उच्च-स्तर तक एक अनुमानित स्पेक्ट्रम बनाती हैं; निम्न-स्तरीय भाषाएँ आमतौर पर अधिक मशीन-उन्मुख होती हैं और निष्पादित करने में तेज़ होती हैं, जबकि उच्च-स्तरीय भाषाएँ अधिक सारगर्भित और उपयोग में आसान होती हैं लेकिन कम तेज़ी से निष्पादित होती हैं। आमतौर पर निम्न-स्तरीय भाषाओं की तुलना में उच्च-स्तरीय भाषाओं में कोड करना आसान होता है। सॉफ्टवेयर विकास के लिए प्रोग्रामिंग भाषाएं आवश्यक हैं। वे सबसे सरल अनुप्रयोगों से लेकर सबसे परिष्कृत तक, सभी सॉफ़्टवेयर के लिए बिल्डिंग ब्लॉक हैं।
एलन डाउनी ने अपनी पुस्तक हाउ टू थिंक लाइक ए कंप्यूटर साइंटिस्ट में लिखा है:
- विवरण अलग-अलग भाषाओं में अलग-अलग दिखते हैं, लेकिन कुछ बुनियादी निर्देश लगभग हर भाषा में दिखाई देते हैं:
- इनपुट: कीबोर्ड, फ़ाइल या किसी अन्य डिवाइस से डेटा इकट्ठा करें।
- आउटपुट: स्क्रीन पर डेटा प्रदर्शित करें या किसी फ़ाइल या अन्य डिवाइस पर डेटा भेजें।
- अंकगणित: जोड़ और गुणा जैसे बुनियादी अंकगणितीय संचालन करें।
- सशर्त निष्पादन: कुछ शर्तों की जाँच करें और कथनों के उचित क्रम को निष्पादित करें।
- पुनरावृत्ति: कुछ क्रिया को बार-बार करें, आमतौर पर कुछ भिन्नता के साथ।
कई कंप्यूटर भाषाएं साझा पुस्तकालय द्वारा प्रदान किए गए कार्यों को कॉल करने के लिए एक तंत्र प्रदान करती हैं। बशर्ते पुस्तकालय में कार्य उपयुक्त रन-टाइम सम्मेलनों (उदाहरण के लिए, तर्क पारित करने की विधि (कंप्यूटर विज्ञान)) का पालन करें, तो इन कार्यों को किसी अन्य भाषा में लिखा जा सकता है।
प्रोग्रामर
कंप्यूटर प्रोग्रामर वे होते हैं जो कंप्यूटर सॉफ्टवेयर लिखते हैं। उनकी नौकरियों में आमतौर पर शामिल हैं:
- प्रोटोटाइपिंग
- कोडिंग
- डिबगिंग
- दस्तावेज़ीकरण
- प्रणाली एकीकरण
- सॉफ्टवेयर की रखरखाव
- आवश्यकताओं के विश्लेषण
- सॉफ़्टवेयर वास्तुशिल्प
- सॉफ़्टवेयर परीक्षण
- विनिर्देश
यद्यपि मीडिया में प्रोग्रामिंग को कुछ हद तक गणितीय विषय के रूप में प्रस्तुत किया गया है, कुछ शोध से पता चलता है कि अच्छे प्रोग्रामर के पास प्राकृतिक मानव भाषाओं में मजबूत कौशल है, और यह कि कोड सीखना एक विदेशी भाषा सीखने के समान है।[24]
यह भी देखें
संदर्भ
- ↑ Bebbington, Shaun (2014). "What is coding". Tumblr. Archived from the original on 2020-04-29. Retrieved 2014-03-03.
- ↑ Bebbington, Shaun (2014). "What is programming". Tumblr. Archived from the original on 2020-04-29. Retrieved 2014-03-03.
- ↑ Eliam, Eldad (2005). Reversing: Secrets of Reverse Engineering. Wiley. p. 3. ISBN 978-0-7645-7481-8.
- ↑ Koetsier, Teun (2001), "On the prehistory of programmable machines: musical automata, looms, calculators", Mechanism and Machine Theory, Elsevier, 36 (5): 589–603, doi:10.1016/S0094-114X(01)00005-2.
- ↑ Kapur, Ajay; Carnegie, Dale; Murphy, Jim; Long, Jason (2017). "Loudspeakers Optional: A history of non-loudspeaker-based electroacoustic music". Organised Sound. Cambridge University Press. 22 (2): 195–205. doi:10.1017/S1355771817000103. ISSN 1355-7718.
- ↑ Fowler, Charles B. (October 1967). "The Museum of Music: A History of Mechanical Instruments". Music Educators Journal. 54 (2): 45–49. doi:10.2307/3391092. JSTOR 3391092. S2CID 190524140.
- ↑ Noel Sharkey (2007), A 13th Century Programmable Robot, University of Sheffield
- ↑ Dooley, John F. (2013). A Brief History of Cryptology and Cryptographic Algorithms. Springer Science & Business Media. pp. 12–3. ISBN 9783319016283.
- ↑ Fuegi, J.; Francis, J. (2003). "Lovelace & Babbage and the Creation of the 1843 'notes'". IEEE Annals of the History of Computing. 25 (4): 16. doi:10.1109/MAHC.2003.1253887.
- ↑ da Cruz, Frank (2020-03-10). "Columbia University Computing History – Herman Hollerith". Columbia University. Columbia.edu. Archived from the original on 2020-04-29. Retrieved 2010-04-25.
- ↑ "Memory & Storage | Timeline of Computer History | Computer History Museum". www.computerhistory.org. Retrieved 3 June 2021.
- ↑ Ridgway, Richard (1952). "Compiling routines". Proceeding ACM '52 Proceedings of the 1952 ACM National Meeting (Toronto). ACM '52: 1–5. doi:10.1145/800259.808980. ISBN 9781450379250. S2CID 14878552.
- ↑ Maurice V. Wilkes. 1968. Computers Then and Now. Journal of the Association for Computing Machinery, 15(1):1–7, January. p. 3 (a comment in brackets added by editor), "(I do not think that the term compiler was then [1953] in general use, although it had in fact been introduced by Grace Hopper.)"
- ↑ [1] The World's First COBOL Compilers Archived 13 October 2011 at the Wayback Machine
- ↑ 15.0 15.1 Bergstein, Brian (2007-03-20). "Fortran creator John Backus dies". NBC News. Archived from the original on 2020-04-29. Retrieved 2010-04-25.
- ↑ "NIST To Develop Cloud Roadmap". InformationWeek. November 5, 2010.
Computing initiative seeks to remove barriers to cloud adoption in security, interoperability, portability and reliability.
- ↑ "Programming 101: Tips to become a good programmer - Wisdom Geek". Wisdom Geek (in English). May 19, 2016. Retrieved 2016-05-23.
- ↑ Elshoff, James L.; Marcotty, Michael (1982). "Improving computer program readability to aid modification". Communications of the ACM. 25 (8): 512–521. doi:10.1145/358589.358596. S2CID 30026641.
- ↑ Multiple (wiki). "Readability". Docforge. Archived from the original on 2020-04-29. Retrieved 2010-01-30.
- ↑ Piech, Chris. "Deep Blue".
In 1950, Claude Shannon published ... "Programming a Computer for Playing Chess", ... "minimax" algorithm
- ↑ Enticknap, Nicholas (11 September 2007). "SSL/Computer Weekly IT salary survey: finance boom drives IT job growth".
- ↑ Mitchell, Robert (2012-05-21). "The Cobol Brain Drain". Computer World. Retrieved 9 May 2015.
- ↑ "Photograph courtesy Naval Surface Warfare Center, Dahlgren, Virginia, from National Geographic Sept. 1947". July 15, 2020.
- ↑ Prat, Chantel S.; Madhyastha, Tara M.; Mottarella, Malayka J.; Kuo, Chu-Hsuan (2020-03-02). "Relating Natural Language Aptitude to Individual Differences in Learning Programming Languages". Scientific Reports (in English). 10 (1): 3817. Bibcode:2020NatSR..10.3817P. doi:10.1038/s41598-020-60661-8. ISSN 2045-2322. PMC 7051953. PMID 32123206.
स्रोत
- Ceruzzi, Paul E. (1998). History of Computing. Cambridge, Massachusetts: MIT Press. ISBN 9780262032551 – via EBSCOhost.
- Evans, Claire L. (2018). Broad Band: The Untold Story of the Women Who Made the Internet. New York: Portfolio/Penguin. ISBN 9780735211759.
- Gürer, Denise (1995). "Pioneering Women in Computer Science" (PDF). Communications of the ACM. 38 (1): 45–54. doi:10.1145/204865.204875. S2CID 6626310.
- Smith, Erika E. (2013). "Recognizing a Collective Inheritance through the History of Women in Computing". CLCWeb: Comparative Literature & Culture: A WWWeb Journal. 15 (1): 1–9 – via EBSCOhost.
अग्रिम पठन
- ए.के. हार्टमैन, कंप्यूटर सिमुलेशन के लिए प्रैक्टिकल गाइड, सिंगापुर: विश्व वैज्ञानिक (2009)
- ए. हंट, डी. थॉमस, और डब्ल्यू. कनिंघम, द प्रैग्मैटिक प्रोग्रामर। जर्नीमैन से मास्टर तक, एम्स्टर्डम: एडिसन-वेस्ले लॉन्गमैन (1999)
- ब्रायन डब्ल्यू कर्निघन, द प्रैक्टिस ऑफ़ प्रोग्रामिंग, पियर्सन (1999)
- वेनबर्ग, जेराल्ड एम., कंप्यूटर प्रोग्रामिंग का मनोविज्ञान, न्यूयॉर्क: वैन नॉस्ट्रैंड रेनहोल्ड (1971)
- एड्सगर डब्ल्यू डिज्क्स्ट्रा, प्रोग्रामिंग का एक अनुशासन, प्रेंटिस-हॉल (1976)
- ओ.-जे. डाहल, ई.डब्ल्यू.डिज्क्स्ट्रा, कार। होरे, स्ट्रक्चर्ड प्रोग्रामिंग, अकादमिक प्रेस (1972)
- डेविड ग्रिज़, प्रोग्रामिंग का विज्ञान, स्प्रिंगर-वेरलाग (1981)
बाहरी संबंध
Library resources about कंप्यूटर प्रोग्रामिंग |
- Media related to कंप्यूटर प्रोग्रामिंग at Wikimedia Commons
- Quotations related to प्रोग्रामिंग at Wikiquote
- इंजीनियरिंग/ सॉफ्टवेयर इंजीनियरिंग at Curlie