यदि आप एक प्रोग्रामर हैं, तो अपने आप को "कंप्यूटर वैज्ञानिक" न समझें; कंप्यूटर वैज्ञानिक कंप्यूटर की अगली पीढ़ी बनाने वाले हैं, जिनमें से कुछ अभी भी विज्ञान कथा हैं जब तक कि सामग्रियों का सही मिश्रण, लघुकरण और कम्प्यूटेशनल सिद्धांत व्युत्पन्न नहीं होते हैं। वे केवल पाइपलाइन की शुरुआत हैं। जो लोग यहां और अब "सॉफ्टवेयर इंजीनियर" में सॉफ्टवेयर विकसित करते हैं; वे थ्योरी और टूल्स लेते हैं, कभी-कभी व्यावहारिक सिद्धांत और वास्तविक-दुनिया के उपकरण ले रहे हैं, शीर्ष पर इलेक्ट्रोनिक वैद्य के इस जटिल टुकड़े की शक्ति में सामंजस्य स्थापित करने और इसे बनाने के लिए जो हम चाहते हैं। यह "कंप्यूटर इंजीनियरिंग" के क्षेत्र की एक विशेषज्ञता है, जो कंप्यूटर वैज्ञानिकों के सिद्धांतों को लेता है और उन्हें, हार्डवेयर और सॉफ़्टवेयर को वास्तविक दुनिया के अंत-उपयोगकर्ता इलेक्ट्रॉनिक समाधानों पर लागू करता है।
यह आईएमओ है, जहां व्यापार सिद्धांत से मिलता है। इस प्रकार के मामलों में, पुरानी कहावत "बेहतर का दुश्मन काफी अच्छा है" को आसानी से पढ़ने के लिए चारों ओर घुमाया जा सकता है "अच्छा पर्याप्त का दुश्मन बेहतर है"। अपने आप को एक "वैज्ञानिक" के बजाय "इंजीनियर" मानना और जो आप अन्य इंजीनियरिंग विषयों के साथ समानांतर में करते हैं, वह मतभेदों को राहत देता है।
मान लीजिए कि एक ग्राहक आपके पास आता है, एक सिविल / स्ट्रक्चरल इंजीनियर, और आपको एक पुल बनाने के लिए कहता है। पुल को 20 फीट तक फैलने की जरूरत है, खुद को और एक टन कैरी लोड का समर्थन करना चाहिए, यह नियमित रखरखाव के साथ 10 साल तक चलना चाहिए, और वे इसे $ 20,000 के लिए एक महीने में चाहते हैं। वे तुम्हारी अड़चन हैं; अधिकतम से अधिक न होते हुए भी न्यूनतम से मिलें। ऐसा करना "काफी अच्छा" है, और आपको तनख्वाह मिलती है। यह गोल्डन गेट ब्रिज का निर्माण करने के लिए आपके लिए खराब इंजीनियरिंग होगी, जो परिमाण के कई आदेशों द्वारा डिज़ाइन स्पेक्स और बजट दोनों को पार कर जाएगा। आप आमतौर पर लागत overruns खाने और समय overages के लिए दंड का भुगतान। यह आपके लिए खराब इंजीनियरिंग भी होगा कि 5 बड़े पुरुषों के वजन के लिए रोप ब्रिज का निर्माण किया जाए, भले ही इसकी लागत समय और सामग्री में केवल 1000 डॉलर हो; आपको अच्छी ग्राहक समीक्षा और प्रशंसापत्र नहीं मिलते हैं,
सॉफ्टवेयर में वापस, कहते हैं कि आपके पास एक क्लाइंट है जिसे आने वाली फाइलों को पचाने और सिस्टम में जानकारी डालने के लिए फाइल-प्रोसेसिंग सिस्टम की जरूरत है। वे चाहते हैं कि यह एक हफ्ते में हो जाए और इसे एक दिन में पांच फाइलें संभालनी पड़े, करीब 10 एमबी डेटा, 'कारण है कि वर्तमान में मिलने वाला सारा ट्रैफिक। आपके कीमती सिद्धांत काफी हद तक खिड़की से बाहर जाते हैं; आपका कार्य एक उत्पाद का निर्माण करना है जो एक सप्ताह में उन चश्मे को पूरा करता है, क्योंकि ऐसा करने से आप ग्राहक के लागत बजट को भी पूरा करते हैं (क्योंकि सामग्री इस आकार के सॉफ़्टवेयर अनुबंध के लिए बाल्टी में एक बूंद होती है)। दो बार, दस गुना लाभ के लिए खर्च करना, एक विकल्प नहीं है, लेकिन सबसे अधिक संभावना है, न तो एक दिन में बनाया गया एक कार्यक्रम है जो केवल आधे थ्रूपुट को संभाल सकता है, जिसमें दो प्रतियां चल रही हैं।
अगर आपको लगता है कि यह एक फ्रिंज मामला है, तो आप गलत हैं; यह अधिकांश इन-हाउसर्स का दैनिक वातावरण है। कारण है ROI; इस प्रारंभिक कार्यक्रम में बहुत खर्च नहीं होता है और इस प्रकार यह बहुत जल्दी अपने लिए भुगतान करेगा। जब अंत उपयोगकर्ताओं को इसे और अधिक करने या तेजी से जाने की आवश्यकता होती है, तो कोड को फिर से जोड़ा और बढ़ाया जा सकता है।
यह प्रोग्रामिंग की वर्तमान स्थिति के पीछे मुख्य कारण है; कंप्यूटिंग के पूरे इतिहास से पैदा हुई धारणा यह है कि एक कार्यक्रम कभी स्थिर नहीं होता है। इसे हमेशा उन्नत करने की आवश्यकता होगी और इसे अंततः बदल दिया जाएगा। समानांतर में, कंप्यूटर के निरंतर सुधार, जिस पर प्रोग्राम चलते हैं, दोनों सैद्धांतिक दक्षता पर ध्यान कम करने की अनुमति देते हैं, और स्केलेबिलिटी और समानांतरीकरण पर ध्यान बढ़ाते हैं (एक एल्गोरिथ्म जो एन-स्क्वैयर समय में चलता है, लेकिन एन कोर पर चलने के लिए समानांतर किया जा सकता है) रैखिक दिखाई देते हैं, और अक्सर अधिक हार्डवेयर की लागत डेवलपर्स की तुलना में सस्ता होती है ताकि अधिक कुशल समाधान तैयार किया जा सके)।
उसके शीर्ष पर, बहुत सरल सिद्धांत है कि डेवलपर कोड की प्रत्येक पंक्ति कुछ और है जो गलत हो सकती है। एक डेवलपर जितना कम लिखता है, उतनी ही कम संभावना है कि वह जो लिखता है उसमें कोई समस्या है। यह किसी की "बग दर" की आलोचना नहीं है; यह तथ्य का एक सरल कथन है। आप जान सकते हैं कि 5 भाषाओं में पीछे और आगे की तरफ एक मर्जसेट कैसे लिखा जाता है, लेकिन यदि आप कोड की एक पंक्ति में सिर्फ एक पहचानकर्ता को ही उंगली करते हैं, तो संपूर्ण सॉर्ट काम नहीं करता है, और यदि संकलक इसे पकड़ नहीं पाता है तो यह आपको ले जा सकता है। इसे डिबग करने के लिए घंटे। कंट्रास्ट कि सूची के साथ। (); यह वहाँ है, यह सामान्य मामले में कुशल है, और, यहाँ सबसे अच्छी बात है, यह पहले से ही काम करता है।
इसलिए, आधुनिक प्लेटफ़ॉर्म की कई विशेषताएं और आधुनिक डिज़ाइन के तरीकों के सिद्धांतों को ध्यान में रखते हुए बनाया गया है:
- OOP - किसी ऑब्जेक्ट में संबंधित डेटा और लॉजिक का निर्माण, और जहाँ भी उस ऑब्जेक्ट का कॉन्सेप्ट मान्य है, तो वह ऑब्जेक्ट है, या एक अधिक महत्वपूर्ण व्युत्पत्ति है।
- पूर्व-निर्मित टेम्प्लेट - एक अच्छा 60% या अधिक कोड वाक्य-निर्माण संबंधी क्रॉफ़्ट है और कुछ स्क्रीन को दिखाने के लिए प्रोग्राम प्राप्त करने की मूल बातें। इस कोड को मानकीकृत और ऑटो-जेनरेट करके, आप उत्पादकता में वृद्धि की अनुमति देते हुए डेवलपर के कार्यभार को आधा कर देते हैं।
- एल्गोरिदम और डेटा संरचनाओं के पुस्तकालय - ऊपर के रूप में, आप जानते होंगे कि कैसे एक स्टैक, क्यू, क्विकसॉर्ट, आदि लिखना है, लेकिन आपको क्यों करना है, जब कोड का एक पुस्तकालय होता है जिसमें यह सब बनाया गया है? आप IIS या Apache को फिर से नहीं लिखेंगे क्योंकि आपको एक वेबसाइट की आवश्यकता है, इसलिए कई शानदार कार्यान्वयन उपलब्ध होने पर क्विकॉर्ट एल्गोरिथ्म या लाल-काले पेड़ की वस्तु क्यों लागू करें?
- धाराप्रवाह इंटरफेस - समान लाइनों के साथ, आपके पास एक एल्गोरिथ्म हो सकता है जो रिकॉर्ड को फ़िल्टर और सॉर्ट करता है। यह तेज़ है, लेकिन यह बहुत पठनीय नहीं है; यह आपके जूनियर डेवलपर को इसे समझने में एक दिन लगेगा, अकेले ही रिकॉर्ड ऑब्जेक्ट में एक अतिरिक्त फ़ील्ड पर सॉर्ट करने के लिए आवश्यक सर्जिकल परिवर्तन करने दें। इसके बजाय, लाइनेक जैसी लाइब्रेरी बहुत बदसूरत की जगह लेती हैं, अक्सर फ़िल्टर या सॉर्ट किए गए ऑब्जेक्ट्स में ऑब्जेक्ट्स की एक सूची को चालू करने के लिए कॉन्फ़िगर करने योग्य विधि कॉल की एक या दो पंक्तियों के साथ भंगुर कोड।