स्व-दस्तावेजीकरण कोड (सेल्फ डॉक्यूमेंटिंग)

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

उद्देश्य
सेल्फ डॉक्यूमेंटिंग प्रणालियों के लिए सामान्यतः बताए गए उद्देश्यों में शामिल हैं:


 * सोर्स कोड को रीड और समझने में आसान बनाएं
 * लिगेसी प्रणालियों को बनाए रखने या विस्तारित करने के लिए आवश्यक प्रयास को कम करें
 * किसी सिस्टम के यूजर और डेवलपर्स के लिए कोड कमेंट या सॉफ्टवेयर मैनुअल जैसे द्वितीयक डॉक्यूमेंट स्रोतों से परामर्श लेने की आवश्यकता को कम करें
 * स्व-निहित ज्ञान के प्रदर्शन के माध्यम से स्वचालन की सुविधा प्रदान करना

सम्मेलन
सेल्फ डॉक्यूमेंटिंग कोड स्पष्ट रूप से मानव-पठनीय नामों का उपयोग करके लिखा जाता है, जिसमें सामान्यत: मानव भाषा में एक वाक्यांश शामिल होता है जो प्रतीक के अर्थ (जैसे कि आर्टिकल.नंबर ऑफवर्ड्स या ट्राईओपन) के रूप में दर्शाता है। कोड में एक स्पष्ट और व्यवस्थित संरचना भी होनी चाहिए जिसे यूजर्स उपयोग किए गए एल्गोरिदम को आसानी से समझ सके।

व्यावहारिक विचार
कुछ व्यावहारिक विचार हैं जो इस बात को प्रभावित करते हैं कि सेल्फ डॉक्यूमेंटिंग प्रणाली के उद्देश्यों को कितनी व्यवस्थित तरीके से संपादित किया जा सकता है।


 * नेमिंग कन्वेंशनों की एकसमानता (प्रोग्रामिंग)
 * कंसिस्टेंसी(संगतता)
 * एप्लिकेशन का बिस्तार और सिस्टम की आवश्यकताएँ

उदाहरण
नीचे सेल्फ डॉक्यूमेंटिंग कोड का एक बहुत ही सरल उदाहरण दिया गया है, जिसमें मानव पाठकों के लिए कोड के तर्क को और अधिक स्पष्ट बनाने के लिए स्पष्ट टिप्पणियों के स्थान पर नामकरण का उपयोग किया गया है।

आलोचना
जेफ रस्किन ने सेल्फ डॉक्यूमेंटिंग कोड में विश्वास की आलोचना करते हुए कहा कि कोड इस तर्क को स्पष्ट नहीं कर सकता है कि प्रोग्राम क्यों लिखा जा रहा है या फिर इसे इस तरह से क्यों लागू किया गया है।

यह भी देखें

 * ऑटोलॉजिकल शब्द
 * कोड पठनीयता
 * टिप्पणी (कंप्यूटर प्रोग्रामिंग)
 * नियंत्रित प्राकृतिक भाषा
 * साक्षर प्रोग्रामिंग
 * प्राकृतिक भाषा प्रोग्रामिंग