विरोधी पैटर्न का परिचय

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

अच्छे प्रोग्रामिंग अभ्यास का हिस्सा ठीक-ठीक प्रतिरूपों से बचना है। ऐसा मत सोचो कि यह इतना अतुलनीय सैद्धांतिक कचरा है - ये विशिष्ट समस्याएं हैं जो लगभग हर डेवलपर का सामना करती हैं। जो जागरूक है, वह सशस्त्र है!

आइए कुछ विरोधी पैटर्न देखें जो नौसिखियों में आम हैं:

  • जादू संख्या और तार
  • भगवान वर्ग
  • समयपूर्व अनुकूलन
  • साइकिल का आविष्कार
  • यूनीसाइकिल का आविष्कार

जादू संख्या और तार

एक जादुई संख्या किसी चीज़ के लिए कोड में उपयोग किया जाने वाला एक स्थिरांक है (अक्सर डेटा पहचान), जिसकी संख्या का बिना किसी टिप्पणी के कोई अर्थ नहीं होता है। संख्याएँ बिल्कुल कोई शब्दार्थ नहीं रखती हैं।

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

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

इस समस्या को हल करने के लिए, आपको एक वेरिएबल बनाना होगा जिसका नाम संख्यात्मक स्थिरांक के उद्देश्य को समझाता है, और इसे वांछित मान निर्दिष्ट करें।

भगवान वर्ग

दैवीय वस्तु एक विरोधी पैटर्न है जो ओओपी डेवलपर्स के बीच काफी आम है। ऐसी वस्तु बहुत अधिक कार्य करती है और / या लगभग सभी डेटा संग्रहीत करती है। नतीजतन, हमारे पास एक गैर-पोर्टेबल कोड है, जिसे समझना भी मुश्किल है।

इसके अलावा, इस तरह के कोड को बनाए रखना काफी मुश्किल है, यह देखते हुए कि पूरी प्रणाली लगभग पूरी तरह से इस पर निर्भर करती है। इस त्रुटि के कारण: डेवलपर अक्षमता, एक डेवलपर काम का एक बड़ा हिस्सा लेता है (विशेष रूप से जब काम की मात्रा उस डेवलपर के अनुभव स्तर से अधिक हो जाती है)।

इस दृष्टिकोण से निपटने के लिए आवश्यक है कि कार्यों को उन उप-कार्यों में विभाजित किया जाए जिनसे विभिन्न डेवलपर निपट सकते हैं।

समयपूर्व अनुकूलन

समयपूर्व अनुकूलन अनुकूलन है जो प्रोग्रामर के पास यह करने के बारे में सूचित निर्णय लेने के लिए आवश्यक सभी जानकारी होने से पहले किया जाता है।

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

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

उदाहरण और विशेषताएं

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

क्या कठिनाई है

यह निर्धारित करना आसान नहीं है कि अनुकूलन समय से पहले कब होता है। विकास के लिए पहले से जगह छोड़ना महत्वपूर्ण है। आपको ऐसे समाधान और प्लेटफ़ॉर्म चुनने की आवश्यकता है जो आपको आसानी से अनुकूलित करने और बढ़ने की अनुमति दें। साथ ही कभी-कभी समयपूर्व अनुकूलन का उपयोग खराब कोड के बहाने के रूप में किया जाता है। उदाहरण के लिए, वे केवल एक O(n2) एल्गोरिथम लेते हैं क्योंकि एल्गोरिथ्म O(n) अधिक कठिन होगा।

साइकिल का आविष्कार

इस विरोधी पैटर्न का अर्थ यह है कि प्रोग्रामर किसी समस्या का अपना समाधान विकसित करता है जिसके लिए समाधान पहले से मौजूद हैं, और अक्सर अधिक सफल होते हैं।

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

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

बहुत बार, इस विरोधी पैटर्न का कारण समय की साधारण कमी है। और समय पैसा है।

चौकोर पहिए वाली साइकिल का आविष्कार

यह एंटी-पैटर्न बहुत ही बारीकी से पहिया को फिर से शुरू करने से संबंधित है - एक बेहतर समाधान मौजूद होने पर अपना खुद का खराब समाधान बनाना।

यह प्रतिमान दो बार समय लेता है: सबसे पहले, आपके स्वयं के समाधान का आविष्कार करने और उसे लागू करने में समय व्यतीत होता है, और फिर इसे पुन: सक्रिय करने या बदलने पर।

प्रोग्रामर को कार्यों की कुछ श्रेणियों के लिए विभिन्न समाधानों के अस्तित्व के बारे में पता होना चाहिए , उनके फायदे और नुकसान से निर्देशित होना चाहिए।

प्रोग्रामर के रूप में आपके सामने आने वाली सभी समस्याओं को दो भागों में विभाजित किया जा सकता है:

  • स्मार्ट लोगों ने 30 साल पहले इस समस्या का समाधान किया था
  • स्मार्ट लोगों ने 50 साल पहले इस समस्या का समाधान किया था

अधिकांश प्रोग्रामिंग समस्याओं को आपके जन्म से पहले ही सफलतापूर्वक हल कर लिया गया है । कुछ भी आविष्कार करने की आवश्यकता नहीं है - बस अन्य लोगों के अनुभव का अध्ययन करें (यही वह है जिसके लिए किताबें लिखी गई हैं)।

2022 में, हम निम्नलिखित जन्मदिन मना सकते हैं:

  • प्रोग्रामिंग भाषा
    • सी भाषा 50 साल की हो गई (1972)
    • जावा भाषा 27 साल की हो गई (1995)
    • अजगर 31 साल का हो गया (1991)
  • संबंध
    • इंटरनेट 39 साल का हो गया (1983)
    • मोबाइल फोन 49 साल का हो गया (1973)
    • पहला एसएमएस 30 साल पहले (1992) भेजा गया था
  • पैटर्न्स
    • MVC पैटर्न 44 (1978) हो गया
    • SQL का अविष्कार 48 साल पहले (1974) हुआ था
    • जावा बीन्स का आविष्कार 26 साल पहले (1996) हुआ था
  • पुस्तकालय
    • हाइबरनेट का आविष्कार 21 साल पहले (2001) हुआ था
    • वसंत का आविष्कार 20 साल पहले (2002) हुआ था
    • टॉमकैट 23 साल पहले रिलीज़ हुई (1999)
  • ओएस
    • यूनिक्स 51 साल पहले (1971) जारी किया गया था
    • विंडोज ने 37 साल पहले (1985) दिन की रोशनी देखी
    • मैक ओएस 21 साल पहले जारी (2001)

और इन सभी चीजों का सिर्फ आविष्कार नहीं किया गया था, उन्हें उन समस्याओं के समाधान के रूप में विकसित किया गया था जो उस समय बहुत सामान्य और प्रासंगिक थीं।