2009-10-21 7 views
5

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

रान्डेल हाइड The Fallacy of Premature Optimization में बताते हैं, होरे बोली के आसपास गलतफहमी के बहुत देखते हैं:

हम छोटी क्षमता के बारे में भूल जाना चाहिए, का कहना है कि समय की 97%: समय से पहले अनुकूलन की जड़ है सभी बुराई

विशेष रूप से, हालांकि मशीनें इन दिनों की तुलना में होरे के दिनों में तुलना की जाती हैं, इसका मतलब यह नहीं है कि "अनुकूलन से बचा जाना चाहिए।" तो क्या मेरे सम्मानित सहयोगी के पास एक बिंदु है जब वह सुझाव देता है कि हमें मामूली गति के बक्से पर विकसित होना चाहिए? विचार यह है कि धीमी बॉक्स पर प्रदर्शन की बाधाएं अधिक परेशान होती हैं और इसलिए उन्हें ध्यान देने की संभावना है।

+5

यदि वास्तव में यह खुला रहता है तो इसे वास्तव में समुदाय विकी होने की आवश्यकता है। और रिकॉर्ड के लिए, धीमी मशीन पर विकास करना आपके काम से नफरत करने का एक शानदार तरीका है। :) हालांकि, एक धीमी मशीन पर परीक्षण एक उचित मध्यम जमीन हो सकता है। –

+0

होरे द्वारा उद्धरण नहीं। –

उत्तर

10

धीरे कंप्यूटर आप अपने प्रदर्शन की समस्याओं को खोजने में मदद करने के लिए नहीं जा रहे हैं।

अपने परीक्षण डाटा किसी तालिका में केवल कुछ सौ पंक्तियों है अपने db यह सब कैश होगा और आप बुरी तरह से लिखा प्रश्नों या बुरा तालिका/सूचकांक डिजाइन कभी नहीं मिलेगा। यदि आपका सर्वर एप्लिकेशन बहु-थ्रेडेड सर्वर नहीं है, तो आप इसे तब तक नहीं ढूंढ पाएंगे जब तक कि आप 500 उपयोगकर्ताओं के साथ इसका परीक्षण न करें। या यदि ऐप बैंडविड्थ पर बाधा डालता है।

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

यदि प्रदर्शन वास्तव में महत्वपूर्ण है (वास्तविक समय? मिलीसेकंड-लेन-देन?) तो आपको वैज्ञानिक रूप से साबित करने के लिए मानक और साबित करने के लिए बेंचमार्क और टूल के सेट को डिज़ाइन और कार्यान्वित करने की आवश्यकता है कि आपके परिवर्तन इसे तेज़ी से बना रहे हैं। प्रदर्शन को प्रभावित करने वाले वहां बहुत सारे चर हैं।

प्लस वहाँ क्लासिक प्रोग्रामर बहाना वे बाहर लाना होगा है - '। लेकिन यह धीमी गति से चल रहा है, क्योंकि हम जानबूझकर धीमी गति से कंप्यूटर उठाया है, यह बहुत तेजी से चलेंगे जब हम तैनात'

अपने सहकर्मी अपने महत्वपूर्ण सोचता है तो उसे एक धीमी गति से कंप्यूटर देने के लिए और उसे 'प्रदर्शन' के आरोप में डाल दिया :-)

+1

, मेरे पास SO पर जाने का समय कब होगा;) – JoelFan

21

इस समुदाय विकी के बाद से यह बहुत व्यक्तिपरक है और किसी "सही" जवाब होना चाहिए।

कहा कि, आप सबसे तेजी से आप के लिए उपलब्ध मशीन पर विकसित करनी चाहिए। हाँ, कुछ भी धीमी जलन लागू करने और मंदी को ठीक करने के लिए प्रोत्साहित करते हैं, लेकिन केवल वही एक बहुत ही उच्च कीमत पर:

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

संकलित करने के लिए एक कार्यक्रम के लिए प्रतीक्षा कर के रूप में आप विचलित हो अपने सिर से बाहर ड्रॉप करने कीड़े, संभावित मुद्दों, और सुधारों के ढेर अनुमति देता है। लोड करने के लिए एक संवाद की प्रतीक्षा कर रहा है, या एक प्रश्न पूछने के लिए आप समान रूप से interrupts।

यहां तक ​​कि अगर आपको उसकी उपेक्षा, आप अभी भी बाद में बयान की सच्चाई मिल गया है - जल्दी अनुकूलन खुद के दौर हलकों में पीछा करते हुए आप छोड़ देंगे, कोड है कि पहले से ही काम करता है को तोड़ने, और (अक्सर गरीब सटीकता के साथ) अनुमान लगा जहां के बारे में चीजें नीचे गिर सकती है। अपने कोड को पहले स्थान पर सही तरीके से डिज़ाइन करें, और आप ऑप्टिमाइज़ेशन के बारे में भूल सकते हैं जब तक कि उसे थोड़ा सा निपटने का मौका न हो, जिस बिंदु पर कोई आवश्यक अनुकूलन स्पष्ट होगा।

+1

यह मेरी राय भी है। प्रतिस्पर्धी होने के लिए विकास की गति अक्सर महत्वपूर्ण होती है। हालांकि मैं जोड़ना चाहता हूं कि धीमी मशीनों पर * परीक्षण * चीजों के लिए यह अच्छा हो सकता है, खासकर अगर कोड यूजर इंटरफेस है। – liori

+0

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

-1

प्रसव के समय पर निर्भर करता है। यदि आप 12 महीने के डिलीवरी चक्र में हैं तो आपको सभ्य गति वाले बॉक्स पर विकसित होना चाहिए क्योंकि अब से आपके ग्राहकों के 12 महीने में "औसत" बॉक्स की तुलना में बेहतर "औसत" बॉक्स होंगे।

अपने विकास चक्र के रूप में दृष्टिकोण "आज", अपने विकास मशीनों अपने क्लाइंट के बक्से की वर्तमान "औसत" गति संपर्क करना चाहिए।

+0

किसी को असली दुनिया के लिए प्रोग्रामिंग पसंद नहीं है? हां, विकास के लिए हमेशा सबसे खराब खराब बॉक्स होना अच्छा लगेगा। यह अच्छा नहीं है अगर आपके ग्राहक इसे समाप्त करते समय ऐप नहीं चला सकते हैं। धीमी डेवलपर बक्से के बिना – jmucchiello

3

मुझे लगता है कि यह आपके द्वारा किए जा रहे कार्यों और लक्षित दर्शकों के आधार पर निर्भर करेगा।

आप तय हार्डवेयर (जैसे कि, गेम कंसोल) तो उपकरण (कम से कम परीक्षण उपकरण) कि समान या क्या तुम पर तैनात होगा रूप में ही है का उपयोग के लिए सॉफ्टवेयर लिख रहे हैं।

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

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

0

मैं आम तौर पर सबसे तेज़ मशीन पर विकसित करता हूं जिसे मैं अपना हाथ प्राप्त कर सकता हूं।

अधिकांश समय मैं एक डीबग बिल्ड, जो काफी पहले से ही धीमी है चल रहा हूँ।

1
कॉड के प्यार के लिए

, प्रोफ़ाइलिंग टूल, नहीं धीमी गति से विकास मशीनों का उपयोग करें!

+0

अच्छा! http://en.wikipedia.org/wiki/Edgar_F._Codd –

1

अनुकूलन से बचा जाना चाहिए, क्या हमें Vista नहीं मिला? : P

लेकिन सभी गंभीरता, इसकी हमेशा तालमेल के एक मामले में। महत्वपूर्ण सवाल अपने आप से पूछना करने के लिए

क्या मंच अपने अंतिम उपयोगकर्ताओं का उपयोग करेंगे? क्या मैं चक्र छोड़ सकता हूं? अगर मैं करता तो क्या होगा?

मैं सबसे के साथ सहमत हैं कि प्रारंभिक विकास सबसे तेजी से या सबसे कुशल (नहीं एक ही जरूरी) मशीन आप के लिए उपलब्ध पर किया जाना चाहिए। लेकिन परीक्षण चलाने के लिए, इसे अपने लक्षित प्लेटफॉर्म पर चलाएं, और अक्सर और जल्दी परीक्षण करें।

2

आप हार्डवेयर कि अंतिम परीक्षण और उत्पादन वातावरण के करीब है पर प्रोग्रामिंग रहे हैं, तो आप कम बुरा आश्चर्य देखते हैं कि लगता है जब यह कोड जारी करने के लिए समय आता है करते हैं।

मैंने देखा है पर्याप्त प्रोग्रामर पक्ष स्वाइप गंभीर से मिलता है, लेकिन अप्रत्याशित समस्याओं अपनी मशीनों रास्ता उनके प्रयोक्ताओं की उनकी सबसे अधिक तेजी से किया जा रहा है की वजह से। लेकिन, मैंने डेटा के साथ एक ही समस्या देखी है। कोड को एक छोटे से डेटासेट पर परीक्षण किया जाता है और फिर बड़े पैमाने पर "crumbles" का परीक्षण किया जाता है।

विकास और उपयोग के वातावरण में किसी भी मतभेद अप्रत्याशित समस्याओं का स्रोत हो सकता है।

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

अपने प्रोग्रामर को क्यों अपमानित करें क्योंकि आप किसी संभावित समस्या को खोने के बारे में चिंतित हैं? यह एक विकास विकास रणनीति नहीं है।

पॉल।

0

मुझे लगता है कि यह एक ध्वनि अवधारणा है (लेकिन शायद क्योंकि यह मेरे लिए काम करता है)।

यदि मेरा डेवलपर वर्कस्टेशन बहुत तेज़ है तो मुझे लगता है कि मैं विचारों को पर्याप्त रूप से पर्याप्त रूप से नहीं सोचता क्योंकि सॉफ़्टवेयर छवि को पुन: उत्पन्न करने या इसे लक्ष्य में डाउनलोड करने में थोड़ा समय-जुर्माना है। मैं कहूंगा कि कम से कम आधा मेरे डाउनलोड अनावश्यक थे क्योंकि मुझे बस कुछ याद आया जो मैं कोड को डीबग करने से पहले ठीक से चूक गया था।

लक्ष्य मशीन में एक थ्रॉटल प्रोसेसर भी हो सकता है। यदि - एक एम्बेडेड एमसीयू पर - आपके पास प्रति सेकंड आधा फ्लैश, रैम और घड़ी चक्र हैं, तो डेवलपर्स उनके कोड को डिज़ाइन करते समय बहुत अधिक सावधान रहेंगे। मैंने एक बार डेटा क्षेत्र में व्यक्तिगत रिकॉर्ड की लंबाई के लिए बाइट वेरिएबल्स का सुझाव दिया (रैम में नहीं बल्कि एक सीरियल एप्रॉम में) और जवाब प्राप्त हुआ "हमें कठोर होने की आवश्यकता नहीं है।" कुछ महीने बाद उन्होंने रैम छत (128 केआईबी) मारा। मेरा प्रतिबिंब यह था कि इस ऐप के लिए 256 बाइट्स से बड़े रिकॉर्ड कभी भी नहीं होंगे क्योंकि उन्हें कॉपी करने के लिए कोई रैम नहीं था।

सर्वर अनुप्रयोगों के लिए मुझे लगता है कि परीक्षण करने के लिए एक (बहुत) कम प्रदर्शन करने वाला हार्डवेयर होना एक अच्छा विचार होगा। सोलह (या अधिक) के बजाय दो या चार कोर। 1.6 गीगाहर्ट्ज istdo 2.8। सूची चलती जाती है। आमतौर पर एक सर्वर होता है - इस तथ्य के कारण कि हर कोई इससे बात करता है - सिस्टम आर्किटेक्चर में एक बाधा। और इससे पहले कि आप इसके लिए (सर्वर) अनुप्रयोग विकसित करना शुरू करें।

संबंधित मुद्दे