डिक्लेरेटिव। इम्पेरेटिव। इंटेंशनल।
डेवलपर्स हर समय प्रोग्रामिंग प्रतिमानों (paradigms) के बारे में बात करते हैं।
हम इम्पेरेटिव प्रोग्रामिंग का उपयोग करते हैं। हम डिक्लेरेटिव प्रोग्रामिंग का उपयोग करते हैं। हम फंक्शनल या ऑब्जेक्ट-ओरिएंटेड शैलियों का उपयोग करते हैं।
लेकिन हम एक स्तर (layer) को भूल रहे हैं।
भविष्य इंटेंशनल (intentional) है।
इम्पेरेटिव प्रोग्रामिंग कंप्यूटर को सटीक रूप से बताती है कि क्या करना है। आप चरण-दर-चरण निर्देश देते हैं। आप प्रक्रिया पर ध्यान केंद्रित करते हैं। आप अनुक्रम (sequence) को नियंत्रित करते हैं। यह आपको सटीकता तो देता है, लेकिन आपको हर एक चरण का बोझ उठाना पड़ता है।
डिक्लेरेटिव प्रोग्रामिंग ने इसे बदल दिया। आप यह बताते हैं कि आपको क्या चाहिए, न कि यह कि इसे कैसे करना है। SQL इसका एक सटीक उदाहरण है। आप डेटा मांगते हैं। आप लूप (loops) नहीं लिखते या मेमोरी को मैनेज नहीं करते। सिस्टम काम संभाल लेता है। इससे उत्पादकता बढ़ती है।
फिर भी, डिक्लेरेटिव सिस्टम भी अक्सर आपको कार्यान्वयन (implementation) के बारे में सोचने के लिए मजबूर करते हैं।
रिस्पॉन्सिव वेब डिज़ाइन को देखें। आप कॉलम और ब्रेकपॉइंट्स के लिए कोड लिखते हैं। आप अभी भी मैकेनिक्स (mechanics) का वर्णन कर रहे हैं। आप बता रहे हैं कि एक लेआउट को कैसे काम करना चाहिए।
सिस्टम जानता है कि आप क्या कर रहे हैं, लेकिन वह यह नहीं जानता कि क्यों।
इंटेंशनल प्रोग्रामिंग लक्ष्य को बदल देती है।
CSS का वर्णन करने के बजाय, आप वांछित व्यवहार (desired behavior) का वर्णन करते हैं। आप सिस्टम को अनुकूलित (adapt) होने के लिए कहते हैं। आप सिस्टम को संदर्भ (context) के आधार पर पुनर्गठित करने के लिए कहते हैं। ध्यान तंत्र (mechanism) से हटकर उद्देश्य (purpose) पर चला जाता है।
सॉफ्टवेयर इसी दिशा में बढ़ रहा है।
- SQL: आप डेटा का वर्णन करते हैं।
- Infrastructure as Code: आप संसाधनों (resources) का वर्णन करते हैं।
- Nectarine: आप स्कीमा (schemas) और APIs का वर्णन करते हैं।
सिस्टम बाकी सब संभाल लेता है।
सर्वश्रेष्ठ सॉफ्टवेयर लाइब्रेरीज़ केवल सुविधाएँ (features) प्रदान करने से कहीं अधिक करती हैं। वे एक भाषा प्रदान करती हैं। वे आपको सोचना सिखाती हैं। प्रत्येक API और प्रत्येक नाम एक दर्शन (philosophy) बनाने में मदद करता है।
कार्यान्वयन (Implementation) मायने रखता है, लेकिन इसे हर स्तर पर नहीं झलकना चाहिए। डेवलपर्स मैकेनिक्स को व्यक्त नहीं करना चाहते। वे इरादा (intent) व्यक्त करना चाहते हैं। वे जानते हैं कि वे क्या हासिल करना चाहते हैं।
अच्छे एब्स्ट्रैक्शन (abstractions) जटिलता को छिपाते हैं। महान एब्स्ट्रैक्शन इरादे को स्पष्ट बनाते हैं।
इम्पेरेटिव और डिक्लेरेटिव शैलियाँ बनी रहेंगी। लेकिन हम उन प्रणालियों की ओर बढ़ रहे हैं जो लक्ष्यों को समझती हैं। हमें ऐसी प्रणालियों की आवश्यकता है जो उद्देश्य को परिणामों में बदल सकें।
इस पर ध्यान दें कि आपका मतलब क्या है, न कि केवल इस पर कि यह कैसे काम करता है। अर्थ (meaning) मैकेनिक्स से अधिक महत्वपूर्ण है।
स्रोत: https://dev.to/stinklewinks/declarative-imperative-intentional-4j60