कंप्यूटर प्रोग्रामिंग: Difference between revisions

From Vigyanwiki
No edit summary
 
(7 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{Short description|Process to create executable computer programs}}
{{Short description|Process to create executable computer programs}}[[ कंप्यूटर प्रोग्राम |'''कंप्यूटर प्रोग्रामिंग''']] विशेष [[ गणना |गणना]] (या अधिक सामान्यतः, विशिष्ट [[ कम्प्यूटिंग |कम्प्यूटिंग]] परिणाम को पूर्ण करने) की प्रक्रिया होती है, सामान्यतः [[ निष्पादन |निष्पादन]] योग्य कंप्यूटर प्रोग्राम को डिजाइन और निर्माण करके प्रोग्रामिंग में विश्लेषण, [[ कलन विधि |कलन विधि]] उत्पन्न करना, [[ प्रोफाइलिंग (कंप्यूटर प्रोग्रामिंग) |प्रोफाइलिंग (कंप्यूटर प्रोग्रामिंग)]] एल्गोरिदम की त्रुटिहीनता और संसाधन खपत, और एल्गोरिदम के कार्यान्वयन (सामान्यतः चुनी हुई [[ प्रोग्रामिंग भाषा |प्रोग्रामिंग भाषा]] में, जिसे सामान्यतः कोडिंग कहा जाता है) जैसे कार्य सम्मिलित होते हैं।<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> इस प्रकार प्रोग्राम का [[ सोर्स कोड |सोर्स कोड]] या इससे अधिक भाषाओं में लिखा जाता है जो [[ प्रोग्रामर |प्रोग्रामरस]] के लिए समझ में आता है, न कि [[ मशीन कोड |मशीन कोड]], जिसे सीधे [[ सेंट्रल प्रोसेसिंग यूनिट |सेंट्रल प्रोसेसिंग यूनिट]] द्वारा निष्पादित किया जाता है। सामान्यतः प्रोग्रामिंग का उद्देश्य निर्देशों का क्रम खोजना है जो, अधिकांशतः किसी समस्या को हल करने के लिए किसी [[ संगणक |संगणक]] पर किसी कार्य के प्रदर्शन (जो कि [[ ऑपरेटिंग सिस्टम |ऑपरेटिंग प्रणाली]] जितना समष्टि हो सकता है) को स्वचालित करता है। इस प्रकार कुशल प्रोग्रामिंग को सामान्यतः अनेक भिन्न-भिन्न विषयों में विशेषज्ञता की आवश्यकता होती है, जिसमें डोमेन (सॉफ्टवेयर [[ अभियांत्रिकी |अभियांत्रिकी]]), विशेष एल्गोरिदम और औपचारिक [[ तर्क |तर्क]] का ज्ञान सम्मिलित होता है।


{{software development process}}
प्रोग्रामिंग के साथ और संबंधित कार्यों में सॉफ्टवेयर परीक्षण, [[ डिबगिंग |डिबगिंग]], स्रोत कोड रखरखाव, [[ स्वचालन बनाएँ |स्वचालन बनाएँ]] का कार्यान्वयन, और व्युत्पन्न आर्टिफैक्ट (सॉफ़्टवेयर विकास) का प्रबंधन, जैसे कंप्यूटर प्रोग्राम का मशीन कोड सम्मिलित होता है। इन्हें प्रोग्रामिंग प्रक्रिया का भाग माना जा सकता है, किन्तु अधिकांशतः [[ सॉफ्टवेयर डेवलपमेंट |सॉफ्टवेयर डेवलपमेंट]] शब्द का उपयोग इस बड़ी प्रक्रिया के लिए किया जाता है, जिसमें प्रोग्रामिंग, कार्यान्वयन या कोड के वास्तविक लेखन के लिए आरक्षित कोडिंग शब्द होता है। सॉफ्टवेयर इंजीनियरिंग सॉफ्टवेयर विकास प्रथाओं के साथ इंजीनियरिंग विधि ों को जोड़ती है। [[ रिवर्स इंजीनियरिंग |रिवर्स इंजीनियरिंग]] संबंधित प्रक्रिया है जिसका उपयोग डिजाइनरों, विश्लेषकों और प्रोग्रामर द्वारा समझने और फिर से बनाने / फिर से प्रयुक्त करने के लिए किया जाता है।<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>{{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>
=='''इतिहास'''==
=='''इतिहास'''==
[[File:Ada lovelace.jpg|thumb|[[ लवलेस है | '''लवलेस है''']] ''', जिनके नोट्स [[ लुइगी मेनाब्रिया | लुइगी मेनाब्रिया]] के पेपर के अंत में जोड़े गए थे, में [[ विश्लेषणात्मक इंजन | विश्लेषणात्मक इंजन]] द्वारा प्रसंस्करण के लिए डिज़ाइन किया गया पहला एल्गोरिदम सम्मिलित था। उन्हें अधिकांशतः इतिहास की पहली कंप्यूटर प्रोग्रामर के रूप में पहचाना जाता है।''']]
{{See also|कंप्यूटर प्रोग्राम इतिहास|प्रोग्रामर इतिहास|प्रोग्रामिंग भाषाओं का इतिहास}}
{{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 में, [[ जैक्वार्ड करघा |जैक्वार्ड करघा]] कार्यक्रम को परिवर्तित करके पूर्ण प्रकार से भिन्न बुनाई का उत्पादन कर सकता था - [[ कार्ड स्टॉक |कार्ड स्टॉक]] कार्डों की श्रृंखला जिसमें छेद किए गए थे।


[[ कोड ब्रेकिंग ]] एल्गोरिदम भी सदियों से उपस्तिथ हैं। 9वीं शताब्दी में, मध्ययुगीन इस्लाम [[ कैनेडियन ]] में गणित ने [[ क्रिप्टोग्राफिक ]] संदेशों को डिक्रिप्ट करने पर एक पांडुलिपि में एन्क्रिप्टेड कोड को समझने के लिए एक क्रिप्टोग्राफ़िक एल्गोरिदम का वर्णन किया। उन्होंने [[ आवृत्ति विश्लेषण ]] द्वारा [[ क्रिप्ट विश्लेषण ]] का पहला विवरण दिया, जो सबसे पुराना कोड-ब्रेकिंग एल्गोरिथम था।<ref>{{cite book |last1=Dooley |first1=John F. |title=A Brief History of Cryptology and Cryptographic Algorithms |date=2013 |publisher=Springer Science & Business Media |isbn=9783319016283 |pages=12–3}}</ref>
[[ कोड ब्रेकिंग |कोड ब्रेकिंग]] एल्गोरिदम भी सदियों से उपस्तिथ हैं। 9वीं शताब्दी में, मध्ययुगीन इस्लाम [[ कैनेडियन |कैनेडियन]] में गणित ने [[ क्रिप्टोग्राफिक |क्रिप्टोग्राफिक]] संदेशों को डिक्रिप्ट करने पर पांडुलिपि में एन्क्रिप्टेड कोड को समझने के लिए क्रिप्टोग्राफ़िक एल्गोरिदम का वर्णन किया था। उन्होंने [[ आवृत्ति विश्लेषण |आवृत्ति विश्लेषण]] द्वारा [[ क्रिप्ट विश्लेषण |क्रिप्ट विश्लेषण]] का पहला विवरण दिया था, जो सबसे पुराना कोड-ब्रेकिंग एल्गोरिथम था।<ref>{{cite book |last1=Dooley |first1=John F. |title=A Brief History of Cryptology and Cryptographic Algorithms |date=2013 |publisher=Springer Science & Business Media |isbn=9783319016283 |pages=12–3}}</ref>
पहला कंप्यूटर प्रोग्राम सामान्यतः 1843 का है, जब गणितज्ञ एडा लवलेस ने [[ बर्नौली संख्या ]]ओं के अनुक्रम की गणना करने के लिए एक एल्गोरिदम प्रकाशित किया, जिसका उद्देश्य [[ चार्ल्स बैबेज ]] के विश्लेषणात्मक इंजन द्वारा किया जाना था।<ref name="IEEE">{{Cite journal | last1 = Fuegi | first1 = J. | last2 = Francis | first2 = J. | title = Lovelace & Babbage and the Creation of the 1843 'notes' | journal = IEEE Annals of the History of Computing | volume = 25 | issue = 4 | pages = 16 | year = 2003 | doi = 10.1109/MAHC.2003.1253887}}</ref>


[[File:PunchCardDecks.agr.jpg|thumb|डेटा और निर्देश एक बार बाहरी [[ छिद्रित कार्ड ]]ों पर संग्रहीत किए जाते थे, जिन्हें क्रम में रखा जाता था और प्रोग्राम डेक में व्यवस्थित किया जाता था।]]
पहला कंप्यूटर प्रोग्राम सामान्यतः सन्न 1843 का है, जब गणितज्ञ एडा लवलेस ने [[ बर्नौली संख्या |बर्नौली संख्याओं]] के अनुक्रम की गणना करने के लिए एल्गोरिदम प्रकाशित किया था, जिसका उद्देश्य [[ चार्ल्स बैबेज |चार्ल्स बैबेज]] के विश्लेषणात्मक इंजन द्वारा किया जाना था।<ref name="IEEE">{{Cite journal | last1 = Fuegi | first1 = J. | last2 = Francis | first2 = J. | title = Lovelace & Babbage and the Creation of the 1843 'notes' | journal = IEEE Annals of the History of Computing | volume = 25 | issue = 4 | pages = 16 | year = 2003 | doi = 10.1109/MAHC.2003.1253887}}</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>
 
[[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 टाइप टेबुलेटर में प्लगबोर्ड ([[ प्लग बोर्ड |प्लग बोर्ड]]) जोड़ा गया था, जिससे इसे विभिन्न नौकरियों के लिए प्रोग्राम किया जा सकता था, और सन्न 1940 के दशक के अंत तक, [[ यूनिट रिकॉर्ड उपकरण |यूनिट रिकॉर्ड उपकरण]] जैसे कि [[ IBM 602 |आई०बी०एम० 602]] और [[ IBM 604 |आई०बी०एम० 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) में निर्देश निर्दिष्ट करने दें। हालाँकि, क्योंकि एक असेंबली भाषा एक मशीनी भाषा के लिए एक अलग संकेतन से थोड़ी अधिक है, [[ निर्देश सेट आर्किटेक्चर की तुलना ]] वाली दो मशीनों में भी अलग-अलग असेंबली भाषाएँ होती हैं।
मशीन कोड प्रारंभिक कार्यक्रमों की भाषा होती थी, जिसे विशेष मशीन के निर्देश समूह में लिखा जाता था, अधिकांशतः [[ बाइनरी अंक प्रणाली |बाइनरी अंक प्रणाली]] संकेतन में असेंबली भाषाएं जल्द ही विकसित की गईं थी कि प्रोग्रामर को प्रत्येक ऑपरेशन कोड के लिए संक्षिप्त नाम और पते निर्दिष्ट करने के लिए सार्थक नामों के साथ टेक्स्ट प्रारूप (जैसे, एडीडी एक्स, टोटल) में निर्देश निर्दिष्ट करने देंते है। चूँकि, जिससे कि असेंबली भाषा मशीनी भाषा के लिए भिन्न संकेतन से थोड़ी अधिक होती है, [[ निर्देश सेट आर्किटेक्चर की तुलना |निर्देश समूह आर्किटेक्चर की तुलना]] वाली दो मशीनों में भी भिन्न-भिन्न असेंबली भाषाएँ होती हैं।


[[File:IBM402plugboard.Shrigley.wireside.jpg|thumb|[[ आईबीएम 402 लेखा मशीन ]] के लिए वायर्ड प्लगबोर्ड। तार कार्ड रीडर से पल्स स्ट्रीम को काउंटर और अन्य आंतरिक तर्क से और अंततः प्रिंटर से जोड़ते हैं।]]
[[File:IBM402plugboard.Shrigley.wireside.jpg|thumb|[[ आईबीएम 402 लेखा मशीन |आईबीएम 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 (प्रोग्रामिंग भाषा) है।


ये संकलित भाषाएं प्रोग्रामर को ऐसे प्रोग्राम लिखने की अनुमति देती हैं जो वाक्यात्मक रूप से समृद्ध हैं, और [[ अमूर्त (कंप्यूटर विज्ञान) ]] कोड के लिए अधिक सक्षम हैं, जिससे संकलन घोषणाओं और अनुमानों के माध्यम से अलग-अलग मशीन निर्देश सेटों को लक्षित करना आसान हो जाता है। प्रोग्रामिंग को आसान बनाने के लिए कंपाइलर्स ने कंप्यूटर की शक्ति का उपयोग किया<ref name = bergstein/>प्रोग्रामर्स को [[ इन्फिक्स नोटेशन ]] का उपयोग करके फॉर्मूला अंकित करके गणना निर्दिष्ट करने की अनुमति देकर।
पहला कंपाइलर संबंधित टूल, [[ ए-0 सिस्टम |ए-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 |कोबोल]] का उद्देश्य व्यावसायिक डेटा प्रोसेसिंग और कंप्यूटर अनुसंधान के लिए लिप्स (प्रोग्रामिंग भाषा) है।
 
यह संकलित भाषाएं प्रोग्रामर को ऐसे प्रोग्राम लिखने की अनुमति देती हैं जो वाक्यात्मक रूप से समृद्ध हैं, और [[ अमूर्त (कंप्यूटर विज्ञान) |अमूर्त (कंप्यूटर विज्ञान)]] कोड के लिए अधिक सक्षम होती हैं, जिससे संकलन घोषणाओं और अनुमानों के माध्यम से भिन्न-भिन्न मशीन निर्देश समूहों को लक्षित करना सरल हो जाता है। प्रोग्रामिंग को सरल बनाने के लिए कंपाइलर्स ने कंप्यूटर की शक्ति का उपयोग किया जाता है।<ref name="bergstein" /> इस प्रकार प्रोग्रामर्स को [[ इन्फिक्स नोटेशन |इन्फिक्स नोटेशन]] का उपयोग करके सूत्र अंकित करके गणना निर्दिष्ट करने की अनुमति देकर उपयोग किया जाता है।


=== स्रोत कोड प्रविष्टि ===
=== स्रोत कोड प्रविष्टि ===
{{See also|पंच्ड कार्ड युग में कंप्यूटर प्रोग्रामिंग}}
{{See also|पंच्ड कार्ड युग में कंप्यूटर प्रोग्रामिंग}}
प्रोग्राम ज्यादातर पंच कार्ड या [[ कागज का टेप ]] का उपयोग करके अंकित किए गए थे। 1960 के दशक के अंत तक, [[ डेटा स्टोरेज डिवाइस ]] और [[ कंप्यूटर टर्मिनल ]] इतने सस्ते हो गए थे कि सीधे कंप्यूटर में टाइप करके प्रोग्राम बनाए जा सकते थे। [[ पाठ संपादक ]]ों को भी विकसित किया गया था जो [[ पंच कार्ड सॉर्टर ]] की तुलना में परिवर्तन और सुधार को अधिक आसानी से करने की अनुमति देते थे।
प्रोग्राम अधिकतर पंच कार्ड या [[ कागज का टेप |कागज का टेप]] का उपयोग करके अंकित किए गए थे। सन्न 1960 के दशक के अंत तक, [[ डेटा स्टोरेज डिवाइस |डेटा स्टोरेज डिवाइस]] और [[ कंप्यूटर टर्मिनल |कंप्यूटर टर्मिनल]] इतने सस्ते हो गए थे कि सीधे कंप्यूटर में टाइप करके प्रोग्राम बनाए जा सकते थे। इस प्रकार [[ पाठ संपादक |पाठ संपादकों]] को भी विकसित किया गया था जो [[ पंच कार्ड सॉर्टर |पंच कार्ड सॉर्टर]] की तुलना में परिवर्तन और सुधार को अधिक सरलता से करने की अनुमति देते थे।


== आधुनिक प्रोग्रामिंग ==
== आधुनिक प्रोग्रामिंग ==


=== गुणवत्ता की आवश्यकताएं ===
=== गुणवत्ता की आवश्यकताएं ===
विकास का दृष्टिकोण जो भी हो, अंतिम कार्यक्रम को कुछ मूलभूत गुणों को पूरा करना चाहिए। निम्नलिखित गुण सबसे महत्वपूर्ण में से हैं:<ref>{{cite magazine |magazine=[[InformationWeek]]
विकास का दृष्टिकोण जो भी होता है, अतः अंतिम कार्यक्रम को कुछ मूलभूत गुणों को पूर्ण करना होता है। निम्नलिखित गुण सबसे महत्वपूर्ण में से हैं:<ref>{{cite magazine |magazine=[[InformationWeek]]
   |url=https://www.informationweek.com/cloud/nist-to-develop-cloud-roadmap/d/d-id/1093958?
   |url=https://www.informationweek.com/cloud/nist-to-develop-cloud-roadmap/d/d-id/1093958?
   |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>
*विश्वसनीयता इंजीनियरिंग#सॉफ्टवेयर विश्वसनीयता: किसी प्रोग्राम के परिणाम कितनी बार सही होते हैं। यह एल्गोरिदम की वैचारिक शुद्धता और प्रोग्रामिंग गलतियों को कम करने पर निर्भर करता है, जैसे संसाधन प्रबंधन में गलतियाँ (जैसे, [[ बफ़र अधिकता ]] और [[ दौड़ की स्थिति ]]) और तर्क त्रुटियां (जैसे कि शून्य से विभाजन या ऑफ-बाय-वन त्रुटियां)।
*विश्वसनीयता इंजीनियरिंग सॉफ्टवेयर विश्वसनीयता: किसी प्रोग्राम के परिणाम कितनी बार सही होते हैं। यह एल्गोरिदम की वैचारिक शुद्धता और प्रोग्रामिंग गलतियों को कम करने पर निर्भर करता है, जैसे संसाधन प्रबंधन में गलतियाँ (जैसे, [[ बफ़र अधिकता |बफ़र अधिकता]] और [[ दौड़ की स्थिति |दौड़ की स्थिति]] ) और तर्क त्रुटियां (जैसे कि शून्य से विभाजन या ऑफ-बाय-वन त्रुटियां)।
*[[ मजबूती (कंप्यूटर विज्ञान) ]]: त्रुटियों के कारण एक प्रोग्राम कितनी अच्छी तरह समस्याओं का अनुमान लगाता है (बग नहीं)। इसमें गलत, अनुपयुक्त या भ्रष्ट डेटा, मेमोरी, ऑपरेटिंग सिस्टम सेवाओं और नेटवर्क कनेक्शन जैसे आवश्यक संसाधनों की अनुपलब्धता, उपयोगकर्ता त्रुटि, और अप्रत्याशित पावर आउटेज जैसी स्थितियां सम्मिलित हैं।
*[[ मजबूती (कंप्यूटर विज्ञान) | शक्तिशाली (कंप्यूटर विज्ञान)]] : त्रुटियों के कारण प्रोग्राम कितनी अच्छी प्रकार समस्याओं का अनुमान लगाता है (बग नहीं)। इसमें गलत, अनुपयुक्त या भ्रष्ट डेटा, मेमोरी, ऑपरेटिंग प्रणाली सेवाओं और नेटवर्क कनेक्शन जैसे आवश्यक संसाधनों की अनुपलब्धता, उपयोगकर्ता त्रुटि, और अप्रत्याशित पावर आउटेज जैसी स्थितियां सम्मिलित हैं।
*[[ प्रयोज्य ]]ता: एक कार्यक्रम का [[ श्रमदक्षता शास्त्र ]]: वह आसानी से जिसके साथ कोई व्यक्ति अपने इच्छित उद्देश्य के लिए या कुछ मामलों में अप्रत्याशित उद्देश्यों के लिए भी कार्यक्रम का उपयोग कर सकता है। इस तरह के मुद्दे अन्य विवादों की परवाह किए बिना इसकी सफलता को बना या बिगाड़ सकते हैं। इसमें टेक्स्टुअल, ग्राफिकल और कभी-कभी हार्डवेयर तत्वों की एक विस्तृत श्रृंखला सम्मिलित होती है जो प्रोग्राम के यूजर इंटरफेस की स्पष्टता, सहजता, सामंजस्य और पूर्णता में सुधार करती है।
*[[ प्रयोज्य |प्रयोज्यता]]: कार्यक्रम का [[ श्रमदक्षता शास्त्र |श्रमदक्षता शास्त्र]] : वह सरलता से जिसके साथ कोई व्यक्ति अपने इच्छित उद्देश्य के लिए या कुछ स्थितियों में अप्रत्याशित उद्देश्यों के लिए भी कार्यक्रम का उपयोग कर सकता है। इस प्रकार के मुद्दे अन्य विवादों की परवाह किए बिना इसकी सफलता को बना या बिगाड़ सकते हैं। इसमें टेक्स्टुअल, ग्राफिकल और कभी-कभी हार्डवेयर तत्वों की विस्तृत श्रृंखला सम्मिलित होती है जो प्रोग्राम के यूजर इंटरफेस की स्पष्टता, सहजता, सामंजस्य और पूर्णता में सुधार करती है।
*[[ सॉफ्टवेयर पोर्टेबिलिटी ]]: कंप्यूटर हार्डवेयर और ऑपरेटिंग सिस्टम प्लेटफॉर्म की वह रेंज जिस पर प्रोग्राम के सोर्स कोड को [[ संकलित ]]/[[ दुभाषिया (कंप्यूटिंग) ]] और चलाया जा सकता है। यह विभिन्न प्लेटफार्मों द्वारा प्रदान की जाने वाली प्रोग्रामिंग सुविधाओं में अंतर पर निर्भर करता है, जिसमें हार्डवेयर और ऑपरेटिंग सिस्टम संसाधन, हार्डवेयर और ऑपरेटिंग सिस्टम का अपेक्षित व्यवहार और स्रोत कोड की भाषा के लिए प्लेटफॉर्म-विशिष्ट कंपाइलर्स (और कभी-कभी लाइब्रेरी) की उपलब्धता सम्मिलित है।
*[[ सॉफ्टवेयर पोर्टेबिलिटी ]]: कंप्यूटर हार्डवेयर और ऑपरेटिंग प्रणाली प्लेटफॉर्म की वह रेंज जिस पर प्रोग्राम के सोर्स कोड को [[ संकलित |संकलित]] /[[ दुभाषिया (कंप्यूटिंग) | दुभाषिया (कंप्यूटिंग)]] और चलाया जा सकता है। यह विभिन्न प्लेटफार्मों द्वारा प्रदान की जाने वाली प्रोग्रामिंग सुविधाओं में अंतर पर निर्भर करता है, जिसमें हार्डवेयर और ऑपरेटिंग प्रणाली संसाधन, हार्डवेयर और ऑपरेटिंग प्रणाली का अपेक्षित व्यवहार और स्रोत कोड की भाषा के लिए प्लेटफॉर्म-विशिष्ट कंपाइलर्स (और कभी-कभी लाइब्रेरी) की उपलब्धता सम्मिलित है।
*रखरखाव: सुधार करने या अनुकूलित करने, [[ सॉफ्टवेयर बग ]] और [[ भेद्यता (कंप्यूटिंग) ]] को ठीक करने या इसे नए वातावरण में अनुकूलित करने के लिए किसी प्रोग्राम को उसके वर्तमान या भविष्य के डेवलपर्स द्वारा आसानी से संशोधित किया जा सकता है। अच्छे आचरण<ref>{{Cite web
*रखरखाव: सुधार करने या अनुकूलित करने, [[ सॉफ्टवेयर बग |सॉफ्टवेयर बग]] और [[ भेद्यता (कंप्यूटिंग) |भेद्यता (कंप्यूटिंग)]] को ठीक करने या इसे नए वातावरण में अनुकूलित करने के लिए किसी प्रोग्राम को उसके वर्तमान या भविष्य के डेवलपर्स द्वारा सरली से संशोधित किया जा सकता है। अच्छे आचरण<ref>{{Cite web
     |url=http://wisdomgeek.com/programming/tips-become-good-programmer
     |url=http://wisdomgeek.com/programming/tips-become-good-programmer
     |title=Programming 101: Tips to become a good programmer - Wisdom Geek
     |title=Programming 101: Tips to become a good programmer - Wisdom Geek
     |date=May 19, 2016 |website=Wisdom Geek |language=en-US |access-date=2016-05-23}}</ref> प्रारंभिक विकास के समय इस संबंध में फर्क करते हैं। यह गुण सीधे अंतिम उपयोगकर्ता के लिए स्पष्ट नहीं हो सकता है, किन्तु यह दीर्घकालिक रूप से किसी कार्यक्रम के भाग्य को महत्वपूर्ण रूप से प्रभावित कर सकता है।
     |date=May 19, 2016 |website=Wisdom Geek |language=en-US |access-date=2016-05-23}}</ref> प्रारंभिक विकास के समय इस संबंध में फर्क करते हैं। यह गुण सीधे अंतिम उपयोगकर्ता के लिए स्पष्ट नहीं हो सकता है, किन्तु यह दीर्घकालिक रूप से किसी कार्यक्रम के भाग्य को महत्वपूर्ण रूप से प्रभावित कर सकता है।
*एल्गोरिदमिक दक्षता/[[ प्रदर्शन इंजीनियरिंग ]]: एक प्रोग्राम द्वारा खपत किए जाने वाले सिस्टम संसाधनों का माप (प्रोसेसर समय, मेमोरी स्पेस, डिस्क जैसे धीमे उपकरण, नेटवर्क बैंडविड्थ और कुछ हद तक यहां तक ​​कि उपयोगकर्ता इंटरैक्शन): कम, उत्तम। इसमें संसाधनों का सावधानीपूर्वक प्रबंधन भी सम्मिलित है, उदाहरण के लिए [[ अस्थायी फ़ाइल ]]ों को साफ करना और [[ स्मृति रिसाव ]] को समाप्त करना। यह अधिकांशतः एक चुनी हुई प्रोग्रामिंग भाषा की छाया में चर्चा की जाती है। चूंकि भाषा निश्चित रूप से प्रदर्शन को प्रभावित करती है, यहां तक ​​​​कि धीमी भाषाएं, जैसे कि [[ पायथन (प्रोग्रामिंग भाषा) ]], मानवीय दृष्टिकोण से कार्यक्रमों को तुरंत निष्पादित कर सकती हैं। गति, संसाधन उपयोग और प्रदर्शन उन प्रोग्रामों के लिए महत्वपूर्ण हैं जो सिस्टम की [[ अड़चन (सॉफ्टवेयर) ]] हैं, किन्तु प्रोग्रामर समय का कुशल उपयोग भी महत्वपूर्ण है और लागत से संबंधित है: अधिक हार्डवेयर सस्ता हो सकता है।
*एल्गोरिदमिक दक्षता/[[ प्रदर्शन इंजीनियरिंग ]]: प्रोग्राम द्वारा खपत किए जाने वाले प्रणाली संसाधनों का माप (प्रोसेसर समय, मेमोरी स्पेस, डिस्क जैसे धीमे उपकरण, नेटवर्क बैंडविड्थ और कुछ सीमा तक यहां तक ​​कि उपयोगकर्ता इंटरैक्शन): कम, उत्तम होता है। इसमें संसाधनों का सावधानीपूर्वक प्रबंधन भी सम्मिलित है, उदाहरण के लिए [[ अस्थायी फ़ाइल |अस्थायी फ़ाइलों]] को साफ करना और [[ स्मृति रिसाव |स्मृति रिसाव]] को समाप्त किया जाता है। यह अधिकांशतः चुनी हुई प्रोग्रामिंग भाषा की छाया में चर्चा की जाती है। चूंकि भाषा निश्चित रूप से प्रदर्शन को प्रभावित करती है, यहां तक ​​​​कि धीमी भाषाएं, जैसे कि [[ पायथन (प्रोग्रामिंग भाषा) |पायथन (प्रोग्रामिंग भाषा)]], मानवीय दृष्टिकोण से कार्यक्रमों को तुरंत निष्पादित कर सकती हैं। गति, संसाधन उपयोग और प्रदर्शन उन प्रोग्रामों के लिए महत्वपूर्ण हैं जो प्रणाली की [[ अड़चन (सॉफ्टवेयर) |अड़चन (सॉफ्टवेयर)]] हैं, किन्तु प्रोग्रामर समय का कुशल उपयोग भी महत्वपूर्ण है और निवेश से संबंधित है, अतः अधिक हार्डवेयर सस्ता हो सकता है।


=== स्रोत कोड की [[ पठनीयता ]] ===
=== स्रोत कोड की [[ पठनीयता |पठनीयता]] ===
कंप्यूटर प्रोग्रामिंग में, पठनीयता से तात्पर्य उस सहजता से है जिसके साथ एक मानव पाठक स्रोत कोड के उद्देश्य, नियंत्रण प्रवाह और संचालन को समझ सकता है। यह पोर्टेबिलिटी, उपयोगिता और सबसे महत्वपूर्ण रखरखाव सहित उपरोक्त गुणवत्ता के पहलुओं को प्रभावित करता है।
कंप्यूटर प्रोग्रामिंग में, पठनीयता से तात्पर्य उस सहजता से है जिसके साथ मानव पाठक स्रोत कोड के उद्देश्य, नियंत्रण प्रवाह और संचालन को समझ सकता है। यह पोर्टेबिलिटी, उपयोगिता और सबसे महत्वपूर्ण रखरखाव सहित उपरोक्त गुणवत्ता के पहलुओं को प्रभावित करता है।


पठनीयता महत्वपूर्ण है क्योंकि प्रोग्रामर अपना अधिकांश समय नए स्रोत कोड को लिखने के अतिरिक्त पढ़ने, समझने, पुन: उपयोग करने और उपस्तिथा स्रोत कोड को संशोधित करने में व्यतीत करते हैं। अपठनीय कोड अधिकांशतः बग, अक्षमता और [[ कोड दोहराव ]] की ओर ले जाता है। एक अध्ययन में पाया गया कि कुछ सरल पठनीयता परिवर्तनों ने कोड को छोटा बना दिया और इसे समझने के लिए समय को अधिक कम कर दिया।<ref>{{cite journal|doi=10.1145/358589.358596|title=Improving computer program readability to aid modification|journal=Communications of the ACM|volume=25|issue=8|pages=512–521|year=1982|last1=Elshoff|first1=James L.|last2=Marcotty|first2=Michael|s2cid=30026641}}</ref>
पठनीयता महत्वपूर्ण है जिससे कि प्रोग्रामर अपना अधिकांश समय नए स्रोत कोड को लिखने के अतिरिक्त पढ़ने, समझने, पुन: उपयोग करने और उपस्तिथा स्रोत कोड को संशोधित करने में व्यतीत करते हैं। इस प्रकार अपठनीय कोड अधिकांशतः बग, अक्षमता और [[ कोड दोहराव |कोड दोहराव]] की ओर ले जाता है। चूँकि अध्ययन में पाया गया कि कुछ सरल पठनीयता परिवर्तनों ने कोड को छोटा बना दिया और इसे समझने के लिए समय को अधिक कम कर दिया जाता है।<ref>{{cite journal|doi=10.1145/358589.358596|title=Improving computer program readability to aid modification|journal=Communications of the ACM|volume=25|issue=8|pages=512–521|year=1982|last1=Elshoff|first1=James L.|last2=Marcotty|first2=Michael|s2cid=30026641}}</ref>
एक सुसंगत [[ प्रोग्रामिंग शैली ]] के बाद अधिकांशतः पठनीयता में मदद मिलती है। हालाँकि, पठनीयता केवल प्रोग्रामिंग शैली से अधिक है। कोड को कुशलतापूर्वक संकलित और निष्पादित करने के लिए कंप्यूटर की क्षमता के साथ बहुत कम या कुछ भी नहीं होने वाले कई कारक, पठनीयता में योगदान करते हैं।<ref>{{cite web|url=http://docforge.com/wiki/Readability|title=Readability|author=Multiple (wiki)|work=Docforge|url-status=live|archive-url=https://web.archive.org/web/20200429211203/http://www.docforge.com/wiki/Readability|archive-date=2020-04-29|access-date=2010-01-30}}</ref> इनमें से कुछ कारकों में सम्मिलित हैं:
 
*विभिन्न [[ इंडेंट स्टाइल ]] (व्हाट्सएप)
सुसंगत [[ प्रोग्रामिंग शैली |प्रोग्रामिंग शैली]] के पश्चात् अधिकांशतः पठनीयता में सहायता मिलती है। चूँकि, पठनीयता केवल प्रोग्रामिंग शैली से अधिक है। कोड को कुशलतापूर्वक संकलित और निष्पादित करने के लिए कंप्यूटर की क्षमता के साथ बहुत कम या कुछ भी नहीं होने वाले अनेक कारक, पठनीयता में योगदान करते हैं।<ref>{{cite web|url=http://docforge.com/wiki/Readability|title=Readability|author=Multiple (wiki)|work=Docforge|url-status=live|archive-url=https://web.archive.org/web/20200429211203/http://www.docforge.com/wiki/Readability|archive-date=2020-04-29|access-date=2010-01-30}}</ref> इनमें से कुछ कारकों में सम्मिलित हैं:
*विभिन्न [[ इंडेंट स्टाइल |इंडेंट स्टाइल]] (व्हाट्सएप)
*[[ टिप्पणी (कंप्यूटर प्रोग्रामिंग) ]]
*[[ टिप्पणी (कंप्यूटर प्रोग्रामिंग) ]]
*[[ अपघटन (कंप्यूटर विज्ञान) ]]
*[[ अपघटन (कंप्यूटर विज्ञान) ]]
*वस्तुओं के लिए नामकरण परंपराएं (प्रोग्रामिंग) (जैसे चर, वर्ग, कार्य, प्रक्रियाएं, आदि)
*वस्तुओं के लिए नामकरण परंपराएं (प्रोग्रामिंग) (जैसे चर, वर्ग, कार्य, प्रक्रियाएं, आदि)


इसके प्रस्तुतिकरण और सामग्री पहलुओं को अलग करना (जैसे इंडेंट, लाइन ब्रेक, रंग हाइलाइटिंग, और इसी तरह) अधिकांशतः [[ स्रोत कोड संपादक ]] द्वारा नियंत्रित किया जाता है, किन्तु सामग्री पहलू प्रोग्रामर की प्रतिभा और कौशल को दर्शाते हैं।
इसके प्रस्तुतिकरण और सामग्री पहलुओं को भिन्न करना (जैसे इंडेंट, लाइन ब्रेक, रंग हाइलाइटिंग, और इसी प्रकार) अधिकांशतः [[ स्रोत कोड संपादक |स्रोत कोड संपादक]] द्वारा नियंत्रित किया जाता है, किन्तु सामग्री पहलू प्रोग्रामर की प्रतिभा और कौशल को दर्शाते हैं।


कोड संरचना और प्रदर्शन के लिए गैर-पारंपरिक दृष्टिकोण अपनाकर पठनीयता संबंधी चिंताओं को हल करने के इरादे से विभिन्न [[ दृश्य प्रोग्रामिंग भाषा ]]ओं को भी विकसित किया गया है। एकीकृत विकास वातावरण (I.D.Es) का उद्देश्य ऐसी सभी सहायता को एकीकृत करना है। [[ कोड रिफैक्टरिंग ]] जैसी तकनीकें पठनीयता को बढ़ा सकती हैं।
कोड संरचना और प्रदर्शन के लिए गैर-पारंपरिक दृष्टिकोण अपनाकर पठनीयता संबंधी चिंताओं को हल करने के इरादे से विभिन्न [[ दृश्य प्रोग्रामिंग भाषा |दृश्य प्रोग्रामिंग भाषा]] ओं को भी विकसित किया गया है। एकीकृत विकास वातावरण (आई.डी.ईएस) का उद्देश्य ऐसी सभी सहायता को एकीकृत करना है। अतः [[ कोड रिफैक्टरिंग |कोड रिफैक्टरिंग]] जैसी विधि पठनीयता को बढ़ा सकती हैं।


===एल्गोरिदमिक समष्टिता ===
===एल्गोरिदमिक समष्टिता ===
कंप्यूटर प्रोग्रामिंग का अकादमिक क्षेत्र और इंजीनियरिंग अभ्यास दोनों ही मुख्य रूप से किसी दिए गए वर्ग की समस्याओं के लिए सबसे कुशल एल्गोरिदम की खोज और कार्यान्वयन से संबंधित हैं। इस उद्देश्य के लिए, एल्गोरिदम को तथाकथित [[ बिग ओ नोटेशन ]] का उपयोग करके ऑर्डर में वर्गीकृत किया जाता है, जो इनपुट के आकार के संदर्भ में संसाधन उपयोग, जैसे निष्पादन समय या मेमोरी खपत को व्यक्त करता है। विशेषज्ञ प्रोग्रामर विभिन्न प्रकार के अच्छी तरह से स्थापित एल्गोरिदम और उनकी संबंधित समष्टिताओं से परिचित हैं और इस ज्ञान का उपयोग एल्गोरिदम चुनने के लिए करते हैं जो परिस्थितियों के लिए सबसे उपयुक्त हैं।
कंप्यूटर प्रोग्रामिंग का अकादमिक क्षेत्र और इंजीनियरिंग अभ्यास दोनों ही मुख्य रूप से किसी दिए गए वर्ग की समस्याओं के लिए सबसे कुशल एल्गोरिदम की खोज और कार्यान्वयन से संबंधित हैं। इस उद्देश्य के लिए, एल्गोरिदम को तथाकथित [[ बिग ओ नोटेशन |बिग ओ नोटेशन]] का उपयोग करके ऑर्डर में वर्गीकृत किया जाता है, जो इनपुट के आकार के संदर्भ में संसाधन उपयोग, जैसे निष्पादन समय या मेमोरी खपत को व्यक्त करता है। विशेषज्ञ प्रोग्रामर विभिन्न प्रकार के अच्छी प्रकार से स्थापित एल्गोरिदम और उनकी संबंधित समष्टिताओं से परिचित हैं और इस ज्ञान का उपयोग एल्गोरिदम चुनने के लिए करते हैं जो परिस्थितियों के लिए सबसे उपयुक्त हैं।


==== शतरंज एल्गोरिदम एक उदाहरण के रूप में ====
==== शतरंज एल्गोरिदम उदाहरण के रूप में ====
शतरंज खेलने के लिए कंप्यूटर प्रोग्रामिंग करना 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>
=== तरीके ===
=== विधिया ===
अधिकांश औपचारिक सॉफ्टवेयर विकास प्रक्रियाओं में पहला कदम आवश्यकताओं का विश्लेषण है, इसके बाद मूल्य मॉडलिंग, कार्यान्वयन और विफलता उन्मूलन (डीबगिंग) निर्धारित करने के लिए परीक्षण किया जाता है। उन कार्यों में से प्रत्येक के लिए कई अलग-अलग दृष्टिकोण उपस्तिथ हैं। [[ आवश्यकताओं के विश्लेषण ]] के लिए लोकप्रिय एक दृष्टिकोण है केस विश्लेषण का उपयोग करें। कई प्रोग्रामर [[ चुस्त सॉफ्टवेयर विकास ]] के रूपों का उपयोग करते हैं जहां औपचारिक सॉफ्टवेयर विकास के विभिन्न चरणों को एक साथ छोटे चक्रों में एकीकृत किया जाता है जिसमें वर्षों के अतिरिक्त कुछ सप्ताह लगते हैं। सॉफ्टवेयर विकास प्रक्रिया के कई दृष्टिकोण हैं।
अधिकांश औपचारिक सॉफ्टवेयर विकास प्रक्रियाओं में पहला कदम आवश्यकताओं का विश्लेषण है, इसके पश्चात् मूल्य मॉडलिंग, कार्यान्वयन और विफलता उन्मूलन (डीबगिंग) निर्धारित करने के लिए परीक्षण किया जाता है। उन कार्यों में से प्रत्येक के लिए अनेक भिन्न-भिन्न दृष्टिकोण उपस्तिथ हैं। इस पाकर [[ आवश्यकताओं के विश्लेषण |आवश्यकताओं के विश्लेषण]] के लिए लोकप्रिय दृष्टिकोण है जो केस विश्लेषण का उपयोग करती है। अनेक प्रोग्रामर [[ चुस्त सॉफ्टवेयर विकास |चुस्त सॉफ्टवेयर विकास]] के रूपों का उपयोग करते हैं जहां औपचारिक सॉफ्टवेयर विकास के विभिन्न चरणों को साथ छोटे चक्रों में एकीकृत किया जाता है जिसमें वर्षों के अतिरिक्त कुछ सप्ताह लगते हैं। सॉफ्टवेयर विकास प्रक्रिया के अनेक दृष्टिकोण हैं।


लोकप्रिय मॉडलिंग तकनीकों में ऑब्जेक्ट-ओरिएंटेड एनालिसिस एंड डिज़ाइन ([[ OOAD ]]) और [[ मॉडल-संचालित वास्तुकला ]] (मॉडल-ड्रिवेन आर्किटेक्चर) सम्मिलित हैं। [[ एकीकृत मॉडलिंग भाषा ]] (यूनिफाइड मॉडलिंग लैंग्वेज) ओओएडी और एमडीए दोनों के लिए उपयोग किया जाने वाला एक नोटेशन है।
लोकप्रिय मॉडलिंग विधियों में ऑब्जेक्ट-ओरिएंटेड एनालिसिस एंड डिज़ाइन ([[ OOAD |ओओएडी]] ) और [[ मॉडल-संचालित वास्तुकला |मॉडल-संचालित वास्तुकला]] (मॉडल-ड्रिवेन आर्किटेक्चर) सम्मिलित हैं। सामान्यतः [[ एकीकृत मॉडलिंग भाषा |एकीकृत मॉडलिंग भाषा]] (यूनिफाइड मॉडलिंग लैंग्वेज) ओओएडी और एमडीए दोनों के लिए उपयोग किया जाने वाला नोटेशन है।


डेटाबेस डिज़ाइन के लिए उपयोग की जाने वाली एक समान तकनीक [[ इकाई-संबंध मॉडल ]] (इकाई-रिलेशनशिप मॉडल) है।
डेटाबेस डिज़ाइन के लिए उपयोग की जाने वाली समान विधि [[ इकाई-संबंध मॉडल |इकाई-संबंध मॉडल]] (इकाई-रिलेशनशिप मॉडल) है।


कार्यान्वयन तकनीकों में अनिवार्य भाषाएं ([[ वस्तु उन्मुख कार्यकर्म ]] | ऑब्जेक्ट-ओरिएंटेड या [[ प्रक्रियात्मक प्रोग्रामिंग ]]), [[ कार्यात्मक प्रोग्रामिंग ]] और [[ तर्क प्रोग्रामिंग ]] सम्मिलित हैं।
कार्यान्वयन विधियों में अनिवार्य भाषाएं ([[ वस्तु उन्मुख कार्यकर्म |वस्तु उन्मुख कार्यकर्म]] या [[ प्रक्रियात्मक प्रोग्रामिंग |प्रक्रियात्मक प्रोग्रामिंग]]), [[ कार्यात्मक प्रोग्रामिंग |कार्यात्मक प्रोग्रामिंग]] और [[ तर्क प्रोग्रामिंग |तर्क प्रोग्रामिंग]] सम्मिलित होता हैं।


=== भाषा के उपयोग को मापना ===
=== भाषा के उपयोग को मापना ===
{{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 अभी भी मजबूत है<ref>{{cite web|last1=Mitchell|first1=Robert|title=The Cobol Brain Drain|url=http://www.computerworld.com/article/2504568/data-center/the-cobol-brain-drain.html|publisher=Computer World|access-date=9 May 2015|date=2012-05-21}}</ref> अधिकांशतः बड़े [[ मेनफ़्रेम कंप्यूटर ]] पर, इंजीनियरिंग अनुप्रयोगों में [[ फोरट्रान ]], [[ वर्ल्ड वाइड वेब ]] विकास में स्क्रिप्टिंग भाषाएं, और [[ उपकरणों के नियंत्रण के लिए सॉफ्टवेयर ]] में [[ सी (प्रोग्रामिंग भाषा) ]]। कई एप्लिकेशन अपने निर्माण और उपयोग में कई भाषाओं के मिश्रण का उपयोग करते हैं। नई भाषाओं को सामान्यतः नई कार्यक्षमता के साथ एक पूर्व भाषा के सिंटैक्स के आसपास डिज़ाइन किया गया है, (उदाहरण के लिए [[ C++ ]], C में ऑब्जेक्ट-ओरिएंटेशन जोड़ता है, और Java (प्रोग्रामिंग भाषा) C++ में मेमोरी मैनेजमेंट और [[ बाईटकोड ]] जोड़ता है, किन्तु परिणामस्वरूप, दक्षता खो देता है और निम्न-स्तरीय हेरफेर की क्षमता)।
कुछ भाषाएँ विशेष प्रकार के अनुप्रयोगों के लिए बहुत लोकप्रिय होती हैं, जबकि कुछ भाषाएँ नियमित रूप से अनेक भिन्न-भिन्न प्रकार के अनुप्रयोगों को लिखने के लिए उपयोग की जाती हैं। उदाहरण के लिए, कॉर्पोरेट डेटा केंद्रों में कोबोल अभी भी शक्तिशाली है।<ref>{{cite web|last1=Mitchell|first1=Robert|title=The Cobol Brain Drain|url=http://www.computerworld.com/article/2504568/data-center/the-cobol-brain-drain.html|publisher=Computer World|access-date=9 May 2015|date=2012-05-21}}</ref> अधिकांशतः बड़े [[ मेनफ़्रेम कंप्यूटर |मेनफ़्रेम कंप्यूटर]] पर, इंजीनियरिंग अनुप्रयोगों में [[ फोरट्रान |फोरट्रान]] , [[ वर्ल्ड वाइड वेब |वर्ल्ड वाइड वेब]] विकास में स्क्रिप्टिंग भाषाएं, और [[ उपकरणों के नियंत्रण के लिए सॉफ्टवेयर |उपकरणों के नियंत्रण के लिए सॉफ्टवेयर]] में [[ सी (प्रोग्रामिंग भाषा) |सी (प्रोग्रामिंग भाषा)]] अनेक एप्लिकेशन अपने निर्माण और उपयोग में अनेक भाषाओं के मिश्रण का उपयोग करते हैं। नई भाषाओं को सामान्यतः नई कार्यक्षमता के साथ पूर्व भाषा के सिंटैक्स के आसपास डिज़ाइन किया गया है, (उदाहरण के लिए [[ C++ |सी++]] , सी में ऑब्जेक्ट-ओरिएंटेशन जोड़ता है, और जावा (प्रोग्रामिंग भाषा) सी++ में मेमोरी मैनेजमेंट और [[ बाईटकोड |बाईटकोड]] जोड़ता है, किन्तु परिणामस्वरूप, दक्षता खो देता है और निम्न-स्तरीय हेरफेर की क्षमता)।


=== डिबगिंग ===
=== डिबगिंग ===
{{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> सॉफ़्टवेयर दोष के लिए बग पहले से ही सामान्य शब्द था जब यह कीट पाया गया था।]]
सॉफ्टवेयर विकास प्रक्रिया में डिबगिंग एक बहुत ही महत्वपूर्ण कार्य है क्योंकि किसी प्रोग्राम में दोष होने के कारण इसके उपयोगकर्ताओं के लिए महत्वपूर्ण परिणाम हो सकते हैं। कुछ भाषाएँ कुछ प्रकार के दोषों के लिए अधिक प्रवण होती हैं क्योंकि उनके विनिर्देशन के लिए अन्य भाषाओं की तरह अधिक जाँच करने के लिए संकलक की आवश्यकता नहीं होती है। [[ स्थिर कोड विश्लेषण ]] उपकरण का उपयोग कुछ संभावित समस्याओं का पता लगाने में मदद कर सकता है। सामान्यतः डिबगिंग में पहला कदम समस्या को पुन: उत्पन्न करने का प्रयास करना है। यह एक गैर-तुच्छ कार्य हो सकता है, उदाहरण के लिए समानांतर प्रक्रियाओं या कुछ असामान्य सॉफ़्टवेयर बग के साथ। साथ ही, विशिष्ट उपयोगकर्ता परिवेश और उपयोग इतिहास समस्या को पुन: उत्पन्न करना मुश्किल बना सकता है।
सॉफ्टवेयर विकास प्रक्रिया में डिबगिंग बहुत ही महत्वपूर्ण कार्य है जिससे कि किसी प्रोग्राम में दोष होने के कारण इसके उपयोगकर्ताओं के लिए महत्वपूर्ण परिणाम हो सकते हैं। कुछ भाषाएँ कुछ प्रकार के दोषों के लिए अधिक प्रवण होती हैं जिससे कि उनके विनिर्देशन के लिए अन्य भाषाओं की भांति अधिक जाँच करने के लिए संकलक की आवश्यकता नहीं होती है। इस प्रकार [[ स्थिर कोड विश्लेषण |स्थिर कोड विश्लेषण]] उपकरण का उपयोग कुछ संभावित समस्याओं का पता लगाने में सहायता कर सकता है। सामान्यतः डिबगिंग में पहला कदम समस्या को पुन: उत्पन्न करने का प्रयास करना है। यह गैर-तुच्छ कार्य हो सकता है, उदाहरण के लिए समानांतर प्रक्रियाओं या कुछ असामान्य सॉफ़्टवेयर बग के साथ-साथ ही, विशिष्ट उपयोगकर्ता परिवेश और उपयोग इतिहास समस्या को पुन: उत्पन्न करना कठिनाई बना सकता है।


बग के पुनरुत्पादन के बाद, प्रोग्राम के इनपुट को डिबग करना आसान बनाने के लिए सरल बनाने की आवश्यकता हो सकती है। उदाहरण के लिए, जब एक कंपाइलर में एक बग कुछ बड़े स्रोत फ़ाइल को [[ पदच्छेद ]] करते समय इसे क्रैश कर सकता है, तो परीक्षण केस का सरलीकरण जिसके परिणामस्वरूप मूल स्रोत फ़ाइल से केवल कुछ पंक्तियां होती हैं, वही क्रैश को पुन: उत्पन्न करने के लिए पर्याप्त हो सकती है। परीक्षण-और-त्रुटि/विभाजन-और-जीत की आवश्यकता है: प्रोग्रामर मूल परीक्षण मामले के कुछ हिस्सों को हटाने का प्रयास करेगा और जांच करेगा कि समस्या अभी भी उपस्तिथ है या नहीं। जीयूआई में समस्या को डीबग करते समय, प्रोग्रामर मूल समस्या विवरण से कुछ उपयोगकर्ता इंटरैक्शन को छोड़ने का प्रयास कर सकता है और जांच सकता है कि बग प्रकट होने के लिए शेष क्रियाएं पर्याप्त हैं या नहीं। स्क्रिप्टिंग और [[ ब्रेकपाइंट ]]िंग भी इसी प्रक्रिया का हिस्सा है।
बग के पुनरुत्पादन के पश्चात्, प्रोग्राम के इनपुट को डिबग करना सरल बनाने के लिए सरल बनाने की आवश्यकता हो सकती है। उदाहरण के लिए, जब कंपाइलर में बग कुछ बड़े स्रोत फ़ाइल को [[ पदच्छेद |पदच्छेद]] करते समय इसे क्रैश कर सकता है, तब परीक्षण केस का सरलीकरण जिसके परिणामस्वरूप मूल स्रोत फ़ाइल से केवल कुछ पंक्तियां होती हैं, वही क्रैश को पुन: उत्पन्न करने के लिए पर्याप्त हो सकती है। परीक्षण-और-त्रुटि/विभाजन-और-जीत की आवश्यकता है: प्रोग्रामर मूल परीक्षण स्थितियों के कुछ भागों को हटाने का प्रयास करता है और जांच करता है कि समस्या अभी भी उपस्तिथ है या नहीं। जीयूआई में समस्या को डीबग करते समय, प्रोग्रामर मूल समस्या विवरण से कुछ उपयोगकर्ता इंटरैक्शन को छोड़ने का प्रयास कर सकता है और जांच सकता है कि बग प्रकट होने के लिए शेष क्रियाएं पर्याप्त हैं या नहीं। स्क्रिप्टिंग और [[ ब्रेकपाइंट |ब्रेकपाइंट]] भी इसी प्रक्रिया का भाग है।


डिबगिंग अधिकांशतः एकीकृत विकास वातावरण के साथ किया जाता है। [[ GDB ]] जैसे स्टैंडअलोन डिबगर्स का भी उपयोग किया जाता है, और ये अधिकांशतः कम दृश्य वातावरण प्रदान करते हैं, सामान्यतः [[ कमांड लाइन ]] का उपयोग करते हुए। कुछ पाठ संपादक जैसे [[ Emacs ]] GDB को उनके माध्यम से एक दृश्य वातावरण प्रदान करने की अनुमति देते हैं।
डिबगिंग अधिकांशतः एकीकृत विकास वातावरण के साथ किया जाता है। इस प्रकार [[ GDB |जीडीबी]] जैसे स्टैंडअलोन डिबगर्स का भी उपयोग किया जाता है, और यह अधिकांशतः कम दृश्य वातावरण प्रदान करते हैं, सामान्यतः [[ कमांड लाइन |कमांड लाइन]] का उपयोग करते हुए। कुछ पाठ संपादक जैसे [[ Emacs |ईमस्स]] जीडीबी को उनके माध्यम से दृश्य वातावरण प्रदान करने की अनुमति देते हैं।


==प्रोग्रामिंग भाषाएं==
==प्रोग्रामिंग भाषाएं==
{{Main|प्रोग्रामिंग भाषा|प्रोग्रामिंग भाषाओं की सूची}}
{{Main|प्रोग्रामिंग भाषा|प्रोग्रामिंग भाषाओं की सूची}}
{{See also|कंप्यूटर प्रोग्राम भाषाएँ}}
{{See also|कंप्यूटर प्रोग्राम भाषाएँ}}
विभिन्न प्रोग्रामिंग भाषाएं प्रोग्रामिंग की विभिन्न शैलियों का समर्थन करती हैं (जिन्हें [[ प्रोग्रामिंग प्रतिमान ]] कहा जाता है)। उपयोग की जाने वाली भाषा का चुनाव कई बातों पर निर्भर करता है, जैसे कंपनी की नीति, कार्य के लिए उपयुक्तता, तीसरे पक्ष के पैकेज की उपलब्धता, या व्यक्तिगत वरीयता। आदर्श रूप से, कार्य के लिए सबसे उपयुक्त प्रोग्रामिंग भाषा का चयन किया जाएगा। इस आदर्श से ट्रेड-ऑफ में पर्याप्त प्रोग्रामर ढूंढना सम्मिलित है जो एक टीम बनाने के लिए भाषा जानते हैं, उस भाषा के लिए कंपाइलर्स की उपलब्धता, और दक्षता जिसके साथ किसी भाषा में लिखे गए प्रोग्राम निष्पादित होते हैं। भाषाएँ निम्न-स्तर से उच्च-स्तर तक एक अनुमानित स्पेक्ट्रम बनाती हैं; निम्न-स्तरीय भाषाएँ सामान्यतः अधिक मशीन-उन्मुख होती हैं और निष्पादित करने में तेज़ होती हैं, जबकि उच्च-स्तरीय भाषाएँ अधिक सारगर्भित और उपयोग में आसान होती हैं किन्तु कम तेज़ी से निष्पादित होती हैं। सामान्यतः निम्न-स्तरीय भाषाओं की तुलना में उच्च-स्तरीय भाषाओं में कोड करना आसान होता है।
विभिन्न प्रोग्रामिंग भाषाएं प्रोग्रामिंग की विभिन्न शैलियों का समर्थन करती हैं (जिन्हें [[ प्रोग्रामिंग प्रतिमान |प्रोग्रामिंग प्रतिमान]] कहा जाता है)। उपयोग की जाने वाली भाषा का चुनाव अनेक बातों पर निर्भर करता है, जैसे कंपनी की नीति, कार्य के लिए उपयुक्तता, तीसरे पक्ष के पैकेज की उपलब्धता, या व्यक्तिगत वरीयता इत्यादि। इस प्रकार आदर्श रूप से, कार्य के लिए सबसे उपयुक्त प्रोग्रामिंग भाषा का चयन किया जाता है। इस आदर्श से ट्रेड-ऑफ में पर्याप्त प्रोग्रामर खोजना सम्मिलित है जो समूह बनाने के लिए भाषा जानते हैं, उस भाषा के लिए कंपाइलर्स की उपलब्धता, और दक्षता जिसके साथ किसी भाषा में लिखे गए प्रोग्राम निष्पादित होते हैं। भाषाएँ निम्न-स्तर से उच्च-स्तर तक अनुमानित स्पेक्ट्रम बनाती हैं; निम्न-स्तरीय भाषाएँ सामान्यतः अधिक मशीन-उन्मुख होती हैं और निष्पादित करने में तेज़ होती हैं, जबकि उच्च-स्तरीय भाषाएँ अधिक सारगर्भित और उपयोग में सरल होती हैं किन्तु कम तेज़ी से निष्पादित होती हैं। सामान्यतः निम्न-स्तरीय भाषाओं की तुलना में उच्च-स्तरीय भाषाओं में कोड करना सरल होता है।
सॉफ्टवेयर विकास के लिए प्रोग्रामिंग भाषाएं आवश्यक हैं। वे सबसे सरल अनुप्रयोगों से लेकर सबसे परिष्कृत तक, सभी सॉफ़्टवेयर के लिए बिल्डिंग ब्लॉक हैं।
 
सॉफ्टवेयर विकास के लिए प्रोग्रामिंग भाषाएं आवश्यक हैं। वह सबसे सरल अनुप्रयोगों से लेकर सबसे परिष्कृत तक, सभी सॉफ़्टवेयर के लिए बिल्डिंग ब्लॉक हैं।


[[ एलन डाउनी ]] ने अपनी पुस्तक हाउ टू थिंक लाइक ए कंप्यूटर साइंटिस्ट में लिखा है:
[[ एलन डाउनी | एलन डाउनी]] ने अपनी पुस्तक हाउ टू थिंक लाइक ए कंप्यूटर साइंटिस्ट में लिखा है:


:विवरण अलग-अलग भाषाओं में अलग-अलग दिखते हैं, किन्तु कुछ बुनियादी निर्देश लगभग हर भाषा में दिखाई देते हैं:
:विवरण भिन्न-भिन्न भाषाओं में भिन्न-भिन्न दिखते हैं, किन्तु कुछ मूलभूतनिर्देश लगभग प्रत्येक भाषा में दिखाई देते हैं:
:*इनपुट: कीबोर्ड, फ़ाइल या किसी अन्य डिवाइस से डेटा इकट्ठा करें।
:*इनपुट: कीबोर्ड, फ़ाइल या किसी अन्य डिवाइस से डेटा एकत्र करें।
:*आउटपुट: स्क्रीन पर डेटा प्रदर्शित करें या किसी फ़ाइल या अन्य डिवाइस पर डेटा भेजें।
:*आउटपुट: स्क्रीन पर डेटा प्रदर्शित करें या किसी फ़ाइल या अन्य डिवाइस पर डेटा भेजें।
:*अंकगणित: जोड़ और गुणा जैसे बुनियादी अंकगणितीय संचालन करें।
:*अंकगणित: जोड़ और गुणा जैसे मूलभूतअंकगणितीय संचालन करें।
:*सशर्त निष्पादन: कुछ शर्तों की जाँच करें और कथनों के उचित क्रम को निष्पादित करें।
:*सशर्त निष्पादन: कुछ शर्तों की जाँच करें और कथनों के उचित क्रम को निष्पादित करें।
:*पुनरावृत्ति: कुछ क्रिया को बार-बार करें, सामान्यतः कुछ भिन्नता के साथ।
:*पुनरावृत्ति: कुछ क्रिया को बार-बार करें, सामान्यतः कुछ भिन्नता के साथ।


कई कंप्यूटर भाषाएं [[ साझा पुस्तकालय ]] द्वारा प्रदान किए गए कार्यों को कॉल करने के लिए एक तंत्र प्रदान करती हैं। बशर्ते पुस्तकालय में कार्य उपयुक्त रन-टाइम सम्मेलनों (उदाहरण के लिए, तर्क पारित करने की विधि (कंप्यूटर विज्ञान)) का पालन करें, तो इन कार्यों को किसी अन्य भाषा में लिखा जा सकता है।
अनेक कंप्यूटर भाषाएं [[ साझा पुस्तकालय |साझा पुस्तकालय]] द्वारा प्रदान किए गए कार्यों को कॉल करने के लिए तंत्र प्रदान करती हैं। परंतु पुस्तकालय में कार्य उपयुक्त रन-टाइम सम्मेलनों (उदाहरण के लिए, तर्क पारित करने की विधि (कंप्यूटर विज्ञान) का पालन करें, तब इन कार्यों को किसी अन्य भाषा में लिखा जा सकता है।


==प्रोग्रामर==
=='''प्रोग्रामर'''==
{{Main|प्रोग्रामर|सॉफ्टवेयर इंजीनियर}}
{{Main|प्रोग्रामर|सॉफ्टवेयर इंजीनियर}}
कंप्यूटर प्रोग्रामर वे होते हैं जो कंप्यूटर सॉफ्टवेयर लिखते हैं। उनकी नौकरियों में सामान्यतः सम्मिलित हैं:
कंप्यूटर प्रोग्रामर वह होते हैं जो कंप्यूटर सॉफ्टवेयर लिखते हैं। इस प्रकार उनकी नौकरियों में सामान्यतः सम्मिलित हैं:
{{div col|colwidth=30em}}
{{div col|colwidth=30em}}
*प्रोटोटाइपिंग
*प्रोटोटाइपिंग
Line 121: 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}}==
=='''यह भी देखें'''{{Portal|Computer programming}}==
{{Main|कंप्यूटर प्रोग्रामिंग की रूपरेखा}}
{{Main|कंप्यूटर प्रोग्रामिंग की रूपरेखा}}
Line 141: Line 141:
{{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=कंप्यूटिंग का इतिहास|last=Ceruzzi|first=Paul E.|publisher=MIT Press|year=1998|isbn=9780262032551|location=Cambridge, Massachusetts|url-access=registration|via=EBSCOhost}}
*{{Cite book|url=https://books.google.com/books?id=C8ouDwAAQBAJ&q=9780735211759&pg=PP1|title=Broad Band: The Untold Story of the Women Who Made the Internet|last=Evans|first=Claire L.|publisher=Portfolio/Penguin|year=2018|isbn=9780735211759|location=New York}}
*{{Cite book|url=https://books.google.com/books?id=C8ouDwAAQBAJ&q=9780735211759&pg=PP1|title=ब्रॉड बैंड: इंटरनेट बनाने वाली महिलाओं की अनकही कहानी|last=Evans|first=Claire L.|publisher=Portfolio/Penguin|year=2018|isbn=9780735211759|location=New York}}
*{{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=कंप्यूटर विज्ञान में अग्रणी महिलाएँ|url=https://courses.cs.washington.edu/courses/csep590/06au/readings/p175-gurer.pdf|journal=एसीएम का संचार|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=कंप्यूटिंग में महिलाओं के इतिहास के माध्यम से सामूहिक विरासत को पहचानना|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)
* ए.के. हार्टमैन, ''[https://web.archive.org/web/20090211113048/http://worldscibooks.com/physics/6988.html कंप्यूटर सिमुलेशन के लिए प्रैक्टिकल गाइड]'', सिंगापुर: [[World Scientific|विश्व वैज्ञानिक]] (2009)
Line 150: Line 150:
* ब्रायन डब्ल्यू कर्निघन, द प्रैक्टिस ऑफ़ प्रोग्रामिंग, पियर्सन (1999)
* ब्रायन डब्ल्यू कर्निघन, द प्रैक्टिस ऑफ़ प्रोग्रामिंग, पियर्सन (1999)
* [[Gerald Weinberg|वेनबर्ग, जेराल्ड एम.]], कंप्यूटर प्रोग्रामिंग का मनोविज्ञान, न्यूयॉर्क: वैन नॉस्ट्रैंड रेनहोल्ड (1971)
* [[Gerald Weinberg|वेनबर्ग, जेराल्ड एम.]], कंप्यूटर प्रोग्रामिंग का मनोविज्ञान, न्यूयॉर्क: वैन नॉस्ट्रैंड रेनहोल्ड (1971)
* [[Edsger W. Dijkstra|एड्सगर डब्ल्यू डिज्क्स्ट्रा]], प्रोग्रामिंग का एक अनुशासन, प्रेंटिस-हॉल (1976)
* [[Edsger W. Dijkstra|एड्सगर डब्ल्यू डिज्क्स्ट्रा]], प्रोग्रामिंग का अनुशासन, प्रेंटिस-हॉल (1976)
* ओ.-जे. डाहल, [[Edsger W. Dijkstra|ई.डब्ल्यू.डिज्क्स्ट्रा]], कार। होरे, स्ट्रक्चर्ड प्रोग्रामिंग, अकादमिक प्रेस (1972)
* ओ.-जे. डाहल, [[Edsger W. Dijkstra|ई.डब्ल्यू.डिज्क्स्ट्रा]], कार। होरे, स्ट्रक्चर्ड प्रोग्रामिंग, अकादमिक प्रेस (1972)
* [[David Gries|डेविड ग्रिज़]], प्रोग्रामिंग का विज्ञान, स्प्रिंगर-वेरलाग (1981)
* [[David Gries|डेविड ग्रिज़]], प्रोग्रामिंग का विज्ञान, स्प्रिंगर-वेरलाग (1981)
Line 157: Line 157:
==बाहरी संबंध==
==बाहरी संबंध==
{{Library resources box|onlinebooks=yes}}
{{Library resources box|onlinebooks=yes}}
{{Wikibooks|Computer Programming}}
{{Wikibooks|Windows Programming}}
{{Wikiversity|Computer Programming}}
*{{Commons category-inline|कंप्यूटर प्रोग्रामिंग}}
*{{Commons category-inline|कंप्यूटर प्रोग्रामिंग}}
*{{Wikiquote-inline|प्रोग्रामिंग}}
*{{Wikiquote-inline|प्रोग्रामिंग}}
Line 172: Line 169:
[[Category: Machine Translated Page]]
[[Category: Machine Translated Page]]
[[Category:Created On 08/09/2022]]
[[Category:Created On 08/09/2022]]
[[Category:Vigyan Ready]]

Latest revision as of 07:00, 16 October 2023

कंप्यूटर प्रोग्रामिंग विशेष गणना (या अधिक सामान्यतः, विशिष्ट कम्प्यूटिंग परिणाम को पूर्ण करने) की प्रक्रिया होती है, सामान्यतः निष्पादन योग्य कंप्यूटर प्रोग्राम को डिजाइन और निर्माण करके प्रोग्रामिंग में विश्लेषण, कलन विधि उत्पन्न करना, प्रोफाइलिंग (कंप्यूटर प्रोग्रामिंग) एल्गोरिदम की त्रुटिहीनता और संसाधन खपत, और एल्गोरिदम के कार्यान्वयन (सामान्यतः चुनी हुई प्रोग्रामिंग भाषा में, जिसे सामान्यतः कोडिंग कहा जाता है) जैसे कार्य सम्मिलित होते हैं।[1][2] इस प्रकार प्रोग्राम का सोर्स कोड या इससे अधिक भाषाओं में लिखा जाता है जो प्रोग्रामरस के लिए समझ में आता है, न कि मशीन कोड, जिसे सीधे सेंट्रल प्रोसेसिंग यूनिट द्वारा निष्पादित किया जाता है। सामान्यतः प्रोग्रामिंग का उद्देश्य निर्देशों का क्रम खोजना है जो, अधिकांशतः किसी समस्या को हल करने के लिए किसी संगणक पर किसी कार्य के प्रदर्शन (जो कि ऑपरेटिंग प्रणाली जितना समष्टि हो सकता है) को स्वचालित करता है। इस प्रकार कुशल प्रोग्रामिंग को सामान्यतः अनेक भिन्न-भिन्न विषयों में विशेषज्ञता की आवश्यकता होती है, जिसमें डोमेन (सॉफ्टवेयर अभियांत्रिकी), विशेष एल्गोरिदम और औपचारिक तर्क का ज्ञान सम्मिलित होता है।

प्रोग्रामिंग के साथ और संबंधित कार्यों में सॉफ्टवेयर परीक्षण, डिबगिंग, स्रोत कोड रखरखाव, स्वचालन बनाएँ का कार्यान्वयन, और व्युत्पन्न आर्टिफैक्ट (सॉफ़्टवेयर विकास) का प्रबंधन, जैसे कंप्यूटर प्रोग्राम का मशीन कोड सम्मिलित होता है। इन्हें प्रोग्रामिंग प्रक्रिया का भाग माना जा सकता है, किन्तु अधिकांशतः सॉफ्टवेयर डेवलपमेंट शब्द का उपयोग इस बड़ी प्रक्रिया के लिए किया जाता है, जिसमें प्रोग्रामिंग, कार्यान्वयन या कोड के वास्तविक लेखन के लिए आरक्षित कोडिंग शब्द होता है। सॉफ्टवेयर इंजीनियरिंग सॉफ्टवेयर विकास प्रथाओं के साथ इंजीनियरिंग विधि ों को जोड़ती है। रिवर्स इंजीनियरिंग संबंधित प्रक्रिया है जिसका उपयोग डिजाइनरों, विश्लेषकों और प्रोग्रामर द्वारा समझने और फिर से बनाने / फिर से प्रयुक्त करने के लिए किया जाता है।[3]

इतिहास

कार्यक्रम (मशीन) सदियों से अस्तित्व में है। इस प्रकार 9वीं शताब्दी के प्रारंभ में, फ़ारसी बानू मूसा भाइयों द्वारा प्रोग्राम योग्य संगीत अनुक्रमक का आविष्कार किया गया था, जिन्होंने सरल उपकरणों की पुस्तक में स्वचालित यांत्रिक बांसुरी वादक का वर्णन किया था।[4][5] सामान्यतः सन्न 1206 में, अरब इंजीनियर अल जजारी ने प्रोग्राम करने योग्य ड्रम मशीन का आविष्कार किया था, जहां खूंटे और सांचा के माध्यम से विभिन्न ताल और ड्रम पैटर्न को चलाने के लिए संगीत यांत्रिक आटोमैटिक मशीन बनाया जा सकता है।[6][7] सन्न 1801 में, जैक्वार्ड करघा कार्यक्रम को परिवर्तित करके पूर्ण प्रकार से भिन्न बुनाई का उत्पादन कर सकता था - कार्ड स्टॉक कार्डों की श्रृंखला जिसमें छेद किए गए थे।

कोड ब्रेकिंग एल्गोरिदम भी सदियों से उपस्तिथ हैं। 9वीं शताब्दी में, मध्ययुगीन इस्लाम कैनेडियन में गणित ने क्रिप्टोग्राफिक संदेशों को डिक्रिप्ट करने पर पांडुलिपि में एन्क्रिप्टेड कोड को समझने के लिए क्रिप्टोग्राफ़िक एल्गोरिदम का वर्णन किया था। उन्होंने आवृत्ति विश्लेषण द्वारा क्रिप्ट विश्लेषण का पहला विवरण दिया था, जो सबसे पुराना कोड-ब्रेकिंग एल्गोरिथम था।[8]

पहला कंप्यूटर प्रोग्राम सामान्यतः सन्न 1843 का है, जब गणितज्ञ एडा लवलेस ने बर्नौली संख्याओं के अनुक्रम की गणना करने के लिए एल्गोरिदम प्रकाशित किया था, जिसका उद्देश्य चार्ल्स बैबेज के विश्लेषणात्मक इंजन द्वारा किया जाना था।[9]

डेटा और निर्देश बार बाहरी छिद्रित कार्डों पर संग्रहीत किए जाते थे, जिन्हें क्रम में रखा जाता था और प्रोग्राम डेक में व्यवस्थित किया जाता था।

सन्न 1880 के दशक में हरमन होलेरिथ ने मशीन-पठनीय रूप में डेटा संग्रहीत करने की अवधारणा का आविष्कार किया था।[10] इसके पश्चात् में उनके 1906 टाइप टेबुलेटर में प्लगबोर्ड (प्लग बोर्ड) जोड़ा गया था, जिससे इसे विभिन्न नौकरियों के लिए प्रोग्राम किया जा सकता था, और सन्न 1940 के दशक के अंत तक, यूनिट रिकॉर्ड उपकरण जैसे कि आई०बी०एम० 602 और आई०बी०एम० 604 को इसी प्रकार से कंट्रोल पैनल द्वारा प्रोग्राम किया गया था, जैसा कि पहले इलेक्ट्रॉनिक कंप्यूटर होते थे। चूँकि, सन्न 1949 में प्रस्तुत किए गए संग्रहीत-प्रोग्राम कंप्यूटर की अवधारणा के साथ, प्रोग्राम और डेटा दोनों को स्मृति में उसी प्रकार से स्टोर और हेरफेर किया गया था।[11]

मशीन की भाषा

मशीन कोड प्रारंभिक कार्यक्रमों की भाषा होती थी, जिसे विशेष मशीन के निर्देश समूह में लिखा जाता था, अधिकांशतः बाइनरी अंक प्रणाली संकेतन में असेंबली भाषाएं जल्द ही विकसित की गईं थी कि प्रोग्रामर को प्रत्येक ऑपरेशन कोड के लिए संक्षिप्त नाम और पते निर्दिष्ट करने के लिए सार्थक नामों के साथ टेक्स्ट प्रारूप (जैसे, एडीडी एक्स, टोटल) में निर्देश निर्दिष्ट करने देंते है। चूँकि, जिससे कि असेंबली भाषा मशीनी भाषा के लिए भिन्न संकेतन से थोड़ी अधिक होती है, निर्देश समूह आर्किटेक्चर की तुलना वाली दो मशीनों में भी भिन्न-भिन्न असेंबली भाषाएँ होती हैं।

आईबीएम 402 लेखा मशीन के लिए वायर्ड प्लगबोर्ड। तार कार्ड रीडर से पल्स स्ट्रीम को काउंटर और अन्य आंतरिक तर्क से और अंततः प्रिंटर से जोड़ते हैं।

संकलक भाषाएं

उच्च-स्तरीय भाषाओं ने प्रोग्राम को विकसित करने की प्रक्रिया को सरल और अधिक समझने योग्य, और अंतर्निहित संगणक धातु सामग्री से कम बाध्य किया है।

पहला कंपाइलर संबंधित टूल, ए-0 प्रणाली, सन्न 1952 में विकसित किया गया था।[12] इस प्रकार ग्रेस हूपर द्वारा, जिन्होंने 'कंपाइलर' शब्द भी गढ़ा है।[13][14] फोरट्रानी, पहली व्यापक रूप से उपयोग की जाने वाली उच्च-स्तरीय भाषा जिसका कार्यात्मक कार्यान्वयन है, सन्न 1957 में सामने आया है,[15] और अनेक अन्य भाषाएँ जल्द ही विकसित हुईं- विशेष रूप से, कोबोल का उद्देश्य व्यावसायिक डेटा प्रोसेसिंग और कंप्यूटर अनुसंधान के लिए लिप्स (प्रोग्रामिंग भाषा) है।

यह संकलित भाषाएं प्रोग्रामर को ऐसे प्रोग्राम लिखने की अनुमति देती हैं जो वाक्यात्मक रूप से समृद्ध हैं, और अमूर्त (कंप्यूटर विज्ञान) कोड के लिए अधिक सक्षम होती हैं, जिससे संकलन घोषणाओं और अनुमानों के माध्यम से भिन्न-भिन्न मशीन निर्देश समूहों को लक्षित करना सरल हो जाता है। प्रोग्रामिंग को सरल बनाने के लिए कंपाइलर्स ने कंप्यूटर की शक्ति का उपयोग किया जाता है।[15] इस प्रकार प्रोग्रामर्स को इन्फिक्स नोटेशन का उपयोग करके सूत्र अंकित करके गणना निर्दिष्ट करने की अनुमति देकर उपयोग किया जाता है।

स्रोत कोड प्रविष्टि

प्रोग्राम अधिकतर पंच कार्ड या कागज का टेप का उपयोग करके अंकित किए गए थे। सन्न 1960 के दशक के अंत तक, डेटा स्टोरेज डिवाइस और कंप्यूटर टर्मिनल इतने सस्ते हो गए थे कि सीधे कंप्यूटर में टाइप करके प्रोग्राम बनाए जा सकते थे। इस प्रकार पाठ संपादकों को भी विकसित किया गया था जो पंच कार्ड सॉर्टर की तुलना में परिवर्तन और सुधार को अधिक सरलता से करने की अनुमति देते थे।

आधुनिक प्रोग्रामिंग

गुणवत्ता की आवश्यकताएं

विकास का दृष्टिकोण जो भी होता है, अतः अंतिम कार्यक्रम को कुछ मूलभूत गुणों को पूर्ण करना होता है। निम्नलिखित गुण सबसे महत्वपूर्ण में से हैं:[16]

  • विश्वसनीयता इंजीनियरिंग सॉफ्टवेयर विश्वसनीयता: किसी प्रोग्राम के परिणाम कितनी बार सही होते हैं। यह एल्गोरिदम की वैचारिक शुद्धता और प्रोग्रामिंग गलतियों को कम करने पर निर्भर करता है, जैसे संसाधन प्रबंधन में गलतियाँ (जैसे, बफ़र अधिकता और दौड़ की स्थिति ) और तर्क त्रुटियां (जैसे कि शून्य से विभाजन या ऑफ-बाय-वन त्रुटियां)।
  • शक्तिशाली (कंप्यूटर विज्ञान) : त्रुटियों के कारण प्रोग्राम कितनी अच्छी प्रकार समस्याओं का अनुमान लगाता है (बग नहीं)। इसमें गलत, अनुपयुक्त या भ्रष्ट डेटा, मेमोरी, ऑपरेटिंग प्रणाली सेवाओं और नेटवर्क कनेक्शन जैसे आवश्यक संसाधनों की अनुपलब्धता, उपयोगकर्ता त्रुटि, और अप्रत्याशित पावर आउटेज जैसी स्थितियां सम्मिलित हैं।
  • प्रयोज्यता: कार्यक्रम का श्रमदक्षता शास्त्र : वह सरलता से जिसके साथ कोई व्यक्ति अपने इच्छित उद्देश्य के लिए या कुछ स्थितियों में अप्रत्याशित उद्देश्यों के लिए भी कार्यक्रम का उपयोग कर सकता है। इस प्रकार के मुद्दे अन्य विवादों की परवाह किए बिना इसकी सफलता को बना या बिगाड़ सकते हैं। इसमें टेक्स्टुअल, ग्राफिकल और कभी-कभी हार्डवेयर तत्वों की विस्तृत श्रृंखला सम्मिलित होती है जो प्रोग्राम के यूजर इंटरफेस की स्पष्टता, सहजता, सामंजस्य और पूर्णता में सुधार करती है।
  • सॉफ्टवेयर पोर्टेबिलिटी : कंप्यूटर हार्डवेयर और ऑपरेटिंग प्रणाली प्लेटफॉर्म की वह रेंज जिस पर प्रोग्राम के सोर्स कोड को संकलित / दुभाषिया (कंप्यूटिंग) और चलाया जा सकता है। यह विभिन्न प्लेटफार्मों द्वारा प्रदान की जाने वाली प्रोग्रामिंग सुविधाओं में अंतर पर निर्भर करता है, जिसमें हार्डवेयर और ऑपरेटिंग प्रणाली संसाधन, हार्डवेयर और ऑपरेटिंग प्रणाली का अपेक्षित व्यवहार और स्रोत कोड की भाषा के लिए प्लेटफॉर्म-विशिष्ट कंपाइलर्स (और कभी-कभी लाइब्रेरी) की उपलब्धता सम्मिलित है।
  • रखरखाव: सुधार करने या अनुकूलित करने, सॉफ्टवेयर बग और भेद्यता (कंप्यूटिंग) को ठीक करने या इसे नए वातावरण में अनुकूलित करने के लिए किसी प्रोग्राम को उसके वर्तमान या भविष्य के डेवलपर्स द्वारा सरली से संशोधित किया जा सकता है। अच्छे आचरण[17] प्रारंभिक विकास के समय इस संबंध में फर्क करते हैं। यह गुण सीधे अंतिम उपयोगकर्ता के लिए स्पष्ट नहीं हो सकता है, किन्तु यह दीर्घकालिक रूप से किसी कार्यक्रम के भाग्य को महत्वपूर्ण रूप से प्रभावित कर सकता है।
  • एल्गोरिदमिक दक्षता/प्रदर्शन इंजीनियरिंग : प्रोग्राम द्वारा खपत किए जाने वाले प्रणाली संसाधनों का माप (प्रोसेसर समय, मेमोरी स्पेस, डिस्क जैसे धीमे उपकरण, नेटवर्क बैंडविड्थ और कुछ सीमा तक यहां तक ​​कि उपयोगकर्ता इंटरैक्शन): कम, उत्तम होता है। इसमें संसाधनों का सावधानीपूर्वक प्रबंधन भी सम्मिलित है, उदाहरण के लिए अस्थायी फ़ाइलों को साफ करना और स्मृति रिसाव को समाप्त किया जाता है। यह अधिकांशतः चुनी हुई प्रोग्रामिंग भाषा की छाया में चर्चा की जाती है। चूंकि भाषा निश्चित रूप से प्रदर्शन को प्रभावित करती है, यहां तक ​​​​कि धीमी भाषाएं, जैसे कि पायथन (प्रोग्रामिंग भाषा), मानवीय दृष्टिकोण से कार्यक्रमों को तुरंत निष्पादित कर सकती हैं। गति, संसाधन उपयोग और प्रदर्शन उन प्रोग्रामों के लिए महत्वपूर्ण हैं जो प्रणाली की अड़चन (सॉफ्टवेयर) हैं, किन्तु प्रोग्रामर समय का कुशल उपयोग भी महत्वपूर्ण है और निवेश से संबंधित है, अतः अधिक हार्डवेयर सस्ता हो सकता है।

स्रोत कोड की पठनीयता

कंप्यूटर प्रोग्रामिंग में, पठनीयता से तात्पर्य उस सहजता से है जिसके साथ मानव पाठक स्रोत कोड के उद्देश्य, नियंत्रण प्रवाह और संचालन को समझ सकता है। यह पोर्टेबिलिटी, उपयोगिता और सबसे महत्वपूर्ण रखरखाव सहित उपरोक्त गुणवत्ता के पहलुओं को प्रभावित करता है।

पठनीयता महत्वपूर्ण है जिससे कि प्रोग्रामर अपना अधिकांश समय नए स्रोत कोड को लिखने के अतिरिक्त पढ़ने, समझने, पुन: उपयोग करने और उपस्तिथा स्रोत कोड को संशोधित करने में व्यतीत करते हैं। इस प्रकार अपठनीय कोड अधिकांशतः बग, अक्षमता और कोड दोहराव की ओर ले जाता है। चूँकि अध्ययन में पाया गया कि कुछ सरल पठनीयता परिवर्तनों ने कोड को छोटा बना दिया और इसे समझने के लिए समय को अधिक कम कर दिया जाता है।[18]

सुसंगत प्रोग्रामिंग शैली के पश्चात् अधिकांशतः पठनीयता में सहायता मिलती है। चूँकि, पठनीयता केवल प्रोग्रामिंग शैली से अधिक है। कोड को कुशलतापूर्वक संकलित और निष्पादित करने के लिए कंप्यूटर की क्षमता के साथ बहुत कम या कुछ भी नहीं होने वाले अनेक कारक, पठनीयता में योगदान करते हैं।[19] इनमें से कुछ कारकों में सम्मिलित हैं:

इसके प्रस्तुतिकरण और सामग्री पहलुओं को भिन्न करना (जैसे इंडेंट, लाइन ब्रेक, रंग हाइलाइटिंग, और इसी प्रकार) अधिकांशतः स्रोत कोड संपादक द्वारा नियंत्रित किया जाता है, किन्तु सामग्री पहलू प्रोग्रामर की प्रतिभा और कौशल को दर्शाते हैं।

कोड संरचना और प्रदर्शन के लिए गैर-पारंपरिक दृष्टिकोण अपनाकर पठनीयता संबंधी चिंताओं को हल करने के इरादे से विभिन्न दृश्य प्रोग्रामिंग भाषा ओं को भी विकसित किया गया है। एकीकृत विकास वातावरण (आई.डी.ईएस) का उद्देश्य ऐसी सभी सहायता को एकीकृत करना है। अतः कोड रिफैक्टरिंग जैसी विधि पठनीयता को बढ़ा सकती हैं।

एल्गोरिदमिक समष्टिता

कंप्यूटर प्रोग्रामिंग का अकादमिक क्षेत्र और इंजीनियरिंग अभ्यास दोनों ही मुख्य रूप से किसी दिए गए वर्ग की समस्याओं के लिए सबसे कुशल एल्गोरिदम की खोज और कार्यान्वयन से संबंधित हैं। इस उद्देश्य के लिए, एल्गोरिदम को तथाकथित बिग ओ नोटेशन का उपयोग करके ऑर्डर में वर्गीकृत किया जाता है, जो इनपुट के आकार के संदर्भ में संसाधन उपयोग, जैसे निष्पादन समय या मेमोरी खपत को व्यक्त करता है। विशेषज्ञ प्रोग्रामर विभिन्न प्रकार के अच्छी प्रकार से स्थापित एल्गोरिदम और उनकी संबंधित समष्टिताओं से परिचित हैं और इस ज्ञान का उपयोग एल्गोरिदम चुनने के लिए करते हैं जो परिस्थितियों के लिए सबसे उपयुक्त हैं।

शतरंज एल्गोरिदम उदाहरण के रूप में

शतरंज खेलने के लिए कंप्यूटर प्रोग्रामिंग करना 1950 का पेपर था जिसने मिनीमैक्स एल्गोरिथम का मूल्यांकन किया जो एल्गोरिथम समष्टिता के इतिहास का भाग है; आईबीएम के डीप ब्लू (शतरंज कंप्यूटर) पर पाठ्यक्रम स्टैनफोर्ड विश्वविद्यालय में कंप्यूटर विज्ञान पाठ्यक्रम का भाग है।[20]

विधिया

अधिकांश औपचारिक सॉफ्टवेयर विकास प्रक्रियाओं में पहला कदम आवश्यकताओं का विश्लेषण है, इसके पश्चात् मूल्य मॉडलिंग, कार्यान्वयन और विफलता उन्मूलन (डीबगिंग) निर्धारित करने के लिए परीक्षण किया जाता है। उन कार्यों में से प्रत्येक के लिए अनेक भिन्न-भिन्न दृष्टिकोण उपस्तिथ हैं। इस पाकर आवश्यकताओं के विश्लेषण के लिए लोकप्रिय दृष्टिकोण है जो केस विश्लेषण का उपयोग करती है। अनेक प्रोग्रामर चुस्त सॉफ्टवेयर विकास के रूपों का उपयोग करते हैं जहां औपचारिक सॉफ्टवेयर विकास के विभिन्न चरणों को साथ छोटे चक्रों में एकीकृत किया जाता है जिसमें वर्षों के अतिरिक्त कुछ सप्ताह लगते हैं। सॉफ्टवेयर विकास प्रक्रिया के अनेक दृष्टिकोण हैं।

लोकप्रिय मॉडलिंग विधियों में ऑब्जेक्ट-ओरिएंटेड एनालिसिस एंड डिज़ाइन (ओओएडी ) और मॉडल-संचालित वास्तुकला (मॉडल-ड्रिवेन आर्किटेक्चर) सम्मिलित हैं। सामान्यतः एकीकृत मॉडलिंग भाषा (यूनिफाइड मॉडलिंग लैंग्वेज) ओओएडी और एमडीए दोनों के लिए उपयोग किया जाने वाला नोटेशन है।

डेटाबेस डिज़ाइन के लिए उपयोग की जाने वाली समान विधि इकाई-संबंध मॉडल (इकाई-रिलेशनशिप मॉडल) है।

कार्यान्वयन विधियों में अनिवार्य भाषाएं (वस्तु उन्मुख कार्यकर्म या प्रक्रियात्मक प्रोग्रामिंग), कार्यात्मक प्रोग्रामिंग और तर्क प्रोग्रामिंग सम्मिलित होता हैं।

भाषा के उपयोग को मापना

यह निर्धारित करना बहुत कठिनाई है कि सबसे लोकप्रिय आधुनिक प्रोग्रामिंग भाषाएं कौन सी हैं। प्रोग्रामिंग भाषा की लोकप्रियता को मापने के तरीकों में सम्मिलित हैं: भाषा का उल्लेख करने वाले नौकरी विज्ञापनों की संख्या की गणना करना,[21] बेची गई पुस्तकों की संख्या और भाषा सिखाने वाले पाठ्यक्रम (यह नई भाषाओं के महत्व को अधिक महत्व देता है), और भाषा में लिखी गई कोड की उपस्तिथा पंक्तियों की संख्या का अनुमान (यह कोबोल जैसी व्यावसायिक भाषाओं के उपयोगकर्ताओं की संख्या को कम करके आंकता है)।

कुछ भाषाएँ विशेष प्रकार के अनुप्रयोगों के लिए बहुत लोकप्रिय होती हैं, जबकि कुछ भाषाएँ नियमित रूप से अनेक भिन्न-भिन्न प्रकार के अनुप्रयोगों को लिखने के लिए उपयोग की जाती हैं। उदाहरण के लिए, कॉर्पोरेट डेटा केंद्रों में कोबोल अभी भी शक्तिशाली है।[22] अधिकांशतः बड़े मेनफ़्रेम कंप्यूटर पर, इंजीनियरिंग अनुप्रयोगों में फोरट्रान , वर्ल्ड वाइड वेब विकास में स्क्रिप्टिंग भाषाएं, और उपकरणों के नियंत्रण के लिए सॉफ्टवेयर में सी (प्रोग्रामिंग भाषा) अनेक एप्लिकेशन अपने निर्माण और उपयोग में अनेक भाषाओं के मिश्रण का उपयोग करते हैं। नई भाषाओं को सामान्यतः नई कार्यक्षमता के साथ पूर्व भाषा के सिंटैक्स के आसपास डिज़ाइन किया गया है, (उदाहरण के लिए सी++ , सी में ऑब्जेक्ट-ओरिएंटेशन जोड़ता है, और जावा (प्रोग्रामिंग भाषा) सी++ में मेमोरी मैनेजमेंट और बाईटकोड जोड़ता है, किन्तु परिणामस्वरूप, दक्षता खो देता है और निम्न-स्तरीय हेरफेर की क्षमता)।

डिबगिंग

कंप्यूटर में समस्या उत्पन्न करने वाला पहला ज्ञात वास्तविक बग कीट था, जो हार्वर्ड मेनफ्रेम के अंदर फंसा हुआ था, जिसे 9 सितंबर, 1947 की लॉग बुक प्रविष्टि में अंकित किया गया था।[23] सॉफ़्टवेयर दोष के लिए बग पहले से ही सामान्य शब्द था जब यह कीट पाया गया था।

सॉफ्टवेयर विकास प्रक्रिया में डिबगिंग बहुत ही महत्वपूर्ण कार्य है जिससे कि किसी प्रोग्राम में दोष होने के कारण इसके उपयोगकर्ताओं के लिए महत्वपूर्ण परिणाम हो सकते हैं। कुछ भाषाएँ कुछ प्रकार के दोषों के लिए अधिक प्रवण होती हैं जिससे कि उनके विनिर्देशन के लिए अन्य भाषाओं की भांति अधिक जाँच करने के लिए संकलक की आवश्यकता नहीं होती है। इस प्रकार स्थिर कोड विश्लेषण उपकरण का उपयोग कुछ संभावित समस्याओं का पता लगाने में सहायता कर सकता है। सामान्यतः डिबगिंग में पहला कदम समस्या को पुन: उत्पन्न करने का प्रयास करना है। यह गैर-तुच्छ कार्य हो सकता है, उदाहरण के लिए समानांतर प्रक्रियाओं या कुछ असामान्य सॉफ़्टवेयर बग के साथ-साथ ही, विशिष्ट उपयोगकर्ता परिवेश और उपयोग इतिहास समस्या को पुन: उत्पन्न करना कठिनाई बना सकता है।

बग के पुनरुत्पादन के पश्चात्, प्रोग्राम के इनपुट को डिबग करना सरल बनाने के लिए सरल बनाने की आवश्यकता हो सकती है। उदाहरण के लिए, जब कंपाइलर में बग कुछ बड़े स्रोत फ़ाइल को पदच्छेद करते समय इसे क्रैश कर सकता है, तब परीक्षण केस का सरलीकरण जिसके परिणामस्वरूप मूल स्रोत फ़ाइल से केवल कुछ पंक्तियां होती हैं, वही क्रैश को पुन: उत्पन्न करने के लिए पर्याप्त हो सकती है। परीक्षण-और-त्रुटि/विभाजन-और-जीत की आवश्यकता है: प्रोग्रामर मूल परीक्षण स्थितियों के कुछ भागों को हटाने का प्रयास करता है और जांच करता है कि समस्या अभी भी उपस्तिथ है या नहीं। जीयूआई में समस्या को डीबग करते समय, प्रोग्रामर मूल समस्या विवरण से कुछ उपयोगकर्ता इंटरैक्शन को छोड़ने का प्रयास कर सकता है और जांच सकता है कि बग प्रकट होने के लिए शेष क्रियाएं पर्याप्त हैं या नहीं। स्क्रिप्टिंग और ब्रेकपाइंट भी इसी प्रक्रिया का भाग है।

डिबगिंग अधिकांशतः एकीकृत विकास वातावरण के साथ किया जाता है। इस प्रकार जीडीबी जैसे स्टैंडअलोन डिबगर्स का भी उपयोग किया जाता है, और यह अधिकांशतः कम दृश्य वातावरण प्रदान करते हैं, सामान्यतः कमांड लाइन का उपयोग करते हुए। कुछ पाठ संपादक जैसे ईमस्स जीडीबी को उनके माध्यम से दृश्य वातावरण प्रदान करने की अनुमति देते हैं।

प्रोग्रामिंग भाषाएं

विभिन्न प्रोग्रामिंग भाषाएं प्रोग्रामिंग की विभिन्न शैलियों का समर्थन करती हैं (जिन्हें प्रोग्रामिंग प्रतिमान कहा जाता है)। उपयोग की जाने वाली भाषा का चुनाव अनेक बातों पर निर्भर करता है, जैसे कंपनी की नीति, कार्य के लिए उपयुक्तता, तीसरे पक्ष के पैकेज की उपलब्धता, या व्यक्तिगत वरीयता इत्यादि। इस प्रकार आदर्श रूप से, कार्य के लिए सबसे उपयुक्त प्रोग्रामिंग भाषा का चयन किया जाता है। इस आदर्श से ट्रेड-ऑफ में पर्याप्त प्रोग्रामर खोजना सम्मिलित है जो समूह बनाने के लिए भाषा जानते हैं, उस भाषा के लिए कंपाइलर्स की उपलब्धता, और दक्षता जिसके साथ किसी भाषा में लिखे गए प्रोग्राम निष्पादित होते हैं। भाषाएँ निम्न-स्तर से उच्च-स्तर तक अनुमानित स्पेक्ट्रम बनाती हैं; निम्न-स्तरीय भाषाएँ सामान्यतः अधिक मशीन-उन्मुख होती हैं और निष्पादित करने में तेज़ होती हैं, जबकि उच्च-स्तरीय भाषाएँ अधिक सारगर्भित और उपयोग में सरल होती हैं किन्तु कम तेज़ी से निष्पादित होती हैं। सामान्यतः निम्न-स्तरीय भाषाओं की तुलना में उच्च-स्तरीय भाषाओं में कोड करना सरल होता है।

सॉफ्टवेयर विकास के लिए प्रोग्रामिंग भाषाएं आवश्यक हैं। वह सबसे सरल अनुप्रयोगों से लेकर सबसे परिष्कृत तक, सभी सॉफ़्टवेयर के लिए बिल्डिंग ब्लॉक हैं।

एलन डाउनी ने अपनी पुस्तक हाउ टू थिंक लाइक ए कंप्यूटर साइंटिस्ट में लिखा है:

विवरण भिन्न-भिन्न भाषाओं में भिन्न-भिन्न दिखते हैं, किन्तु कुछ मूलभूतनिर्देश लगभग प्रत्येक भाषा में दिखाई देते हैं:
  • इनपुट: कीबोर्ड, फ़ाइल या किसी अन्य डिवाइस से डेटा एकत्र करें।
  • आउटपुट: स्क्रीन पर डेटा प्रदर्शित करें या किसी फ़ाइल या अन्य डिवाइस पर डेटा भेजें।
  • अंकगणित: जोड़ और गुणा जैसे मूलभूतअंकगणितीय संचालन करें।
  • सशर्त निष्पादन: कुछ शर्तों की जाँच करें और कथनों के उचित क्रम को निष्पादित करें।
  • पुनरावृत्ति: कुछ क्रिया को बार-बार करें, सामान्यतः कुछ भिन्नता के साथ।

अनेक कंप्यूटर भाषाएं साझा पुस्तकालय द्वारा प्रदान किए गए कार्यों को कॉल करने के लिए तंत्र प्रदान करती हैं। परंतु पुस्तकालय में कार्य उपयुक्त रन-टाइम सम्मेलनों (उदाहरण के लिए, तर्क पारित करने की विधि (कंप्यूटर विज्ञान) का पालन करें, तब इन कार्यों को किसी अन्य भाषा में लिखा जा सकता है।

प्रोग्रामर

कंप्यूटर प्रोग्रामर वह होते हैं जो कंप्यूटर सॉफ्टवेयर लिखते हैं। इस प्रकार उनकी नौकरियों में सामान्यतः सम्मिलित हैं:

यद्यपि मीडिया में प्रोग्रामिंग को कुछ सीमा तक गणितीय विषय के रूप में प्रस्तुत किया गया है, कुछ शोध से पता चलता है कि अच्छे प्रोग्रामर के पास प्राकृतिक मानव भाषाओं में शक्तिशाली कौशल है, और यह कि कोड सीखना विदेशी भाषा सीखने के समान है।[24]

यह भी देखें

संदर्भ

  1. Bebbington, Shaun (2014). "What is coding". Tumblr. Archived from the original on 2020-04-29. Retrieved 2014-03-03.
  2. Bebbington, Shaun (2014). "What is programming". Tumblr. Archived from the original on 2020-04-29. Retrieved 2014-03-03.
  3. Eliam, Eldad (2005). Reversing: Secrets of Reverse Engineering. Wiley. p. 3. ISBN 978-0-7645-7481-8.
  4. 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.
  5. 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.
  6. 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.
  7. Noel Sharkey (2007), A 13th Century Programmable Robot, University of Sheffield
  8. Dooley, John F. (2013). A Brief History of Cryptology and Cryptographic Algorithms. Springer Science & Business Media. pp. 12–3. ISBN 9783319016283.
  9. 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.
  10. 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.
  11. "Memory & Storage | Timeline of Computer History | Computer History Museum". www.computerhistory.org. Retrieved 3 June 2021.
  12. 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.
  13. 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.)"
  14. [1] The World's First COBOL Compilers Archived 13 October 2011 at the Wayback Machine
  15. 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.
  16. "NIST To Develop Cloud Roadmap". InformationWeek. November 5, 2010. Computing initiative seeks to remove barriers to cloud adoption in security, interoperability, portability and reliability.
  17. "Programming 101: Tips to become a good programmer - Wisdom Geek". Wisdom Geek (in English). May 19, 2016. Retrieved 2016-05-23.
  18. 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.
  19. Multiple (wiki). "Readability". Docforge. Archived from the original on 2020-04-29. Retrieved 2010-01-30.
  20. Piech, Chris. "Deep Blue". In 1950, Claude Shannon published ... "Programming a Computer for Playing Chess", ... "minimax" algorithm
  21. Enticknap, Nicholas (11 September 2007). "SSL/Computer Weekly IT salary survey: finance boom drives IT job growth".
  22. Mitchell, Robert (2012-05-21). "The Cobol Brain Drain". Computer World. Retrieved 9 May 2015.
  23. "Photograph courtesy Naval Surface Warfare Center, Dahlgren, Virginia, from National Geographic Sept. 1947". July 15, 2020.
  24. 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.

स्रोत

अग्रिम पठन

बाहरी संबंध