पायथन उत्पादकता वीएस जावा उत्पादकता


24

SO पर मैं एक सवाल पर आया था कि Google AppEngine को विकसित करने के लिए जावा, पायथन या कौन सा प्लेटफॉर्म सबसे अच्छा है। बहुत से लोग जावा पर पायथन के उपयोग से प्राप्त उत्पादकता में वृद्धि कर रहे थे। एक बात मैं पायथन बनाम जावा उत्पादकता तर्क के बारे में कहूंगा, जावा में विकास की गति बढ़ाने के लिए उत्कृष्ट आईडीई है, जहां अपने गतिशील स्वभाव के कारण पायथन वास्तव में इस क्षेत्र में कमी है।

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

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

प्रश्न, क्या पायथन / संबंधित गतिशील भाषाएं वास्तव में अक्सर बात की जाने वाली विशाल उत्पादकता को बढ़ावा देती हैं? (नए ढांचे का उपयोग करने और मध्यम से बड़े अनुप्रयोगों के साथ काम करने के लिए दिया गया विचार)।


2
PyCharm IDE देखें। लेकिन यह भी, मेरा मानना ​​है कि GAE के लिए कुछ नए ढाँचे हैं जो जावा कोड को जावास्क्रिप्ट के रूप में सामने के छोर पर उपयोग के लिए परिवर्तित करते हैं, जो एक बड़ा उत्पादकता लाभ हो सकता है।
एंड्रयू एम

14
आईडीई या नहीं, आपको अभी भी कुछ चीजों के लिए जावा की 10 लाइनें लिखनी होंगी जो कि पायथन की एक पंक्ति में (अच्छी तरह से) की जा सकती हैं।

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

1
1) जेवीएम की क्षमता बहुत सीमित है । जान - बूझकर। यह "बुरा" नहीं है, यह उचित है, ठीक है, सीमित है। 2) आईडीई केवल तभी मदद कर सकता है जब आप सभी मौजूदा घटकों के सैकड़ों को एकीकृत कर रहे हैं (जो एक मान्य और सम्मानित प्रकार की प्रोग्रामिंग है, लेकिन केवल एक ही नहीं)। जब जटिल एल्गोरिदम को लागू करने की बात आती है, तो पायथन जावा की तुलना में बहुत अधिक उत्पादक है (यहां तक ​​कि लैम्ब्डा कार्यों और सूची की समझ जैसी चीजों से बहुत फर्क पड़ता है)।
तर्क

1
यदि आपकी उत्पादकता आपके आईडीई द्वारा काफी बढ़ जाती है, तो संभावना यह है कि आपके या आपके प्रोग्रामिंग प्लेटफ़ॉर्म के साथ कुछ गड़बड़ है। (स्मॉलटाक इसका अपवाद है, क्योंकि यह प्रोग्रामिंग के लिए पूर्ण परावर्तक प्रणाली बनाता है)।
मार्सिन

जवाबों:


18

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

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


मुझे वास्तव में GAE का उपयोग करने का तरीका सीखने की आवश्यकता है। किसी भी ऑनलाइन ट्यूटोरियल श्रृंखला की सिफारिश करेंगे? मैं अजगर से परिचित हूं , लेकिन GAE के बारे में कोई सुराग नहीं है। धन्यवाद!


4
या आप Apache Commons IO को Maven config की एक पंक्ति के साथ जोड़ सकते हैं और फिर एक पंक्ति में फाइलें भी पढ़ सकते हैं। बैटरी शामिल दृष्टिकोण मेरे लिए एक दोधारी तलवार है।
जिग्गी

@ जिग्गी: मैं कुछ हद तक सहमत हूँ; अजगर की बैटरी लगभग हमेशा उपयोगी और पर्याप्त रूप से पर्याप्त होती है, लेकिन जाहिर है कि मानक पुस्तकालय सभी संभावित उद्देश्यों के लिए पूरा नहीं कर सकता है, इसलिए आपको कभी-कभी पुस्तकालयों में वापस आना होगा।
जूनास पुलकाका

2
जावा में एक पाठ फ़ाइल पढ़ना List<String> lines = Files.readAllLines(Paths.get("file.txt"), Charset.forName("UTF-8"));:। इतना भी बेकार नहीं! (यह जावा 7 है जो 11 मार्च में अभी तक जारी नहीं किया गया था)।
अघोरियों

19

यहाँ मेरे 2 सेंट हैं। मेरे अनुभव में पायथन छोटे से मध्यम आकार की परियोजनाओं के लिए अच्छा है जबकि बड़ी परियोजनाओं के लिए मैं जावा के साथ अधिक उत्पादक हूं।

सामान्य तौर पर, मैं छोटी परियोजनाओं के लिए एक गतिशील रूप से टाइप की गई भाषा जैसे पायथन (या PHP) का उपयोग कर सकता हूं: यह बहुत जटिल नहीं है, आप इसे तेजी से पूरा करना चाहते हैं और बहुत अधिक नहीं है जो गलत हो सकता है। इस मामले में, मुझे लगता है कि पायथन उपयोग करने के लिए अधिक व्यावहारिक हो सकता है।

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


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

मैं दोनों का उपयोग करता हूं, और मुझे दोनों पसंद हैं। मैं आपसे पूरी तरह से सहमत हूं।
डेनियल बख्तियार

11

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

private Date dateOfBirth;

सेवा मेरे:

private Date dateOfBirth;
public Date getDateOfBirth() { return dateOfDeath; }
public setDateOfBirth(Date d) { dateOfBirth = d; }

लेकिन हर बार जब मैं कक्षा खोलता हूं तो मुझे वह कबाड़ दिखाई देगा और दिलचस्प हिस्सों को खोजने के लिए उसे अतीत में देखना होगा। इसके अलावा, रखरखाव के दौरान, त्रुटियों को उत्पन्न कोड में पेश किया जा सकता है।

मैं बहुत कुछ देखूंगा:

attr :date_of_birth

मेरे लिए, जावा के साथ प्रभावी ढंग से काम करने के लिए एक आईडीई की आवश्यकता एक और भाषा चुनने का एक अच्छा कारण है।

शायद अधिक शक्तिशाली, इस रूबी कोड की तुलना करें:

avg = people.filter { |p| p.height > 200 }.collect(:weight).average

जावा कोड के समान:

List<Double> weights = new ArrayList<Double>();
for (Person p: people) {
  if (p.getHeight() > 200) {
    weights.add(p.getWeight());
  }
}
return Stats.average(weights);

रूबी कोड विनिर्देश का सीधा अनुवाद है: 200 (सेमी) से अधिक लोगों का औसत वजन। एक टिप्पणी एकदम बेमानी होगी।

जावा कोड को लिखने और पढ़ने दोनों के लिए काफी काम करने की आवश्यकता होती है।

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


मैंने पायथन का उपयोग नहीं किया है, लेकिन C # का उपयोग किया है जिसमें ऑटो गुण हैं। पायथन में तर्क को जोड़ने के लिए कितना काम है (जैसे किसी घटना या सत्यापन तर्क को फायर करना)?
MLK

@mlk - "अटर" कथन रूबी का है। रूबी में संपत्ति सेट होने पर व्यवहार को संलग्न करना बहुत सरल है।
केविन क्लाइन

अजगर में, सभी वर्ग विशेषताएँ स्वचालित रूप से सार्वजनिक होती हैं, इसलिए अधिकांश समय आप उन्हें सीधे एक्सेस करेंगे।
झाउ माओ

3
अजगर को गेटर्स या सेटर की जरूरत नहीं है - बस dateOfBirthसार्वजनिक करें। अगर बाद में इसे प्राप्त करने या सेट करने के लिए तर्क को जोड़ने की आवश्यकता है _dateOfBirth, तो डेटा को संग्रहीत करने के लिए एक जोड़ें , फिर प्राप्त करें और सेट की गई विधियों दोनों के साथ एक propertyनाम बनाएं dateOfBirth। कॉलिंग कोड को पायथन में बिल्कुल भी बदलने की आवश्यकता नहीं है। जावा केवल एक्सेसर्स का उपयोग करता है क्योंकि इसमें "संपत्ति" की अवधारणा नहीं है।
इजाकाटा

1
जावा 8 और स्ट्रीम के साथ आपका औसत वजन कोड इस तरह लिखा जा सकता है:people.stream().filter(p -> p.getHeight() > 200).mapToDouble(Person::getWeight).average().orElse(0);
इन विट्रो

7

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

ध्यान रखें कि यदि आप पहले से ही जावा को जानते हैं तो पायथन में धाराप्रवाह बनने में थोड़ी देर लगेगी।


7

यह एक पुराना सवाल है, लेकिन मैं अपना $ .03 जोड़ना चाहूंगा। मुझे लगता है कि यह आपके सोचने के तरीके पर भी बहुत कुछ निर्भर करता है। मैं वास्तव में गतिशील, व्याख्या की गई भाषाओं के लिए खड़ा नहीं हो सकता। दूसरी ओर, मैं वैधानिक रूप से टाइप की जाने वाली भाषाओं का बहुत बड़ा प्रशंसक हूँ। निश्चित रूप से, जावा का उपयोग करना अधिक क्रिया हो सकता है, लेकिन मुझे यह पढ़ने और बनाए रखने में आसानी होती है कि यह सब कुछ कहा और किया जाए। मुझे लगता है कि पायथन, रूबी, और पर्ल को (मेरे लिए) पढ़ना बेहद मुश्किल है। मैंने अभी भी अपना सिर उसके चारों ओर नहीं लपेटा, भले ही मैंने कोशिश की हो। उस ने कहा, मैं स्काला में कोड ठीक लिख सकता हूं और यह कोई बड़ी बात नहीं है। मुझे लगता है कि यह इस बात पर निर्भर करता है कि आप किस चीज के साथ सहज हैं। दिन के अंत में जावा बहुत अधिक शक्तिशाली होने जा रहा है; रूबी, पायथन या पर्ल से अधिक। JVM प्रौद्योगिकी का एक सम्मोहक टुकड़ा है और इसकी शक्ति का उपयोग करना सीखना आपके लिए बहुत फायदेमंद साबित हो सकता है।


1
सहमत, आप पायथन के साथ वास्तव में तेजी से हैक कर सकते हैं, लेकिन यह बाद में डिबग करने या नई सुविधाओं को जोड़ने के लिए एक दुःस्वप्न बन सकता है, यही कारण है कि अक्सर इसे "प्रोटोटाइप भाषा" कहा जाता है और बस वही होता है जो मुझे इसके लिए उपयोगी लगता है (या विज्ञापन के लिए) hoc प्रकार की स्क्रिप्ट)
प्रोग्राममेव

2
उस दिन का अंत कब होने वाला है? हम लगभग 20 वर्षों से प्रतीक्षा कर रहे हैं और जावा में अभी भी प्रथम श्रेणी के कार्य या कोई मेटा-प्रोग्रामिंग सुविधा नहीं है। इस बीच C # जबरदस्त तरीके से आगे बढ़ा है। पिछले साल मैंने जावा के बजाय ग्रूवी कोड लिखना शुरू किया और मेरी उत्पादकता काफी बढ़ गई। ग्रूवी कोड बहुत कम है और संबंधित जावा कोड की तुलना में समझने में आसान है क्योंकि शोर चला गया है।
केविन क्लाइन

@ केविन क्लाइन - मुझे पता है कि आप क्या कह रहे हैं - मैं पिछले छह साल या कुछ और की तरह एक .NET डेवलपर रहा हूं। मैं सिर्फ उत्पादकता के बारे में बात नहीं कर रहा हूं, लेकिन सरासर संकलन समय, संक्षिप्तता, और मल्टीकोर टाइप सामान। जावा और जेवीएम (ग्रूवी, स्काला, इत्यादि) जेवीएम वह है जो यहां सबसे महत्वपूर्ण चीज है जरूरी नहीं कि जावा ही हो।
नोडी द नोड गाय

2
@ programmx10 आपके पायथन कोड की स्थिरता इस बात पर निर्भर करती है कि आपने इसे कैसे लिखा है। यदि आपने इसे सभी एक बड़ा कीचड़ बनाया है तो निश्चित रूप से आप इसे डिबग नहीं कर पाएंगे। यदि, दूसरी ओर आपने अपने कोड को अच्छी तरह से व्यवस्थित किया है और अपनी कार्यक्षमता को मॉड्यूल और कक्षाओं में अलग कर दिया है, तो जावा कोड की तुलना में इसे बनाए रखना आसान है (यदि आसान नहीं है)।
झिआओ माओ

5

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

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


पद के महान अनुप्रयोगfeedback loop
उभयचर

3

मैं हाल ही में बहुत अधिक अजगर कर रहा हूं और लंबे समय तक जावा प्रोग्रामर रहा हूं, और ब्रांड के नए विकास के लिए, मुझे लगता है कि मैं अजगर में काफी अधिक उत्पादक हूं। जावा में काफी सरल चीजें थोड़ी थकाऊ हो सकती हैं, जैसे फ़ाइल / स्ट्रीम प्रोसेसिंग, किसी URL से सामान पढ़ना, XML को सीरियस करना, आदि "थकाऊ", मेरा मतलब है कि जावा में आपको कोड की 5 लाइनें अक्सर लगती हैं। अजगर में केवल एक ही लें। हालांकि अमरूद या अन्य संग्रह एपीआई जैसे सही उपकरण का उपयोग करना, वास्तव में इसके साथ मदद कर सकता है।

मुझे लगता है कि मैं कह रहा हूं कि अजगर का एक फायदा यह है कि यह कई विशेषताओं के साथ जहाज है जिसे प्राप्त करने के लिए आपको जावा में एक 3 पार्टी लाइब्रेरी का उपयोग करने की आवश्यकता है।

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


1
जावा सभी पुस्तकालयों के बारे में है, हालांकि, पायथन के साथ उनके पास तरीकों का एक गुच्छा है, जैसे कि PHP करता है, जहां यह उन सभी को याद रखना कठिन हो सकता है, जावा के साथ आप बस उपयुक्त पुस्तकालय की खोज करते हैं और फिर आपके पास कम से कम विकल्प हैं आप क्या उपयोग करते हैं
प्रोग्राममेव

1
@ programmx10 आप किस बारे में बात कर रहे हैं? पायथन में सभी प्रकार की चीजों के लिए बहुत सारे पुस्तकालय हैं। बस मानक पुस्तकालय के लिए प्रलेखन को देखें। अजगर पुस्तकालयों को मॉड्यूल में अलग किया जाता है, जैसे जावा पुस्तकालयों को पैकेज में अलग किया जाता है।
झिआओ माओ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.