2008-11-18 11 views
16

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

हालांकि, साक्षर प्रोग्रामिंग स्केल कैसे एक बड़ी डिग्री के लिए है? कुल मिलाकर, साक्षर प्रोग्रामिंग अभी भी टेक्स्ट है। बहुत मानव पठनीय पाठ, ज़ाहिर है, लेकिन अभी भी पाठ, और इस प्रकार, बड़े सिस्टम का पालन करना मुश्किल है। उदाहरण के लिए, मैंने अपने कंपाइलर के बड़े हिस्सों का उपयोग करने के लिए पुन: कार्य किया >> और कुछ जादू चेन संकलन चरणों को एक साथ करने के लिए, क्योंकि कुछ "x.register_follower (y); y.register_follower (z); y.register_follower (a); ... "वास्तव में अनावश्यक हो गया, और एक्स >> वाई >> जेड में बदल रहा है >> इसे थोड़ा बेहतर बना दिया, भले ही यह इसके ब्रेकिंग पॉइंट पर भी हो।

तो, लिटरेट प्रोग्रामिंग बड़े सिस्टम को कैसे स्केल करता है? क्या कोई ऐसा करने की कोशिश करता है?

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

- टेथा।

+0

यह भी देखना http://stackoverflow.com/questions/219168/literate-programming –

+0

मुझे लगता है कि इनमें से कुछ उत्तर धाराप्रवाह प्रोग्रामिंग के साथ साक्षर प्रोग्रामिंग को भ्रमित कर रहे हैं। बस कह रहा है ... – Benjol

+0

एर, कथित प्रोग्रामिंग के लिए Knuth की प्रेरणा प्रेरणा हमेशा रही है कि इससे उन्हें स्केल करने में मदद मिली: उन्होंने इसमें दो महत्वपूर्ण कार्यक्रम (टेक्स और मेटाफॉन्ट) लिखा, और यहां तक ​​कि टेक्स: द प्रोग्राम एक पुस्तक के रूप में भी प्रकाशित किया। आप जितनी चाहें उतनी कम या ज्यादा टिप्पणी कर सकते हैं; साक्षर प्रोग्रामिंग का बिंदु इसे प्रदर्शनी के लिए उचित क्रम में लिखने में सक्षम है। – ShreevatsaR

उत्तर

4

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

उस ने कहा, पाठक को पहले से ही जो कुछ पता है उसके आधार पर इसमें कुछ प्रयास करना होगा। संभवतः कोड समझने योग्य है, और कुछ भी मुफ्त में नहीं आता है।

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

+0

साक्षर प्रोग्रामिंग का मतलब कभी नहीं है "अपना कोड वास्तव में शब्दशः बनाएं" - यदि आप [Knuth के कार्यक्रम] (http://www-cs-faculty.stanford.edu/~uno/programs.html) को देखते हैं (उदाहरण के लिए आपको .tex फ़ाइल प्राप्त करने के लिए .w फ़ाइल पर cweave चलाएं, फिर पीएसएफ/पीडीएफ प्राप्त करने के लिए [pdf] tex चलाएं), उनमें से कुछ को कम से कम दस्तावेज किया गया है; कई संख्या वाले वर्गों ("भाग") में कोड के बाद केवल एक शीर्ष-स्तर अनुच्छेद है। वास्तविक उपयोगिता किसी भी क्रम में कोड लिखने में सक्षम है, ऐसा प्रतीत होता है। वास्तव में कुछ साक्षर प्रोग्रामिंग करने के लिए – ShreevatsaR

1

साक्षर प्रोग्रामिंग एक युग में विकसित किया गया था जहां लंबे परिवर्तनीय और फ़ंक्शन नाम संभव नहीं थे। इस वजह से, कोड वास्तव में पठनीय नहीं था।

जाहिर है, तब से बहुत कुछ हुआ है।

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

+0

फिर भी याद आ रहा है: नामस्थान और कक्षाएं। मुझे लगता है कि साक्षर प्रोग्रामिंग अपने समय का एक आर्टिफैक्ट है जो अब प्रासंगिक नहीं है। –

+4

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

+5

@ डीएमकी: सहमत। यह पूरा "कोड अपना स्वयं का दस्तावेज है" एक खतरनाक प्रवृत्ति है, लोग भूल जाते हैं कि दस्तावेज सिर्फ कोड के बारे में नहीं है (जो इसे पढ़ने से स्पष्ट है), लेकिन * क्यों *, जो महत्वपूर्ण प्रश्न है , और स्पष्ट नहीं होने पर दस्तावेज किया जाना चाहिए। –

7

पुस्तक "भौतिक रूप से आधारित रेंडरिंग" (pbrt.org) बड़े पैमाने पर साक्षर प्रोग्रामिंग का सबसे अच्छा उदाहरण है जिसे मैं जानता हूं। पुस्तक एक पूर्ण प्रतिपादन प्रणाली लागू करती है, और पुस्तक पाठ और रेट्रेटर कोड दोनों एक ही "स्रोत" से उत्पन्न होते हैं।

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

3

pbrt कंप्यूटर विज्ञान स्नातकों (और मुझे) की शिक्षा के लिए साक्षर शैली में लिखे गए एक शारीरिक रूप से आधारित रे ट्रेसर है, यह एक मामूली बड़े पैमाने पर प्रणाली है। गैर-विशेषज्ञ प्रोग्रामर के रूप में यह दस्तावेज यह समझने के लिए बहुत आवश्यक है कि कार्यक्रम क्या करता है और यह क्यों करता है।

मेरे पास जावा में एक शोध-रेंडरर तक पहुंच है, जो अच्छी तरह से लिखी गई है लेकिन अपेक्षाकृत अनियंत्रित है लेकिन कुछ सिगोग्राफ पेपर के लिए है। यह अपेक्षाकृत समझ में आता है, लेकिन मेरे पास लेखकों तक पहुंच है।

मैंने ImageJ का भी बहुत उपयोग किया है, और अंतर्निहित जावा पर हुड के नीचे देखा - अंतर्निहित दर्शन के विचार के बिना पालन करना बहुत मुश्किल है।

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

4

मैंने 15 साल पहले वेब के साथ कुछ साक्षर प्रोग्रामिंग किया था। हाल ही में मैंने विकी से कोड निकालने और स्क्वाक स्मॉलटॉक पर्यावरण से दस्तावेज उत्पन्न करने का प्रयास किया।

नीचे-नीचे हिस्से को टीडीडी/बीडीडी ढांचे से दस्तावेजों को उत्पन्न करके अपेक्षाकृत अच्छी तरह से संभाला जा सकता है, लेकिन एलपी पाठक को कोड समझाते हुए केंद्रित है।

कुछ मुद्दों के होते हैं:

  • कहानी बताने के लिए विभिन्न हितधारकों/पाठकों के लिए अलग है;
  • अधिकांश वातावरण में परियोजना संरचना कहानी कहने के लिए आवश्यक संरचना नहीं है;
  • लगातार परिष्करण/प्रकटीकरण के लिए समर्थन गुम है; चित्रों के पाठ समर्थन के अलावा
  • आवश्यक है; स्रोत नियंत्रण प्रणाली में टिप्पणियों से
  • कोई यह प्राप्त कर सकता है कि सिस्टम कैसे बनाया गया था। कहानी यह होनी चाहिए कि सिस्टम कैसे बनाया जा सकता था (सही हिंडसाइट के साथ)।

एलपी के लिए बड़े सिस्टम के लिए काम करने के लिए, आपको विकी या ऑब्जेक्ट ब्राउज़र की तुलना में बेहतर आईडीई समर्थन की आवश्यकता है।

+2

+1 –

3

साक्षर प्रोग्रामिंग के पीछे विचार दस्तावेज पर जोर दिया गया है, कोड के माध्यम से छिड़काई टिप्पणियों के बजाय, दस्तावेज़ के माध्यम से छिड़काव कोड के साथ।

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

यह बड़े सिस्टम तक स्केल करता है, क्योंकि कोड के आकार के साथ दस्तावेज़ स्केल को मूल रूप से कोड स्केल करने का मूल अनुपात होता है।

4

झूठी "कुल मिलाकर, साक्षर प्रोग्रामिंग अभी भी सिर्फ पाठ है।"

आरेख ठीक हैं।

मेरे सोचा घटक है कि एक दूसरे को घटना का उपयोग कर के साथ संवाद निर्दिष्ट करने के लिए एल.पी. उपयोग करने के लिए किया जाएगा धाराओं

बस वास्तुकला है कि, और कहा कि ठीक है।

आप नेट से एक दस्तावेज - डेटाफ्लो आरेख - निकालें और इससे भी कोड उत्पन्न कर सकते हैं। इसके बारे में तुम क्या सोचते हो?

डेटा प्रवाह आरेख वास्तव में विस्तृत कोड उत्पन्न करने के लिए उपयोगी नहीं हैं। वे एक आसान सारांश हैं, सूचना का सटीक स्रोत नहीं।

एक अच्छा लेखन उपकरण (जैसे लाटेक्स) दस्तावेज़ में आरेख को एन्कोड कर सकता है। आप दस्तावेज़ीकरण के अन्य हिस्सों से आरेख के लिए शायद एक रास्ता तय कर सकते हैं।

बॉटम लाइन

लंबे समय में, आप पाठ का एक सारांश के रूप में चित्र पैदा करने से बेहतर कर रहे हैं।

क्यों?

आरेख जानबूझकर विवरण विस्तृत करते हैं। एक आरेख एक सारांश या एक सिंहावलोकन है। लेकिन कोड के स्रोत के रूप में, आरेख भयानक हैं। सभी विवरण प्रदान करने के लिए, चित्र बहुत अव्यवस्थित हो जाते हैं।

लेकिन कुछ अन्य एलपी मार्कअप का एक आरेखण सारांश ठीक काम करेगा।

0

नैनोएलपी - एलपी एक्स्टेंसिबल टूल आज़माएं, कई दस्तावेज़ प्रारूपों (मार्कडाउन, ओपनऑफिस, क्रेओल, टीएक्स, एसिसीडोक और अन्य) का समर्थन करता है, एक और एलपी प्रोग्राम, टेम्पलेटिंग और अन्य का आयात करता है। उपयोगकर्ता, उदाहरण के लिए, खुद आदेशों/मैक्रो (अजगर में) जोड़ सकते हैं उदाहरण के विशेष आयात करने के लिए VCS से ... http://code.google.com/p/nano-lp

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