कोई प्रोग्रामर अपरिचित भाषाओं में कोड को कितनी अच्छी तरह समझ सकता है? [बन्द है]


15

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

बेशक असली दुनिया इतनी सरल नहीं है क्योंकि एक प्रोग्रामर सिर्फ एक भाषा जानता है। हम जो जानना चाहते हैं वह यह है: यदि हम अपनी परियोजना C C # में करते हैं, और किसी दिन कुछ पुराने भौतिक विज्ञानी, जो केवल फोरट्रान और अल्गोल को जानते हैं, वे इसे किस हद तक देखते हैं? इसके गणितीय भाग उनके लिए ठीक पढ़ सकते हैं, यदि वे इस बात की अनदेखी करते हैं कि उनके लिए कुछ यादृच्छिक-ईश विराम चिह्न हैं। या, एक पायथन विशेषज्ञ मेरी चतुर रूबी लिपि में खामियों को खोजने में सक्षम होगा?

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

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


1
मुझे नहीं पता कि कोई अध्ययन है, लेकिन अपने व्यक्तिगत अनुभव से, मैं कहता हूं हां, मैं भाषा को जाने बिना एक कार्यक्रम को समझने में कामयाब रहा।
सुपरएम

2
यह भाषाओं की एक जोड़ी पर निर्भर करेगा: C # बनाम जावा चुनें - और आपको लगभग तुरंत परिचित मिलेगा; Algol बनाम C - चुनें और आपको एक पेज की चीटशीट से परिचित कराएगा। सौभाग्य बनाम सी। प्रोलॉग या व्हॉट्सएप बनाम एडा - यह निराशाजनक होने जा रहा है। वैसे, भाषा केवल एक चीज नहीं है जो एक कार्यक्रम को समझने में खेलती है: सी में लिखे गए एमएफसी कोड को समझने की कोशिश कर रहे एम्बेडेड डिजाइन में विशेषज्ञता वाला सी विशेषज्ञ एक बल्कि खेदजनक दृष्टि है (यह पहली बार का अनुभव है)।
dasblinkenlight

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

जवाबों:


9

यह स्पष्ट रूप से इस डिग्री पर निर्भर करता है कि भाषाएं एक-दूसरे से कितनी संबंधित हैं। उदाहरण के लिए, यदि आपके पास C या C ++ बैकग्राउंड है और आपने कुछ C # या Java प्रोग्रामिंग की है, तो आपके लिए उस दो भाषाओं (जावा या C #) में से अन्य को पढ़ना और समझना आसान होना चाहिए। यदि आप लिस्प को अच्छी तरह से जानते हैं, तो योजना को अधिक समस्या नहीं होनी चाहिए। मैंने एक बार PHP के बारे में कोई भी जानकारी प्राप्त किए बिना PHP प्रोग्राम को डिबेट किया, बस C, C ++ और पर्ल से अपने ज्ञान के साथ। मुझे पूरा यकीन है कि जब वह कार्यक्रम हास्केल या स्मालटाक में लिखा गया होगा, तो मेरे लिए असंभव के बगल में बहुत मुश्किल हो गया होगा।

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

लेकिन यह सोचकर कि वे किस हद तक नियंत्रण के प्रवाह को प्राप्त करेंगे, उस स्थान को खोजें जहां स्क्रीन पर कुछ खींचा गया है

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


6

C # / C ++ / Java / Python या आदि भाषाओं में विधियों, कक्षाओं और कार्यों के अच्छी तरह से आत्म-व्याख्यात्मक नामकरण के बारे में एक अकादमिक आयोजित अध्ययन संदर्भ के बारे में निश्चित नहीं है, भाषाओं को कोड आधार के साथ-साथ व्यावसायिक प्रक्रिया प्रवाह को समझने में आसानी प्रदान करनी चाहिए।

परियोजना के भीतर और आम तौर पर सॉफ्टवेयर विकास में नामकरण सम्मेलन एक बहुत महत्वपूर्ण पहलू है। हालांकि,its importanceगुणवत्ता सॉफ्टवेयर के निर्माण की प्रासंगिकता को अक्सर अनदेखा या अनदेखा किया जाता है।

.NET फ्रेमवर्क और .NET में उपयोग किए जाने वाले सामान्य नामकरण कन्वेंशन में उपयोग किए जाने वाले नामकरण दिशा-निर्देशों के साथ-साथ देखने के लिए अच्छे संदर्भ हैं।


अच्छा एपीआई डिजाइन और नामकरण सम्मेलनों में मदद मिलती है, लेकिन यहां तक ​​कि भाषा-आधारित नामकरण सम्मेलनों को अक्सर इस तरह से 'राय' लिया जाता है जो केवल उस भाषा पर लागू होता है। बगल में C # / Java (जो लगभग समान हैं) अधिकांश भाषाएं विभिन्न सिद्धांतों पर काम करती हैं, जिनमें उस भाषा के लिए विशिष्ट वर्कफ़्लोज़ और कार्यान्वयन होते हैं। उदाहरण के लिए, उन भाषाओं में जो मेगा-मोनोलिथिक कोर फ्रेमवर्क मॉडल का पालन नहीं करती हैं, आपको आमतौर पर पैकेजों का एक विशाल पारिस्थितिकी तंत्र मिलेगा जो एक आम पैकेज मैनेजर का उपयोग करके एक साथ टाई करते हैं।
इवान प्लैस

3

यह व्यक्तिगत प्रोग्रामर पर काफी निर्भर करता है, और वे भाषाओं को कैसे आंतरिक करते हैं। मुझे एक दर्जन भाषाओं में काम करने में कोई परेशानी नहीं है, जबकि मेरा एक दोस्त है जो केवल C ++ जानता है। वह मेरे लिए प्रोग्रामिंग से बदतर नहीं है, उसने सिर्फ एक अलग तरीका सीखा है।

व्यक्तिगत रूप से, मुझे एक संबंधित प्रश्न अधिक दिलचस्प लगता है: जब कोड में एक बग होता है (यानी प्रोग्रामर एक्स ने सोचा कि उसने लिखा है someFunction(x, y)लेकिन उसने वास्तव में कुछ और लिखा है), बग को पहचानने के लिए दूसरे डेवलपर के लिए कितना मुश्किल है। एक अच्छा प्रोग्रामर X यह अत्यधिक स्पष्ट कर देगा कि वह कंप्यूटर को क्या करना चाहता है, और इसे पढ़ना आसान होगा। हालांकि, अगर उसने कोई गलती की है, तो यह एक बड़ी बात हो सकती है। निम्नलिखित C ++ बग जैसी चीजें:

int x = getCorrectValueForX();
if (x = 2)
   doSomethingWhenXIsTwo();

जब तक आप भाषा नहीं जान लेते, तब तक पता लगाना मुश्किल हो सकता है।


1

यह न केवल प्रोग्रामर पर निर्भर करता है, जैसा कि अन्य लोगों ने कहा है, लेकिन सिंटैक्स, दर्शन और कार्यान्वयन दोनों में भाषाओं की समानता पर भी।

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

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

TL; DR यह सिंटैक्स को पहचानने में सक्षम होने के लिए महत्वपूर्ण नहीं है, ज्यादातर समय आप एक घोषणा या विधि कॉल को समझने में सक्षम हो सकते हैं लेकिन एक कार्यक्रम को एक निश्चित तरीके से लिखे जाने के पीछे के कारण को समझने में सक्षम होने के कारण कोड और समझ को पढ़ने का तरीका है ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.