2010-01-28 14 views
9

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

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

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

दूसरी ओर, एक शाब्दिक विनिर्देश गंभीर रूप से धीमा है। #include <iostream> टाइप करने के लिए "पाउंड, शामिल, बाएं कोण ब्रैकेट, आईओस्ट्रीम, दायां कोण ब्रैकेट, न्यूलाइन" कहने में बहुत लंबा समय लगता है। दरअसल, सबसे अनुभवी सी ++ प्रोग्रामर इसे "आईस्ट्रीम शामिल" के रूप में पढ़ेंगे, लेकिन फिर से, अनुभवहीन प्रोग्रामर बहुत अधिक हैं और शाब्दिक विनिर्देश कभी-कभी आवश्यक होते हैं।

तो मुझे इस समस्या के संभावित समाधान के लिए एक विचार था।

सी ++ में, वहाँ keywords -63 और operators -54 की एक परिमित सेट, नामित ऑपरेटरों को छूट और बनाम पोस्टफ़िक्स ऑटो वेतन वृद्धि और घटती के रूप में विशिष्ट यौगिक काम ऑपरेटरों और उपसर्ग के इलाज है। केवल कुछ प्रकार के शाब्दिक हैं, समूहबद्ध प्रतीकों की एक समान संख्या, और अर्धविराम। जब तक मैं पूरी तरह से गलत नहीं हूं, यह इसके बारे में है।

तो क्या यह एक संक्षिप्त, अद्वितीय उच्चारण को इन विशिष्ट अवधारणाओं में से प्रत्येक के लिए संभवतः संभव नहीं होगा (जिसमें व्हाइटस्पेस के लिए एक भी शामिल है, जहां इसकी आवश्यकता है) और वहां से जाएं? प्रोग्रामिंग भाषाएं प्राकृतिक भाषाओं की तुलना में कहीं अधिक नियमित हैं, इसलिए उच्चारण को मानकीकृत किया जा सकता है। के वक्ताओं भाषा मौखिक रूप से सी ++ कोड व्यक्त करने में सक्षम होंगे, और भाषा की नियमितता और स्थिरता के कारण, उच्च गुणवत्ता की सटीकता के साथ सी ++ भाषण को स्वीकार करने के लिए भाषण-से-पाठ सॉफ़्टवेयर को अनुकूलित किया जा सकता है।

तो मेरा प्रश्न दो गुना है: पहला, मेरा समाधान संभव है; और दूसरा, क्या किसी और के पास अन्य संभावित समाधान हैं? मैं यहां से सुझाव लेने का इरादा रखता हूं और अपने समाधान के उदाहरण कार्यान्वयन के साथ एक औपचारिक पत्र तैयार करने के लिए उनका उपयोग करता हूं।

+1

दिलचस्प लगता है, एक बात ध्यान में रखना: प्रत्येक देश में हर उच्चारण आसानी से उच्चारण नहीं किया जा सकता है। –

+0

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

+2

निम्नलिखित वीडियो बिल्कुल उल्लसित है, लेकिन इस विषय को पूरी तरह से फिट करता है: http://www.youtube.com/watch?v=PEexpnypE5s। – Makis

उत्तर

4

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

तो, उदाहरण के लिए:

#include <iostream>; 

int main() 
{ 
    if (1 < 2) 
    return 1; 
    else 
    return 0; 
} 

के रूप में पढ़ा जा सकता है:

(कीवर्ड) iostream नई लाइन (कीवर्ड) पूर्णांक मुख्य कोई पैरामीटर ब्लॉक शुरू में शामिल करता है, तो नंबर 1 (ऑपरेटर) संख्या 2 नई लाइन (कीवर्ड) वापसी संख्या 1 नई लाइन (कीवर्ड) अन्य नई लाइन (कीवर्ड) वापसी संख्या 0 अंत ब्लॉक

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

(कीवर्ड) यदि शाब्दिक संख्या (ऑपरेटर) शाब्दिक कीवर्ड से भी कम समय के लिए

जैसे 'विभाजन के रूप में हो जाता है

if (number < keyword) 

अन्य शब्दों में परिभाषित अर्थ दिया जा सकता और साथ ही, -लाइन 'जब आप उन्हें अगली पंक्ति पर जारी रखना चाहते हैं, वर्तमान में किसी भी खुले कोष्ठक को बंद किए बिना,

मैं पे इस विधि को उपयोग करने के लिए काफी सरल और सिखाने में आसान लगता है। हमेशा के रूप में वाईएमएमवी।

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

+2

प्लस वन क्योंकि आपका समाधान अंतर्राष्ट्रीयकरण बाधा के बिना व्यावहारिक और इष्टतम है। मुझे नहीं लगता कि अधिक प्रोग्रामिंग भाषाएं स्थानीयकृत (चीनी पायथन) या भाषा-तटस्थ (एपीएल) प्रोग्रामिंग का समर्थन क्यों नहीं करती हैं। –

+1

धन्यवाद। इसके अलावा, ओह। मैंने 'आंतरिककरण' टाइप किया। मैं नहीं था। हाहा। वर्तनी-जांच सब कुछ ठीक नहीं करता :) –

2

तो क्या यह अलग-अलग अवधारणाओं में से एक को संक्षिप्त, अद्वितीय उच्चारण के रूप में वर्णित करना संभव नहीं होगा (जिसमें व्हाइटस्पेस के लिए एक भी शामिल है, जहां इसकी आवश्यकता है) और वहां से जाएं? प्रोग्रामिंग भाषाएं प्राकृतिक भाषाओं की तुलना में कहीं अधिक नियमित हैं, इसलिए उच्चारण को

शायद, लेकिन आप अपने लक्ष्य को खो चुके हैं। आधार यह था कि को सुनने वाले व्यक्ति को पहले से ही भाषा पता है। यदि वह करता है, तो हम केवल #include <iostream>, या "int of vector" का अर्थ रखते हैं, जब हम std::vector<int> का अर्थ रखते हैं, तो हम केवल "iostream शामिल" कह सकते हैं।

आपका आधार यह था कि जब तक आप बिल्कुल पढ़ते हैं, तो आप जो भी कहते हैं, उसे सुनने के लिए भाषा के साथ पर्याप्त परिचित नहीं है।

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

रूट समस्या भी है कि सी ++ कोड में संश्लेषक टोकन के शामिल हैं। इस तरह की रेखा को सरल बनाएं:

std::vector<int> v; 

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

संक्षेप में, नहीं, मुझे नहीं लगता कि यह काम करेगा। सबसे पहले, यह अभी भी बहुत बोझिल है, और दूसरा, यह व्यक्ति के हिस्से के बारे में पूर्व ज्ञान मान रहा है, जब प्रेरणा यह थी कि व्यक्ति सुन रहा था बिना पूर्व ज्ञान जो उच्च- कोड का स्तर विवरण।

+0

मुझे लगता है कि इस समस्या के दो पक्ष हैं। उच्च स्तरीय विवरण शुरुआती लोगों के लिए बेहतर और अनुभवी प्रोग्रामर के लिए निम्न स्तर के लिए उपयुक्त हैं। उन आठ टोकन आसानी से केवल कई अक्षरों से मेल खाते हैं, बशर्ते कि मानक लाइब्रेरी को भी अनुक्रमित किया गया हो, उदाहरण के लिए, "सा ना वे ला आई गा ली वी से", जहां "ली" एक कण है जो दर्शाता है कि इसका क्या अनुसरण है देशी स्पीकर की भाषा में एक शाब्दिक (इस मामले में एक पहचानकर्ता)। यहां तक ​​कि "ली std na li vector la i ga li v se" भी बुरा नहीं है। –

3

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

  • सबसे पहले, आपको आश्चर्य कितना महत्वपूर्ण है "समय सोच" है होगा:

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

  • विचार करने की एक और बात यह है कि ऑडियो स्ट्रीम की लंबाई एक अंतिम परिणाम है, लेकिन मूल कारण नहीं है। ऑडियो इतना लंबा कारण है क्योंकि ऑडियो एक आयामी माध्यम है, जबकि पाठ पढ़ना एक 2 डी माध्यम है जिसमें चारों ओर कूदने और पिछले ire प्रासंगिक/परिचित पाठ को छोड़ने की क्षमता है। यह आमने-सामने व्याख्यान के लिए काम नहीं करेगा, लेकिन अगर भाषण को नियंत्रित करने के लिए कीबोर्ड कमांड थे तो क्या होगा। टेक्स्ट दस्तावेज़ों में मेरा स्क्रीन रीडर मुझे अगली पंक्ति में कूदने देता है, लेकिन क्या होगा यदि इसे प्रोग्रामिंग भाषा के अर्थशास्त्र में अनुकूलित किया गया हो। कुछ शोध, जैसे कि Google पर टी वी रमन द्वारा, सिंटैक्स हाइलाइटिंग के लिए अलग-अलग आवाजों का उपयोग करना, और राजस्व जैसे मेटाडेटा को चिह्नित करने के लिए ऑडियो संकेत शामिल हैं।

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

+0

मैं उत्सुक हूं कि आप कोड कैसे पढ़ते हैं। क्या आप इसे लिखते हैं तो क्या यह आपको वापस पढ़ा है? – Matthew

+0

क्या आपको लगता है कि आपको एक और अंग्रेजी जैसी प्रोग्रामिंग भाषा मिलेगी, या कम से कम एक अंग्रेजी भाषा जैसे मौजूदा भाषा का उच्चारण, ऑडिटरिली को पार्स करना आसान होगा? –

+0

मैथ्यू: मैं उन्हें लिखने के रूप में लिखे गए अक्षरों/शब्दों को सुनता हूं, और फिर बाद में लाइन-दर-रेखा या चरित्र-दर-चरित्र की समीक्षा कर सकता हूं। स्क्रीन रीडर भी केंद्रित तत्वों को पढ़ता है, और यह स्रोत कोड के स्वतः पूर्ण होने पर भी लागू होता है। जॉन: एक और अंग्रेजी भाषा अच्छी हो सकती है, लेकिन आप एक लीकी अबास्ट्रक्शन (एप्पलस्क्रिप्ट सोचें) को जोखिम देते हैं। एक और अंग्रेजी तरीके से एक सामान्य प्रोग्रामिंग भाषा पढ़ना दिलचस्प हो सकता है, लेकिन मुझे लगता है कि यह बल्कि बोझिल होगा (मेरे विश्वविद्यालय के शिक्षक ने कहा: "x = 5" के बजाय "x 5 हो जाता है", "x 10 के बराबर है" "x == 10" और "x ++" के बजाय "x के मान में 1 जोड़ें") – Saqib

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