आप या आपकी कंपनी की कोशिश और कोड का पुन: उपयोग करते हैं? यदि ऐसा है तो स्तर, यानी निम्न स्तर एपीआई, घटक या साझा व्यवसाय तर्क? आप या आपकी कंपनी कोड का पुन: उपयोग कैसे करें?
मैं यूबेर कोड पुन: उपयोग के साथ कोडबेस में काम करता था, लेकिन इसे बनाए रखना मुश्किल था क्योंकि पुन: उपयोग कोड अस्थिर था। यह उन तरीकों से परिवर्तन और बहिष्कार को डिजाइन करने के लिए प्रवण था जो इसका उपयोग कर सब कुछ के लिए तैयार थे। कि इससे पहले कि मैं कोई कोड पुन: उपयोग जहां वरिष्ठ नागरिकों वास्तव में भी एप्लिकेशन-विशिष्ट पासवर्ड का पुन: उपयोग के तरीके के रूप कॉपी करने और चिपकाने के लिए प्रोत्साहित के साथ एक codebase में काम किया है, इसलिए मैं दो हाथ पैरों को देखने के लिए मिला है और मुझे लगता है कि यह जरूरी नहीं है कहना है चरम पर ले जाने पर दूसरे की तुलना में बेहतर।
और मैं प्रोग्रामर के एक uber नीचे-ऊपर तरह हुआ करता था। आप मुझसे कुछ विशिष्ट बनाने के लिए कहते हैं और मैं सामान्यीकृत उपकरणों का निर्माण समाप्त करता हूं। फिर उन उपकरणों का उपयोग करके, मैं अधिक जटिल सामान्यीकृत टूल बनाते हैं, फिर निचले स्तर के उपकरणों के लिए डिज़ाइन आवश्यकताओं को व्यक्त करने के लिए डीआईपी अवशेषों का निर्माण शुरू करते हैं, फिर मैं और भी जटिल उपकरण बना देता हूं और दोहराता हूं, और किसी बिंदु पर मैं कोड लिखना शुरू करता हूं जो वास्तव में करता है आप मुझसे क्या कराना चाहते हैं। और जैसा कि लगता है कि काउंटर-उत्पादक के रूप में, मैं उस पर बहुत तेज़ था और जटिल उत्पादों को उन तरीकों से भेज सकता था जो वास्तव में लोगों को हैरान करते थे।
समस्या, साल महीनों में रखरखाव था! इन सामान्यीकृत पुस्तकालयों की परतों और परतों के निर्माण के बाद और उनमें से नरक का पुन: उपयोग करने के बाद, प्रत्येक व्यक्ति मुझसे जो कुछ करने के लिए कहा उससे ज्यादा बड़ा उद्देश्य देना चाहता था। प्रत्येक परत दुनिया की भूख की जरूरतों को हल करना चाहता था। तो प्रत्येक व्यक्ति बहुत महत्वाकांक्षी था: एक गणित पुस्तकालय जो अद्भुत होना और दुनिया की भूख की जरूरतों को हल करना चाहता है। फिर गणित पुस्तकालय की तरह एक ज्यामिति पुस्तकालय की तरह बनाया गया जो आश्चर्यजनक होना चाहता है और दुनिया की भूख की जरूरतों को हल करना चाहता है। जब आप किसी उत्पाद को शिप करने का प्रयास कर रहे हैं तो आप कुछ गलत जानते हैं लेकिन आपका दिमाग इस बात पर निर्भर है कि आपकी उबेर-सामान्यीकृत ज्यामिति लाइब्रेरी कितनी अच्छी तरह से रेंडरिंग और मॉडलिंग के लिए काम करती है जब आप एनीमेशन पर काम करना चाहते हैं क्योंकि एनीमेशन कोड जो आप काम कर रहे हैं कुछ नए ज्यामिति कार्यों की जरूरत है।
संतुलन प्रत्येक व्यक्ति की आवश्यकताओं
मैं इन uber सामान्यीकृत पुस्तकालयों है कि मैं हर एक टीम के सदस्य की जरूरतों से ग्रस्त हो जाते हैं पड़ा को डिजाइन करने में पाया, और मैं जानने के लिए कैसे raytracing, कैसा काम करते तरल पदार्थ की गतिशीलता काम किया था , जाल इंजन कैसे काम करता है, कैसे उलटा किनेमेटिक्स काम करता है, कैरेक्टर एनीमेशन कैसे काम करता है इत्यादि आदि।मुझे सीखना था कि टीम पर हर किसी के काम को कितना करना है क्योंकि मैं इन कोडर सामान्यीकृत पुस्तकालयों के डिजाइन में अपनी सभी विशिष्ट जरूरतों को संतुलित कर रहा था, मैंने सभी कोड पुन: उपयोग से डिजाइन समझौता के एक कसौटी संतुलन अधिनियम को चलाने के दौरान पीछे छोड़ा था बॉब के लिए चीजों को बेहतर बनाने के लिए जो पुस्तकालयों में से एक का उपयोग कर रहे हैं, लेकिन जॉन को बहुत ज्यादा चोट पहुंचाने के बिना जो भौतिकी पर काम कर रहे हैं, लेकिन इसका उपयोग भी कर रहे हैं, लेकिन लाइब्रेरी के डिजाइन को जटिल बनाने के लिए उन्हें बहुत खुश करने के लिए)।
यह उस बिंदु पर पहुंचा जहां मैं पॉलिसी कक्षाओं के साथ बाध्यकारी बक्से को पैरामीट्रिज करने की कोशिश कर रहा था ताकि उन्हें या तो एक व्यक्ति के रूप में या आधा आकार के रूप में संग्रहीत किया जा सके या न्यूनतम/अधिकतम विस्तार किसी और के रूप में, और कार्यान्वयन वास्तव में तेजी से गड़बड़ कर रहा था जो हर किसी की जरूरतों को बरकरार रखने की कोशिश कर रहा था।
द्वारा डिजाइन समिति
और क्योंकि प्रत्येक परत की जरूरत है (बहुत व्यापक की तुलना में हम वास्तव में जरूरत) की एक विस्तृत श्रृंखला की सेवा के लिए कोशिश कर रहा था, वे, डिजाइन में परिवर्तन की आवश्यकता के लिए कभी कभी द्वारा कई कारणों से पाया समिति अनुरोध डिजाइन (जो आम तौर पर सकल होते हैं)। और फिर उन डिज़ाइन परिवर्तन ऊपर की ओर बढ़ जाएंगे और इसका उपयोग करके सभी उच्च-स्तरीय कोड को प्रभावित करेंगे, और इस तरह के कोड का रखरखाव वास्तविक पिटा बनना शुरू हो गया है।
मुझे लगता है कि आप संभावित रूप से एक समान दिमागी टीम में अधिक कोड साझा कर सकते हैं। हमारा बिल्कुल समान नहीं था। ये असली नाम नहीं हैं लेकिन मेरे यहां बिल होगा जो एक उच्च स्तरीय जीयूआई प्रोग्रामर और स्क्रिप्टर है जो अच्छे उपयोगकर्ता-अंत डिज़ाइन बनाता है लेकिन कई हैक्स के साथ संदिग्ध कोड बनाता है, लेकिन यह उस प्रकार के कोड के लिए ठीक है। मुझे यहां बॉब मिला जो एक पुराना टाइमर है जो पंच कार्ड युग के बाद प्रोग्रामिंग कर रहा है, जो उन में गेटोस के साथ 10,000 लाइन फ़ंक्शन लिखना पसंद करता है और अभी भी ऑब्जेक्ट उन्मुख प्रोग्रामिंग का बिंदु नहीं मिलता है। मुझे यहां जो मिला है जो गणितीय जादूगर की तरह है लेकिन कोड लिखता है और कोई भी समझ नहीं सकता है और हमेशा उन सुझावों को बना सकता है जो गणितीय रूप से गठबंधन हैं लेकिन एक कम्प्यूटेशनल दृष्टिकोण से आवश्यक नहीं हैं। तब मुझे यहां माइक मिला जो बाहरी अंतरिक्ष में है जो चाहता है कि हम सॉफ्टवेयर को iPhones पर पोर्ट करें और सोचें कि हमें सभी को ऐप्पल के सम्मेलनों और इंजीनियरिंग मानकों का पालन करना चाहिए।
एक सभ्य डिजाइन के साथ आने के दौरान यहां हर किसी की जरूरतों को पूरा करने की कोशिश कर रहा था, शायद पीछे की ओर, असंभव में। और हर किसी के एक दूसरे के कोड को साझा करने की कोशिश में, मुझे लगता है कि हम काउंटर-उत्पादक बन गए हैं। प्रत्येक व्यक्ति एक क्षेत्र में सक्षम था लेकिन डिजाइन और मानकों के साथ आने की कोशिश कर रहा था, जो सभी खुश हैं और सभी को अस्थिरता का कारण बनता है और हर किसी को धीमा कर देता है।
व्यापार गत
तो इन दिनों मैंने पाया संतुलन सबसे कम स्तर के चीजों के लिए कोड पुन: उपयोग से बचना है। मैं मध्य-स्तर से एक टॉप-डाउन दृष्टिकोण का उपयोग करता हूं, शायद (कुछ भी जो आपने मुझसे करने के लिए कहा था उससे तलाकशुदा), और कुछ स्वतंत्र पुस्तकालय बनाएं जहां मैं अभी भी थोड़े समय में कर सकता हूं, लेकिन लाइब्रेरी मिनी-लिब का उत्पादन करने का इरादा नहीं रखती है जो दुनिया की भूख की जरूरतों को हल करने का प्रयास करती है। आम तौर पर निम्न पुस्तकालय निम्न-स्तर वाले लोगों की तुलना में थोड़ा अधिक संकीर्ण होते हैं (उदा: एक भौतिकी लाइब्रेरी एक सामान्यीकृत ज्यामिति-चौराहे लाइब्रेरी के विपरीत)।
वाईएमएमवी, लेकिन अगर कुछ भी मैंने पिछले कुछ वर्षों में संभवतः कठिन तरीके से सीखा है, तो यह है कि एक संतुलित कार्य हो सकता है और एक बिंदु जहां हम जानबूझकर कुछ ग्रैनुलर पर एक टीम सेटिंग में कोड पुन: उपयोग से बचना चाहते हैं स्तर, डीकॉप्लिंग के पक्ष में निम्नतम स्तर के कोड के लिए कुछ सामान्यता को छोड़कर, लचीला कोड होने के साथ हम सामान्यीकृत आवश्यकताओं के बजाय अधिक विशिष्ट सेवा प्रदान करने के लिए बेहतर आकार दे सकते हैं, और आगे भी - यहां तक कि बस हर किसी को चीजों को करने की स्वतंत्रता भी देना अपना रास्तालेकिन निश्चित रूप से यह सब अभी भी एक बहुत ही पुन: प्रयोज्य, सामान्यीकृत लाइब्रेरी का निर्माण करने के उद्देश्य से है, लेकिन अंतर यह है कि लाइब्रेरी किशोरों के सामान्यीकृत पुस्तकालयों में विघटन नहीं कर सकती है, क्योंकि मैंने पाया कि एक निश्चित दहलीज पार करना और बहुत से लोगों को बनाने की कोशिश करना किशोर, सामान्यीकृत पुस्तकालय लंबे समय तक वास्तव में एक अत्यंत काउंटर-उत्पादक प्रयास बनने लगते हैं - अल्प अवधि में नहीं, बल्कि लंबी अवधि और चीजों की व्यापक योजना में।
आप कोड का एक टुकड़ा जो संभवतः एक मध्यम आकार संगठन कैसे आप कंपनी के अन्य सदस्यों को सूचित करने के बारे में जाना होगा कि इस lib/api/आदि अस्तित्व में और लाभकारी हो सकता है पर साझा किया जा सकता है है, तो ?
मैं वास्तव में इन दिनों अधिक अनिच्छुक हूँ और इसे और अधिक क्षम्य अगर सहयोगियों कुछ बेमानी काम करते हैं, क्योंकि मुझे यकीन है कि कोड कुछ काफी उपयोगी और गैर तुच्छ करता है और यह भी सच में अच्छी तरह से परीक्षण किया और बनाया गया है बनाना चाहते हैं लगता है इससे पहले कि मैं इसे लोगों के साथ साझा करने की कोशिश करता हूं और इसके लिए निर्भरताओं का एक समूह जमा करता हूं। डिजाइन को उस बिंदु से किसी भी बदलाव की आवश्यकता होने के बहुत कम कारण होने चाहिए, यदि मैं इसे बाकी टीम के साथ साझा करता हूं।
अन्यथा यह वास्तव में बचाता है उससे अधिक दुःख पैदा कर सकता है।
मैं अनावश्यकता (कोड या प्रयासों में) के असहिष्णु होने के लिए प्रयुक्त होता था क्योंकि यह उस उत्पाद को अनुवाद करने के लिए दिखाई देता था जो स्मृति उपयोग में बहुत छोटी और विस्फोटक था। लेकिन मैंने मुख्य समस्या के रूप में अनावश्यकता पर ज़ूम किया, जब वास्तव में वास्तविक समस्या खराब गुणवत्ता थी, जल्दी से लिखित कोड, और ठोस परीक्षण की कमी थी। अच्छी तरह से परीक्षण, भरोसेमंद, कुशल कोड उस समस्या को लगभग एक डिग्री के बराबर नहीं पीड़ित करेगा, भले ही कुछ लोग डुप्लिकेट करें, कहें, कुछ गणित यहां और वहां कार्य करते हैं।
सामान्य बातों में से एक चीजों को देखने और याद रखने के लिए कि मैं उस समय नहीं था, जब हम एक बहुत ही ठोस तृतीय पक्ष लाइब्रेरी का उपयोग करते हैं तो हम कुछ अनावश्यकता को कैसे याद नहीं करते हैं। संभावना है कि आप लोग किसी तृतीय पक्ष लाइब्रेरी या दो का उपयोग करते हैं जिसमें आपकी टीम क्या कर रही है, उसके साथ कुछ अनावश्यक काम है। लेकिन हमें उन मामलों में कोई फर्क नहीं पड़ता क्योंकि तीसरी पार्टी लाइब्रेरी महान और अच्छी तरह से परीक्षण की जाती है। मैं सलाह देता हूं कि उसी मानसिकता को अपने आंतरिक कोड पर लागू करें। लक्ष्य कुछ भयानक और अच्छी तरह से परीक्षण करने के लिए होना चाहिए, यहां पर और वहां कुछ अनावश्यकता पर झगड़ा न करें क्योंकि मैंने गलती से बहुत पहले किया था।
इसलिए इन दिनों मैंने परीक्षण के अभाव की ओर मेरी असहिष्णुता को स्थानांतरित कर दिया है। अनावश्यक प्रयासों से परेशान होने के बजाय, मुझे अन्य लोगों की इकाई और एकीकरण परीक्षण की कमी से परेशान होने के लिए यह और अधिक उत्पादक लगता है! :- डी
"लेख का शीर्षक जिसका आप जिक्र कर रहे हैं ..." मैं विशेष रूप से कुछ भी नहीं कह रहा था, क्या यह कुछ घंटी बजती है जो आपने पहले पढ़ी है? कार्ल – Karl
Google में दूसरा परिणाम आपने देखा। "आंतरिक कोड पुन: उपयोग खतरनाक माना जाता है"। यह एक श्वेतपत्र है जिसे मैंने थोड़ी देर पहले पढ़ा था। –