2010-06-24 12 views
8

जावा में ब्रूस एकेल की सोच के परिचय में वे कहते हैं, 1998 में:विजयी जटिलता, Eckel जावा और अजगर पर और हिस्सा थ्योरी

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

दूसरे और बाद के संस्करणों में उन्होंने इस फुटनोट (2003 लगभग) कहते हैं:

मैं 2 संस्करण पर इस वापस ले: मुझे विश्वास है कि अजगर भाषा बिल्कुल कर के सबसे करीब आता है । Www.Python.org देखें।

मैं डेल्फी (पास्कल), सी, सी ++, और पायथन में पृष्ठभूमि के साथ जावा के साथ एक डब्बलर हूं।

  1. Eckel वास्तव में क्या विचार किया जब वह जटिलता को जीतने में अजगर कहा जाता है 'बेहतर', और ट्रैक पर अपने विचारों के अन्य जो दोनों का इस्तेमाल किया है के साथ कर रहे हैं: यहाँ क्या मैं जानना चाहता हूँ है?

  2. जटिलता पर विजय प्राप्त करने के बारे में आप क्या सोचते हैं? क्या पाइथन का छोटा और अधिक terse वाक्यविन्यास जटिलता को जीतने का एक प्रमुख तरीका है (और इस प्रकार, उदाहरण के लिए, ज्योथन जावा के महान पुस्तकालयों और पायथन के टेर्स सिंटैक्स का एक अच्छा पुल हो सकता है), या जावा की मजबूत-टाइपिंग-मानसिकता है, जो सी ++ से इस विचार को विरासत में लेता है, जिसने सिमुला से उस विचार को विरासत में मिला, मुझे लगता है कि यह जटिलता को जीतने की कुंजी थी? या यह रैपिड एप्लिकेशन डिज़ाइनर है (लगता है डेल्फी, या जावा के लिए, उत्कृष्ट मुफ्त नेटबीन विंडो/फॉर्म डिज़ाइनर टूल) या घटक, या सेम, या जे 2 ईई? आपके लिए क्या जीतता है?

यह पहले से ही व्यक्तिपरक टैग किया गया है। [संपादित करें]

Note: More on Bruce's thoughts, on why he loves Python are found here. लेख से एक प्रमुख बोली:

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

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

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

+0

http://www.johndcook.com/blog/2008/11/07/why-90-solutions-may-beat-100-solutions/ एक ही पंक्ति के साथ है। –

+0

(1) करीबी मतलब के बगल में किसी ने भी टिप्पणी किए बिना बंद करने के लिए मतदान किया? जी, यह अच्छा है। –

+0

वे स्पष्ट रूप से सोचते हैं कि यह "व्यक्तिपरक और तर्कवादी" है। –

उत्तर

5

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

print "hello World!" 

जावा में यह

class HelloWorld { 
    static public void main(String args[]) { 
    System.out.println("Hello World!"); 
    } 
} 

जिनमें से अधिकांश मुद्रण का कार्य "नमस्ते दुनिया" के साथ कोई संबंध नहीं है और मूल रूप से है: अजगर (और कई अन्य भाषाओं) में यह एक पंक्ति है शोर।

कई कारक हैं जो आईएमएचओ पाइथन जैसी अन्य भाषाओं की तुलना में जावा की जटिलता में जोड़ते हैं।

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

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

3) जावा कार्यात्मक नहीं है - असल में यह एक कार्यात्मक प्रतिमान का उपयोग करने से रोकने के लिए अपने रास्ते से बाहर चला जाता है। आसपास के कार्यों को पार करने और बंद करने और लैम्बडा बनाने में सक्षम होने के कारण बहुत सारे कोड को सरल बना सकते हैं। जावा में सबसे नज़दीक आप कॉलबैक जैसी चीज़ों के लिए अनाम आंतरिक कक्षाओं का उपयोग करना है।

3) जावा आपको हर जगह टाइप घोषणाओं में डाल देता है, जो उपयोगी जानकारी जोड़ने के बिना बहुत सारे अव्यवस्था को जोड़ता है। यह केवल एक स्थैतिक बनाम गतिशील मुद्दा नहीं है - स्काला जैसी स्थिर टाइप की गई भाषाएं हैं जो 90% प्रकार का अनुमान लगा सकती हैं और सभी शोर काट सकती हैं।

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

मैं जा सकता था (और अक्सर करता हूं), लेकिन मैं अवलोकन के साथ यहां रुक जाऊंगा कि मैंने बहुत सारे कोड को देखा है जो कि जावा की तुलना में पाइथन में सरल, क्लीनर और कम जटिल है लेकिन किसी अन्य तरीके से नहीं। अगर कोई मुझे कुछ इंगित कर सकता है तो मुझे इसे देखना अच्छा लगेगा।

+0

आप जावा में चारों ओर विधियों को पारित कर सकते हैं। आप आमतौर पर ऐसा नहीं करते हैं क्योंकि वे * विशेष * विशेष वस्तुओं से बंधे नहीं हैं और इसलिए उनके साथ कोई दिलचस्प स्थिति नहीं है। –

+1

@ डोनल: मुझे लगता है कि आप प्रतिबिंब विधि वस्तुओं का मतलब है। मुझे लगता है कि आप स्थिर तरीकों का संदर्भ देने वाले विधि ऑब्जेक्ट्स को पास करके कार्यात्मक प्रोग्रामिंग का कुछ रूप कर सकते हैं, लेकिन यह इतना अनावश्यक और धीमा होगा कि कोई भी ऐसा नहीं करता है। आपको अभी भी बंद, आंशिक कार्यों या भेड़ के बच्चे जैसे कुछ भी नहीं मिलेगा। –

+0

अगले साल, जावा 7 में :-) –

3

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

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

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

+0

मुझे यह जानने में बहुत दिलचस्पी है कि आपको लगता है कि आपकी उत्पादकता बढ़ गई है। मुझे लगता है कि यह कई लोगों के लिए व्यक्तिगत जवाब है। जटिलता उत्पादकता के विपरीत है। –

+0

मुझे पाइथन कम पठनीय लगता है, वैसे, बड़े सिस्टम में। यह जटिलता को जोड़ता है, जो उस समय से दूर होता है जब मैंने टाइप घोषणाओं को लिखने के लिए नहीं बचाया। एक वर्ग में एक विधि है "डीफ फू (ए, बी, सी):" ग्रेट। इसमें तीन पैरामीटर लगते हैं। वे पृथ्वी पर क्या हैं? मुझे यकीन है कि इस लड़के ने एक डॉकस्ट्रिंग लिखा है, या मुझे पता है कि ए, बी, और सी क्या हैं, यह जानने के लिए मुझे कोड की 1000 लाइनें पढ़नी होंगी। –

+1

जावा के लिए भी यही है। एक स्ट्रिंग को कैसे जानना है, बी एक int है, और सी एक फ्लोट आपकी मदद करता है? –

4

और फिर भी, सभी प्रोग्रामिंग भाषाओं जिनमें से मैं वाकिफ हूँ की, उनमें से कोई भी सब बाहर चला गया और निर्णय लिया कि उनके मुख्य डिजाइन लक्ष्य को विकसित करने और कार्यक्रमों को बनाए रखने की जटिलता को जीत के लिए होगा है।

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

जटिलता पर विजय प्राप्त करने के लिए पाइथन अच्छा कैसे है?

पायथन निश्चित रूप से किसी भी भाषा IMHO का सबसे सहज ज्ञान युक्त वाक्यविन्यास है। ब्लॉक इंडेंटिंग का इसका उपयोग बहुत सारी समस्याओं को हल करता है, और इसमें से अधिकांश close to plain language as you should get है। M = [x for x in S if x % 2 == 0] एक अच्छा उदाहरण है, अनगिनत के लिए किसी भी पायथन पुस्तक को देखें।

क्या पाइथन का छोटा और अधिक terse वाक्यविन्यास जटिलता को जीतने का एक प्रमुख तरीका है?

मेरा मानना ​​है कि अजगर की सरल वाक्य रचना जटिलता को जीतने के लिए एक अच्छा तरीका है। हालांकि, यह एकमात्र निश्चित उत्तर है जो मैं आपकी अन्य क्वेरी को दे सकता हूं:

जटिलता पर विजय प्राप्त करने के बारे में आप क्या सोचते हैं?

आप सवाल पूछ रहे हैं कि भाषा सिद्धांत का संपूर्ण केंद्र है, जिसमें युद्ध के अंत में शायद क्रोध होगा जो संभवतः समय के अंत तक क्रोधित होगा। static vs dynamictyping ऐसी एक बहस है। भाषा सिद्धांत में अन्य विकास के माउंड हैं जैसे प्रक्रियात्मक बनाम ओओ बनाम कार्यात्मक भाषाएं और पहलू ओरिएंटेड प्रोग्रामिंग जो प्रोग्रामिंग को सरल बनाने की कोशिश करते हैं। 'जटिलता को जीतने' के लिए क्या किया जा रहा है, इसके कुछ उदाहरण देखने के लिए किसी भाषा की नवीनतम (या किसी भी) रिलीज को देखें। कभी भी एक निश्चित उत्तर नहीं दिया जा रहा है, और प्रत्येक दृष्टिकोण की पूरी चर्चा में पढ़ने के लिए कुछ महीने लगेंगे, और आपके द्वारा किए जाने वाले समय तक पूरी तरह से बदल जाएगा। : डी

+0

दोनों उत्कृष्ट अंक, दोनों। –

+0

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

+1

पाइथन विशाल और जटिल परियोजनाओं के साथ बकवास हो जाता है। मजबूत टाइपिडनेस की कमी का मतलब है कि गलत डेटा संग्रहीत हो जाता है और जब तक यह अंततः अपवाद का कारण बनता है, समस्याग्रस्त डेटा का स्रोत अज्ञात होता है। मामले में मामला: वाफ। –

5

ब्रूस एकेल: वे कहते हैं कि तुम सात प्लस या माइनस आपके मन में जानकारी के दो टुकड़े कर सकते हैं। मैं जावा में फ़ाइलों को खोलने के लिए याद नहीं कर सकता।

मैं कर सकते हैं:

new FileInputStream(filename); 

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

यह एक सरल एपीआई के साथ उपयोगिता विधि लिखकर कुछ मिनटों में हल किया जाता है। And it has been। यदि जावा में निर्देशित किए जाने की तुलना में यह सबसे मजबूत आलोचना है, तो मैं स्पष्ट रूप से अप्रसन्न रहता हूं।

+1

दिखाने के लिए धन्यवाद। मैं उम्मीद कर रहा था कि कोई जावा के लिए बोलने की हिम्मत करेगा। तो, इसके विपरीत, एक जावा डेवलपर उत्पादक बनाता है, क्योंकि यह नहीं है, आप सहमत होंगे, सभी का सबसे संक्षिप्त वाक्यविन्यास? –

+0

पायथन नहीं जानते, मैं अर्थपूर्ण रूप से दोनों की तुलना नहीं कर सकता। – meriton

+5

यह कोड, निश्चित रूप से विफल रहता है यदि आप एक टेक्स्ट फ़ाइल खोल रहे हैं, तो इस मामले में आपको FileReader का उपयोग करने की आवश्यकता है। जब तक आपको एक अलग एन्कोडिंग की आवश्यकता न हो, तब तक आपको एक इनपुटस्ट्रीम रीडर के साथ लिपटे फ़ाइलइनपुटस्ट्रीम की आवश्यकता होगी। और निश्चित रूप से, 99% बार आप शायद वास्तव में एक BufferedReader या BufferedInputStream चाहते हैं। निश्चित रूप से, आप इसे आसान बनाने के लिए एक उपयोगिता विधि लिख सकते हैं, लेकिन यह बात है, है ना? यह शुरू करने के लिए जटिल क्यों है? –

2

पाठ्यक्रम पिछले सेमेस्टर मेरी "जावा के साथ OOP" में एक एक अर्जित करने के बाद, और आत्म अब कुछ वर्षों के लिए अजगर में पढ़ाया जाता है, के साथ साथ सामान्य रूप में प्रोग्रामिंग में रुचि जा रहा है, और (दोनों भाषाओं में कई कश्मीर लाइनों लिखा गिनती नहीं हो रही है टिप्पणियां), जिसमें पाइथन में Jack लेक्सर/पार्सर (और समकक्ष प्रदर्शन - या नहीं - मेरे साथी द्वारा जावा में) को देखते हुए, मुझे लगता है कि मेरे पास कम से कम कुछ सेंट के लायक होने का पर्याप्त अनुभव है। या नहीं, लेकिन अब है कि मेरा कार्य पूर्ण हो tooting my own horn आप खुद के लिए तय कर सकते हैं;)

सबसे पहले, मैं पूरे दिल से सहमत हैं कि प्रोग्रामिंग जटिलता को कम करने के बारे में है। मैं यह भी मानता हूं कि जावा जटिलता को कम करने के लिए एक महान काम नहीं करता है।

उदाहरण के लिए, कमांड लाइन से उपयोगकर्ता इनपुट प्राप्त करने के लिए?

Scanner input = new Scanner(new BufferedReader(System.in)); (मुझे लगता है कि? और यह केवल 2 या 3 महीने के बाद से मैं का उपयोग किया है कि हो गया है)

अजगर raw_input() है और 3.0 में यह सिर्फ सादा आप में एक फ़ाइल से input()

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

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

मुझे लगता है कि पाइथन का लाभ सबसे बड़ा कारण है: उपयोगी प्रकार/कार्यक्षमता भाषा में अंतर्निहित है, और वे बहुत अच्छी तरह से नामित होते हैं (और कम से कम अगर वे सुपर अच्छी तरह से नामित नहीं हैं, वे कम से कम कुछ संकेत है)।

उदाहरण के लिए, मान लें कि मैं एक अल्पविराम से अलग फ़ाइल खोलना चाहता हूं (अतिरिक्त एपीआई या आयात का उपयोग किए बिना), और प्रत्येक तत्व को सामान्य संग्रह में संग्रहीत करना चाहता हूं।

with open('myfile.csv') as f: 
    print f.read().split(',') 

किया:

अजगर में (2.6+, या भविष्य से आयात के साथ 2.5) यह सचमुच दो पंक्तियों है।

जावा में मुझे नहीं लगता कि आपको बाहरी कक्षाओं को आयात किए बिना कर सकता है। हकीकत में मुझे लगता है कि या तो भाषा सिर्फ वरीयता के लिए जाती है, और संभवतः या तो आनुवांशिकी या प्रशिक्षण।

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

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

मुझे लगता है कि ईमानदारी से मुझे लगता है कि जटिलता सिर्फ सीखने की वक्र है। पाइथन में बहुत उथले सीखने की वक्र है, जिसमें शक्ति सीखने की अवस्था में एक व्यस्त कार्य है। जावा में एक कठोर सीखने की वक्र है, इसकी शक्ति वक्र के साथ एक रैखिक (2x? 3x?) संबंध है। एक बार जब आप भाषा और अंतर्निहित अवधारणाओं को सीख लेते हैं, तो मुझे लगता है कि दोनों भाषाओं के लिए जटिलता कम हो गई है।

+0

दिलचस्प। अब तक, मुझे शून्य लोगों को मिला है जिन्होंने दोनों की कोशिश की है, और बहुत विस्तार से ऐसा करने के लिए पर्याप्त जावा पसंद करते हैं। निजी तौर पर, मैंने दोनों की कोशिश की है, और मेरी वरीयता में अस्पष्ट रहना है। नेटबीन्स + जावा में पाइथन में मैंने जो भी देखा है, उससे बेहतर जीयूआई टूल्स हैं। हालांकि, गैर-जीयूआई ऐप्स लिखने के लिए, मैं पाइथन में कई बार अधिक उत्पादक हो सकता हूं। विचित्र रूप से, जब मैं विंडोज़ जीयूआई काम करने के लिए पाइथन का उपयोग करने की कोशिश करता हूं तो उस उत्पादकता मुझ पर नकारात्मक होती है। WxPython और pyQt और tcltk मेरे लिए यह नहीं करते हैं। –

+0

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

संबंधित मुद्दे