इस उत्तर में शानदार कवरेज और लिंक हैं कि विभिन्न भाषाएं किसी परियोजना को अलग-अलग लाभ क्यों प्रदान कर सकती हैं। हालाँकि, इसमें सिर्फ भाषा की उपयुक्तता की तुलना में थोड़ा अधिक है कि कई भाषाओं के उपयोग से परियोजनाएं क्यों समाप्त होती हैं।
छह मुख्य कारणों से कई भाषाओं का उपयोग करके परियोजनाएं समाप्त होती हैं:
- अन्य भाषाओं में लिखे गए पुन: उपयोग कोड की लागत लाभ;
- विरासत कोड को शामिल करने और समायोजित करने की आवश्यकता;
- विशिष्ट भाषाओं के लिए कोडर्स की उपलब्धता;
- विशेष आवश्यकताओं के लिए विशेष भाषाओं की आवश्यकता;
- विरासत भाषा के आधार; तथा
- खराब परियोजना प्रबंधन (अनियोजित बहु भाषा उपयोग)।
कारण 1-4 इस मायने में सकारात्मक कारण हैं कि उन्हें सीधे संबोधित करने से एक परियोजना को तेजी से समाप्त करने में मदद मिल सकती है, अधिक कुशलता से, उच्च गुणवत्ता वाले उत्पाद के साथ, और आसान दीर्घकालिक समर्थन के साथ। कारण 5 और 6 नकारात्मक हैं, आवश्यक परिवर्तन के प्रतिरोध के लक्षण, खराब योजना, अप्रभावी प्रबंधन या इन सभी कारकों के कुछ संयोजन। दुर्भाग्य से ये नकारात्मक कारक "आकस्मिक" बहु भाषा उपयोग के सामान्य कारण हैं।
कारण 1 , पुन: उपयोग की लागत लाभ, ओपन सोर्स सॉफ़्टवेयर की अधिक भूमिका और वेब पर सही कोड घटकों को खोजने के लिए बेहतर क्षमताओं दोनों की वजह से एक परियोजना में कई भाषाओं के उपयोग की अनुमति देने के लिए एक तेजी से शक्तिशाली कारण बन गया है। पिछले दशकों के "चलो इसे सभी आंतरिक रूप से देखें" का दर्शन आर्थिक वास्तविकताओं के सामने फीका है, और अनिवार्य रूप से किसी भी नई परियोजना के लिए सबसे अधिक लागत प्रभावी दृष्टिकोण कभी नहीं है। यह बदले में एक परियोजना के कम आम भाषा के उपयोग के सख्त प्रवर्तन के अवसर बनाता है।
विशेष रूप से अच्छी तरह से प्रबंधित खुले स्रोत घटकों के पुन: उपयोग के मामले में, कई भाषाओं का उपयोग भारी समग्र लागत लाभ प्रदान कर सकता है क्योंकि पुन: उपयोग किए गए घटक अच्छी तरह से डिज़ाइन किए गए इंटरफेस के पीछे छिपे हुए हैं, और स्वतंत्र रूप से शून्य-लागत वाले बाहरी समूहों द्वारा बनाए रखा जाता है। सर्वोत्तम स्थिति में, ऑपरेटिंग सिस्टम घटकों का उपयोग करने की तुलना में इस तरह के पुन: उपयोग के माध्यम से भाषाओं का मिश्रण परियोजना के लिए अधिक महंगा नहीं है। मुझे पता है कि इस दृष्टिकोण के मूल्य का कोई बेहतर उदाहरण माइक्रोसॉफ्ट के बड़े पैमाने पर अपने ब्राउज़र में ओपन सोर्स सॉफ़्टवेयर को अपनाने से नहीं है।
कारण 2 , विरासत कोड को समायोजित करने की आवश्यकता को किसी भी बड़ी परियोजना के जोखिम पर ध्यान नहीं दिया जाता है। हालांकि बहुत परेशानी विरासत कोड का कारण बन सकती है, भोलेपन से यह माना जाता है कि इसे आसानी से एक नई भाषा में नए कोड के साथ बदल दिया जा सकता है। विरासत कोड, यहां तक कि खराब विरासत कोड में अक्सर समुदाय द्वारा अपेक्षित सुविधाओं का एक निहित "अनुबंध" शामिल होता है जो विरासत उत्पाद का उपयोग करता है। वह समुदाय अक्सर किसी कंपनी के लिए राजस्व का एक प्रमुख स्रोत है, या सरकारी सॉफ्टवेयर के लिए समर्थन का मुख्य लक्ष्य है। बस यह मानकर कि अनुबंधित अनुबंध ड्रॉ में जागरूक ग्राहकों का पीछा कर सकता है, और अन्य विकल्पों को आसानी से उपलब्ध होने पर किसी कंपनी को रातोंरात दिवालिया कर सकता है।
एक ही समय में, एक पुरानी भाषा में पुराने कोड की जगह नहीं लेना उतना ही खतरनाक हो सकता है जितना कि इसे थोक में बदलना। एक सबसे खराब उदाहरण अमेरिका के वेटरन्स एडमिनिस्ट्रेशन का है, जिसमें MUMPS (नो किडिंग) नामक भाषा में बड़ी संख्या में महत्वपूर्ण प्रणालियों को कोडित किया गया है, जिसे कंप्यूटर वैज्ञानिकों ने नहीं, बल्कि मेडिकल डॉक्टरों ने डिजाइन किया था। कोई भी MUMPS नहीं सीखना चाहता है, और जो लोग इसे जानते हैं वे सचमुच मर रहे हैं। प्रोग्रामर को इसलिए MUMPS को समायोजित करना चाहिए, क्योंकि वे अन्य सामान्य, अधिक शक्तिशाली और बेहतर-रखरखाव वाली भाषाओं का उपयोग करने के लिए आगे बढ़ने का प्रयास करते हैं।
इस प्रकार के बहु-भाषा उपयोग के लिए सावधानीपूर्वक योजना की आवश्यकता होती है। उस योजना को एक तरफ ग्राहक ज्ञान के दशकों को खोने के बीच चाकू की धार को नेविगेट करना चाहिए, और दूसरे पर सॉफ़्टवेयर का समर्थन करने की क्षमता को खोना चाहिए। ऐसी तकनीकें जो पुराने कोड को अच्छी तरह से परिभाषित इंटरफेस के पीछे अलग कर देती हैं, और जो नए कोड को अपने व्यवहार के बाद अच्छी तरह से प्रलेखित करने के बाद नए कोड को बदलने में सक्षम बनाती हैं, मदद कर सकती हैं। लेकिन यह विरासत परिदृश्य कभी भी आसान नहीं रहा है, और कई कंपनियों और संगठनों के आकार के व्यापक दायरे में रहने का कारण रहा है (और आगे भी बना रहेगा)।
कारण 3 , विभिन्न भाषाओं के लिए कोडर्स की उपलब्धता, एक व्यावहारिक कारक है जो परियोजनाओं को अपने जोखिम पर ध्यान नहीं देता है। हालाँकि, परियोजना के आयोजकों को (सही या गलत तरीके से) महसूस हो सकता है कि एक विशेष भाषा उनके लक्ष्यों के लिए सबसे अच्छी है, अगर वह भाषा उनके लिए उपलब्ध भाषा विशेषज्ञता पूल के साथ संघर्ष में है, तो उत्पाद की अनुसूची और गुणवत्ता दोनों ही सीखने से पीड़ित होंगे। एक नई भाषा सीखने की कोशिश कर रहे प्रोग्रामरों को घुमावदार।
एक अधिक तर्कसंगत दृष्टिकोण कार्यात्मक क्षेत्रों के आधार पर परियोजना की भाषा की जरूरतों का विश्लेषण करना है। उदाहरण के लिए, परियोजना को ध्यान से देखने से पता चलता है कि उच्च-मूल्य कोड का केवल एक छोटा "एपेक्स" है, जैसे कुछ मालिकाना एल्गोरिथ्म को लागू करने के लिए, जिसमें कुछ कम इस्तेमाल की जाने वाली भाषा में कोडिंग विशेषज्ञता की आवश्यकता होती है। किसी भी बड़ी परियोजना के अन्य हिस्सों को अक्सर अधिक सामान्य भाषाओं, या (यहां तक कि बेहतर) द्वारा अच्छी तरह से प्रबंधित ओपन सोर्स उत्पादों द्वारा आसानी से समायोजित किया जाता है। इस प्रकार भाषा की जरूरतों के आधार पर एक परियोजना का विश्लेषण विशेष भाषाओं में विशेष विशेषज्ञता को काम पर रखने या किराए पर लेने के लिए बहुत अधिक यथार्थवादी और लागत प्रभावी दृष्टिकोण प्रदान कर सकता है, और एकल परियोजना के भीतर भाषाओं के बीच के इंटरफेस को तेज करने में भी मदद कर सकता है।
कारण 4 , विभिन्न आवश्यकताओं के लिए विभिन्न भाषाओं का उपयोग करते हुए, परियोजना आवश्यकताओं के उस तरह के विश्लेषण को करने से तुरंत और सुचारू रूप से अनुसरण करता है। इसमें देखभाल का भी उपयोग किया जाना चाहिए, क्योंकि एक ही परियोजना के भीतर समर्थन के लिए बहुत सी भाषाओं का चयन करने से घटकों के बीच समर्थन और इंटरफेस दोनों में जटिलता का एक विस्फोट हो सकता है। सबसे सुरक्षित मार्ग लागत-वार हमेशा पहले पुन: उपयोग के लिए अधिकतम अवसर खोजने के लिए होता है, खासकर यदि अच्छे पैकेज मौजूद हैं जो अनुकूलन की तुलना में थोड़ा अधिक के माध्यम से परियोजना की जरूरतों को पूरा कर सकते हैं। इसके बाद, कुछ ऐसी भाषाओं पर निर्णय लिया जाना चाहिए जो बहुसंख्यक पहचान की जरूरतों को पूरा कर सकें। पुन: गहन विकास में, यह अक्सर एक प्रकार का गोंद कोड होगा।
आम तौर पर बहुत समान क्षमताओं वाली कई भाषाओं का चयन करना अच्छा नहीं होता है क्योंकि परियोजना के कुछ सदस्य जैसे एक और कुछ अन्य। हालांकि, अगर अच्छी तरह से पहचानी गई, अच्छी तरह से परिभाषित क्षमता सबसेट है जो विशेष भाषा कौशल से लाभान्वित होगी, तो नए कोड विकास के लिए कई भाषाओं का उपयोग करने का एक अच्छा कारण हो सकता है।
कारण 5 , प्रयुक्त भाषाओं में आवश्यक परिवर्तनों के लिए प्रतिरोध, गंभीर परियोजना व्यवधान और आंतरिक संघर्ष का कारण हो सकता है। उपयोगकर्ता के रूप में Daveoइस उत्तर पर एक टिप्पणी में कहा गया है, कुछ परियोजना कर्मियों के लिए परिवर्तन बहुत मुश्किल हो सकता है। उसी समय, परिवर्तन का प्रतिरोध कभी भी एक साधारण मुद्दा नहीं होता है, जो ठीक यही है कि यह बहुत संघर्ष पैदा कर सकता है। विरासत भाषा कौशल का उपयोग किसी परियोजना की उत्पादकता को एक शक्तिशाली बढ़ावा दे सकता है यदि विरासत भाषा पर्याप्त रूप से शक्तिशाली है, और एक टीम में उत्कृष्ट गुणवत्ता वाला उत्पाद हो सकता है जो सुचारू रूप से संचालित होता है और गुणवत्ता का सम्मान करता है। हालांकि, विरासत भाषा कौशल इस तथ्य से संतुलित होना चाहिए कि कई पुरानी भाषाएं उन्नत सुविधाओं, घटक उपलब्धता, खुले स्रोत विकल्पों और बुद्धिमान उपकरण किट समर्थन के मामले में अधिक हाल की भाषाओं के साथ पूरी नहीं कर सकती हैं।
तब और अब, एकल सबसे आम (और विडंबना, सबसे अक्सर सही) एक कमजोर, कम पठनीय, या कम उत्पादक विरासत भाषा का उपयोग जारी रखने के लिए तर्क है कि पुरानी भाषा अधिक कुशल कोड का उत्पादन करने में सक्षम बनाती है। यह एक पुराना तर्क है, एक वह जो 1950 के दशक में वापस चला जाता है जब असेंबली लैंग्वेज के यूजर्स नाराजगी जताते हैं, अक्सर कड़वाहट, फोरट्रान और LISP में प्रोग्रामिंग का उभरना। एक उदाहरण जहां अब भी कोड दक्षता तर्क में वैधता हो सकती है, प्रसंस्करण-गहन कोड जैसे ऑपरेटिंग सिस्टम कर्नेल में देखा जा सकता है, जहां C, C ++ की पसंद की भाषा बनी हुई है (हालांकि सरल दक्षता से परे जाने वाले कारणों के लिए)।
हालाँकि, नई सहस्राब्दी की विश्व स्तर पर नेटवर्क और शक्तिशाली मशीन समर्थित परियोजना वातावरण में, परियोजना की भाषा को चुनने के लिए मुख्य तर्क के रूप में कोड दक्षता भी कमजोर हो गई है। कंप्यूटिंग और नेटवर्किंग हार्डवेयर के समान विस्फोट ने कृत्रिम बुद्धिमत्ता अनुप्रयोगों के बड़े पैमाने पर विपणन को सक्षम किया है, इसका मतलब यह है कि मानव प्रोग्रामिंग की लागत आसानी से सस्ते सस्ते हार्डवेयर और क्लाउडवेयर पर सापेक्षता निष्पादन अक्षमता को कम कर सकती है। जब यह घटक पुस्तकालयों, ओपन सोर्स विकल्पों और उन्नत बुद्धिमान टूल किटों की अधिक हालिया भाषाओं के लिए अधिक उपलब्धता के साथ संयुक्त होता है, तो उन मामलों की संख्या जहां अकेले दक्षता कारणों के लिए भाषा रखना बहुत संकीर्ण हो जाता है। यहां तक कि उन मामलों में भी जहां यह लागू होता है,
एक परियोजना के लिए विरासत भाषाओं के साथ रहने का एक अधिक सम्मोहक कारण तब होता है जब किसी भी कारण से किसी परियोजना के पास अपने कर्मचारियों को बदलने के लिए कुछ विकल्प नहीं होते हैं। यह उदाहरण के लिए हो सकता है जब एक प्रमुख विरासत उत्पाद लाइन पूरी तरह से एक ऐसी भाषा में कोडित होती है जिसके साथ केवल मौजूदा कर्मचारी ही धाराप्रवाह होता है। ऐसे मामलों में परियोजना को या तो पुरानी भाषा में प्रोग्राम करने का प्रयास जारी रखना चाहिए, या मौजूदा स्टाफ को नई भाषा का उपयोग करने का प्रशिक्षण देने का प्रयास करना चाहिए।
एक नई भाषा में विरासत भाषा कर्मचारियों को प्रशिक्षित करना अपने आप में एक खतरा हो सकता है। मुझे अभी भी एक मामला याद है, जहां एक परियोजना का एक सदस्य जिसे अभी-अभी प्रशिक्षित किया गया था और सी से सी + + से संक्रमित किया गया था, ने मुझे पूरी ईमानदारी से शिकायत की कि वह सिर्फ ऑब्जेक्ट-ओरिएंटेड तरीकों के फायदे को नहीं समझता था। जब मैंने उनके कोड को देखा, तो उन्होंने अपने पहले के 103 सी फंक्शंस को सिंगल सी ++ ऑब्जेक्ट क्लास के लिए 103 तरीकों में बदल दिया था ... और ठीक से यह नहीं देखा कि कैसे कुछ भी मदद की।
गहरा संदेश यह है कि जब लोगों ने वर्षों या दशकों तक एक ही भाषा और भाषा शैली में प्रोग्राम किया है, तो नए तरीकों से उन्हें "सोचने" में लाने में कठिनाई लगभग अच्छी हो सकती है, यहां तक कि अच्छे प्रशिक्षण कार्यक्रम भी। कुछ मामलों में कोई दूसरा विकल्प नहीं हो सकता है, लेकिन उन युवा डिजाइनरों और प्रोग्रामरों को लाया जा सकता है जो वर्तमान रुझानों और तरीकों के साथ अधिक हैं।
कारण 6 , खराब परियोजना प्रबंधन, खुद के लिए बोलता है। किसी परियोजना में भाषा का चयन और उपयोग हमेशा माना जाना चाहिए और इसका मूल्यांकन किया जाना चाहिए, और केवल दुर्घटना से होने की अनुमति नहीं होनी चाहिए। बहुत कम से कम, भाषा चयन एक परियोजना के दीर्घकालिक भाग्य और समर्थन लागतों में बहुत बड़ा अंतर ला सकता है, और इसलिए हमेशा इसे ध्यान में रखा जाना चाहिए। एक MUMPS मत बनो!