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