प्रणालियों की जटिलता में वृद्धि अथक, दमनकारी और अंततः अपंग है। मेरे लिए एक पुरानी पीढ़ी के प्रोग्रामर के रूप में, यह भी निराशाजनक रूप से निराशाजनक है।
मैं 40 से अधिक वर्षों से प्रोग्रामिंग कर रहा हूं, 50-100 विभिन्न भाषाओं या बोलियों में लिखित कोड है, और 5-10 में विशेषज्ञ बन गया हूं। मेरे इतने सारे होने का कारण यह हो सकता है कि ज्यादातर वे केवल एक ही भाषा हैं, ट्विक्स के साथ। जुड़वाँ जटिलता को जोड़ते हैं, जिससे हर भाषा थोड़ी अलग होती है।
मैंने एक ही एल्गोरिदम को असंख्य बार लागू किया है: संग्रह, रूपांतरण, सॉर्ट और खोज, सांकेतिक शब्दों में बदलना / डिकोड, प्रारूप / पार्स, बफ़र्स और स्ट्रिंग्स, अंकगणित, मेमोरी, आई / ओ। हर नया कार्यान्वयन जटिलता जोड़ता है, क्योंकि हर एक बस थोड़ा अलग है।
मुझे आश्चर्य है कि वेब फ्रेमवर्क और मोबाइल ऐप के उच्च उड़ान वाले ट्रैपेज़ कलाकारों द्वारा दिए गए जादू से, वे इतने कम समय में इतना सुंदर कुछ कैसे पैदा कर सकते हैं। तब मुझे एहसास होता है कि वे कितना नहीं जानते हैं, उन्हें डेटा या संचार या परीक्षण या थ्रेड्स के बारे में जानने की आवश्यकता होगी या जो कुछ भी उपयोगी हो, उससे पहले।
मैंने चौथी पीढ़ी की भाषाओं के युग में अपना शिल्प सीखा, जहाँ हम वास्तव में यह मानते थे कि हम लेखन सॉफ्टवेयर के दोहराव वाले भागों में उत्तरोत्तर अधिक से अधिक भाषाओं को पकड़ने के लिए उच्च और उच्च स्तर की भाषाओं का उत्तराधिकार प्राप्त करेंगे। तो यह कैसे निकला, बिल्कुल?
माइक्रोसॉफ्ट और आईबीएम ने विंडोज और ओएस / 2 के लिए ऐप लिखने के लिए सी पर लौटकर उस विचार को मार दिया, जबकि डीबेस / फॉक्सप्रो और यहां तक कि डेल्फी भीग गई। फिर वेब ने इसे फिर से विधानसभा भाषाओं की अपनी अंतिम तिकड़ी के साथ किया: एचटीएमएल, सीएसएस और जावास्क्रिप्ट / डोम। यह सब वहाँ से खस्ताहाल है। हमेशा अधिक भाषाओं और अधिक पुस्तकालयों और अधिक रूपरेखा और अधिक जटिलता।
हमें पता है कि हमें इसे अलग तरह से करना चाहिए। हम HTML लिखने से बचने के लिए टेम्प्लेट और डार्ट के बारे में, कम और सैस के बारे में जानते हैं। हम जानते हैं और हम इसे वैसे भी करते हैं। हमारे पास हमारे ढांचे हैं, जो बहुत सारगर्भित हैं, और हम देखते हैं कि उन चुनिंदा लोगों द्वारा क्या चमत्कार किया जा सकता है जो आर्कन अवतरण सीखते हैं, लेकिन हम और हमारे कार्यक्रम अतीत में किए गए निर्णयों से फंस गए हैं। इसे बदलना या शुरू करना बहुत जटिल है।
नतीजा यह है कि जो चीजें आसान होनी चाहिए, वे आसान नहीं हैं, और जो चीजें संभव होनी चाहिए, वे जटिलता के कारण लगभग असंभव हैं। मैं एक स्थापित कोड बेस में एक नई सुविधा को लागू करने के लिए परिवर्तन करने की लागत का अनुमान लगा सकता हूं और आश्वस्त रहूंगा कि मैं सही हूं। मैं अनुमान लगा सकता हूं, लेकिन मैं इसे सही नहीं ठहरा सकता या इसे समझा नहीं सकता। यह बहुत जटिल है।
आपके अंतिम प्रश्न के उत्तर में, मैं युवा प्रोग्रामरों को लेयर केक पर उतनी ही शुरुआत करने की सलाह दूंगा जितना वे कर सकते हैं, और केवल निचली परतों तक ही गोता लगा सकते हैं क्योंकि जरूरत और इच्छा प्रदान करती है। मेरी प्राथमिकता उन भाषाओं के लिए है जिनमें कोई लूप नहीं है, बहुत कम या कोई शाखा और स्पष्ट स्थिति नहीं है। लिस्प और हास्केल के दिमाग में आते हैं। व्यवहार में मैं हमेशा C # / जावा, रूबी, जावास्क्रिप्ट, पायथन और एसक्यूएल के साथ समाप्त करता हूं क्योंकि यही वह स्थान है जहां समुदाय हैं।
अंतिम शब्द: जटिलता परम दुश्मन है! मारो कि और जीवन सरल हो जाए।