2009-02-28 10 views
5

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

उत्तर

10

"पर्याप्त रूप से उन्नत कोई भी तकनीक जादू से अलग नहीं है" - आर्थर सी क्लार्क।

असल में यह नहीं है - जटिल के बजाय जटिल और छुपे हुए के लिए जादू का उपयोग किया जाता है (हालांकि संभवतः डिजाइनरों ने सोचा कि वे उन्नत थे), जैसे सिस्टम जिन्हें प्रक्रिया कॉल (COM थ्रेडिंग मॉडल) से पहले विशिष्ट राज्यों की आवश्यकता होती है, साथ ही ' automagic 'प्रकार रूपांतरण (वीबी वेरिएंट, जावास्क्रिप्ट ==, जावा ऑटोबॉक्सिंग)।

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

वहाँ भी अच्छा जादू है http://aggregate.org/MAGIC/

+2

+1। – tvanfosson

+0

ओह, अगर हम उद्धरण दे रहे हैं: ग्रेगरी बेनफोर्ड का कहना है कि 'जादू से अलग करने वाली कोई भी तकनीक अपर्याप्त रूप से उन्नत है'। –

0

जावा

  • जीसी के लिए - IMHO जादू नहीं, यह सिर्फ एक घर क्लीनर होने की तरह
  • स्वत: मुक्केबाजी - जादू - अदृश्य कुछ और
में एक बात की transmogrification
8

कुछ जादू है जबकि आप इसे अनदेखा करते हैं/आप नहीं जानते कि यह कैसे काम करता है।

+1

"जब आप इसे अनदेखा करते हैं" बिट महत्वपूर्ण है - 'जादू' का उपयोग करने से किसी को उस चीज़ को परिभाषित करने से बचने की अनुमति मिलती है जो अभी तक विचाराधीन नहीं है या अन्यत्र विस्तृत है और वर्तमान चर्चा/आदि से प्रासंगिक नहीं है। क्लार्क उद्धरण के लिए –

3

जादू अन्य संदर्भ में की तुलना में एक ही अर्थ है। यह हमेशा बुरा नहीं होता है, लेकिन प्रोग्रामर के लिए (जो गैर-तकनीकी लोगों के लिए जादूगर हैं) यह है। जादू जादू नहीं है जब आप (कर सकते हैं) यह कैसे पता चलता है कि यह कैसे काम करता है।

उदाहरण के लिए, जादू स्थिरांक: एक छिपे अर्थ के साथ स्थिरांक।

जब हम कुछ obfuscated कोड में होने वाले "काले जादू" के बारे में बात करते हैं, तो हमारा मतलब है कि इस कोड में कुछ ऐसा होता है जिसे हम समझ में नहीं आता है; या कुछ गैर लिखित होता है लेकिन कोड रीडर से छिपा हुआ है।

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

+0

'रास्ता पीछे' में, "काला जादू" मशीन कोड का एक बहुत ही तंग टुकड़ा था। इसके अलावा, असामान्य या अनियंत्रित इंटरफेस का उपयोग। संक्षेप में, सिस्टम आर्किटेक्चर के महान कौशल और ज्ञान का प्रदर्शन। – Chris

+0

... कड़े कोड लिखकर जो सिस्टम आर्किटेक्चर में भविष्य में बदलावों के साथ तोड़ने की संभावना है, जब खराब रखरखाव प्रोग्रामर के लिए यह भी पता लगाना मुश्किल होगा कि तंग कोड क्या करना चाहिए। ठंडा! – MarkJ

3

रेल पर रूबी, उदाहरण के लिए, जादू है।

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

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

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

फ्रैंकली, कभी भी आपको एक सिस्टम या घटक का सामना करना पड़ता है जो "कुछ अद्भुत" करता है और आपको आश्चर्य होता है कि "वे ऐसा कैसे करते हैं", यह जादू है।

0

अज्ञात व्यवहार अक्सर जादू के रूप में बोली जाती है। कुछ चीजें किसी स्पष्ट कारण के लिए होती हैं।

लेकिन वहाँ अज्ञात के राजाओं यद्यपि हैं:

  • कैसे चीजें काम पर डेवलपर्स की ओर ज्ञान की कमी। (उदाहरण के जी सी के लिए, यह जादू नहीं, अभी भी कुछ डेवलपर्स वास्तव में पता लगाने के लिए परेशान किया है और समझते हैं कि यह आधार है)

  • अपरिभाषित व्यवहार जादू, जहां चीजें पर्दे के पीछे होता है और वहाँ कैसे वे वास्तव में पर कोई सार्वजनिक ज्ञान है काम। प्रोग्रामिंग में यह सच जादू है।

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

4

माइक्रोसॉफ्ट पर यह दो तरह से

1) प्रयोग की जाने वाली एक नकारात्मक तरीके से (शायद सबसे आम उपयोग) में जाता है। उदाहरण के लिए, कोई निम्नलिखित कह सकता है "मुझे समझ में नहीं आ रहा है; सबसे पहले आप एपीआई को दोबारा क्रियान्वित करेंगे, इसके बाद आप पुरानी एपीआई रखेंगे और उनके बीच एक परत होगी जो जादू करेगी?"

निहितार्थ यह है कि जादू घटक बहुत जटिल, बहुत अपरिभाषित, या 'कुछ' भी है।

अन्य नकारात्मक संदर्भ तब होता है जब कुछ निष्पक्ष रूप से परिभाषित किया जाता है: यह तब होता है जब कोई मानता है कि जटिल समस्या का एक सरल समाधान है क्योंकि उन्हें यह नहीं पता कि समस्या वास्तव में जटिल है। Raymond Chen's blog इन प्रकार के उदाहरणों से भरा है।

2) यह अक्सर कम होता है कि 'जादू' शब्द सकारात्मक रूप से उपयोग किया जाता है। लेकिन ऐसा होता है। उपयोगी काम करने वाले जटिल कार्यों को करने के लिए उपयोगी रूप से कार्य करें। मेरे लिए एनटीएफएस उस तरह का जादू है। एनटीएफएस वास्तव में, वास्तव में परिपक्व है और कुछ सुंदर सरल एपीआई के पीछे बहुत जटिलता छुपाता है। कंपाइलर को इस तरह से 'जादू' के रूप में भी देखा जा सकता है - क्या आप वास्तव में समझते हैं, गहराई से, सी ++ कंपाइलर कैसे काम करता है? मैं नहीं करता - मुझे विश्वास है कि वे करते हैं।

4

जादू आपकी समझ से बहुत सापेक्ष है।

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

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

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

2

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

w:[true, false] 

इस टिप्पणी फार्म की है:

w:[P, Q] 

और एक कार्यक्रम का प्रतिनिधित्व करता है कि, जब एक राज्य में जहां P मार डाला सच है, एक राज्य में समाप्त हो जाएगा जहां Q सत्य है, जबकि w में केवल चर बदल रहा है।

इस संदर्भ में, फिर, "जादू", एक infeasable प्रोग्राम है जो एक है कि असंभव है में किसी भी राज्य से एक कार्यक्रम ले जा सकते हैं (true हमेशा होता है के बाद से true) (false के बाद से true कभी नहीं हो सकता है) है।

एक बहुत आसान कार्यक्रम है:

w:[true, true] 

जो प्रोग्राम है जो हमेशा समाप्त हो जाता है है, लेकिन कोई विशेष परिणाम की गारंटी देता है। इसे सरल skip के साथ कार्यान्वित किया जा सकता है।

जाहिर है, जब लोग magic प्रोग्रामों के बारे में बात करते हैं, तो इस तकनीकी परिभाषा का दुरुपयोग किया गया है, क्योंकि इसका अर्थ यह है कि यह संभवतः असंभव है। फिर भी, यह शब्द बोलने वाला है, क्योंकि यह कल्पना करना अच्छा लगता है कि दृश्यों के पीछे कुछ जादुई होता है जब हम नहीं जानते हैं, या समझते हैं कि कुछ कैसे काम करता है।

0

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

कई ढांचे और मिडलवेयर AOP और क्रॉस-कटिंग चिंताओं को लागू करने के लिए बाइटकोड मैनिपुलेशन का उपयोग करते हैं। इससे प्रोग्रामर काम कम कर देते हैं, लेकिन कुछ स्थितियों में यह सिस्टम के व्यवहार को कड़ी मेहनत कर सकता है।और बाइटकोड परिवर्तनों में कुछ सूक्ष्म बग रहना आसान है।

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

1

जब आप इसे समझ नहीं पाते हैं तो आप कुछ "जादू" कहते हैं।

लोगों को मध्य युग में जला दिया जाता था जब वे कुछ कह रहे/जानते/कह रहे थे, कि शेष पुरुषों को समझ में नहीं आता है। उन पर "जादू" करने का आरोप था।

आप कोड/फ्रेमवर्क/भाषा को "जादू" कहते हैं जब आप समझ नहीं पाते कि यह क्या करता है। इसे समझने के लिए समय बिताने के बजाय कुछ "जादू" को कॉल करना आसान है।

जादू मौजूद नहीं है!

कुछ "जादू" को बुलाए जाने के बजाय अपने हाथ गंदे हो जाएं और समझें कि वह चीज़ क्या कर रही है ... या इसे "अपने ज्ञान का अनपढ़ हिस्सा" कहें।

0

काला जादू से कुछ अच्छा उदाहरण के लिए, पर्ल स्रोत कोड ;-)

1

शब्दजाल फ़ाइल परिशिष्ट से क्लासिक जादू कहानी में प्रलेखन को देखो।

http://catb.org/jargon/html/magic-story.html

जाने इसे पढ़ा।

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