सॉफ्टवेयर: Difference between revisions

From Vigyanwiki
No edit summary
 
(14 intermediate revisions by 6 users not shown)
Line 1: Line 1:
[[File:Operating system placement (software).svg|thumb|upright|एक आरेख दिखाता है कि  [[ उपयोगकर्ता (कंप्यूटिंग) |  उपयोगकर्ता ]] एक विशिष्ट  [[ डेस्कटॉप कंप्यूटर ]] पर  [[ एप्लिकेशन सॉफ़्टवेयर ]] के साथ कैसे इंटरैक्ट करता है। एप्लीकेशन सॉफ्टवेयर लेयर  [[ ऑपरेटिंग सिस्टम ]] के साथ इंटरफेस करता है, जो बदले में  [[ पर्सनल कंप्यूटर हार्डवेयर |  हार्डवेयर ]] के साथ संचार करता है। तीर सूचना प्रवाह का संकेत देते हैं। ]]
[[File:Operating system placement (software).svg|thumb|upright|एक आरेख दिखाता है कि  [[ उपयोगकर्ता (कंप्यूटिंग) |  उपयोगकर्ता ]] एक विशिष्ट  [[ डेस्कटॉप कंप्यूटर ]] पर  [[ एप्लिकेशन सॉफ़्टवेयर ]] के साथ कैसे इंटरैक्ट करता है। एप्लीकेशन सॉफ्टवेयर लेयर  [[ ऑपरेटिंग सिस्टम ]] के साथ इंटरफेस करता है, जो बदले में  [[ पर्सनल कंप्यूटर हार्डवेयर |  हार्डवेयर ]] के साथ संचार करता है। तीर सूचना प्रवाह का संकेत देते हैं। ]]


'''सॉफ्टवेयर'''[[ निर्देश (कंप्यूटर विज्ञान) | निर्देश]] का एक संग्रह है जो [[ कंप्यूटर |कंप्यूटर]] को बताता है कि कैसे काम करना है।<ref>{{cite web |last1=IBM |title=What is Software Development |url=https://www.ibm.com/topics/software-development |website=IBM |publisher=IBM |access-date=2021-10-04}}</ref><ref>{{cite web |last1=Johnson |first1=Dave |title=What is Software |url=https://www.businessinsider.com/what-is-software?r=US&IR=T |website=Business Insider |publisher=Business Insider |access-date=2021-10-04}}</ref> यह [[ कंप्यूटर हार्डवेयर |हार्डवेयर]] के विपरीत है, जिससे सिस्टम बनाया गया है और जो वास्तव में काम करता है।
'''सॉफ्टवेयर''' कंप्यूटर प्रोग्राम और संबंधित दस्तावेजों और डेटा का एक सेट है।<ref>{{cite web |last1=IBM |title=What is Software Development |url=https://www.ibm.com/topics/software-development |website=IBM |publisher=IBM |access-date=2021-10-04}}</ref><ref>{{cite web |last1=Johnson |first1=Dave |title=What is Software |url=https://www.businessinsider.com/what-is-software?r=US&IR=T |website=Business Insider |publisher=Business Insider |access-date=2021-10-04}}</ref> यह [[हार्डवेयर]] के विपरीत है, जिससे सिस्टम बनाया गया है और जो वास्तव में काम करता है।


[[ निम्न स्तर की भाषा में |सबसे कम प्रोग्रामिंग स्तर]], [[ निष्पादन योग्य कोड |निष्पादन योग्य कोड]] में [[ मशीन कोड |मशीन भाषा]] निर्देश होते हैं जो एक व्यक्ति[[ माइक्रोप्रोसेसर | प्रोसेसर]] द्वारा समर्थित होते हैं- आमतौर पर एक[[ केंद्रीय प्रसंस्करण इकाई | केंद्रीय प्रसंस्करण इकाई]] (CPU) या [[ ग्राफिक्स प्रोसेसिंग यूनिट |ग्राफिक्स प्रोसेसिंग यूनिट]] (GPU)। मशीनी भाषा में बाइनरी मानों के सेट होते हैं जो प्रोसेसर निर्देशों का प्रतिनिधित्व करते हैं जो कंप्यूटर की स्थिति को उसकी पिछली स्थिति से बदलते हैं। उदाहरण के लिए, एक निर्देश कंप्यूटर में किसी विशेष स्टोरेज स्थान में संग्रहीत मूल्य को बदल सकता है- एक ऐसा प्रभाव जो उपयोगकर्ता के लिए सीधे देखने योग्य नहीं है। एक निर्देश कई इनपुट या आउटपुट ऑपरेशंस में से एक को भी आमंत्रित कर सकता है, उदाहरण के लिए कंप्यूटर स्क्रीन पर कुछ टेक्स्ट प्रदर्शित करना; राज्य में परिवर्तन करना जो उपयोगकर्ता को दिखाई देना चाहिए । वह प्रोसेसर निर्देशों को उनके द्वारा दिए गए क्रम में निष्पादित करता है, जब तक कि उसे किसी भिन्न निर्देश पर "कूदने" का निर्देश नहीं दिया जाता है, या ऑपरेटिंग सिस्टम द्वारा बाधित नहीं किया जाता है। 2015 तक, अधिकांश व्यक्तिगत कंप्यूटर (personal computer), स्मार्टफोन डिवाइस और सर्वर में कई निष्पादन इकाइयों (execution unit) या एक साथ गणना करने वाले कई प्रोसेसर वाले प्रोसेसर होते हैं, और कंप्यूटिंग अतीत की तुलना में बहुत अधिक समवर्ती गतिविधि बन गई है।
[[ निम्न स्तर की भाषा में |सबसे कम प्रोग्रामिंग स्तर]], [[ निष्पादन योग्य कोड |निष्पादन योग्य कोड]] में [[मशीन कोड|मशीन भाषा]] निर्देश होते हैं जो एक व्यक्ति[[ माइक्रोप्रोसेसर | प्रोसेसर]] द्वारा समर्थित होते हैं- आमतौर पर एक [[सेंट्रल प्रोसेसिंग यूनिट|केंद्रीय प्रसंस्करण इकाई]] (CPU) या [[ग्राफ़िक्स प्रोसेसिंग युनिट|ग्राफिक्स प्रोसेसिंग यूनिट]] (GPU)। मशीनी भाषा में बाइनरी मानों के सेट होते हैं जो प्रोसेसर निर्देशों का प्रतिनिधित्व करते हैं जो कंप्यूटर की स्थिति को उसकी पिछली स्थिति से बदलते हैं। उदाहरण के लिए, एक निर्देश कंप्यूटर में किसी विशेष स्टोरेज स्थान में संग्रहीत मूल्य को बदल सकता है- एक ऐसा प्रभाव जो उपयोगकर्ता के लिए सीधे देखने योग्य नहीं है। एक निर्देश कई इनपुट या आउटपुट ऑपरेशंस में से एक को भी आमंत्रित कर सकता है, उदाहरण के लिए कंप्यूटर स्क्रीन पर कुछ टेक्स्ट प्रदर्शित करना; राज्य में परिवर्तन करना जो उपयोगकर्ता को दिखाई देना चाहिए । वह प्रोसेसर निर्देशों को उनके द्वारा दिए गए क्रम में निष्पादित करता है, जब तक कि उसे किसी भिन्न निर्देश पर "कूदने" का निर्देश नहीं दिया जाता है, या ऑपरेटिंग सिस्टम द्वारा बाधित नहीं किया जाता है। 2015 तक, अधिकांश व्यक्तिगत कंप्यूटर (personal computer), स्मार्टफोन डिवाइस और सर्वर में कई निष्पादन इकाइयों (execution unit) या एक साथ गणना करने वाले कई प्रोसेसर वाले प्रोसेसर होते हैं, और कंप्यूटिंग अतीत की तुलना में बहुत अधिक समवर्ती गतिविधि बन गई है।


अधिकांश सॉफ्टवेयर  [[ उच्च स्तरीय प्रोग्रामिंग भाषा |उच्च स्तरीय प्रोग्रामिंग भाषा]] में लिखे गए हैं। वे प्रोग्रामर के लिए आसान और अधिक कुशल हैं क्योंकि वे मशीनी भाषाओं की तुलना में[[ प्राकृतिक भाषा |  प्राकृतिक भाषा]] के करीब हैं<ref>{{cite web|title=Compiler construction|url=http://www.cs.uu.nl/education/vak.php?vak=INFOMCCO|url-status=live|archive-url=https://web.archive.org/web/20131102143144/http://www.cs.uu.nl/education/vak.php?vak=INFOMCCO|archive-date=2 November 2013|df=dmy-all}}</ref>। उच्च स्तरीय भाषाओं को एक कंपाइलर या दुभाषिया या दोनों के संयोजन का उपयोग करके मशीनी भाषा में अनुवादित किया जाता है। सॉफ़्टवेयर को निम्न-स्तरीय असेंबली भाषा में भी लिखा जा सकता है, जिसमें कंप्यूटर के मशीनी भाषा निर्देशों के लिए एक मजबूत पत्राचार होता है और एक असेंबलर का उपयोग करके मशीन भाषा में अनुवाद किया जाता है।
अधिकांश सॉफ्टवेयर  [[ उच्च स्तरीय प्रोग्रामिंग भाषा |उच्च स्तरीय प्रोग्रामिंग भाषा]] में लिखे गए हैं। वे प्रोग्रामर के लिए आसान और अधिक कुशल हैं क्योंकि वे मशीनी भाषाओं की तुलना में[[ प्राकृतिक भाषा |  प्राकृतिक भाषा]] के करीब हैं<ref>{{cite web|title=Compiler construction|url=http://www.cs.uu.nl/education/vak.php?vak=INFOMCCO|url-status=live|archive-url=https://web.archive.org/web/20131102143144/http://www.cs.uu.nl/education/vak.php?vak=INFOMCCO|archive-date=2 November 2013|df=dmy-all}}</ref>। उच्च स्तरीय भाषाओं को एक कंपाइलर या दुभाषिया या दोनों के संयोजन का उपयोग करके मशीनी भाषा में अनुवादित किया जाता है। सॉफ़्टवेयर को निम्न-स्तरीय असेंबली भाषा में भी लिखा जा सकता है, जिसमें कंप्यूटर के मशीनी भाषा निर्देशों के लिए एक मजबूत पत्राचार होता है और एक असेंबलर का उपयोग करके मशीन भाषा में अनुवाद किया जाता है।


==इतिहास==
==इतिहास==
[[ एल्गोरिथम | एल्गोरिथम]] , जो सॉफ्टवेयर का पहला टुकड़ा होता,  [[ एडा लवलेस | एडा लवलेस]] द्वारा 19वीं शताब्दी में नियोजित [[ विश्लेषणात्मक इंजन | विश्लेषणात्मक इंजन]] के लिए लिखा गया था।{{Sfn|Evans|2018|p=21}} उसने  [[ गणितीय प्रमाण |  प्रमाण]] बनाए, यह दिखाने के लिए कि इंजन  [[ बर्नौली संख्या | बर्नौली संख्या]] एस की गणना कैसे करेगा{{Sfn|Evans|2018|p=21}} सबूतों और एल्गोरिथम के कारण, उन्हें पहला कंप्यूटर प्रोग्रामर माना जाता है<ref name="Annals of the History of Computing">{{cite journal|last1=Fuegi|first1=J.|last2=Francis|first2=J.|date=2003|title=Lovelace & Babbage and the creation of the 1843 'notes'|journal=Annals of the History of Computing|volume=25|issue=4|pages=16–26|doi=10.1109/MAHC.2003.1253887|s2cid=40077111|url=https://pdfs.semanticscholar.org/81bb/f32d2642a7a8c6b0a867379a4e9e99d872bc.pdf|archive-url=https://web.archive.org/web/20200215003909/https://pdfs.semanticscholar.org/81bb/f32d2642a7a8c6b0a867379a4e9e99d872bc.pdf|url-status=dead|archive-date=2020-02-15}}</ref><ref name="Lovelace Google">{{Cite news|url=https://www.theguardian.com/technology/2012/dec/10/ada-lovelace-honoured-google-doodle|title=Ada Lovelace honoured by Google doodle|date=December 10, 2012|newspaper=The Guardian|access-date=25 November 2018}}</ref>
[[ एल्गोरिथम | एल्गोरिथम]] , जो सॉफ्टवेयर का पहला टुकड़ा होता,  [[ एडा लवलेस | एडा लवलेस]] द्वारा 19वीं शताब्दी में नियोजित   [[विश्लेषणात्मक इंजन]] के लिए लिखा गया था।{{Sfn|Evans|2018|p=21}} उसने  [[ गणितीय प्रमाण |  प्रमाण]] बनाए, यह दिखाने के लिए कि इंजन  [[ बर्नौली संख्या | बर्नौली संख्या]] एस की गणना कैसे करेगा{{Sfn|Evans|2018|p=21}} सबूतों और एल्गोरिथम के कारण, उन्हें पहला कंप्यूटर प्रोग्रामर माना जाता है<ref name="Annals of the History of Computing">{{cite journal|last1=Fuegi|first1=J.|last2=Francis|first2=J.|date=2003|title=Lovelace & Babbage and the creation of the 1843 'notes'|journal=Annals of the History of Computing|volume=25|issue=4|pages=16–26|doi=10.1109/MAHC.2003.1253887|s2cid=40077111|url=https://pdfs.semanticscholar.org/81bb/f32d2642a7a8c6b0a867379a4e9e99d872bc.pdf|archive-url=https://web.archive.org/web/20200215003909/https://pdfs.semanticscholar.org/81bb/f32d2642a7a8c6b0a867379a4e9e99d872bc.pdf|url-status=dead|archive-date=2020-02-15}}</ref><ref name="Lovelace Google">{{Cite news|url=https://www.theguardian.com/technology/2012/dec/10/ada-lovelace-honoured-google-doodle|title=Ada Lovelace honoured by Google doodle|date=December 10, 2012|newspaper=The Guardian|access-date=25 November 2018}}</ref>


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


2000 में, येल लॉ स्कूल के एक लाइब्रेरियन फ्रेड शापिरो ने एक पत्र प्रकाशित किया जिसमें खुलासा किया गया कि जॉन वाइल्डर टुके के 1958 के पेपर "द टीचिंग ऑफ कंक्रीट मैथमेटिक्स" में "सॉफ्टवेयर" शब्द का सबसे पहला ज्ञात उपयोग था। <ref name="Shapiro_2000 /> इसने कई लोगों को इस शब्द को गढ़ने का श्रेय दिया, विशेष रूप से उसी वर्ष प्रकाशित मृत्युलेखों में<ref name="Leonhardt_2000 /> हालांकि तुकी ने कभी भी ऐसे किसी सिक्के के लिए क्रेडिट का दावा नहीं किया। 1995 में, पॉल निकेट ने दावा किया कि उन्होंने मूल रूप से अक्टूबर 1953 में इस शब्द को गढ़ा था, हालांकि उन्हें अपने दावे का समर्थन करने वाला कोई दस्तावेज नहीं मिला।<ref name="Niquette_2006 /> एक इंजीनियरिंग संदर्भ में "सॉफ़्टवेयर" शब्द का सबसे पहला ज्ञात प्रकाशन अगस्त 1953 में रिचर्ड आर. कारहार्ट द्वारा रैंड कॉर्पोरेशन रिसर्च मेमोरेंडम में किया गया था।<ref name="Carhart_1953 />
2000 में, येल लॉ स्कूल के एक लाइब्रेरियन फ्रेड शापिरो ने एक पत्र प्रकाशित किया जिसमें खुलासा किया गया कि जॉन वाइल्डर टुके के 1958 के पेपर "द टीचिंग ऑफ कंक्रीट मैथमेटिक्स" में "सॉफ्टवेयर" शब्द का सबसे पहला ज्ञात उपयोग था। इसने कई लोगों को इस शब्द को गढ़ने का श्रेय दिया, विशेष रूप से उसी वर्ष प्रकाशित मृत्युलेखों में हालांकि तुकी ने कभी भी ऐसे किसी सिक्के के लिए क्रेडिट का दावा नहीं किया। 1995 में, पॉल निकेट ने दावा किया कि उन्होंने मूल रूप से अक्टूबर 1953 में इस शब्द को गढ़ा था, हालांकि उन्हें अपने दावे का समर्थन करने वाला कोई दस्तावेज नहीं मिला। एक इंजीनियरिंग संदर्भ में "सॉफ़्टवेयर" शब्द का सबसे पहला ज्ञात प्रकाशन अगस्त 1953 में रिचर्ड आर. कारहार्ट द्वारा रैंड कॉर्पोरेशन रिसर्च मेमोरेंडम में किया गया था।


== प्रकार ==
== प्रकार ==
Line 25: Line 25:
* ''' [[ सिस्टम सॉफ्टवेयर ]]''' हार्डवेयर व्यवहार का प्रबंधन करता है, ताकि उपयोगकर्ताओं द्वारा आवश्यक बुनियादी कार्यक्षमता प्रदान की जा सके, या अन्य सॉफ्टवेयर, यदि कोई हो। सिस्टम सॉफ़्टवेयर को एप्लिकेशन सॉफ़्टवेयर चलाने के लिए एक प्लेटफ़ॉर्म प्रदान करने के लिए भी डिज़ाइन किया गया है<ref>{{cite web|url=http://home.olemiss.edu/'''misbook/sfsysfm.htm|title=System Software|publisher=The University of Mississippi|archive-url=https://web.archive.org/web/20010530092843/http://home.olemiss.edu/'''misbook/sfsysfm.htm|archive-date=30 May 2001|url-status=dead|df=dmy-all}}</ref> और इसमें निम्नलिखित शामिल हैं:
* ''' [[ सिस्टम सॉफ्टवेयर ]]''' हार्डवेयर व्यवहार का प्रबंधन करता है, ताकि उपयोगकर्ताओं द्वारा आवश्यक बुनियादी कार्यक्षमता प्रदान की जा सके, या अन्य सॉफ्टवेयर, यदि कोई हो। सिस्टम सॉफ़्टवेयर को एप्लिकेशन सॉफ़्टवेयर चलाने के लिए एक प्लेटफ़ॉर्म प्रदान करने के लिए भी डिज़ाइन किया गया है<ref>{{cite web|url=http://home.olemiss.edu/'''misbook/sfsysfm.htm|title=System Software|publisher=The University of Mississippi|archive-url=https://web.archive.org/web/20010530092843/http://home.olemiss.edu/'''misbook/sfsysfm.htm|archive-date=30 May 2001|url-status=dead|df=dmy-all}}</ref> और इसमें निम्नलिखित शामिल हैं:
**''' [[ ऑपरेटिंग सिस्टम ]]'''(OS) सॉफ़्टवेयर के आवश्यक संग्रह हैं जो संसाधनों का प्रबंधन करते हैं और अन्य सॉफ़्टवेयर के लिए सामान्य सेवाएं प्रदान करते हैं जो उनमें से "शीर्ष पर" चलते हैं। पर्यवेक्षी कार्यक्रम, बूट लोडर, शेल और विंडो सिस्टम ऑपरेटिंग सिस्टम के मुख्य भाग हैं। व्यवहार में, एक ऑपरेटिंग सिस्टम अतिरिक्त सॉफ़्टवेयर (एप्लिकेशन सॉफ़्टवेयर सहित) के साथ आता है ताकि उपयोगकर्ता संभावित रूप से ऐसे कंप्यूटर के साथ कुछ काम कर सके जिसमें केवल एक ऑपरेटिंग सिस्टम हो।
**''' [[ ऑपरेटिंग सिस्टम ]]'''(OS) सॉफ़्टवेयर के आवश्यक संग्रह हैं जो संसाधनों का प्रबंधन करते हैं और अन्य सॉफ़्टवेयर के लिए सामान्य सेवाएं प्रदान करते हैं जो उनमें से "शीर्ष पर" चलते हैं। पर्यवेक्षी कार्यक्रम, बूट लोडर, शेल और विंडो सिस्टम ऑपरेटिंग सिस्टम के मुख्य भाग हैं। व्यवहार में, एक ऑपरेटिंग सिस्टम अतिरिक्त सॉफ़्टवेयर (एप्लिकेशन सॉफ़्टवेयर सहित) के साथ आता है ताकि उपयोगकर्ता संभावित रूप से ऐसे कंप्यूटर के साथ कुछ काम कर सके जिसमें केवल एक ऑपरेटिंग सिस्टम हो।
**''' [[ डिवाइस ड्राइवर ]]''' एक विशेष प्रकार के डिवाइस को संचालित या नियंत्रित करते हैं जो कंप्यूटर से जुड़ा होता है। प्रत्येक डिवाइस को कम से कम एक संगत डिवाइस ड्राइवर की आवश्यकता होती है; क्योंकि एक कंप्यूटर में आमतौर पर कम से कम एक इनपुट डिवाइस और कम से कम एक आउटपुट डिवाइस होता है, एक कंप्यूटर को आमतौर पर एक से अधिक डिवाइस ड्राइवर की आवश्यकता होती है।
**''' डिवाइस ड्राइवर ''' एक विशेष प्रकार के डिवाइस को संचालित या नियंत्रित करते हैं जो कंप्यूटर से जुड़ा होता है। प्रत्येक डिवाइस को कम से कम एक संगत [[डिवाइस ड्राइवर]] की आवश्यकता होती है; क्योंकि एक कंप्यूटर में आमतौर पर कम से कम एक इनपुट डिवाइस और कम से कम एक आउटपुट डिवाइस होता है, एक कंप्यूटर को आमतौर पर एक से अधिक डिवाइस ड्राइवर की आवश्यकता होती है।
**''' [[ सॉफ्टवेयर यूटिलिटी |  यूटिलिटीज ]] '''कंप्यूटर प्रोग्राम हैं जिन्हें उपयोगकर्ताओं को उनके कंप्यूटर के रखरखाव और देखभाल में सहायता करने के लिए डिज़ाइन किया गया है।
**''' [[ सॉफ्टवेयर यूटिलिटी |  यूटिलिटीज ]] '''कंप्यूटर प्रोग्राम हैं जिन्हें उपयोगकर्ताओं को उनके कंप्यूटर के रखरखाव और देखभाल में सहायता करने के लिए डिज़ाइन किया गया है।
**''' [[ दुर्भावनापूर्ण सॉफ़्टवेयर | दुर्भावनापूर्ण सॉफ़्टवेयर]]''', या '''मैलवेयर''',या मैलवेयर, ऐसा सॉफ़्टवेयर है जिसे कंप्यूटर को नुकसान पहुंचाने या बाधित करने के लिए विकसित किया गया है। मैलवेयर कंप्यूटर से संबंधित अपराधों से निकटता से जुड़ा हुआ है, हालांकि कुछ दुर्भावनापूर्ण प्रोग्राम व्यावहारिक चुटकुले के रूप में डिज़ाइन किए गए हो सकते हैं।
**''' [[ दुर्भावनापूर्ण सॉफ़्टवेयर | दुर्भावनापूर्ण सॉफ़्टवेयर]]''', या '''मैलवेयर''',या मैलवेयर, ऐसा सॉफ़्टवेयर है जिसे कंप्यूटर को नुकसान पहुंचाने या बाधित करने के लिए विकसित किया गया है। मैलवेयर कंप्यूटर से संबंधित अपराधों से निकटता से जुड़ा हुआ है, हालांकि कुछ दुर्भावनापूर्ण प्रोग्राम व्यावहारिक चुटकुले के रूप में डिज़ाइन किए गए हो सकते हैं।
Line 31: Line 31:
=== निष्पादन की प्रकृति या डोमेन ===
=== निष्पादन की प्रकृति या डोमेन ===
*  [[ डेस्कटॉप एप्लिकेशन ]] जैसे वेब ब्राउज़र और माइक्रोसॉफ्ट ऑफिस और लिब्रे ऑफिस और वर्डपरफेक्ट, साथ ही स्मार्टफोन और टैबलेट एप्लिकेशन (जिन्हें " ऐप्स " कहा जाता है)।
*  [[ डेस्कटॉप एप्लिकेशन ]] जैसे वेब ब्राउज़र और माइक्रोसॉफ्ट ऑफिस और लिब्रे ऑफिस और वर्डपरफेक्ट, साथ ही स्मार्टफोन और टैबलेट एप्लिकेशन (जिन्हें " ऐप्स " कहा जाता है)।
* [[ जावास्क्रिप्ट ]] स्क्रिप्ट पारंपरिक रूप से वेब पेजों में एम्बेडेड सॉफ्टवेयर के टुकड़े हैं जो सीधे वेब ब्राउजर के अंदर चलाए जाते हैं जब एक वेब ब्राउजर प्लगइन की आवश्यकता के बिना वेब पेज लोड होता है। अन्य प्रोग्रामिंग भाषाओं में लिखे गए सॉफ़्टवेयर को वेब ब्राउज़र के भीतर भी चलाया जा सकता है यदि सॉफ़्टवेयर का या तो जावास्क्रिप्ट में अनुवाद किया गया है, या यदि उस भाषा का समर्थन करने वाला वेब ब्राउज़र प्लग इन स्थापित है; उत्तरार्द्ध का सबसे आम उदाहरण एक्शनस्क्रिप्ट स्क्रिप्ट है, जो एडोब फ्लैश प्लगइन द्वारा समर्थित है।
* [https://en.wikipedia.org/wiki/JavaScript|'''जावास्क्रिप्ट''']] स्क्रिप्ट पारंपरिक रूप से वेब पेजों में एम्बेडेड सॉफ्टवेयर के टुकड़े हैं जो सीधे वेब ब्राउजर के अंदर चलाए जाते हैं जब एक वेब ब्राउजर प्लगइन की आवश्यकता के बिना वेब पेज लोड होता है। अन्य प्रोग्रामिंग भाषाओं में लिखे गए सॉफ़्टवेयर को वेब ब्राउज़र के भीतर भी चलाया जा सकता है यदि सॉफ़्टवेयर का या तो जावास्क्रिप्ट में अनुवाद किया गया है, या यदि उस भाषा का समर्थन करने वाला वेब ब्राउज़र प्लग इन स्थापित है; उत्तरार्द्ध का सबसे आम उदाहरण एक्शनस्क्रिप्ट स्क्रिप्ट है, जो एडोब फ्लैश प्लगइन द्वारा समर्थित है।
*  [[ सर्वर सॉफ्टवेयर ]], जिसमें शामिल हैं:
*  [[ सर्वर सॉफ्टवेयर ]], जिसमें शामिल हैं:
**  [[ वेब एप्लिकेशन ]]वेब एप्लिकेशन, जो आमतौर पर वेब सर्वर पर चलते हैं और गतिशील रूप से उत्पन्न वेब पेजों को वेब ब्राउज़र में आउटपुट करते हैं, उदाहरण के लिए पीएचपी, जावा, एएसपी. NET, या यहां तक कि जावास्क्रिप्ट जो सर्वर पर चलता है । आधुनिक समय में इनमें आमतौर पर वेब ब्राउज़र में चलाने के लिए कुछ जावास्क्रिप्ट शामिल होते हैं, इस मामले में वे आमतौर पर आंशिक रूप से सर्वर पर, आंशिक रूप से वेब ब्राउज़र में चलते हैं।
**  [[ वेब एप्लिकेशन ]]वेब एप्लिकेशन, जो आमतौर पर वेब सर्वर पर चलते हैं और गतिशील रूप से उत्पन्न वेब पेजों को वेब ब्राउज़र में आउटपुट करते हैं, उदाहरण के लिए पीएचपी, जावा, एएसपी. NET, या यहां तक कि जावास्क्रिप्ट जो सर्वर पर चलता है । आधुनिक समय में इनमें आमतौर पर वेब ब्राउज़र में चलाने के लिए कुछ जावास्क्रिप्ट शामिल होते हैं, इस मामले में वे आमतौर पर आंशिक रूप से सर्वर पर, आंशिक रूप से वेब ब्राउज़र में चलते हैं।
**  [[ प्लग-इन (कंप्यूटिंग) | प्लगइन्स]]  और एक्सटेंशन ऐसे सॉफ़्टवेयर हैं जो सॉफ़्टवेयर के किसी अन्य भाग की कार्यक्षमता को बढ़ाते या संशोधित करते हैं, और इसके लिए आवश्यक है कि कार्य करने के लिए सॉफ़्टवेयर का उपयोग किया जाए।<ref>{{Cite web|title=What is a Plugin?|url=https://www.computerhope.com/jargon/p/plugin.htm|access-date=2022-01-26|website=www.computerhope.com|language=en}}</ref>
**  [https://en.wikipedia.org/wiki/Plug-in_(computing)|'''प्लगइन्स''']  और एक्सटेंशन ऐसे सॉफ़्टवेयर हैं जो सॉफ़्टवेयर के किसी अन्य भाग की कार्यक्षमता को बढ़ाते या संशोधित करते हैं, और इसके लिए आवश्यक है कि कार्य करने के लिए सॉफ़्टवेयर का उपयोग किया जाए।
**  [[ एंबेडेड सॉफ्टवेयर | एंबेडेड सॉफ्टवेयर]]  एम्बेडेड सिस्टम के भीतर फर्मवेयर के रूप में रहता है, एकल उपयोग के लिए समर्पित डिवाइस या कार और टीवी जैसे कुछ उपयोग (हालांकि कुछ एम्बेडेड डिवाइस जैसे वायरलेस चिपसेट स्वयं एक साधारण, गैर-एम्बेडेड कंप्यूटर सिस्टम जैसे पीसी का हिस्सा हो सकते हैं) या स्मार्टफोन)<ref>{{cite web|title=Embedded Software—Technologies and Trends|url=http://www.computer.org/csdl/mags/so/2009/03/mso2009030014.html|publisher=IEEE Computer Society|date=May–June 2009|access-date=6 November 2013|url-status=live|archive-url=https://web.archive.org/web/20131028045823/http://www.computer.org/csdl/mags/so/2009/03/mso2009030014.html|archive-date=28 October 2013|df=dmy-all}}</ref> एम्बेडेड सिस्टम संदर्भ में कभी-कभी सिस्टम सॉफ़्टवेयर और एप्लिकेशन सॉफ़्टवेयर के बीच कोई स्पष्ट अंतर नहीं होता है। हालाँकि, कुछ एम्बेडेड सिस्टम एम्बेडेड ऑपरेटिंग सिस्टम चलाते हैं, और ये सिस्टम सिस्टम सॉफ़्टवेयर और एप्लिकेशन सॉफ़्टवेयर के बीच अंतर को बनाए रखते हैं (हालाँकि आमतौर पर केवल एक ही निश्चित एप्लिकेशन होगा जो हमेशा चलता रहता है)।
**  [[ एंबेडेड सॉफ्टवेयर | एंबेडेड सॉफ्टवेयर]]  एम्बेडेड सिस्टम के भीतर फर्मवेयर के रूप में रहता है, एकल उपयोग के लिए समर्पित डिवाइस या कार और टीवी जैसे कुछ उपयोग (हालांकि कुछ एम्बेडेड डिवाइस जैसे वायरलेस चिपसेट स्वयं एक साधारण, गैर-एम्बेडेड कंप्यूटर सिस्टम जैसे पीसी का हिस्सा हो सकते हैं) या स्मार्टफोन) एम्बेडेड सिस्टम संदर्भ में कभी-कभी सिस्टम सॉफ़्टवेयर और एप्लिकेशन सॉफ़्टवेयर के बीच कोई स्पष्ट अंतर नहीं होता है। हालाँकि, कुछ एम्बेडेड सिस्टम एम्बेडेड ऑपरेटिंग सिस्टम चलाते हैं, और ये सिस्टम सिस्टम सॉफ़्टवेयर और एप्लिकेशन सॉफ़्टवेयर के बीच अंतर को बनाए रखते हैं (हालाँकि आमतौर पर केवल एक ही निश्चित एप्लिकेशन होगा जो हमेशा चलता रहता है)।
**[[ माइक्रोकोड]]  एक विशेष, अपेक्षाकृत अस्पष्ट प्रकार का एम्बेडेड सॉफ्टवेयर है जो प्रोसेसर को मशीन कोड को निष्पादित करने का तरीका बताता है, इसलिए यह वास्तव में मशीन कोड से निचला स्तर है। [कृपया उद्धरण जोड़ें] यह आमतौर पर प्रोसेसर निर्माता के स्वामित्व में होता है, और किसी भी आवश्यक सुधारात्मक माइक्रोकोड सॉफ़्टवेयर अपडेट को उनके द्वारा उपयोगकर्ताओं को आपूर्ति की जाती है (जो शिपिंग प्रतिस्थापन प्रोसेसर हार्डवेयर से काफी सस्ता है)। इस प्रकार एक साधारण प्रोग्रामर को कभी भी इससे निपटने की उम्मीद नहीं होगी।
**[[ माइक्रोकोड]]  एक विशेष, अपेक्षाकृत अस्पष्ट प्रकार का एम्बेडेड सॉफ्टवेयर है जो प्रोसेसर को मशीन कोड को निष्पादित करने का तरीका बताता है, इसलिए यह वास्तव में मशीन कोड से निचला स्तर है। यह आमतौर पर प्रोसेसर निर्माता के स्वामित्व में होता है, और किसी भी आवश्यक सुधारात्मक माइक्रोकोड सॉफ़्टवेयर अपडेट को उनके द्वारा उपयोगकर्ताओं को आपूर्ति की जाती है (जो शिपिंग प्रतिस्थापन प्रोसेसर हार्डवेयर से काफी सस्ता है)। इस प्रकार एक साधारण प्रोग्रामर को कभी भी इससे निपटने की उम्मीद नहीं होगी।


===प्रोग्रामिंग टूल ===
===प्रोग्रामिंग टूल ===
प्रोग्रामिंग टूल प्रोग्राम या एप्लिकेशन के रूप में भी सॉफ्टवेयर हैं जिनका उपयोग डेवलपर्स सॉफ्टवेयर बनाने, डिबग करने, बनाए रखने या अन्यथा समर्थन करने के लिए करते हैं।<ref>{{Cite web|title=What is a Programming Tool? - Definition from Techopedia|url=http://www.techopedia.com/definition/8996/programming-tool|access-date=2022-01-26|website=Techopedia.com|language=en}}</ref>
प्रोग्रामिंग टूल प्रोग्राम या एप्लिकेशन के रूप में भी सॉफ्टवेयर हैं जिनका उपयोग डेवलपर्स सॉफ्टवेयर बनाने, डिबग करने, बनाए रखने या अन्यथा समर्थन करने के लिए करते हैं।


सॉफ्टवेयर एक या अधिक प्रोग्रामिंग भाषाओं में लिखा जाता है; अस्तित्व में कई प्रोग्रामिंग भाषाएं हैं, और प्रत्येक में कम से कम एक कार्यान्वयन है, जिनमें से प्रत्येक में प्रोग्रामिंग टूल का अपना सेट होता है। ये उपकरण अपेक्षाकृत स्व-निहित प्रोग्राम हो सकते हैं जैसे कि कंपाइलर (compiler), डिबगर (debugger), दुभाषिए (interpreters), लिंकर्स (linkers), और टेक्स्ट एडिटर (text editors), जिन्हें किसी कार्य को पूरा करने के लिए जोड़ा जा सकता है; या वे एक एकीकृत विकास वातावरण (आईडीई) बना सकते हैं, जो ऐसे स्व-निहित उपकरणों की अधिक या सभी कार्यक्षमता को जोड़ती है। [कृपया उद्धरण जोड़ें] आईडीई या तो प्रासंगिक व्यक्तिगत उपकरणों को लागू करके या नए तरीके से उनकी कार्यक्षमता को फिर से लागू करके ऐसा कर सकते हैं। [कृपया उद्धरण जोड़ें] एक आईडीई विशिष्ट कार्यों को करना आसान बना सकता है, जैसे किसी विशेष परियोजना में फाइलों में खोज करना। [कृपया उद्धरण जोड़ें] कई प्रोग्रामिंग भाषा कार्यान्वयन व्यक्तिगत टूल या आईडीई दोनों का उपयोग करने का विकल्प प्रदान करते हैं।  
सॉफ्टवेयर एक या अधिक प्रोग्रामिंग भाषाओं में लिखा जाता है; अस्तित्व में कई प्रोग्रामिंग भाषाएं हैं, और प्रत्येक में कम से कम एक कार्यान्वयन है, जिनमें से प्रत्येक में प्रोग्रामिंग टूल का अपना सेट होता है। ये उपकरण अपेक्षाकृत स्व-निहित प्रोग्राम हो सकते हैं जैसे कि कंपाइलर (compiler), डिबगर (debugger), दुभाषिए (interpreters), लिंकर्स (linkers), और टेक्स्ट एडिटर (text editors), जिन्हें किसी कार्य को पूरा करने के लिए जोड़ा जा सकता है; या वे एक एकीकृत विकास वातावरण (आईडीई) बना सकते हैं, जो ऐसे स्व-निहित उपकरणों की अधिक या सभी कार्यक्षमता को जोड़ती है। आईडीई या तो प्रासंगिक व्यक्तिगत उपकरणों को लागू करके या नए तरीके से उनकी कार्यक्षमता को फिर से लागू करके ऐसा कर सकते हैं। एक आईडीई विशिष्ट कार्यों को करना आसान बना सकता है, जैसे किसी विशेष परियोजना में फाइलों में खोज करना। कई प्रोग्रामिंग भाषा कार्यान्वयन व्यक्तिगत टूल या आईडीई दोनों का उपयोग करने का विकल्प प्रदान करते हैं।  


== विषय ==
== विषय ==
Line 53: Line 53:


=== निष्पादन ===
=== निष्पादन ===
{{Main|Execution (computing)}}
कंप्यूटर सॉफ्टवेयर को कंप्यूटर के स्टोरेज (जैसे हार्ड ड्राइव या मेमोरी ) में "लोड" करना पड़ता है। एक बार सॉफ्टवेयर लोड हो जाने के बाद, कंप्यूटर सॉफ्टवेयर को निष्पादित करने में सक्षम होता है। इसमें एप्लिकेशन सॉफ़्टवेयर से सिस्टम सॉफ़्टवेयर के माध्यम से हार्डवेयर को निर्देश देना शामिल है, जो अंततः मशीन कोड के रूप में निर्देश प्राप्त करता है। प्रत्येक निर्देश कंप्यूटर को एक ऑपरेशन करने के लिए प्रेरित करता है - डेटा को स्थानांतरित करना, गणना करना, या निर्देशों के नियंत्रण प्रवाह को बदलना।
कंप्यूटर सॉफ्टवेयर को कंप्यूटर के [[ कंप्यूटर स्टोरेज |  स्टोरेज ]] (जैसे [[ हार्ड ड्राइव ]] या [[ कंप्यूटर मेमोरी |  मेमोरी ]]) में लोड करना होता है। एक बार सॉफ्टवेयर लोड हो जाने के बाद, कंप्यूटर सॉफ्टवेयर को ''निष्पादित'' करने में सक्षम होता है। इसमें एप्लिकेशन सॉफ़्टवेयर से सिस्टम सॉफ़्टवेयर के माध्यम से हार्डवेयर को निर्देश देना शामिल है, जो अंततः मशीन कोड के रूप में निर्देश प्राप्त करता है। प्रत्येक निर्देश कंप्यूटर को एक ऑपरेशन-मूविंग डेटा,  [[ गणना ]] करने, या  [[ नियंत्रण प्रवाह ]] निर्देशों को बदलने का कारण बनता है।{{Citation needed|date=September 2021}}
 
डेटा मूवमेंट आमतौर पर मेमोरी में एक स्थान से दूसरे स्थान पर होता है। कभी-कभी इसमें मेमोरी और रजिस्टरों के बीच डेटा को स्थानांतरित करना शामिल होता है जो सीपीयू में हाई-स्पीड डेटा एक्सेस को सक्षम करता है। डेटा को स्थानांतरित करना, विशेष रूप से इसकी बड़ी मात्रा में, महंगा हो सकता है; इसके बजाय कभी-कभी पॉइंटर्स टू डेटा का उपयोग करके इसे टाला जाता है{{Citation needed|date=September 2021}} संगणना में सरल ऑपरेशन शामिल हैं जैसे कि एक चर डेटा तत्व के मूल्य में वृद्धि। अधिक जटिल संगणनाओं में एक साथ कई ऑपरेशन और डेटा तत्व शामिल हो सकते हैं{{Citation needed|date=September 2021}}<!-- यह खंड इस आलेख के लिए बहुत लंबा है और इसे उपरोक्त परिचय में संकुचित करने की आवश्यकता है, या लेख में ही ले जाया जाना चाहिए।
 
निर्देश क्रमिक रूप से, सशर्त रूप से, या पुनरावृत्त रूप से किए जा सकते हैं। अनुक्रमिक निर्देश वे ऑपरेशन हैं जो एक के बाद एक किए जाते हैं। सशर्त निर्देश इस तरह निष्पादित किए जाते हैं कि कुछ डेटा के मूल्य के आधार पर निर्देशों के विभिन्न सेट निष्पादित होते हैं। कुछ भाषाओं में इसे if कथन के रूप में जाना जाता है। पुनरावृत्त निर्देश दोहराए जाते हैं और कुछ डेटा मान पर निर्भर हो सकते हैं। इसे कभी-कभी लूप कहा जाता है। अक्सर, एक निर्देश किसी अन्य प्रोग्राम या  [[ मॉड्यूलर प्रोग्रामिंग |  मॉड्यूल ]] में परिभाषित निर्देशों के दूसरे सेट को कॉल कर सकता है। जब एक से अधिक कंप्यूटर प्रोसेसर का उपयोग किया जाता है, तो निर्देशों को एक साथ निष्पादित किया जा सकता है।
 
सॉफ़्टवेयर के संचालन के तरीके का एक सरल उदाहरण यह है कि क्या होता है जब कोई उपयोगकर्ता किसी प्रविष्टि का चयन करता है जैसे कि किसी मेनू से कॉपी करें। इस मामले में, स्मृति में रहने वाले 'दस्तावेज़' क्षेत्र में डेटा से पाठ की प्रतिलिपि बनाने के लिए एक सशर्त निर्देश निष्पादित किया जाता है, शायद एक मध्यवर्ती भंडारण क्षेत्र में जिसे 'क्लिपबोर्ड' डेटा क्षेत्र के रूप में जाना जाता है। यदि एक अलग मेनू प्रविष्टि जैसे पेस्ट को चुना जाता है, तो सॉफ़्टवेयर क्लिपबोर्ड डेटा क्षेत्र से पाठ को उसी या स्मृति में किसी अन्य दस्तावेज़ में किसी विशिष्ट स्थान पर कॉपी करने के निर्देशों को निष्पादित कर सकता है।
 
आवेदन के आधार पर, ऊपर दिया गया उदाहरण भी जटिल हो सकता है। सॉफ्टवेयर इंजीनियरिंग का क्षेत्र सॉफ्टवेयर के संचालन की जटिलता को प्रबंधित करने का प्रयास करता है। यह सॉफ्टवेयर के लिए विशेष रूप से सच है जो एक बड़े या शक्तिशाली  [[ कंप्यूटर सिस्टम ]] के संदर्भ में संचालित होता है।
 
वर्तमान में, अनुप्रयोगों में कंप्यूटर सॉफ्टवेयर के उपयोग की लगभग एकमात्र सीमा डिजाइनर/प्रोग्रामर की सरलता है। नतीजतन, गतिविधियों के बड़े क्षेत्र (जैसे ग्रैंड मास्टर-लेवल शतरंज खेलना) जिन्हें पहले सॉफ्टवेयर सिमुलेशन में अक्षम माना जाता था, अब नियमित रूप से प्रोग्राम किए जाते हैं। एकमात्र ऐसा क्षेत्र जो अब तक सॉफ्टवेयर सिमुलेशन से काफी सुरक्षित साबित हुआ है, वह है मानव कला का क्षेत्र- विशेष रूप से, मनभावन संगीत और साहित्य{{Citation needed|date=June 2007}}
 
ऑपरेशन द्वारा सॉफ्टवेयर के प्रकार:  [[ कंप्यूटर प्रोग्राम ]]  [[ निष्पादन योग्य ]],  [[ स्रोत कोड ]] या  [[ स्क्रिप्टिंग भाषा |  स्क्रिप्ट ]],  [[ कंप्यूटर कॉन्फ़िगरेशन |  कॉन्फ़िगरेशन ]] के रूप में।-->


डेटा मूवमेंट आमतौर पर मेमोरी में एक स्थान से दूसरे स्थान पर होता है। कभी-कभी इसमें मेमोरी और रजिस्टरों के बीच डेटा को स्थानांतरित करना शामिल होता है जो सीपीयू में हाई-स्पीड डेटा एक्सेस को सक्षम करता है। डेटा को स्थानांतरित करना, विशेष रूप से इसकी बड़ी मात्रा में, महंगा हो सकता है; इसके बजाय कभी-कभी डेटा के लिए "पॉइंटर्स" का उपयोग करके इसे टाला जाता है। संगणना में सरल ऑपरेशन शामिल हैं जैसे एक चर डेटा तत्व के मूल्य को बढ़ाना। अधिक जटिल संगणनाओं में एक साथ कई संचालन और डेटा तत्व शामिल हो सकते हैं।
=== गुणवत्ता और विश्वसनीयता ===
=== गुणवत्ता और विश्वसनीयता ===
{{Main|Software quality|Software testing}}
सॉफ्टवेयर की गुणवत्ता बहुत महत्वपूर्ण है, खासकर वाणिज्यिक और सिस्टम सॉफ्टवेयर के लिए। यदि सॉफ़्टवेयर दोषपूर्ण है, तो यह किसी व्यक्ति के कार्य को हटा सकता है, कंप्यूटर को क्रैश कर सकता है और अन्य अप्रत्याशित कार्य कर सकता है। दोषों और त्रुटियों को " बग " कहा जाता है जो अक्सर अल्फा और बीटा परीक्षण के दौरान खोजे जाते हैं। सॉफ्टवेयर अक्सर एक शिकार भी होता है जिसे सॉफ्टवेयर एजिंग के रूप में जाना जाता है, अनदेखी बग के संयोजन के परिणामस्वरूप प्रगतिशील प्रदर्शन में गिरावट।
सॉफ्टवेयर की गुणवत्ता बहुत महत्वपूर्ण है, खासकर [[ वाणिज्यिक सॉफ्टवेयर |  वाणिज्यिक ]] और सिस्टम सॉफ्टवेयर के लिए। यदि सॉफ़्टवेयर दोषपूर्ण है, तो यह किसी व्यक्ति के कार्य को हटा सकता है, कंप्यूटर को क्रैश कर सकता है और अन्य अप्रत्याशित कार्य कर सकता है। दोष और त्रुटियां  [[ सॉफ़्टवेयर बग |  बग ]] कहलाती हैं, जिन्हें अक्सर अल्फा और बीटा परीक्षण के दौरान खोजा जाता है{{Citation needed|date=September 2021}} सॉफ़्टवेयर अक्सर  [[ सॉफ़्टवेयर एजिंग ]] के रूप में जाना जाता है, अनदेखी बग के संयोजन के परिणामस्वरूप प्रगतिशील प्रदर्शन गिरावट का शिकार होता है{{Citation needed|date=September 2021}}


[[ सॉफ़्टवेयर परीक्षण ]] के माध्यम से कई बग खोजे और ठीक किए गए। हालाँकि, सॉफ़्टवेयर परीक्षण शायद ही कभी—अगर कभी—हर बग को समाप्त करता है; कुछ प्रोग्रामर कहते हैं कि प्रत्येक प्रोग्राम में कम से कम एक और बग (लुबार्स्की का नियम) है।<ref name="github">{{cite web | url=https://github.com/mark-watson/scripting-intelligence-book-examples/blob/master/part1/wikipedia_text/software.txt | title=scripting intelligence book examples | website=[[GitHub]] | url-status=live | archive-url=https://web.archive.org/web/20151106154317/https://github.com/mark-watson/scripting-intelligence-book-examples/blob/master/part1/wikipedia_text/software.txt | archive-date=6 November 2015 | df=dmy-all | date=2018-05-09 }}</ref> सॉफ्टवेयर विकास के  [[ वाटरफॉल मॉडल |  वाटरफॉल ]] पद्धति में, अलग-अलग परीक्षण टीमों को आम तौर पर नियोजित किया जाता है, लेकिन नए दृष्टिकोणों में, सामूहिक रूप से [[ चुस्त सॉफ्टवेयर विकास ]] कहा जाता है, डेवलपर्स अक्सर अपने स्वयं के परीक्षण करते हैं, और नियमित रूप से उपयोगकर्ताओं / ग्राहकों को सॉफ़्टवेयर प्रदर्शित करते हैं। प्रतिक्रिया प्राप्त करने के लिए{{Citation needed|date=September 2021}} सॉफ्टवेयर का परीक्षण [[ इकाई परीक्षण ]], [[ प्रतिगमन परीक्षण ]] और अन्य विधियों के माध्यम से किया जा सकता है, जो मैन्युअल रूप से, या सबसे अधिक, स्वचालित रूप से किया जाता है, क्योंकि परीक्षण किए जाने वाले कोड की मात्रा बड़ी हो सकती है{{Citation needed|date=September 2021}} कमांड सॉफ़्टवेयर वाले प्रोग्राम हार्डवेयर इंजीनियरिंग और सिस्टम संचालन को एक साथ अधिक आसानी से कार्य करने में सक्षम बनाते हैं{{Citation needed|date=September 2021}}
सॉफ़्टवेयर परीक्षण के माध्यम से कई बग खोजे जाते हैं और उन्हें ठीक किया जाता है। हालांकि, सॉफ़्टवेयर परीक्षण शायद ही कभी—अगर कभी—हर बग को समाप्त करता है; कुछ प्रोग्रामर कहते हैं कि "हर प्रोग्राम में कम से कम एक और बग होता है" (लुबार्स्की का नियम)।।<ref name="github">{{cite web | url=https://github.com/mark-watson/scripting-intelligence-book-examples/blob/master/part1/wikipedia_text/software.txt | title=scripting intelligence book examples | website=[[GitHub]] | url-status=live | archive-url=https://web.archive.org/web/20151106154317/https://github.com/mark-watson/scripting-intelligence-book-examples/blob/master/part1/wikipedia_text/software.txt | archive-date=6 November 2015 | df=dmy-all | date=2018-05-09 }}</ref> सॉफ़्टवेयर विकास की जलप्रपात पद्धति में, अलग-अलग परीक्षण दल आमतौर पर कार्यरत होते हैं, लेकिन नए दृष्टिकोणों में, सामूहिक रूप से चुस्त सॉफ़्टवेयर विकास कहा जाता है, डेवलपर्स अक्सर अपने स्वयं के सभी परीक्षण करते हैं, और प्रतिक्रिया प्राप्त करने के लिए नियमित रूप से उपयोगकर्ताओं/ग्राहकों को सॉफ़्टवेयर प्रदर्शित करते हैं।  सॉफ्टवेयर का परीक्षण इकाई परीक्षण, प्रतिगमन परीक्षण और अन्य विधियों के माध्यम से किया जा सकता है, जो मैन्युअल रूप से, या सबसे अधिक, स्वचालित रूप से किया जाता है, क्योंकि परीक्षण किए जाने वाले कोड की मात्रा बड़ी हो सकती है। कमांड सॉफ्टवेयर वाले प्रोग्राम हार्डवेयर इंजीनियरिंग और सिस्टम संचालन को एक साथ अधिक आसानी से कार्य करने में सक्षम बनाते हैं।


=== लाइसेंस ===
=== लाइसेंस ===
{{Main|Software license}}
सॉफ़्टवेयर का लाइसेंस उपयोगकर्ता को लाइसेंस प्राप्त वातावरण में सॉफ़्टवेयर का उपयोग करने का अधिकार देता है, और मुफ्त सॉफ़्टवेयर लाइसेंस के मामले में, अन्य अधिकार भी प्रदान करता है जैसे कि प्रतिलिपि बनाने का अधिकार।
सॉफ़्टवेयर का लाइसेंस उपयोगकर्ता को लाइसेंस प्राप्त वातावरण में सॉफ़्टवेयर का उपयोग करने का अधिकार देता है, और [[ मुफ़्त सॉफ़्टवेयर लाइसेंस ]] s के मामले में, अन्य अधिकार भी प्रदान करता है जैसे कि प्रतिलिपि बनाने का अधिकार{{Citation needed|date=September 2021}}


[[ मालिकाना सॉफ्टवेयर ]] को दो प्रकारों में विभाजित किया जा सकता है:
[[ मालिकाना सॉफ्टवेयर]] (Proprietary software) को दो प्रकारों में विभाजित किया जा सकता है:


*  [[ फ्रीवेयर ]], जिसमें फ्री ट्रायल सॉफ्टवेयर या [[ फ्रीमियम ]] सॉफ्टवेयर की श्रेणी शामिल है (अतीत में, [[ शेयरवेयर ]] शब्द का इस्तेमाल अक्सर फ्री ट्रायल/फ्रीमियम सॉफ्टवेयर के लिए किया जाता था)। जैसा कि नाम से पता चलता है, फ्रीवेयर का इस्तेमाल मुफ्त में किया जा सकता है, हालांकि फ्री ट्रायल या फ्रीमियम सॉफ्टवेयर के मामले में, यह कभी-कभी सीमित अवधि के लिए या सीमित कार्यक्षमता के साथ ही सही होता है।<ref>{{Cite web|title=Freeware vs Shareware - Difference and Comparison {{!}} Diffen |  url=https://www.diffen.com/difference/Freeware_vs_Shareware |  access-date=2022-01-26 |  वेबसाइट=www.diffen.com |  language=en}</ref>
*  [[ फ्रीवेयर | फ्रीवेयर]] , जिसमें "फ्री ट्रायल" सॉफ्टवेयर या " फ्रीमियम " सॉफ्टवेयर की श्रेणी शामिल है (अतीत में, शेयरवेयर शब्द का इस्तेमाल अक्सर फ्री ट्रायल/फ्रीमियम सॉफ्टवेयर के लिए किया जाता था)। जैसा कि नाम से पता चलता है, फ्रीवेयर का उपयोग मुफ्त में किया जा सकता है, हालांकि फ्री ट्रायल या फ्रीमियम सॉफ्टवेयर के मामले में, यह कभी-कभी सीमित अवधि के लिए या सीमित कार्यक्षमता के साथ ही सही होता है।<ref><nowiki>{{Cite web|title=Freeware vs Shareware - Difference and Comparison | Diffen |  url=</nowiki>https://www.diffen.com/difference/Freeware_vs_Shareware |  access-date=2022-01-26 |  वेबसाइट=www.diffen.com |  language=en}</ref>
* एक शुल्क के लिए उपलब्ध सॉफ्टवेयर, जिसका उपयोग केवल लाइसेंस की खरीद पर कानूनी रूप से किया जा सकता है<ref>{{Cite journal |last=Morin |first=Andrew |last2=Urban |first2=Jennifer |last3=Sliz |first3=Piotr |date=2012-07-26 |title=A Quick Guide to Software Licensing for the Scientist-Programmer |url=https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1002598 |journal=PLOS Computational Biology |language=en |volume=8 |issue=7 |pages=e1002598 |doi=10.1371/journal.pcbi.1002598 |issn=1553-7358 |pmc=3406002 |pmid=22844236}}</ref>
* एक शुल्क के लिए उपलब्ध सॉफ्टवेयर, जिसका उपयोग केवल लाइसेंस की खरीद पर कानूनी रूप से किया जा सकता है<ref>{{Cite journal |last=Morin |first=Andrew |last2=Urban |first2=Jennifer |last3=Sliz |first3=Piotr |date=2012-07-26 |title=A Quick Guide to Software Licensing for the Scientist-Programmer |url=https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1002598 |journal=PLOS Computational Biology |language=en |volume=8 |issue=7 |pages=e1002598 |doi=10.1371/journal.pcbi.1002598 |issn=1553-7358 |pmc=3406002 |pmid=22844236}}</ref>
 
[[ ओपन-सोर्स सॉफ्टवेयर]] एक मुफ्त सॉफ्टवेयर लाइसेंस के साथ आता है, जो प्राप्तकर्ता को सॉफ्टवेयर को संशोधित और पुनर्वितरित करने का अधिकार देता है।<ref>{{Cite web|title=Open source software explained|url=https://www.ionos.ca/digitalguide/server/know-how/what-is-open-source/|access-date=2022-01-26|website=IONOS Digitalguide|language=en}}</ref>
[[ ओपन-सोर्स सॉफ्टवेयर ]] एक मुफ्त सॉफ्टवेयर लाइसेंस के साथ आता है, जो प्राप्तकर्ता को सॉफ्टवेयर को संशोधित और पुनर्वितरित करने का अधिकार देता है।<ref>{{Cite web|title=Open source software explained|url=https://www.ionos.ca/digitalguide/server/know-how/what-is-open-source/|access-date=2022-01-26|website=IONOS Digitalguide|language=en}}</ref>


=== पेटेंट ===
=== पेटेंट ===
{{Main|Software patent|Software patent debate}}
सॉफ्टवेयर पेटेंट, अन्य प्रकार के पेटेंटों की तरह, सैद्धांतिक रूप से एक आविष्कारक को एक विस्तृत विचार (उदाहरण के लिए एक एल्गोरिथ्म) के लिए एक विशेष, समय-सीमित लाइसेंस देना चाहिए कि कैसे सॉफ्टवेयर के एक टुकड़े, या सॉफ्टवेयर के एक घटक को लागू किया जाए उपयोगी चीजों के लिए विचार जो सॉफ्टवेयर कर सकता था, और उपयोगकर्ता की आवश्यकताएं, पेटेंट योग्य नहीं होनी चाहिए, और ठोस कार्यान्वयन (अर्थात पेटेंट को लागू करने वाले वास्तविक सॉफ्टवेयर पैकेज) को पेटेंट योग्य नहीं माना जाता है - बाद वाले पहले से ही कॉपीराइट द्वारा कवर किए जाते हैं, आम तौर पर खुद ब खुद। इसलिए सॉफ़्टवेयर पेटेंट को आवश्यकताओं और ठोस कार्यान्वयन के बीच मध्य क्षेत्र को कवर करना चाहिए। कुछ देशों में, भौतिक दुनिया पर प्रभाव डालने के लिए दावा किए गए आविष्कार की आवश्यकता भी एक सॉफ़्टवेयर पेटेंट के लिए मान्य होने की आवश्यकताओं का हिस्सा हो सकती है - हालांकि चूंकि सभी उपयोगी सॉफ़्टवेयर का भौतिक दुनिया पर प्रभाव पड़ता है, इसलिए यह आवश्यकता हो सकती है बहस के लिए खुला। इस बीच, सॉफ्टवेयर कोड के लेखन के विभिन्न पहलुओं पर अमेरिकी कॉपीराइट कानून लागू किया गया था।<ref>गेरार्डो कोन डियाज़, द टेक्स्ट इन द मशीन: अमेरिकन कॉपीराइट लॉ एंड द मैनी नेचर्स ऑफ़ सॉफ़्टवेयर, 1974-1978," ''प्रौद्योगिकी और संस्कृति'' 57 (अक्टूबर 2016), 753-79</ref>
सॉफ्टवेयर पेटेंट, अन्य प्रकार के पेटेंटों की तरह, सैद्धांतिक रूप से एक आविष्कारक को एक "विस्तृत विचार (उदाहरण के लिए एक एल्गोरिथ्म) के लिए एक विशेष, समय-सीमित लाइसेंस देना चाहिए कि सॉफ्टवेयर का एक टुकड़ा, या एक घटक को कैसे लागू किया जाए" सॉफ्टवेयर का टुकड़ा। उपयोगी चीजों के लिए विचार जो सॉफ्टवेयर ''कर सकते हैं'', और उपयोगकर्ता ''आवश्यकताएं'', पेटेंट योग्य नहीं हैं, और ठोस कार्यान्वयन (यानी पेटेंट को लागू करने वाले वास्तविक सॉफ्टवेयर पैकेज) को पेटेंट योग्य नहीं माना जाता है- बाद वाले पहले से ही कॉपीराइट द्वारा कवर किए जाते हैं, आमतौर पर स्वचालित रूप से। इसलिए सॉफ़्टवेयर पेटेंट को आवश्यकताओं और ठोस कार्यान्वयन के बीच मध्य क्षेत्र को कवर करना चाहिए। कुछ देशों में, भौतिक दुनिया पर प्रभाव डालने के लिए दावा किए गए आविष्कार की आवश्यकता भी एक सॉफ़्टवेयर पेटेंट के लिए मान्य होने की आवश्यकताओं का हिस्सा हो सकती है - हालाँकि "सभी" उपयोगी सॉफ़्टवेयर का भौतिक दुनिया पर प्रभाव पड़ता है, यह आवश्यकता बहस के लिए खुली हो सकती है। इस बीच, सॉफ्टवेयर कोड के लेखन के विभिन्न पहलुओं पर अमेरिकी कॉपीराइट कानून लागू किया गया<ref>गेरार्डो कोन डियाज़, द टेक्स्ट इन द मशीन: अमेरिकन कॉपीराइट लॉ एंड द मैनी नेचर्स ऑफ़ सॉफ़्टवेयर, 1974-1978," ''प्रौद्योगिकी और संस्कृति'' 57 (अक्टूबर 2016), 753-79</ref>


सॉफ्टवेयर उद्योग में सॉफ्टवेयर पेटेंट विवादास्पद हैं, कई लोग उनके बारे में अलग-अलग विचार रखते हैं। विवाद के स्रोतों में से एक यह है कि प्रारंभिक विचारों और पेटेंट के बीच उपरोक्त विभाजन को पेटेंट वकीलों द्वारा व्यवहार में सम्मानित नहीं किया जाता है - उदाहरण के लिए [[ पहलू-उन्मुख प्रोग्रामिंग |  पहलू-उन्मुख प्रोग्रामिंग ]] (एओपी) के लिए पेटेंट, जो कथित तौर पर AOP के विचार को लागू करने वाले ''किसी भी'' प्रोग्रामिंग टूल पर अधिकार का दावा करने के लिए, चाहे वह किसी भी तरह से लागू किया गया हो{{Citation needed|date=September 2021}} विवाद का एक अन्य स्रोत नवाचार पर प्रभाव है, कई प्रतिष्ठित विशेषज्ञों और कंपनियों का तर्क है कि सॉफ्टवेयर इतना तेजी से आगे बढ़ने वाला क्षेत्र है कि सॉफ्टवेयर पेटेंट केवल विशाल अतिरिक्त मुकदमेबाजी लागत और जोखिम पैदा करते हैं, और वास्तव में मंद नवाचार{{Citation needed|date=September 2021}} संयुक्त राज्य अमेरिका के बाहर सॉफ्टवेयर पेटेंट के बारे में बहस के मामले में, तर्क दिया गया है कि बड़े अमेरिकी निगम और पेटेंट वकील सॉफ्टवेयर पेटेंट की अनुमति देने या जारी रखने के प्राथमिक लाभार्थी होने की संभावना है{{Citation needed|date=September 2021}}
सॉफ्टवेयर उद्योग में सॉफ्टवेयर पेटेंट विवादास्पद हैं, कई लोग उनके बारे में अलग-अलग विचार रखते हैं। विवाद के स्रोतों में से एक यह है कि प्रारंभिक विचारों और पेटेंट के बीच उपरोक्त विभाजन को पेटेंट वकीलों द्वारा व्यवहार में सम्मानित नहीं किया जाता है - उदाहरण के लिए पहलू-उन्मुख प्रोग्रामिंग (एओपी) के लिए पेटेंट, जिसे किसी भी प्रोग्रामिंग टूल पर अधिकारों का दावा करने के लिए कहा जाता है। एओपी के विचार को लागू करना, चाहे वह कितना भी लागू हो।  विवाद का एक अन्य स्रोत नवाचार पर प्रभाव है, कई प्रतिष्ठित विशेषज्ञों और कंपनियों का तर्क है कि सॉफ्टवेयर इतना तेजी से आगे बढ़ने वाला क्षेत्र है कि सॉफ्टवेयर पेटेंट केवल विशाल अतिरिक्त मुकदमेबाजी लागत और जोखिम पैदा करते हैं, और वास्तव में मंद नवाचार।  संयुक्त राज्य अमेरिका के बाहर सॉफ्टवेयर पेटेंट के बारे में बहस के मामले में, तर्क दिया गया है कि बड़े अमेरिकी निगम और पेटेंट वकील सॉफ्टवेयर पेटेंट की अनुमति देने या जारी रखने के प्राथमिक लाभार्थी होने की संभावना है।


== डिजाइन और कार्यान्वयन ==
== डिज़ाइन और सुधार ==
{{Main|Software development|Computer programming|Software engineering}}
सॉफ्टवेयर का डिजाइन और कार्यान्वयन सॉफ्टवेयर की जटिलता के आधार पर भिन्न होता है। उदाहरण के लिए, माइक्रोसॉफ्ट वर्ड के डिजाइन और निर्माण में माइक्रोसॉफ्ट नोटपैड को डिजाइन करने और विकसित करने की तुलना में अधिक समय लगा क्योंकि पूर्व में बहुत अधिक बुनियादी कार्यक्षमता है।
सॉफ्टवेयर का डिजाइन और कार्यान्वयन सॉफ्टवेयर की जटिलता के आधार पर भिन्न होता है। उदाहरण के लिए, [[ माइक्रोसॉफ्ट वर्ड ]] के डिजाइन और निर्माण में [[ माइक्रोसॉफ्ट नोटपैड ]] को डिजाइन और विकसित करने की तुलना में बहुत अधिक समय लगा क्योंकि बाद वाले में बहुत अधिक बुनियादी कार्यक्षमता है।{{Citation needed|date=September 2021}}


सॉफ्टवेयर आमतौर पर [[ एकीकृत विकास वातावरण ]] एस (आईडीई) में विकसित किया जाता है जैसे [[ ग्रहण (सॉफ्टवेयर) |  ग्रहण ]], [[ इंटेलीज आईडीईए |  इंटेलिजे ]] और [[ माइक्रोसॉफ्ट विजुअल स्टूडियो ]] जो प्रक्रिया को सरल बना सकते हैं और [[ कंपाइलर |  ]] सॉफ्टवेयर संकलित कर सकते हैं।{{Citation needed|date=September 2021}} जैसा कि एक अलग खंड में उल्लेख किया गया है, सॉफ़्टवेयर आमतौर पर मौजूदा सॉफ़्टवेयर और [[ एप्लिकेशन प्रोग्रामिंग इंटरफ़ेस ]] (API) के शीर्ष पर बनाया जाता है, जो अंतर्निहित सॉफ़्टवेयर  [[ GTK+ ]], JavaBeans या [[ Swing (Java) |  Swing ]] प्रदान करता है।{{Citation needed|date=September 2021}} पुस्तकालयों (एपीआई) को उनके उद्देश्य से वर्गीकृत किया जा सकता है। उदाहरण के लिए, [[ स्प्रिंग फ्रेमवर्क ]] का उपयोग [[ एंटरप्राइज एप्लिकेशन ]] एस को लागू करने के लिए किया जाता है, [[ विंडोज फॉर्म ]] लाइब्रेरी का उपयोग माइक्रोसॉफ्ट वर्ड जैसे ग्राफिकल यूजर इंटरफेस (जीयूआई) अनुप्रयोगों को डिजाइन करने के लिए किया जाता है, और [[ विंडोज कम्युनिकेशन फाउंडेशन ]] का उपयोग [[ डिजाइन करने के लिए किया जाता है। वेब सेवा ]] एस{{Citation needed|date=September 2021}} जब कोई प्रोग्राम डिज़ाइन किया जाता है, तो वह API पर निर्भर करता है। उदाहरण के लिए, एक माइक्रोसॉफ्ट विंडोज डेस्कटॉप एप्लिकेशन  [[ .NET Framework |  .NET ]] विंडोज़ फॉर्म लाइब्रेरी जैसे ''Form1.Close()'' और ''Form1.Show()' में API फ़ंक्शन को कॉल कर सकता है।<ref>{{cite web |url=http://msdn.microsoft.com/en-us/library/default.aspx |title=MSDN Library |access-date=2010-06-14 |url-status=live |archive-url=https://web.archive.org/web/20100611204810/http://msdn.microsoft.com/en-us/library/default.aspx |archive-date=11 June 2010 |df=dmy-all }}</ref> एप्लिकेशन को बंद या खोलने के लिए। इन एपीआई के बिना, प्रोग्रामर को इन कार्यात्मकताओं को पूरी तरह से स्वयं लिखना होगा।  [[ Oracle Corporation |  Oracle ]] और  [[ Microsoft ]] जैसी कंपनियाँ अपने स्वयं के API प्रदान करती हैं ताकि उनके  [[ लाइब्रेरी (कंप्यूटिंग) |  सॉफ़्टवेयर लाइब्रेरी ]] का उपयोग करके कई एप्लिकेशन लिखे जा सकें, जिनमें आमतौर पर कई API होते हैं।{{Citation needed|date=September 2021}}
सॉफ्टवेयर आमतौर पर एकीकृत विकास वातावरण (आईडीई) जैसे एक्लिप्स, इंटेलीजे और माइक्रोसॉफ्ट विजुअल स्टूडियो में विकसित किया जाता है जो प्रक्रिया को सरल बना सकता है और सॉफ्टवेयर को संकलित कर सकता है।  जैसा कि एक अलग खंड में उल्लेख किया गया है, सॉफ्टवेयर आमतौर पर मौजूदा सॉफ्टवेयर और एप्लिकेशन प्रोग्रामिंग इंटरफेस (एपीआई) के शीर्ष पर बनाया जाता है जो अंतर्निहित सॉफ्टवेयर जीटीके +, जावाबीन या स्विंग प्रदान करता है। पुस्तकालयों (एपीआई) को उनके उद्देश्य से वर्गीकृत किया जा सकता है। उदाहरण के लिए, स्प्रिंग फ्रेमवर्क का उपयोग उद्यम अनुप्रयोगों को लागू करने के लिए किया जाता है, विंडोज फॉर्म लाइब्रेरी का उपयोग ग्राफिकल यूजर इंटरफेस (जीयूआई) अनुप्रयोगों जैसे माइक्रोसॉफ्ट वर्ड को डिजाइन करने के लिए किया जाता है, और विंडोज कम्युनिकेशन फाउंडेशन का उपयोग वेब सेवाओं को डिजाइन करने के लिए किया जाता है। जब कोई प्रोग्राम डिज़ाइन किया जाता है, तो वह एपीआई पर निर्भर करता है।  


[[ डेटा संरचना ]] एस जैसे [[ हैश तालिका ]] एस,  [[ सरणी डेटा प्रकार | सरणी ]], और [[ बाइनरी पेड़ ]] एस, और  [[ एल्गोरिदम ]] एस जैसे  [[ क्विकॉर्ट ]], सॉफ्टवेयर बनाने के लिए उपयोगी हो सकते हैं।
उदाहरण के लिए, एक माइक्रोसॉफ्ट विंडोज डेस्कटॉप एप्लिकेशन एपीआई फ़ंक्शन को . NET विंडोज़ फॉर्म लाइब्रेरी जैसे ''फॉर्म 1. बंद करें () और फॉर्म 1.प्रदर्शन ()'' ''<ref>{{cite web |url=http://msdn.microsoft.com/en-us/library/default.aspx |title=MSDN Library |access-date=2010-06-14 |url-status=live |archive-url=https://web.archive.org/web/20100611204810/http://msdn.microsoft.com/en-us/library/default.aspx |archive-date=11 June 2010 |df=dmy-all }}</ref>'' एप्लिकेशन को बंद या खोलने के लिए। इन एपीआई के बिना, प्रोग्रामर को इन कार्यात्मकताओं को पूरी तरह से स्वयं लिखना होगा। Oracle और Microsoft जैसी कंपनियां अपने स्वयं के API प्रदान करती हैं ताकि कई एप्लिकेशन उनके सॉफ़्टवेयर पुस्तकालयों का उपयोग करके लिखे जा सकें जिनमें आमतौर पर उनमें कई API होते हैं।


कंप्यूटर सॉफ्टवेयर में विशेष आर्थिक विशेषताएं होती हैं जो इसके डिजाइन, निर्माण और वितरण को अधिकांश अन्य आर्थिक वस्तुओं से अलग बनाती हैं{{Specify|Which characteristics?|date=May 2012}}<ref>{{cite journal |author=v. Engelhardt, Sebastian |year=2008 |url=https://ideas.repec.org/p/jrp/jrpwrp/2008-045.html |title=The Economic Properties of Software |journal=Jena Economic Research Papers |volume=2 |issue=2008–045 |url-status=live |archive-url=https://web.archive.org/web/20160105145954/https://ideas.repec.org/p/jrp/jrpwrp/2008-045.html |archive-date=5 January 2016 |df=dmy-all }}</ref><ref>{{cite web |url=http://dankaminsky.com/1999/03/02/69/ |title=Why Open Source Is The Optimum Economic Paradigm for Software |first=Dan |last=Kaminsky |year=1999 |url-status=live |archive-url=https://web.archive.org/web/20120522001231/http://dankaminsky.com/1999/03/02/69/ |archive-date=22 May 2012 |df=dmy-all }}</ref>
डेटा संरचनाएं जैसे हैश टेबल, सरणियाँ, और बाइनरी ट्री, और एल्गोरिदम जैसे क्विकॉर्ट, सॉफ़्टवेयर बनाने के लिए उपयोगी हो सकते हैं।


सॉफ़्टवेयर बनाने वाले व्यक्ति को  [[ प्रोग्रामर ]],  [[ सॉफ़्टवेयर इंजीनियर ]] या सॉफ़्टवेयर डेवलपर कहा जाता है, इन शब्दों का अर्थ समान है। प्रोग्रामर के लिए अधिक अनौपचारिक शब्द भी मौजूद हैं जैसे कोडर और हैकर{{Spaced ndash}}हालांकि बाद वाले शब्द का उपयोग भ्रम पैदा कर सकता है, क्योंकि इसका अर्थ अक्सर  [[ सुरक्षा हैकर | किसी ऐसे व्यक्ति के लिए होता है जो अवैध रूप से कंप्यूटर सिस्टम ]] में सेंध लगाता है।
कंप्यूटर सॉफ्टवेयर में विशेष आर्थिक विशेषताएं होती हैं जो इसके डिजाइन, निर्माण और वितरण को अधिकांश अन्य आर्थिक वस्तुओं से अलग बनाती हैं। <ref>{{cite journal |author=v. Engelhardt, Sebastian |year=2008 |url=https://ideas.repec.org/p/jrp/jrpwrp/2008-045.html |title=The Economic Properties of Software |journal=Jena Economic Research Papers |volume=2 |issue=2008–045 |url-status=live |archive-url=https://web.archive.org/web/20160105145954/https://ideas.repec.org/p/jrp/jrpwrp/2008-045.html |archive-date=5 January 2016 |df=dmy-all }}</ref><ref>{{cite web |url=http://dankaminsky.com/1999/03/02/69/ |title=Why Open Source Is The Optimum Economic Paradigm for Software |first=Dan |last=Kaminsky |year=1999 |url-status=live |archive-url=https://web.archive.org/web/20120522001231/http://dankaminsky.com/1999/03/02/69/ |archive-date=22 May 2012 |df=dmy-all }}</ref>


<!-- ==उद्योग और संगठन ==
सॉफ़्टवेयर बनाने वाले व्यक्ति को प्रोग्रामर, सॉफ़्टवेयर इंजीनियर या सॉफ़्टवेयर डेवलपर कहा जाता है, इन शब्दों का अर्थ समान है। प्रोग्रामर के लिए अधिक अनौपचारिक शब्द भी मौजूद हैं जैसे "कोडर" और "हैकर" – हालांकि बाद वाले शब्द का उपयोग भ्रम पैदा कर सकता है, क्योंकि इसका उपयोग अक्सर किसी ऐसे व्यक्ति के लिए किया जाता है जो अवैध रूप से कंप्यूटर सिस्टम में सेंध लगाता है ।
{{Main|Software industry}}
दुनिया में सॉफ्टवेयर कंपनियों और प्रोग्रामर की एक बड़ी विविधता में एक सॉफ्टवेयर शामिल हैउद्योग। सॉफ्टवेयर काफी लाभदायक उद्योग हो सकता है:  [[ बिल गेट्स ]], [[ के सह-संस्थापक माइक्रोसॉफ्ट ]] 2009 में दुनिया के सबसे अमीर व्यक्ति थे, इसका मुख्य कारण माइक्रोसॉफ्ट में शेयरों की एक महत्वपूर्ण संख्या के स्वामित्व के कारण  [[ के लिए जिम्मेदार कंपनी थी। माइक्रोसॉफ्ट विंडोज ]] और  [[ माइक्रोसॉफ्ट ऑफिस ]] सॉफ्टवेयर उत्पाद - दोनों अपने-अपने उत्पाद श्रेणियों में बाजार के नेता।


गैर-लाभकारी सॉफ़्टवेयर संगठनों में  [[ फ्री सॉफ्टवेयर फाउंडेशन ]],  [[ जीएनयू प्रोजेक्ट ]] और  [[ मोज़िला फाउंडेशन ]] शामिल हैं।  [[ W3C ]],  [[ IETF ]] जैसे सॉफ़्टवेयर मानक संगठन  [[ XML ]],  [[ HTTP ]] और  [[ HTML ]] जैसे अनुशंसित सॉफ़्टवेयर मानकों को विकसित करते हैं, ताकि सॉफ़्टवेयर इन मानकों के माध्यम से इंटरऑपरेट कर सके।
== सन्दर्भ ==
 
<references />
अन्य प्रसिद्ध बड़ी सॉफ्टवेयर कंपनियों में  [[ गूगल ]],  [[ आईबीएम ]],  [[ टाटा कंसल्टेंसी सर्विसेज |  टीसीएस ]],  [[ इंफोसिस ]],  [[ विप्रो ]],  [[ एचसीएल टेक्नोलॉजीज ]],  [[ ओरेकल कॉर्पोरेशन |  ओरेकल ]],  [[ नोवेल ]],  [[ एसएपी शामिल हैं। AG |  SAP ]],  [[ NortonLifeLock |  Symantec ]],  [[ Adobe Systems ]],  [[ Sidetrade ]] और  [[ Corel ]], जबकि छोटी कंपनियां अक्सर नवाचार प्रदान करती हैं। ->
 
==See also==
* [[Computer program]]
* [[Independent software vendor]]* [[Open-source software]]
* [[Outline of software]]
* [[Software asset management]]
* [[Software release life cycle]]
 
==References==
{{reflist|refs=
<ref name="Carhart_1953">{{cite book |author-last=Carhart |author-first=Richard |title=A survey of the current status of the electronic reliability problem |date=1953 |publisher=[[Rand Corporation]] |location=Santa Monica, CA |page=69 |url=https://www.rand.org/content/dam/rand/pubs/research_memoranda/2013/RM1131.pdf#79 |quote=[…] It will be recalled from Sec. 1.6 that the term ''personnel'' was defined to include people who come into direct contact with the hardware, from production to field use, i.e., people who assemble, inspect, pack, ship, handle, install, operate, and maintain electronic equipment. In any of these phases personnel failures may result in unoperational gear. As with the hardware factors, there is almost no quantitative data concerning these software or human factors in reliability: How many faults are caused by personnel, why they occur, and what can be done to remove the errors. […]}}</ref>
<ref name="Tukey_1958">{{cite journal |author-first=John Wilder |author-last=Tukey |author-link=John Wilder Tukey |title=The Teaching of Concrete Mathematics |journal=[[American Mathematical Monthly]] |publisher=[[Taylor & Francis, Ltd.]] / [[Mathematical Association of America]] |volume=65 |issue=1 |pages=1–9, 2 |date=January 1958 |id={{CODEN|AMMYAE}} |issn=0002-9890 |doi=10.2307/2310294 |quote=[…] Today the "software" comprising the carefully planned interpretive routines, compilers, and other aspects of automative programming are at least as important to the modern electronic calculator as its "hardware" of tubes, transistors, wires, tapes, and the like. […]|jstor=2310294 }}</ref>
<ref name="Niquette_2006">{{citation |author-last=Niquette |author-first=R. Paul |date=2006 |title=Softword: Provenance for the Word 'Software |isbn=1-58922-233-4 |url=http://www.niquette.com/books/softword/tocsoft.html |access-date=2019-08-18 |url-status=live |archive-url=https://web.archive.org/web/20190808124650/http://www.niquette.com/books/softword/tocsoft.html |archive-date=2019-08-08}}</ref>
<ref name="Shapiro_2000">{{cite journal |author-last=Shapiro |author-first=Fred |date=2000 |title=Origin of the Term Software: Evidence from the JSTOR Electronic Journal Archive |journal=[[IEEE Annals of the History of Computing]] |volume=22 |issue=2 |pages=69–71 |doi=10.1109/mahc.2000.887997 |url=http://computer.org/annals/an2000/pdf/a2069.pdf |access-date=2013-06-25 |url-status=dead |archive-url=https://web.archive.org/web/20030605004419/http://computer.org/annals/an2000/pdf/a2069.pdf |archive-date=2003-06-05}}</ref>
<ref name="Leonhardt_2000">{{cite news |title=John Tukey, 85, Statistician; Coined the Word 'Software' |author-last=Leonhardt |author-first=David |newspaper=[[The New York Times]] |date=2000-07-28 |url=https://www.nytimes.com/2000/07/28/us/john-tukey-85-statistician-coined-the-word-software.html |access-date=2012-09-24}}</ref>
<ref name="Beebe_2017">{{cite book |author-first=Nelson H. F. |author-last=Beebe |title=The Mathematical-Function Computation Handbook - Programming Using the MathCW Portable Software Library |chapter=Chapter I - Integer arithmetic |date=2017-08-22 |location=Salt Lake City, UT, USA |publisher=[[Springer International Publishing AG]] |edition=1 |lccn=2017947446 |isbn=978-3-319-64109-6 |doi=10.1007/978-3-319-64110-2 |pages=969, 1035|s2cid=30244721 }}</ref>
}}
 
 
=== स्रोत ==={{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}}
 
==External links==
* {{curlie|Computers/Software}}<!--ref name="github"/-->
{{subject bar|Free and open-source software|auto=1}}


[[Category:AC with 0 elements]]
[[Category:AC with 0 elements]]
Line 140: Line 96:
[[Category:Articles with invalid date parameter in template]]
[[Category:Articles with invalid date parameter in template]]
[[Category:Articles with unsourced statements from September 2021]]
[[Category:Articles with unsourced statements from September 2021]]
[[Category:CS1 English-language sources (en)]]
[[Category:CS1 maint]]
[[Category:CS1 maint]]
[[Category:Harv and Sfn no-target errors]]
[[Category:Harv and Sfn no-target errors]]
Line 145: Line 102:
[[Category:Pages with empty portal template]]
[[Category:Pages with empty portal template]]
[[Category:Pages with empty sister project links]]
[[Category:Pages with empty sister project links]]
<references />
[[Category:Pages with reference errors]]
[[Category:Portal templates with redlinked portals]]

Latest revision as of 09:50, 12 September 2022

एक आरेख दिखाता है कि उपयोगकर्ता एक विशिष्ट डेस्कटॉप कंप्यूटर पर एप्लिकेशन सॉफ़्टवेयर के साथ कैसे इंटरैक्ट करता है। एप्लीकेशन सॉफ्टवेयर लेयर ऑपरेटिंग सिस्टम के साथ इंटरफेस करता है, जो बदले में हार्डवेयर के साथ संचार करता है। तीर सूचना प्रवाह का संकेत देते हैं।

सॉफ्टवेयर कंप्यूटर प्रोग्राम और संबंधित दस्तावेजों और डेटा का एक सेट है।[1][2] यह हार्डवेयर के विपरीत है, जिससे सिस्टम बनाया गया है और जो वास्तव में काम करता है।

सबसे कम प्रोग्रामिंग स्तर, निष्पादन योग्य कोड में मशीन भाषा निर्देश होते हैं जो एक व्यक्ति प्रोसेसर द्वारा समर्थित होते हैं- आमतौर पर एक केंद्रीय प्रसंस्करण इकाई (CPU) या ग्राफिक्स प्रोसेसिंग यूनिट (GPU)। मशीनी भाषा में बाइनरी मानों के सेट होते हैं जो प्रोसेसर निर्देशों का प्रतिनिधित्व करते हैं जो कंप्यूटर की स्थिति को उसकी पिछली स्थिति से बदलते हैं। उदाहरण के लिए, एक निर्देश कंप्यूटर में किसी विशेष स्टोरेज स्थान में संग्रहीत मूल्य को बदल सकता है- एक ऐसा प्रभाव जो उपयोगकर्ता के लिए सीधे देखने योग्य नहीं है। एक निर्देश कई इनपुट या आउटपुट ऑपरेशंस में से एक को भी आमंत्रित कर सकता है, उदाहरण के लिए कंप्यूटर स्क्रीन पर कुछ टेक्स्ट प्रदर्शित करना; राज्य में परिवर्तन करना जो उपयोगकर्ता को दिखाई देना चाहिए । वह प्रोसेसर निर्देशों को उनके द्वारा दिए गए क्रम में निष्पादित करता है, जब तक कि उसे किसी भिन्न निर्देश पर "कूदने" का निर्देश नहीं दिया जाता है, या ऑपरेटिंग सिस्टम द्वारा बाधित नहीं किया जाता है। 2015 तक, अधिकांश व्यक्तिगत कंप्यूटर (personal computer), स्मार्टफोन डिवाइस और सर्वर में कई निष्पादन इकाइयों (execution unit) या एक साथ गणना करने वाले कई प्रोसेसर वाले प्रोसेसर होते हैं, और कंप्यूटिंग अतीत की तुलना में बहुत अधिक समवर्ती गतिविधि बन गई है।

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

इतिहास

एल्गोरिथम , जो सॉफ्टवेयर का पहला टुकड़ा होता, एडा लवलेस द्वारा 19वीं शताब्दी में नियोजित विश्लेषणात्मक इंजन के लिए लिखा गया था।[4] उसने प्रमाण बनाए, यह दिखाने के लिए कि इंजन बर्नौली संख्या एस की गणना कैसे करेगा[4] सबूतों और एल्गोरिथम के कारण, उन्हें पहला कंप्यूटर प्रोग्रामर माना जाता है[5][6]

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

2000 में, येल लॉ स्कूल के एक लाइब्रेरियन फ्रेड शापिरो ने एक पत्र प्रकाशित किया जिसमें खुलासा किया गया कि जॉन वाइल्डर टुके के 1958 के पेपर "द टीचिंग ऑफ कंक्रीट मैथमेटिक्स" में "सॉफ्टवेयर" शब्द का सबसे पहला ज्ञात उपयोग था। इसने कई लोगों को इस शब्द को गढ़ने का श्रेय दिया, विशेष रूप से उसी वर्ष प्रकाशित मृत्युलेखों में हालांकि तुकी ने कभी भी ऐसे किसी सिक्के के लिए क्रेडिट का दावा नहीं किया। 1995 में, पॉल निकेट ने दावा किया कि उन्होंने मूल रूप से अक्टूबर 1953 में इस शब्द को गढ़ा था, हालांकि उन्हें अपने दावे का समर्थन करने वाला कोई दस्तावेज नहीं मिला। एक इंजीनियरिंग संदर्भ में "सॉफ़्टवेयर" शब्द का सबसे पहला ज्ञात प्रकाशन अगस्त 1953 में रिचर्ड आर. कारहार्ट द्वारा रैंड कॉर्पोरेशन रिसर्च मेमोरेंडम में किया गया था।

प्रकार

लगभग सभी कंप्यूटर प्लेटफॉर्म पर, सॉफ्टवेयर को कुछ व्यापक श्रेणियों में बांटा जा सकता है।

उद्देश्य, या उपयोग का क्षेत्र

लक्ष्य के आधार पर कंप्यूटर सॉफ्टवेयर को निम्न में विभाजित किया जा सकता है:

  • एप्लिकेशन सॉफ्टवेयर कंप्यूटर सिस्टम का उपयोग कंप्यूटर के मूल संचालन से परे विशेष कार्य करने के लिए करता है। कई अलग-अलग प्रकार के एप्लिकेशन सॉफ़्टवेयर हैं क्योंकि आधुनिक कंप्यूटर के साथ किए जा सकने वाले कार्यों की श्रेणी इतनी बड़ी है— सॉफ़्टवेयर की सूची देखें।
  • सिस्टम सॉफ्टवेयर हार्डवेयर व्यवहार का प्रबंधन करता है, ताकि उपयोगकर्ताओं द्वारा आवश्यक बुनियादी कार्यक्षमता प्रदान की जा सके, या अन्य सॉफ्टवेयर, यदि कोई हो। सिस्टम सॉफ़्टवेयर को एप्लिकेशन सॉफ़्टवेयर चलाने के लिए एक प्लेटफ़ॉर्म प्रदान करने के लिए भी डिज़ाइन किया गया है[7] और इसमें निम्नलिखित शामिल हैं:
    • ऑपरेटिंग सिस्टम (OS) सॉफ़्टवेयर के आवश्यक संग्रह हैं जो संसाधनों का प्रबंधन करते हैं और अन्य सॉफ़्टवेयर के लिए सामान्य सेवाएं प्रदान करते हैं जो उनमें से "शीर्ष पर" चलते हैं। पर्यवेक्षी कार्यक्रम, बूट लोडर, शेल और विंडो सिस्टम ऑपरेटिंग सिस्टम के मुख्य भाग हैं। व्यवहार में, एक ऑपरेटिंग सिस्टम अतिरिक्त सॉफ़्टवेयर (एप्लिकेशन सॉफ़्टवेयर सहित) के साथ आता है ताकि उपयोगकर्ता संभावित रूप से ऐसे कंप्यूटर के साथ कुछ काम कर सके जिसमें केवल एक ऑपरेटिंग सिस्टम हो।
    • डिवाइस ड्राइवर एक विशेष प्रकार के डिवाइस को संचालित या नियंत्रित करते हैं जो कंप्यूटर से जुड़ा होता है। प्रत्येक डिवाइस को कम से कम एक संगत डिवाइस ड्राइवर की आवश्यकता होती है; क्योंकि एक कंप्यूटर में आमतौर पर कम से कम एक इनपुट डिवाइस और कम से कम एक आउटपुट डिवाइस होता है, एक कंप्यूटर को आमतौर पर एक से अधिक डिवाइस ड्राइवर की आवश्यकता होती है।
    • यूटिलिटीज कंप्यूटर प्रोग्राम हैं जिन्हें उपयोगकर्ताओं को उनके कंप्यूटर के रखरखाव और देखभाल में सहायता करने के लिए डिज़ाइन किया गया है।
    • दुर्भावनापूर्ण सॉफ़्टवेयर, या मैलवेयर,या मैलवेयर, ऐसा सॉफ़्टवेयर है जिसे कंप्यूटर को नुकसान पहुंचाने या बाधित करने के लिए विकसित किया गया है। मैलवेयर कंप्यूटर से संबंधित अपराधों से निकटता से जुड़ा हुआ है, हालांकि कुछ दुर्भावनापूर्ण प्रोग्राम व्यावहारिक चुटकुले के रूप में डिज़ाइन किए गए हो सकते हैं।

निष्पादन की प्रकृति या डोमेन

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

प्रोग्रामिंग टूल

प्रोग्रामिंग टूल प्रोग्राम या एप्लिकेशन के रूप में भी सॉफ्टवेयर हैं जिनका उपयोग डेवलपर्स सॉफ्टवेयर बनाने, डिबग करने, बनाए रखने या अन्यथा समर्थन करने के लिए करते हैं।

सॉफ्टवेयर एक या अधिक प्रोग्रामिंग भाषाओं में लिखा जाता है; अस्तित्व में कई प्रोग्रामिंग भाषाएं हैं, और प्रत्येक में कम से कम एक कार्यान्वयन है, जिनमें से प्रत्येक में प्रोग्रामिंग टूल का अपना सेट होता है। ये उपकरण अपेक्षाकृत स्व-निहित प्रोग्राम हो सकते हैं जैसे कि कंपाइलर (compiler), डिबगर (debugger), दुभाषिए (interpreters), लिंकर्स (linkers), और टेक्स्ट एडिटर (text editors), जिन्हें किसी कार्य को पूरा करने के लिए जोड़ा जा सकता है; या वे एक एकीकृत विकास वातावरण (आईडीई) बना सकते हैं, जो ऐसे स्व-निहित उपकरणों की अधिक या सभी कार्यक्षमता को जोड़ती है। आईडीई या तो प्रासंगिक व्यक्तिगत उपकरणों को लागू करके या नए तरीके से उनकी कार्यक्षमता को फिर से लागू करके ऐसा कर सकते हैं। एक आईडीई विशिष्ट कार्यों को करना आसान बना सकता है, जैसे किसी विशेष परियोजना में फाइलों में खोज करना। कई प्रोग्रामिंग भाषा कार्यान्वयन व्यक्तिगत टूल या आईडीई दोनों का उपयोग करने का विकल्प प्रदान करते हैं।

विषय

आर्किटेक्चर

लोग आधुनिक सामान्य प्रयोजन के कंप्यूटरों ( एम्बेडेड सिस्टम, एनालॉग कंप्यूटर और सुपर कंप्यूटर के विपरीत) का उपयोग करते हैं, वे आमतौर पर सॉफ्टवेयर की तीन परतों को विभिन्न प्रकार के कार्य करते हुए देखते हैं: प्लेटफ़ॉर्म, एप्लिकेशन और उपयोगकर्ता सॉफ़्टवेयर।

  • प्लेटफ़ॉर्म सॉफ़्टवेयर (Platform software): प्लेटफ़ॉर्म में फ़र्मवेयर, डिवाइस ड्राइवर, एक ऑपरेटिंग सिस्टम और आमतौर पर एक ग्राफिकल यूजर इंटरफेस शामिल होता है, जो कुल मिलाकर, उपयोगकर्ता को कंप्यूटर और उसके बाह्य उपकरणों (संबंधित उपकरण) के साथ बातचीत करने की अनुमति देता है। प्लेटफ़ॉर्म सॉफ़्टवेयर अक्सर कंप्यूटर के साथ बंडल में आता है। एक पीसी पर आमतौर पर प्लेटफॉर्म सॉफ्टवेयर को बदलने की क्षमता होती है।
  • एप्लीकेशन सॉफ्टवेयर (Application software): एप्लीकेशन सॉफ्टवेयर वह है जो ज्यादातर लोग सॉफ्टवेयर के बारे में सोचते समय सोचते हैं। विशिष्ट उदाहरणों में कार्यालय सुइट और वीडियो गेम शामिल हैं। एप्लीकेशन सॉफ्टवेयर अक्सर कंप्यूटर हार्डवेयर से अलग से खरीदा जाता है। कभी-कभी एप्लिकेशन को कंप्यूटर के साथ बंडल किया जाता है, लेकिन यह इस तथ्य को नहीं बदलता है कि वे स्वतंत्र एप्लिकेशन के रूप में चलते हैं। एप्लिकेशन आमतौर पर ऑपरेटिंग सिस्टम से स्वतंत्र प्रोग्राम होते हैं, हालांकि वे अक्सर विशिष्ट प्लेटफॉर्म के लिए तैयार किए जाते हैं। अधिकांश उपयोगकर्ता कंपाइलर, डेटाबेस और अन्य "सिस्टम सॉफ़्टवेयर" को एप्लिकेशन के रूप में सोचते हैं।
  • उपयोगकर्ता-लिखित सॉफ़्टवेयर (User-written software): उपयोगकर्ताओं की विशिष्ट आवश्यकताओं को पूरा करने के लिए अंतिम-उपयोगकर्ता विकास दर्जी सिस्टम। उपयोगकर्ता सॉफ़्टवेयर में स्प्रेडशीट टेम्प्लेट और वर्ड प्रोसेसर टेम्प्लेट शामिल हैं।यहां तक कि ईमेल फिल्टर भी एक तरह का यूजर सॉफ्टवेयर है। उपयोगकर्ता इस सॉफ़्टवेयर को स्वयं बनाते हैं और अक्सर यह अनदेखा कर देते हैं कि यह कितना महत्वपूर्ण है। उपयोगकर्ता द्वारा लिखित सॉफ़्टवेयर को डिफ़ॉल्ट एप्लिकेशन पैकेज में कितनी कुशलता से एकीकृत किया गया है, इस पर निर्भर करते हुए, कई उपयोगकर्ताओं को मूल पैकेज और सहकर्मियों द्वारा जोड़े गए अंतर के बारे में पता नहीं हो सकता है।

निष्पादन

कंप्यूटर सॉफ्टवेयर को कंप्यूटर के स्टोरेज (जैसे हार्ड ड्राइव या मेमोरी ) में "लोड" करना पड़ता है। एक बार सॉफ्टवेयर लोड हो जाने के बाद, कंप्यूटर सॉफ्टवेयर को निष्पादित करने में सक्षम होता है। इसमें एप्लिकेशन सॉफ़्टवेयर से सिस्टम सॉफ़्टवेयर के माध्यम से हार्डवेयर को निर्देश देना शामिल है, जो अंततः मशीन कोड के रूप में निर्देश प्राप्त करता है। प्रत्येक निर्देश कंप्यूटर को एक ऑपरेशन करने के लिए प्रेरित करता है - डेटा को स्थानांतरित करना, गणना करना, या निर्देशों के नियंत्रण प्रवाह को बदलना।

डेटा मूवमेंट आमतौर पर मेमोरी में एक स्थान से दूसरे स्थान पर होता है। कभी-कभी इसमें मेमोरी और रजिस्टरों के बीच डेटा को स्थानांतरित करना शामिल होता है जो सीपीयू में हाई-स्पीड डेटा एक्सेस को सक्षम करता है। डेटा को स्थानांतरित करना, विशेष रूप से इसकी बड़ी मात्रा में, महंगा हो सकता है; इसके बजाय कभी-कभी डेटा के लिए "पॉइंटर्स" का उपयोग करके इसे टाला जाता है। संगणना में सरल ऑपरेशन शामिल हैं जैसे एक चर डेटा तत्व के मूल्य को बढ़ाना। अधिक जटिल संगणनाओं में एक साथ कई संचालन और डेटा तत्व शामिल हो सकते हैं।

गुणवत्ता और विश्वसनीयता

सॉफ्टवेयर की गुणवत्ता बहुत महत्वपूर्ण है, खासकर वाणिज्यिक और सिस्टम सॉफ्टवेयर के लिए। यदि सॉफ़्टवेयर दोषपूर्ण है, तो यह किसी व्यक्ति के कार्य को हटा सकता है, कंप्यूटर को क्रैश कर सकता है और अन्य अप्रत्याशित कार्य कर सकता है। दोषों और त्रुटियों को " बग " कहा जाता है जो अक्सर अल्फा और बीटा परीक्षण के दौरान खोजे जाते हैं। सॉफ्टवेयर अक्सर एक शिकार भी होता है जिसे सॉफ्टवेयर एजिंग के रूप में जाना जाता है, अनदेखी बग के संयोजन के परिणामस्वरूप प्रगतिशील प्रदर्शन में गिरावट।

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

लाइसेंस

सॉफ़्टवेयर का लाइसेंस उपयोगकर्ता को लाइसेंस प्राप्त वातावरण में सॉफ़्टवेयर का उपयोग करने का अधिकार देता है, और मुफ्त सॉफ़्टवेयर लाइसेंस के मामले में, अन्य अधिकार भी प्रदान करता है जैसे कि प्रतिलिपि बनाने का अधिकार।

मालिकाना सॉफ्टवेयर (Proprietary software) को दो प्रकारों में विभाजित किया जा सकता है:

  • फ्रीवेयर , जिसमें "फ्री ट्रायल" सॉफ्टवेयर या " फ्रीमियम " सॉफ्टवेयर की श्रेणी शामिल है (अतीत में, शेयरवेयर शब्द का इस्तेमाल अक्सर फ्री ट्रायल/फ्रीमियम सॉफ्टवेयर के लिए किया जाता था)। जैसा कि नाम से पता चलता है, फ्रीवेयर का उपयोग मुफ्त में किया जा सकता है, हालांकि फ्री ट्रायल या फ्रीमियम सॉफ्टवेयर के मामले में, यह कभी-कभी सीमित अवधि के लिए या सीमित कार्यक्षमता के साथ ही सही होता है।[9]
  • एक शुल्क के लिए उपलब्ध सॉफ्टवेयर, जिसका उपयोग केवल लाइसेंस की खरीद पर कानूनी रूप से किया जा सकता है[10]

ओपन-सोर्स सॉफ्टवेयर एक मुफ्त सॉफ्टवेयर लाइसेंस के साथ आता है, जो प्राप्तकर्ता को सॉफ्टवेयर को संशोधित और पुनर्वितरित करने का अधिकार देता है।[11]

पेटेंट

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

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

डिज़ाइन और सुधार

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

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

उदाहरण के लिए, एक माइक्रोसॉफ्ट विंडोज डेस्कटॉप एप्लिकेशन एपीआई फ़ंक्शन को . NET विंडोज़ फॉर्म लाइब्रेरी जैसे फॉर्म 1. बंद करें () और फॉर्म 1.प्रदर्शन () [13] एप्लिकेशन को बंद या खोलने के लिए। इन एपीआई के बिना, प्रोग्रामर को इन कार्यात्मकताओं को पूरी तरह से स्वयं लिखना होगा। Oracle और Microsoft जैसी कंपनियां अपने स्वयं के API प्रदान करती हैं ताकि कई एप्लिकेशन उनके सॉफ़्टवेयर पुस्तकालयों का उपयोग करके लिखे जा सकें जिनमें आमतौर पर उनमें कई API होते हैं।

डेटा संरचनाएं जैसे हैश टेबल, सरणियाँ, और बाइनरी ट्री, और एल्गोरिदम जैसे क्विकॉर्ट, सॉफ़्टवेयर बनाने के लिए उपयोगी हो सकते हैं।

कंप्यूटर सॉफ्टवेयर में विशेष आर्थिक विशेषताएं होती हैं जो इसके डिजाइन, निर्माण और वितरण को अधिकांश अन्य आर्थिक वस्तुओं से अलग बनाती हैं। [14][15]

सॉफ़्टवेयर बनाने वाले व्यक्ति को प्रोग्रामर, सॉफ़्टवेयर इंजीनियर या सॉफ़्टवेयर डेवलपर कहा जाता है, इन शब्दों का अर्थ समान है। प्रोग्रामर के लिए अधिक अनौपचारिक शब्द भी मौजूद हैं जैसे "कोडर" और "हैकर" – हालांकि बाद वाले शब्द का उपयोग भ्रम पैदा कर सकता है, क्योंकि इसका उपयोग अक्सर किसी ऐसे व्यक्ति के लिए किया जाता है जो अवैध रूप से कंप्यूटर सिस्टम में सेंध लगाता है ।

सन्दर्भ

  1. IBM. "What is Software Development". IBM. IBM. Retrieved 2021-10-04.
  2. Johnson, Dave. "What is Software". Business Insider. Business Insider. Retrieved 2021-10-04.
  3. "Compiler construction". Archived from the original on 2 November 2013.
  4. 4.0 4.1 Evans 2018, p. 21.
  5. Fuegi, J.; Francis, J. (2003). "Lovelace & Babbage and the creation of the 1843 'notes'" (PDF). Annals of the History of Computing. 25 (4): 16–26. doi:10.1109/MAHC.2003.1253887. S2CID 40077111. Archived from the original (PDF) on 2020-02-15.
  6. "Ada Lovelace honoured by Google doodle". The Guardian. December 10, 2012. Retrieved 25 November 2018.
  7. misbook/sfsysfm.htm "System Software". The University of Mississippi. Archived from misbook/sfsysfm.htm the original on 30 May 2001.
  8. "scripting intelligence book examples". GitHub. 9 May 2018. Archived from the original on 6 November 2015.
  9. {{Cite web|title=Freeware vs Shareware - Difference and Comparison | Diffen | url=https://www.diffen.com/difference/Freeware_vs_Shareware | access-date=2022-01-26 | वेबसाइट=www.diffen.com | language=en}
  10. Morin, Andrew; Urban, Jennifer; Sliz, Piotr (2012-07-26). "A Quick Guide to Software Licensing for the Scientist-Programmer". PLOS Computational Biology (in English). 8 (7): e1002598. doi:10.1371/journal.pcbi.1002598. ISSN 1553-7358. PMC 3406002. PMID 22844236.
  11. "Open source software explained". IONOS Digitalguide (in English). Retrieved 2022-01-26.
  12. गेरार्डो कोन डियाज़, द टेक्स्ट इन द मशीन: अमेरिकन कॉपीराइट लॉ एंड द मैनी नेचर्स ऑफ़ सॉफ़्टवेयर, 1974-1978," प्रौद्योगिकी और संस्कृति 57 (अक्टूबर 2016), 753-79
  13. "MSDN Library". Archived from the original on 11 June 2010. Retrieved 14 June 2010.
  14. v. Engelhardt, Sebastian (2008). "The Economic Properties of Software". Jena Economic Research Papers. 2 (2008–045). Archived from the original on 5 January 2016.
  15. Kaminsky, Dan (1999). "Why Open Source Is The Optimum Economic Paradigm for Software". Archived from the original on 22 May 2012.