साक्षर प्रोग्रामिंग में अच्छे आदर्श हैं। आपको क्यों लगता है कि यह मुख्यधारा नहीं है? यह है क्योंकि यह देने में विफल रहा है?
साक्षर प्रोग्रामिंग में अच्छे आदर्श हैं। आपको क्यों लगता है कि यह मुख्यधारा नहीं है? यह है क्योंकि यह देने में विफल रहा है?
जवाबों:
मैंने पहली बार इसे नथ के लेखन की एक पुस्तक में देखा, और सोचा कि यह साफ दिखती है। फिर मैंने कार्यक्रम में क्या चल रहा था, यह समझने के लिए साहित्यिक प्रोग्रामिंग डिस्प्ले का उपयोग करने की कोशिश की, और इसे देखा की तुलना में कठिन पाया। यह हो सकता है कि मैं भी कार्यक्रम लिस्टिंग के माध्यम से जा रहा था, लेकिन यह भ्रामक लग रहा था।
फिर मैंने स्रोत कोड को देखा, और उसने मुझे तब और वहाँ बंद कर दिया। मुझे प्रोग्राम को पाठ के बीच कम पत्राचार और कंपाइलर ने क्या देखा, और उसके अन्य लाभ को देखा के साथ प्रोग्राम को पूरी तरह से नए तरीके से लिखना सीखना होगा।
इसके अलावा, लोग लंबे और आश्वस्त तर्क लिख सकते हैं कि कोड एक्स कर रहा है जब यह वास्तव में वाई कर रहा है, और मैं भ्रामक टिप्पणियों के अपने हिस्से में चला गया हूं। मैंने कोड पढ़ने के लिए एक शौक विकसित किया, यह देखने के लिए कि यह काफी जल्दी क्या कर रहा है। लिट्रेचर प्रोग्रामिंग उसी का विरोधी है।
मैं नेटवर्क प्रभाव को दोष दूंगा । अन्य लोगों के लिए आपके कोड और प्रलेखन को संपादित करने के लिए, उन्हें इसे समझने में सक्षम होना चाहिए।
यह लोगों को cweb / noweb जैसी किसी चीज़ से दूर धकेलता है, क्योंकि उनका उपयोग करने से आपको TeX और प्रोग्राम-विशिष्ट सिंटैक्स को प्रोग्रामिंग भाषा के शीर्ष पर सीखने की आवश्यकता होगी जो आप प्रोजेक्ट के लिए उपयोग कर रहे हैं। इसे समय की भारी बर्बादी के रूप में देखा जा सकता है, खासकर यदि उन्हें किसी भी प्रकार के गणित की आवश्यकता नहीं है जो पहली जगह में TeX के लिए इतना बड़ा ड्रा है। (और कई अनुप्रयोगों प्रोग्रामर के लिए, उन्हें वास्तव में इसकी आवश्यकता नहीं होगी।) इसके बजाय वे विजुअल स्टूडियो की एक्सएमएल टिप्पणियों जैसी कुछ पसंद करते हैं, क्योंकि यह पहले से ही लोकप्रिय और अच्छी तरह से स्थापित है।
जिन स्थानों पर मैंने साक्षर प्रोग्रामिंग को देखा है, वे वैज्ञानिक / सांख्यिकीय कंप्यूटिंग में हैं, जहां अधिकांश प्रोग्रामर गणित, सीएस, या सांख्यिकी में महत्वपूर्ण प्रशिक्षण (उर्फ पीएचडी) करते हैं, और इस तरह पहले से ही एलएटीएक्स के साथ पारिवारिक हैं। वे जो दस्तावेज़ लिखते हैं, उनमें बहुत सारे जटिल फ़ार्मुलों को शामिल करने की संभावना होती है जो टीईएक्स में सबसे अच्छे रूप में लिखे गए हैं, और वे आर में प्रोग्रामिंग करने की अधिक संभावना रखते हैं। आर प्रोग्रामर का अनुपात जो SWeave के बारे में जानते हैं, निश्चित रूप से कहें, की तुलना में बहुत अधिक है C प्रोग्रामर का अनुपात जो cweb के बारे में जानते हैं।
org-mode
साक्षर प्रोग्रामिंग के लिए समर्थन पर एक नज़र रखना चाहते हो सकता है । यह काफी आसान है, और मुझे इसे WEB या NowEB की तुलना में समझने ( प्रबंधन का उल्लेख नहीं करने ) के लिए बहुत आसान लगता है । कोड का एक महत्वपूर्ण पहलू पठनीयता है, और यह पठनीय है। (cf github.com/vermiculus/stack-mode )
९ ० के दशक के उत्तरार्ध में लिटरेट प्रोग्रामिंग की अवधारणा से मैं रोमांचित हो गया था, और मैं अब भी प्रोग्रामिंग, और टाइपसेटिंग के लिए नॉथ्स के दृष्टिकोण से जुड़ा हुआ हूं। इसके अलावा और कुछ नहीं करेंगे।
साहित्य प्रोग्रामिंग प्रणाली जिसे नुट ने डिज़ाइन किया था, वह बहुत अधिक तुरंत आंख से मिलती है, अर्थात् यह अंतर्निहित प्रोग्रामिंग भाषा में कई कमियों को दूर करती है जो कि कोड जनरेशन टूल नथ्स सोर्स डॉक्यूमेंट से उत्पन्न होता है, जो कि मानक पास्कल है।
उन भाग्यशाली लोगों के लिए जिन्होंने मानक पास्कल की कोशिश नहीं की है, यहां कुछ हाइलाइट्स हैं।
मूल रूप से इन सभी चीजों का मतलब था कि नूथ को एक बेहतर प्रोग्रामिंग भाषा की आवश्यकता थी (इसलिए उन्होंने एक का आविष्कार किया) और इसने पास्कल को अपनी विधानसभा भाषा के रूप में इस्तेमाल किया।
अधिकांश आधुनिक भाषाएं बहुत प्रयास किए बिना इन चीजों को कर सकती हैं, इसलिए साहित्य प्रोग्रामिंग को हल करने के लिए उस कार्य का एक बड़ा हिस्सा हटा दिया जाता है।
इसके अलावा आधुनिक भाषाएं अधिक अभिव्यंजक हैं जो अधिक विचार को कोड में ही डालने की अनुमति देती हैं।
तो, क्या बचा है? स्रोत कोड से दस्तावेज़ीकरण का एक टाइपसेट प्रपत्र उत्पन्न करने की क्षमता है, और है कि आज मौजूद है।
ज़रा सोचिए JavaDoc - Java रनटाइम API शायद आज उपलब्ध लिटरेट प्रोग्रामिंग का सबसे बड़ा टुकड़ा है (सिवाय इसके कि कोड वास्तव में प्रस्तुत नहीं किया गया है, लेकिन यह COULD है अगर जावा को शुरू से ही खुला रखा गया था)। उदाहरण के लिए http://download.oracle.com/javase/6/docs/api/java/util/Collection.html पर संग्रह ढांचे की प्रस्तुति देखें
मेरा मानना है कि .NET और अन्य मुख्यधारा के कार्यक्रमों के लिए समान सिस्टम मौजूद हैं।
To make it possible to have a single-pass compiler, all declarations had to come in a certain order.
इस तरह की घोषणा का आदेश निश्चित रूप से संकलक डिजाइन को सरल करता है, लेकिन यह एकल-पास संकलन को सक्षम / रोक नहीं सकता है। उदाहरण के लिए, डेल्फी में वह आदेश प्रतिबंध नहीं है, लेकिन यह अभी भी एक सख्ती से एकल-पास पास्कल संकलक है।
एक बात जो मुझे पता चली जब मैंने 90 के दशक में साक्षर प्रोग्रामिंग के साथ अपना भाग लिया था, तो यह बहुत भावुक लोगों को आकर्षित करता था जो सटीक रूप से द राइट थिंग करना चाहते थे - और इसमें अपनी खुद की साक्षर प्रोग्रामिंग प्रणाली लिखना शामिल था क्योंकि कोई भी मौजूदा उनके लिए अच्छा नहीं था। Noweb हर किसी के लिए एक अच्छा-कम से कम आम भाजक प्रदान करके उस कटौती को काटने का एक अच्छा प्रयास था, हालांकि तब भी, मैंने अपने एलपी समय का अधिकांश समय इसके लिए एक सुंदर-प्रिंटर विकसित करने में बिताया था ...
एक और मुद्दा यह है कि यह वास्तव में चुस्त है। कुछ मायनों में, धीमा होना अच्छा है क्योंकि यह आपको पहले से अधिक सोचने और चीजों को सही समय पर लाने के लिए मजबूर करता है। दूसरी ओर, सावधानीपूर्वक दस्तावेज़ीकरण करते हुए आप जाते हैं कि इसका मतलब है कि आपके कोड को फिर से व्यवस्थित करने के लिए एक बड़ा अवरोध है। और अगर आप इंतजार करते हैं जब तक कि आपके कोड को एलपी- ify से पहले कठोर नहीं किया जाता है, तब तक आप एक बहु-दिवसीय दस्तावेज़ीकरण कार्य के साथ समाप्त होते हैं, जो वास्तव में आपको अपनी पटरियों पर रोक सकता है।
मेरी विनम्र राय में, कई कंपनियों में एक संस्कृति है जो लिटरेट प्रोग्रामिंग के उद्देश्यों के विपरीत है: वे तेज परिणाम चाहते हैं (वे केवल गुणवत्ता के बारे में रोते हैं जब ऐप उत्पादन में होता है)। अपने स्वयं के अनुभव में, मेरे मालिकों ने यह समझने से इंकार कर दिया था कि तेज परिणाम का मतलब यह नहीं है "मैं एक कार्यक्रम चलाने के दिन के बाद जब मैं पूछ रहा हूं।" उनके लिए, यदि कोई डेवलपर अपने कीबोर्ड पर टाइप करने में व्यस्त नहीं है, तो वह काम नहीं कर रहा है, "डिजाइन-नॉन-सेंस में अपना समय बर्बाद कर रहा है"। हां, मुझे पता है, मेरा बॉस एक अर्शी है।
कोडर्स अंग्रेजी नहीं कोड लिखते हैं।
कोडर्स को दस्तावेज़ लिखना पसंद नहीं है क्योंकि यह कोड चलाने में मदद नहीं करता है।
कोडर प्रलेखन लिखने में अच्छे नहीं हैं क्योंकि यह उनके विचारों को व्यक्त करने का एक खराब माध्यम है।
साहित्य प्रोग्रामिंग को अगले स्तर पर प्रलेखन लेने का विचार प्रतीत होता है जहां कोड एक विचार के बाद अधिक होता है। शायद यह काम करेगा, लेकिन अधिकांश कोडर के लिए यह अप्रिय दस्तावेज की तरह दिखता है।
मुख्य रूप से क्योंकि लोग बहुत स्थिर हैं। स्पष्ट गवाही जो इस सरल तकनीक की प्रकृति के बारे में युवा लोगों द्वारा व्यक्त अनुमानों और गलतफहमी की एक अंतहीन धारा है।
लोग एलपी होने के लिए: (ए) प्रलेखन की एक विधि (बी) कुछ पॉलिश निबंध लिखने की एक विधि जो कुछ विशेष कौशल या प्रतिभा (सी) की आवश्यकता है, बस कोई सुराग नहीं है - लियो प्रोग्रामिंग संपादक के निर्माता के रूप में, अपने स्वयं के प्रवेश द्वारा आदि आदि।
एल.पी. हालांकि बस है: (१) कोड और वाक्यांशों के मिश्रण में (= किसी भी) मानव भाषा में प्रोग्राम लिखना, जहां कोड के अन्य विखंडू और / या शामिल वाक्यांशों के लिए उत्तरार्द्ध खड़े होते हैं। यह ठीक है कि असंख्य प्रोग्रामिंग पाठ्यपुस्तकों के लेखक क्या करते हैं .. और (2) यह एक साधारण प्रीप्रोसेसर है जो मानव में उन वाक्यांशों का विस्तार करता है (जो कि सबरूटीन्स के शामिल नामों के रूप में बन गए) परिणाम को क्रम में प्राप्त करने के लिए कंपाइलर (या दुभाषिया)। अन्यथा एक और छोटे उपयोगिता के साथ लिखित पाठ का विस्तार कर सकते हैं "साक्षर स्रोत" को एक अच्छी तरह से स्वरूपित पठनीय पाठ में बदलने के लिए स्वरूपण प्रतीकों को शामिल करना।
युवा लोग इस अत्यंत सरल विचार को कभी नहीं आजमाते हैं - और या तो नकली कारणों की कल्पना करते हैं या कल्पना करते हैं कि वे कभी ऐसा क्यों करेंगे या नहीं करेंगे।
मूल रूप से प्रोग्रामिंग का मुख्य विचार "छद्मकोश में" एक मानव भाषा में लिखा गया है और फिर इसे एक साधारण प्रीप्रोसेसर उपयोगिता के साथ विस्तार कर रहा है हेल्प एटेंट (सीमित, किसी भी लॉन्गिश प्रोग्राम के लिए एक मुख्य कठिनाई), आपके प्रोग्राम फ्लो की तरह बहुत अधिक तह या विभाजन। फंक्शंस / सबरूटीन्स में, विवरण में खुद को खोने की जरूरत नहीं है, लेकिन मशीन के निष्पादन के लिए पूरी तरह अनावश्यक है।
वहाँ साक्षर प्रोग्रामिंग के 2 पहलुओं है कि मैं कर रहे हैं करते इच्छा मुख्यधारा प्रोग्रामिंग में शामिल किया गया - एम्बेडेड कल्पना (जैसे, डिजाइन डायग्राम) और पिछले और वैकल्पिक प्रयास (संकेत जैसे, "कारण इसे इस तरह है क्योंकि मैं इस दूसरी तरह की कोशिश की और यह काम नहीं किया क्योंकि ...))। उन दोनों पहलुओं को डॉक-टिप्पणियों और यूआरआई के साथ संभाला जा सकता है।
क्योंकि कार्यक्रमों के तर्क वैसे ही काम नहीं करते हैं जैसे हम बोलते हैं। एक कार्यक्रम में एक अच्छी तरह से निर्दिष्ट प्रवाह, और स्थितियां और लूप हैं।
बहुत से कोडिंग करने के बाद, मैं इन शब्दों में सोचता हूं। मेरा मस्तिष्क समस्याओं को निष्पादन योग्य कोड के लक्ष्य डोमेन में बदल देता है। और मेरे कार्यक्रमों को साक्षर बनाने के लिए अतिरिक्त रूपांतर करने के लिए, आमतौर पर प्रोग्रामिंग भाषा में इसे लिखना मेरे लिए बहुत अधिक कुशल है।
वास्तव में, मेरा मानना है कि मेरे कार्यक्रम पहले से ही साक्षर हैं ... पहचानकर्ता, अच्छे समारोह के नाम, टिप्पणियां, जहां मैंने कुछ हैकरी की, जिन्हें मैं कुछ महीनों के बाद तुरंत खुद को समझाना नहीं चाहूंगा।
निष्कर्ष निकालने के लिए: मेरा जावा कोड अपने आप में अधिक साक्षर है क्योंकि हर "साक्षर" प्रोग्रामिंग बनना चाहता है।
मैं दूसरे तरीके से प्रोग्रामिंग को साक्षर करने के लिए आया था - मैंने सपना देखा कि कोड को व्यवस्थित किया जाए क्योंकि यह मेरे दिमाग में फिट बैठता है, न कि जब कम्पाइलर को इसकी आवश्यकता होती है। मैंने इस उद्देश्य के लिए लियो को लगभग आदर्श पाया । यह बाहर बदले जाने वाली फ़ाइलों का ट्रैक रखने का भी समर्थन करता है। इन फ़ाइलों में कोई विशेष मार्कअप नहीं होता है, इसलिए मैं टीम में दूसरों की आवश्यकता के बिना लियो का उपयोग कर सकता हूं। यह सुविधा - "@ शादो के पेड़" - बहुत आशाजनक है, हालांकि अभी भी थोड़ा छोटी गाड़ी है, अधिक नेत्रगोलक की आवश्यकता है। और यह "ओह नहीं, एक बड़ी फ़ाइल में सब कुछ" को भी ठीक करता है समस्या दोनों को पेड़ की रूपरेखा में और बाहरी फ़ाइलों के लिए समर्थन द्वारा व्यवस्थित करता है।
मेरे लिए, नाम के विपरीत, "साक्षर प्रोग्रामिंग" प्रलेखन के बारे में बिल्कुल नहीं है। मेरे पास पहले से अधिक दस्तावेज नहीं हैं। यह संरचना के बारे में है जो मुझे खो जाने में मदद नहीं करता है । मैं इसे खासतौर पर कसम खाता हूं जब बीएचईएफटी जेएसपी फाइलों का प्रबंधन किया जाता है (और यह कि लियो मूल रूप से मुख्य रूप से पाइथन के लिए अभिप्रेत था और इसमें जेएसपी भाषा के लिए समर्थन नहीं है - मुझे फाइल को लियो ट्री से मैन्युअल रूप से विभाजित करना होगा!)।
मैं इसे एक मूल्यवान शिक्षण उपकरण के रूप में देखता हूं, जहां कोड पर एक शोध प्रबंध लिखा जा सकता है, और फिर काम करने वाले कोड के स्निपेट को कोड के व्हाट्स, व्हाट्स और व्हाट्स पर पाठकों को निर्देश देने के लिए इसमें हस्तक्षेप किया जाता है।
विशुद्ध रूप से शैक्षिक वातावरण के बाहर, मुझे लगता है कि केवल नूथ वास्तव में समझता है कि इसका उपयोग कैसे करना सबसे अच्छा है।
यह सभी दुनिया में सबसे खराब है - आपको एक बहुत ही गैर-विशिष्ट भाषा = अंग्रेजी में एक अत्यधिक सही, अत्यधिक विशिष्ट कंप्यूटर प्रोग्राम लिखना होगा। इसलिए आपको इसे सही वाक्यांशों का उपयोग करके सावधानी से लिखना होगा - इसलिए आप कोड भी लिख सकते हैं।