क्या जावा की जगह स्काला एक अच्छा विकल्प होगा?


11

हम एक नई परियोजना शुरू करेंगे जिसमें जावा (चौखटे / ईसीओ प्रणाली आदि) में सभी .net डेवलपर्स का प्रशिक्षण शामिल होगा। हमारे पास C # में बहुत सारे कोड लिखे गए हैं और ऐसा लगता है कि यह सब बर्बाद हो जाएगा क्योंकि हमें इसे जावा में फिर से लिखना होगा। मुझे जो समस्या दिखाई दे रही है, वह यह है कि पहले साल या (शायद 2 साल) हमारे पास देने के लिए कुछ भी नहीं होगा क्योंकि हम उस समय का अधिकांश समय खर्च करेंगे जो हमारे पास पहले था लेकिन अब जावा में है।

चूंकि हमारी टीम दुनिया भर के विभिन्न कार्यालयों में वितरित की जाती है और हमारे पास बड़ी संख्या में जावा डेवलपर्स (20 से 30) और 10 डेवलपर्स .net का उपयोग करते हैं, हम सभी डेवलपर्स को उसी भाषा / मंच का उपयोग करके प्राप्त करना चाहते हैं ताकि हम शुरू कर सकें। पुन: उपयोग घटकों / मॉड्यूल। इसलिए मैं प्रबंधन के दृष्टिकोण को समझ सकता हूं।

कल मैं स्काला में आया था और सोच रहा था कि क्या वर्तमान उत्पाद (जिसे C # में लिखा गया है) के साथ इसका उपयोग करना बेहतर होगा और फिर कम से कम हमारे पास एक वर्ष में काम करने वाला उत्पाद होगा। इसके अलावा, एक वर्ष में हमारे पास ऐसे मॉड्यूल हैं जिनका उपयोग जावा दुनिया में किया जा सकता है, जबकि हम उत्पाद के अन्य भागों में प्रवास करते हैं।

क्या स्काला जावा की तुलना में बेहतर विकल्प होगा, यह देखते हुए कि हम क्या हासिल करने की कोशिश कर रहे हैं?


2
दूसरी भाषा में सबकुछ फिर से लिखना? और 2 साल कुछ नहीं देने के लिए? एक भयानक प्रबंधन निर्णय की तरह लगता है और जैसे आपको आधे साल में एक नई नौकरी की आवश्यकता हो सकती है;)
zvrba

हाँ, यह माना जाता था। यकीन नहीं है कि मुझे अब कहां देखना शुरू करना चाहिए और
JD01

1
ऐसा लगता है कि आपके बारे में ऐसा काम करना चाहिए जो आपको कभी नहीं करना चाहिए
back2dos

जवाबों:


15

विचार करने के लिए कुछ बिंदु:

  • स्काला एक महान भाषा है - लेकिन यह ध्यान देने योग्य है कि यह सही ढंग से सीखने और उपयोग करने के लिए काफी चुनौतीपूर्ण भाषा है। सिर्फ मेरी राय नहीं - अनुभवी स्काला विशेषज्ञों का भी यही कहना है । आपकी टीम में कौशल के स्तर के आधार पर, यह संभवतः आपके सबसे अनुभवी / विशेषज्ञ डेवलपर्स के लिए एक उपकरण के रूप में सबसे उपयुक्त है
  • जावा और सी # कई मायनों में समान हैं - यह एक में प्रशिक्षित डेवलपर्स के लिए लंबे समय तक नहीं ले जाएगा (वाक्यविन्यास समान है, यह ज्यादातर प्रत्येक के quirks सीखने और विभिन्न पुस्तकालयों की समझ प्राप्त करने का एक मामला है,) जिसमें अक्सर समान कार्यक्षमता होती है, लेकिन अलग-अलग तरीके से पैक किए जाते हैं और / या अलग-अलग नाम होते हैं)। मैंने व्यक्तिगत रूप से जावा से C # में स्विच किया है और बिना किसी कठिनाई के फिर से जावा में वापस आ गया हूं।
  • यह भी ध्यान देने योग्य है कि सभी JVM भाषाएँ (जावा और स्काला, लेकिन JRuby और Clojure आदि) बहुत संगत हैं - वे एक ही मौलिक JVM मंच साझा करते हैं और कोड / लाइब्रेरीज़ को बहुत आसानी से साझा कर सकते हैं।

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

प्रबंधन के दृष्टिकोण से इसके बहुत फायदे हैं:

  • आप अभी भी सभी पुस्तकालयों को साझा कर सकते हैं ताकि आपके निवेश सुरक्षित रहें
  • आपके कम अनुभवी देवता सी # -> जावा बहुत जल्दी स्थानांतरित करने में सक्षम होंगे
  • आपके अधिक अनुभवी देवता स्काला में उन्नत सुविधाओं का पूरा लाभ उठा सकते हैं
  • सभी उपकरण संगत हैं / साझा किए जा सकते हैं (बिल्ड सिस्टम, आईडीई, परिनियोजन उपकरण आदि)
  • आपको JVM पर पुस्तकालयों के बहुत व्यापक ओपन सोर्स इकोसिस्टम तक मुफ्त पहुंच मिलती है (क्रॉस-प्लेटफॉर्म पोर्टेबिलिटी के साथ, यह यकीनन JVM प्लेटफॉर्म पर होने का सबसे अच्छा कारण है)
  • आपके डेवलपर्स को उस भाषा का उपयोग करने के लिए मिलता है जो उन्हें अपने कौशल को देखते हुए सबसे अधिक उत्पादक बनाता है / कार्य (कुछ मामलों में जावा, अन्य में स्काला, शायद भविष्य में अन्य भाषाएं जैसे क्लजुर)

नकारात्मक पक्ष यह है कि आपके पास अभी भी समर्थन करने के लिए दो प्राथमिक भाषाएं हैं। लेकिन आपके पास वास्तव में केवल दो पहले से ही कई हैं (शेल स्क्रिप्ट? डोमेन-विशिष्ट XML प्रारूप? फ़ाइलों को कॉन्फ़िगर करें? नियम इंजन? HTML? जावास्क्रिप्ट) ताकि आप तर्क दे सकें कि यह वास्तव में एक बड़ी बात नहीं है।


जानकारी के लिए धन्यवाद। मैं केवल यह पता लगाने की कोशिश कर रहा हूं कि आगे का सबसे अच्छा तरीका क्या है और आपने कुछ बेहतरीन जानकारी दी है। फिलहाल हमारे पास कुछ अच्छे ओओ डेवलपर्स हैं लेकिन कार्यात्मक प्रोग्रामिंग से कोई परिचित नहीं है।
JD01

1
मदद करने में खुशी! यह ध्यान देने योग्य है कि स्काला बहु-प्रतिमान / ओओपी आधारित भाषा से अधिक है। हालांकि आप निश्चित रूप से स्काला में एफपी कर सकते हैं, यदि आप ऐसी भाषाएं चाहते हैं जो फ़ोकस में अधिक स्पष्ट रूप से कार्यात्मक हैं तो हास्केल या क्लोजर संभवतः निशान के करीब हैं।
मिकेरा

कोड के पुन: उपयोग के लिए, यदि मैंने पहले ही दिन से क्लोजर या स्काला का उपयोग किया है या यहां तक ​​कि जैसा कि आपने एक मिश्रित रणनीति में कहा था, क्या मैं .net और जावा दोनों में क्लोजर / स्काला कोड का पुन: उपयोग कर सकता हूं? मैं सोच रहा हूं कि क्या यह प्रबंधन के लिए एक अच्छा विक्रय बिंदु है। इस तरह हम अभी भी एक उत्पाद (नई सुविधाओं के साथ पुराना उत्पाद) प्राप्त कर सकते हैं और यह भी क्लोजर / स्काला मॉड्यूल के कोड पुन: उपयोग के साथ जावा में मौजूदा कोड को फिर से लिखने के लिए सड़क पर हो सकता है। क्या मैं यहां अपनी सोच में सही हूं या क्या इससे अन्य समस्याएं खुलती हैं?
JD01

1
यदि आप पसंद करते हैं, तो आप एक वेब सेवा या REST इंटरफ़ेस के रूप में क्लोजर / स्काला कार्यक्षमता को उजागर कर सकते हैं। यह सीधे तौर पर एक पुस्तकालय बनाने से कुछ अधिक उपरि है (जो कि जावा / अन्य JVM भाषा से कार्यक्षमता को कॉल करना चाहते हैं तो सबसे अच्छा विकल्प होगा), लेकिन यह निश्चित रूप से आपको जो भी ग्राहक पसंद आया उससे कोड को कॉल करने की सुविधा देगा। नेट, जावा, रूबी, आदि)
मीका सेप

धन्यवाद माइक। मुझे लगता है कि कोड का पुन: उपयोग पथ कम से कम प्रबंधन को दिखाएगा कि स्केल / क्लोजर विकल्प के साथ एक पूर्ण पुन: लिखना आवश्यक नहीं है। मैं नहीं चाहता कि हम नेटस्केप की तरह समाप्त हों :)। एक पुस्तकालय के निर्माण के लिए, क्या मैं इसे वेब सेवाओं के बिना .net और जावा में उपयोग नहीं कर सकता था?
JD01

15

मैं एक 3 विकल्प जोड़ूंगा। क्या आपके संगठन में किसी ने आपके C # और Java मॉड्यूल के बीच में अंतर देखा है? आप C # कार्यक्षमता को कैसे उजागर कर रहे हैं? क्या SOAP या RESTFul वेब सेवाएँ एक विकल्प हैं?

एक संगठन के लिए 2 साल का फिर से लिखना एक मौत की घंटी हो सकती है (सिर्फ नेटस्केप से पूछें)। हालाँकि, एक क्रमिक प्रवासन जबकि मौजूदा कोड एक दूसरे के साथ अच्छी तरह से खेलते हैं, संभावित रूप से कम व्यवसाय प्रभाव पड़ता है।


3

जावा के लिए पुनर्लेखन के रूप में स्लैला के लिए C # को फिर से लिखना उतना ही कठिन होगा। जिस भाषा के लिए "बेहतर" है, वह बिंदु म्यूट है, प्रत्येक भाषा के अपने प्लस और माइनस अंक हैं।

मुझे नहीं पता कि आपका कोडबेस कितना बड़ा है, लेकिन 30 डेवलपर्स के लिए 2 साल एक साधारण रीराइट के लिए बहुत बड़ा लगता है। जब आप C # जानते हैं तो जावा को चुनना आसान है। मुझे इसके साथ सहज होने में एक-दो दिन लग गए।

मेरी सलाह यह होगी कि मैंगमेंट को अपना रास्ता दे दूं और इस तथ्य का आनंद उठाऊं कि आपके कौशल का विस्तार करने के लिए आपको भुगतान करना पड़े।


नए उत्पाद पर केवल 10 डेवलपर्स काम करेंगे। मैं सिर्फ यह पता लगाने की कोशिश कर रहा हूं कि स्काला के साथ जाने के नियम और विपक्ष क्या होंगे।
JD01

1
मुझे आपके प्रोजेक्ट या स्काला की बारीकियों का जवाब देने के लिए पर्याप्त जानकारी नहीं है। हालाँकि यह मुझे प्रतीत होता है कि तीसरी भाषा को प्रस्तुत करने वाला कोई भी व्यक्ति केवल जटिल मामलों को नहीं जानता है।
टॉम स्क्वायर्स

तुम सही हो सकते हो। मैं इसके बारे में एक वर्ष में एक उत्पाद प्राप्त करने के संदर्भ में सोच रहा था या एक ही समय में .net और जावा में कोड का पुन: उपयोग करने में सक्षम था। आपके बिंदु अच्छी तरह से नोट किए गए हैं :)
JD01

1

मुझे लगता है कि जावा डेवलपर्स को C # सीखने के लिए आसान विकल्प मिलेगा। दोनों भाषाएँ कई मायनों में समान हैं और एक जावा डेवलपर को C # लेने में लंबा समय नहीं लगता है। मैंने कई जावा डेवलपर्स के साथ काम किया है जिन्होंने C # सीखा है और यह आमतौर पर एक चिकनी संक्रमण है। एक क्षेत्र जहां वे थोड़ी देर के लिए अटक सकते हैं, वह है WebForms प्रोग्रामिंग मॉडल। जावा डेवलपर्स MVC प्रतिमान में बेहतर समायोजित करते हैं। इस तरह, आपको नई सुविधाएँ विकसित करने से पहले एक वर्ष तक प्रतीक्षा करने की आवश्यकता नहीं है। बकौल स्काला, मुझे डर है कि एक नई भाषा सीखने की कोशिश कर रहे सभी 30 डेवलपर्स के साथ एक पूरी नई समस्या पेश आएगी।


जावा में बहुत सारे उत्पाद लिखे गए हैं जिससे उन्हें C # सीखना मुश्किल हो जाएगा। मैं स्काला के साथ उम्मीद कर रहा था, एक बार जब हमारे पास नया उत्पाद होगा, जावा डेवलपर्स पुस्तकालयों का उपयोग कर सकते हैं, जैसा कि स्काला को सीखने की आवश्यकता के बिना है।
JD01

2
यदि आप अपने मौजूदा .Net कोड को सेवाओं के रूप में उजागर करते हैं, तो यह ठीक नहीं होगा कि जावा डेवलपर्स java में सभी नई सुविधाओं को लागू और विकसित कर सकते हैं।
श्रीराम

अतीत में इसका सुझाव दिया गया था, लेकिन यह तय किया गया है कि हम .net से दूर जाते हैं।
JD01

वाह! फिर मैं इसे सरल रखूंगा और जावा में कोड को फिर से लिखूंगा। मुझे लगता है कि स्काला प्रबंधन के लिए एक और जटिलता का परिचय देगा और यह प्रबंधन के लिए एक कठिन-बिक्री होगी।
श्रीराम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.