सबसे पहले, मैंने एक अंशकार एद्जर डब्ल्यू। दिक्जस्त्र का 1974 का पेपर "वैज्ञानिक विचार की भूमिका पर" पढ़ा:
मुझे आपको यह समझाने की कोशिश करें कि सभी बुद्धिमान सोच के लिए मेरा स्वाद क्या है। यह है कि, कोई व्यक्ति अपनी खुद की स्थिरता के लिए किसी के विषय में एक पहलू का गहराई से अध्ययन करने के लिए तैयार है, हर समय यह जानते हुए भी कि कोई एक पहलू के साथ खुद पर कब्जा कर रहा है। हम जानते हैं कि एक कार्यक्रम सही होना चाहिए और हम केवल उस दृष्टिकोण से इसका अध्ययन कर सकते हैं; हम यह भी जानते हैं कि यह कुशल होना चाहिए और हम दूसरे दिन इसकी दक्षता का अध्ययन कर सकते हैं, इसलिए बोलना है। एक और मूड में हम खुद से पूछ सकते हैं कि क्या और यदि ऐसा है: क्यों, कार्यक्रम वांछनीय है। लेकिन इसके विपरीत - इन विभिन्न पहलुओं को एक साथ निपटाकर कुछ भी हासिल नहीं किया जाता है। यह वही है जिसे मैंने कभी-कभी "चिंताओं का अलगाव" कहा है, जो कि पूरी तरह से संभव नहीं होने पर भी, किसी के विचारों के प्रभावी आदेश के लिए अभी तक एकमात्र उपलब्ध तकनीक है, जिसे मैं जानता हूं। यह मेरा मतलब है "किसी पहलू पर किसी का ध्यान केंद्रित करना": इसका मतलब यह नहीं है कि अन्य पहलुओं की अनदेखी करना, यह सिर्फ इस तथ्य के साथ न्याय कर रहा है कि इस पहलू के दृष्टिकोण से, दूसरा अप्रासंगिक है। यह एक है और एक साथ कई-ट्रैक दिमाग।
मुझे आपके कोड को संशोधित करने के बारे में बात करने वाली चिंताओं का आधुनिक पृथक्करण दिखाई देता है। हालाँकि, ऊपर दिए उद्धरण को पढ़ते हुए, मैं इसे एक समय में एक विशेष कार्य पर अपना ध्यान केंद्रित करने के रूप में समझता हूं, जबकि अन्य पहलुओं पर ध्यान केंद्रित नहीं कर रहा हूं। यह मेरे लिए जरूरी नहीं है कि कोड को मॉड्यूलर विखंडू में अलग करने की आवश्यकता है।
अर्थात्, यह कहें कि आपके सामने एक कोड है कि एक फाइल में सभी एक ही फाइल में व्यू, रिपॉजिटरी, कंट्रोलर, इवेंट हैंडलिंग, फैक्ट्री आदि की अवधारणाएँ हैं।
एक संक्षिप्त उदाहरण के लिए, यहां कुछ कोड है जिसमें डेटा एक्सेस है, और दृश्य (आउटपुट):
$sql = "SELECT * FROM product WHERE id = " . db_input($id);
$row = db_fetch_array(db_query($sql));
<option value="<?=$row['id']?>"<?= $row['ver'] == $row['ver'] ? ' selected="selected"' : '' ?>>Version <?=$row['ver']?></option>
आधुनिक OO का उपयोग करके मैं रिपॉजिटरी पैटर्न का उपयोग करके अपनी स्वयं की फ़ाइल में डेटा एक्सेस रख सकता हूं, व्यू कोड अपने स्वयं के फ़ाइल टेम्प्लेट में जा सकता है, और मैं एक नियंत्रक (या एक्शन या रिक्वेस्ट हैंडलर) के माध्यम से संचार करने के लिए उन्हें एक साथ तार कर सकता हूं, और मैं कर सकता हूं विभिन्न निर्भरताओं को बनाने और तार करने के लिए एक कारखाना जोड़ें। और मेरे पास एक कॉन्फ़िगरेशन फ़ाइल हो सकती है जो उन कारखानों को परिभाषित करती है। निश्चित रूप से यह सिंगल-फाइल-सब कुछ से एक कदम दूर है।
चिंताओं के पृथक्करण पर मेरा प्रश्न इस प्रकार है: दिज्क्स्ट्रा के उद्धरण को पढ़ते हुए, मुझे एक विचार आया कि शायद उन्हें "कोड के मॉड्यूलर अलगाव (फ़ाइलों या अपने स्वयं के कार्यों / विधियों / आदि)" में चिंताओं को अलग करने के लिए जरूरी नहीं था। और उसका मतलब यह था कि कार्यक्रम के एक पहलू पर किसी के दिमाग को केंद्रित करने के लिए, खुद को बोझिल किए बिना, अन्य महत्वपूर्ण अभी तक नहीं-माना जाने वाले पहलुओं पर ध्यान केंद्रित किए बिना, चाहे वे शारीरिक रूप से कोड में अलग हों, या नहीं।
फिर हम भौतिक मॉड्यूलर कोड पृथक्करण और डिजाइन पैटर्न के साथ खुद को बोझ क्यों बना रहे हैं? क्या यह केवल एक पहलू पर ध्यान केंद्रित करने के लिए पर्याप्त नहीं होगा, भले ही आपका कोड कैसे संरचित हो?
मैं सबसे भयानक स्पेगेटी कोड लिखने के बारे में बात नहीं कर रहा हूं और फिर केवल इसके एक पहलू पर विचार कर रहा हूं, जो संभवतः एक बोझ होगा। लेकिन अंत में, मैं जो करने जा रहा हूं, वह यह है कि भौतिक कोड पृथक्करण क्यों किया जाता है, क्यों कोड को अलग-अलग फ़ाइलों या विखंडू (विधियों) में विभाजित किया जाता है, जब यह मानसिक रूप से एक पहलू पर ध्यान केंद्रित करने के लिए आवश्यक नहीं है?
क्या शारीरिक के बजाय चिंताओं को अलग करना एक मानसिक व्यायाम होना चाहिए?
दूसरे शब्दों में, प्रोग्रामिंग के मानसिक (फोकस पर) और भौतिक (कोड पर कोड) पहलुओं के बीच एक डिस्कनेक्ट होना चाहिए?
IF
, WHILE
, FOR
बजाय GOTO
। मॉड्यूलर = एक अच्छी तरह से परिभाषित सार्वजनिक एपीआई के साथ मॉड्यूल एक छिपी आंतरिक कार्यान्वयन और प्रतिनिधित्व से सख्ती से अलग हो जाते हैं। (जैसे मोडुला, मेसा, मोडुला -2, मोडुला -3, बाद में पास्कल बोलियाँ ( UNIT
)।)