उपभोक्ता ऐप्स में खराब प्रदर्शन का कारण क्या है? [बन्द है]


32

माय कॉमकास्ट डीवीआर को हर रिमोट कंट्रोल के की-बोर्ड का जवाब देने में कम से कम तीन सेकंड का समय लगता है, जिससे टेलीविजन को एक निराशाजनक बटन-मैशिंग अनुभव का सरल कार्य हो जाता है। मेरा iPhone पाठ संदेश प्रदर्शित करने के लिए कम से कम पंद्रह सेकंड लेता है और उस समय क्रैश करता है जब मैं iPod ऐप लाने की कोशिश करता हूं; बस ईमेल प्राप्त करने और पढ़ने में अक्सर एक मिनट से अधिक समय लगता है। यहां तक ​​कि मेरी कार में नाविक के पास मैसी और अनुत्तरदायी नियंत्रण हैं, अक्सर अगर मैं उन्हें कुछ सेकंड से कम कर देता हूं, तो लगातार इनपुट्स को निगल जाता है।

ये सभी फिक्स्ड-हार्डवेयर एंड-कंज्यूमर इक्विपमेंट हैं, जिनके लिए प्रयोज्यता सर्वोपरि होनी चाहिए, और फिर भी वे सभी बुनियादी जवाबदेही और विलंबता में विफल हो जाते हैं। उनका सॉफ्टवेयर अभी बहुत धीमा है

इसके पीछे क्या है? यह एक तकनीकी समस्या है, या एक सामाजिक है? कौन या क्या जिम्मेदार है?

क्या ऐसा इसलिए है क्योंकि ये सभी मूल कोड के बजाय प्रबंधित, कचरा एकत्र करने वाली भाषाओं में लिखे गए थे? क्या यह व्यक्तिगत प्रोग्रामर हैं जिन्होंने इन उपकरणों के लिए सॉफ्टवेयर लिखा है? इन सभी मामलों में ऐप डेवलपर्स को ठीक से पता था कि वे किस हार्डवेयर प्लेटफ़ॉर्म को लक्षित कर रहे हैं और उसकी क्षमताएं क्या हैं; क्या उन्होंने इसे ध्यान में नहीं रखा? क्या यह वह आदमी है जो दोहराता है "अनुकूलन सभी बुराई की जड़ है," क्या उसने उन्हें भटका दिया? क्या यह "ओह यह सिर्फ एक अतिरिक्त 100ms" की मानसिकता थी जब तक कि उन सभी मिलिसेकंड मिनटों तक नहीं जुड़ते? क्या पहली बार इन उत्पादों को खरीदने के लिए यह मेरी गलती है?

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

तो, इन उत्पादों के लिए किस बिंदु पर चीजें गलत हुईं? प्रोग्रामर के रूप में हम अपने ग्राहकों को इस दर्द से बचने के लिए क्या कर सकते हैं?


4
आप मान रहे हैं कि चीजें गलत हो गईं। किसी बिंदु पर किसी ने कहा "यह काफी अच्छा है" और अपने उत्पाद को भेज दिया। यदि अंतिम उपयोगकर्ता इसे स्वीकार करते हैं, तो ठीक है, यह वहाँ है। (यह कहना सही नहीं है, लेकिन अभी इसे जहाज के बीच एक संतुलन बनाना होगा और इसे कभी भी जहाज नहीं करना होगा।)
माइकल टोड

3
@ मिचेल: यह "इन उपकरणों को खरीदने के लिए मेरी गलती" के साथ संरेखित करने के लिए लगता है, या अधिक आम तौर पर, "इस स्तर को स्वीकार करने के लिए उपभोक्ताओं के रूप में हमारी गलती।"
क्रैश जुआर

3
@ क्रशवर्क: हाँ, बहुत ज्यादा। अगर हम इसे खरीदना नहीं रखेंगे तो लोग बकवास नहीं बेचेंगे।
मेसन व्हीलर

4
वे आधुनिक, गैर-कचरा-एकत्र निगमों में विकसित किए गए थे।

2
इसके बजाय "क्या यह इसलिए है क्योंकि ये सभी प्रबंधित, कचरा एकत्र करने वाली भाषाओं में लिखे गए थे?" मैंने पढ़ा "क्या यह इसलिए है क्योंकि ये सभी प्रबंधकों द्वारा चुनी गई कचरा भाषाओं में लिखे गए थे?"
कार्लोस कैंपडरो

जवाबों:


27

अच्छा प्रश्न। जो मैं रोज देखता हूं वह यही है।

लोग अच्छे आकार के ऐप पर काम करते हैं। जैसा कि वे काम करते हैं, प्रदर्शन की समस्याएं बग की तरह ही बढ़ती हैं। अंतर यह है - कीड़े "बुरे" हैं - वे रोते हैं "मुझे ढूंढो, और मुझे ठीक करो"। प्रदर्शन की समस्याएं बस वहां बैठती हैं और खराब हो जाती हैं। प्रोग्रामर अक्सर सोचते हैं "ठीक है, मेरे कोड में प्रदर्शन की समस्या नहीं होगी। बल्कि, प्रबंधन को मुझे एक नया / बड़ा / तेज मशीन खरीदने की आवश्यकता है।"

तथ्य यह है, अगर डेवलपर्स समय-समय पर सिर्फ प्रदर्शन समस्याओं के लिए शिकार करते हैं (जो वास्तव में बहुत आसान है ) तो वे बस उन्हें साफ कर सकते हैं।

इसके बजाय, "कला की स्थिति" है:

  1. "एस्क्यूव प्रीमेच्योर ऑप्टिमाइज़ेशन" और 90/10 हू-हौ जैसे एपोरियम्स पर भरोसा करें।
  2. प्रोफाइलिंग के बारे में बहादुरी से बात करें, और कभी-कभी वास्तव में इसे आज़माएं, अक्सर निराशाजनक परिणामों के साथ, जैसा कि आप इसके बारे में सभी SO प्रश्नों में देखते हैं।
  3. अनुभव और ज्ञान के रूप में प्रच्छन्न, अच्छे पुराने अनुमान पर वापस जाएं।

लेकिन वास्तव में, यह नकारात्मक है। सकारात्मक होने के लिए, यह विधि लगभग हर समय काम करती है, और यह सरल नहीं हो सकती है। यहाँ एक विस्तृत उदाहरण है


3
माइक, एक दिन तुम और मैं एक साथ नमूना रूपरेखा पर एक किताब लिखने जा रहे हैं; यह प्रदर्शन प्रोग्रामिंग का "कैथेड्रल एंड द बाज़ार" होगा।
क्रैशवर्क्स

@ क्रशवर्क: यह मजेदार होगा। यदि आप गंभीर हैं, तो मुझे एक पंक्ति में छोड़ दें।
माइक डनलैवी

@ माइक ज़रूर, लेकिन बाद में गर्मियों में, मुझे लगता है - मुझे उन लेखों और पत्रों का एक बड़ा बैकलॉग मिला है, जो पहले से ही GDC, #AltDevBlogADay और मेरे अपने नियोक्ता के लिए बकाया हैं!
क्रैश जुआर

मैं सामान्य रूप से सहमत हूं। लेकिन लोगों द्वारा दुरुपयोग के बावजूद जो कम्प्यूटेशनल जटिलता के बारे में नहीं सोचते हैं, अकेले वास्तविक प्रदर्शन, "समय से पहले अनुकूलन की तरह सभी बुराई की जड़ है" (हर कोई जो कभी भी यह पूर्ण संस्करण पढ़ता है) और 90/10 नियम डॉन "टी मत कहो" का अनुकूलन न करें "लेकिन प्रभावी ढंग से अनुकूलित करें"। आरंभिक कोड से मिलीसेकंड से शेविंग करने से किसी को कुछ नहीं मिलता; हर एक लाइन को परफॉर्मेंट बनाने के इरादे से कोड लिखना

@delnan: पहली बार जब मुझे याद आया कि रैंडम-पॉज़िंग का उपयोग '78 के आसपास है, रेथियॉन मिनी पर "हॉल्ट" और "स्टेप" पैनल बटन के साथ। मुझे याद नहीं है कि ऐसा करने का कोई और तरीका है। इसलिए, जब बड़े-ओ मायने रखते हैं, तो यह मुझे पता चलता है कि लोग वास्तविक सॉफ़्टवेयर में अनुकूलन की चर्चा कैसे कर सकते हैं, पहले बिना कार्यक्रम के ही उन्हें बताएं कि उन्हें कहाँ ध्यान केंद्रित करना है।
माइक डनलैवी

16

यह एक तकनीकी समस्या नहीं है, यह एक विपणन और प्रबंधन समस्या है।

आप इस बिंदु पर अपनी आँखें घुमा रहे होंगे, लेकिन कृपया मेरे साथ सहन करें।

एक कंपनी जो बेचती है वह उनका "उत्पाद" है, और जो लोग परिभाषित करते हैं कि "उत्पाद प्रबंधक" क्या हैं। टेक फर्मों में, बहुत से अन्य लोग उस पर तौलना करते हैं - उपयोगकर्ता अनुभव विशेषज्ञ, यादा यदा। लेकिन अंततः, उपयोगकर्ता को जो मिलना चाहिए उसके लिए चश्मा लिखने के लिए उत्पाद मैनर्स जिम्मेदार हैं।

तो, चलिए आपका Comcast DVR लेते हैं। आदर्श रूप में, चीजें इस तरह से काम करेंगी:

  1. उत्पाद प्रबंधक एक युक्ति में लिखता है, "जब कोई उपयोगकर्ता रिमोट कंट्रोल पर एक बटन दबाता है, और 25 फीट डीवीआर के भीतर होता है, तो डीवीआर को प्रेस को 250 मिलीसेकंड के भीतर जवाब देना चाहिए"।
  2. तकनीकी लोग हार्डवेयर का निर्माण करते हैं, एम्बेडेड सॉफ्टवेयर लिखते हैं, आदि।
  3. क्यूए परीक्षक या तो यह स्वीकार करते हैं कि सिस्टम कल्पना से मिलता है, या इसे तकनीकी टीम में वापस फिक्स करने के लिए उछाल देता है।

बेशक, बहुत सारी चीजें गलत हो सकती हैं:

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

क्या आपने वहां सभी फेकलेस प्रोग्रामर देखे हैं? कोई भी नहीं थे।

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

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


FWIW, मैं ज्यादातर उपभोक्ता उत्पादों के abysmal इंटरफेस के बारे में पूरी तरह से सहमत हूं। मैं यूआई कोड अब लगभग 25 वर्षों से लिख रहा हूं, और मैं लालित्य और सरलता के लिए प्रयास करता हूं। यह वास्तव में एक समस्या है क्योंकि मैं इसके बारे में बहुत सोचता हूं, अब मैं बुरी तरह से डिज़ाइन किए गए उपयोगकर्ता इंटरफ़ेस का पता लगाने में फिसड्डी हूं, इसलिए मेरी गरीब पत्नी हमारे मीडिया केंद्र में अधिकांश डिवाइसों को चलाने की कोशिश करती है।


+1 - अंत उत्पादों के साथ समस्याएं (बग या प्रदर्शन) को प्रोग्रामर पर कभी दोष नहीं दिया जा सकता है। यदि किसी उत्पाद ने आवश्यक परीक्षण के कई स्तरों को पारित किया है, तो प्रोग्रामर ने अपना काम सही ढंग से किया है। यदि कोई उत्पाद परीक्षण पास करता है और उसके साथ समस्याएं हैं तो परीक्षण / विनिर्देश को दोष देना है।
क्वर्की

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

1
@ माइक: काफी सच। मेरी पहली मुख्य भूमिका में, मेरी एक रिपोर्ट थी एक व्यक्ति जो सिर्फ स्टैनफोर्ड से एक MSCS प्राप्त किया था, जिसे केवल "सही" कोड लिखना सिखाया गया था, और मुझे लगा कि मैं एक सरल दो-स्तरीय नेस्टेड लूप की उम्मीद कर रहा था मल्टीटास्किंग कमर्शियल प्रोडक्ट में ऑक्सीजन के लिए अपने घुटनों पर सीपीयू नहीं छोड़ना चाहिए। वहां थोड़ा सा मेंटनेंस किया जाना था। :-)
बॉब मर्फी

11

क्योंकि प्रोग्रामर परफेक्ट नहीं होते हैं।

मैं एम्बेडेड चीजों का एक प्रोग्रामर हूं। मेरा कुछ कोड सही नहीं है। मेरा ज्यादातर एम्बेडेड कोड तेज है।

एक परियोजना के अंत में प्रदर्शन की समस्याओं को ठीक करने के लिए बहुत कठिन है।

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

कभी-कभी आपके एम्बेडेड डिवाइस में एक प्रक्रिया अनुसूचक होता है जो उपयोगकर्ता के रूप में वह नहीं करता है जो आप चाहते हैं। लानत मुश्किल एक एम्बेडेड डेवलपर के रूप में ठीक करने के लिए।

लेयरिंग पर विलंबता के कारण जटिलता लैगिंग का कारण बनती है। आपने सुविधाएँ मांगी। वास्तव में पुराने Nokia की कोशिश करें, पुराने 3210 की तरह। Zippy fast UI। नहीं कई विशेषताएं।

मैं तर्क दे रहा हूं कि डेवलपर्स को कोई होशियार नहीं मिलता है, इसलिए तेजी से हार्डवेयर एक-दूसरे को मारने वाली सुविधाओं को रोकने के लिए सार पर अवशोषित हो जाते हैं। (या अपने iPhone के मामले में)

यूआई प्रदर्शन की आवश्यकता है कि आप डिजाइन प्रगति के रूप में परीक्षण करते हैं।

यदि यह निर्दिष्ट नहीं है, तो डेवलपर को इसकी आदत हो जाएगी। हम सब यही करते हैं। "मेरा बच्चा बदसूरत नहीं है"

और यह जीसी भाषाएं नहीं हैं; एम्बेडेड रीयलटाइम जावा इतना जल्दी है यह डरावना है। (दूसरी ओर एंबेडेड पायथन कुल कुत्ता है)

मैं एक प्रोग्राम को पढ़ता हूं जो डिजिटल आदानों पर UI के रूप में स्विच करता है। अभी भी स्विच को डी-बाउंस करना है, इसलिए वास्तव में तेजी से फ्लिकिंग स्विच काम नहीं करता है, क्योंकि डी-बाउंस एक दो परतें हैं। आदर्श रूप से मैं फर्मवेयर स्टैक के निचले भाग में डी-बाउंस लॉजिक होगा, लेकिन यह नहीं है कि हार्डवेयर कैसे काम करता है।

कुछ डीवीडी प्लेयर सिर्फ एक "इजेक्ट" स्क्रिप्ट को इजेक्ट करने के लिए चलाते हैं। आप डीवीआर ने विकास लागतों को बनाए रखने के लिए यह तरीका अपनाया होगा। फिर आप सीपीयू या रैम पर कंजूसी करते हैं और यह बेकार हो जाता है।


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

3

क्या ऐसा इसलिए है क्योंकि ये सभी मूल कोड के बजाय प्रबंधित, कचरा एकत्र करने वाली भाषाओं में लिखे गए थे?

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

क्या यह व्यक्तिगत प्रोग्रामर हैं जिन्होंने इन उपकरणों के लिए सॉफ्टवेयर लिखा है?

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

इन सभी मामलों में ऐप डेवलपर्स को ठीक से पता था कि वे किस हार्डवेयर प्लेटफ़ॉर्म को लक्षित कर रहे हैं और उसकी क्षमताएं क्या हैं; क्या उन्होंने इसे ध्यान में नहीं रखा?

आंशिक रूप से। एक शुरुआत के लिए, सटीक हार्डवेयर प्लेटफॉर्म शायद ज्ञात नहीं है, क्योंकि सॉफ्टवेयर विकास के दौरान समानांतर में विभिन्न निर्माताओं के साथ अक्सर बातचीत की जाती है। वास्तव में, प्रारंभिक रिलीज के बाद अंतर्निहित हार्डवेयर में छोटे (लेकिन जरूरी नहीं कि महत्वहीन) परिवर्तन भी हो सकते हैं। हालाँकि, मैं सहमत हूँ कि सामान्य क्षमताओं को जाना जाएगा।

समस्या का एक हिस्सा यह है कि सॉफ्टवेयर शायद हार्डवेयर पर विकसित नहीं है, यह एमुलेटर में किया गया है। यह सही डिवाइस के प्रदर्शन के लिए खाते में मुश्किल बनाता है, भले ही एमुलेटर 100% सटीक हों - जो वे नहीं हैं।

बेशक यह वास्तव में रिलीज से पहले उचित प्रोटोटाइप हार्डवेयर पर अपर्याप्त परीक्षण को सही नहीं ठहराता है। यह दोष शायद देव / क़ा नियंत्रण के बाहर है।

क्या यह वह आदमी है जो दोहराता है "अनुकूलन सभी बुराई की जड़ है," क्या उसने उन्हें भटका दिया?

नहीं, मुझे पूरा यकीन है कि वे उसे वैसे भी नहीं सुनते हैं; अन्यथा वह इतनी बार गलत नहीं होगा (यह " समय से पहले अनुकूलन ..." माना जाता है )। :-D

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

  • या तो वे इसे पूरी तरह से नजरअंदाज कर देते हैं।
  • या वे अपने आप को minutiae के साथ देखते हैं जिसका वास्तविक प्रदर्शन आवश्यकताओं से कोई लेना-देना नहीं है । शुद्ध प्रभाव यह है कि बजट खत्म हो जाता है और वास्तविक प्रदर्शन की समस्याओं को सुरक्षित रूप से अनुकूलित करने के लिए कोड बहुत अधिक बाधित होता है ।

क्या यह "ओह यह सिर्फ एक अतिरिक्त 100ms" की मानसिकता थी जब तक कि उन सभी मिलिसेकंड मिनटों तक नहीं जुड़ते?

संभवतः। जाहिर है कि अगर Sleep(100)एक गंभीर अंग के रक्तस्राव को धीमा करने के लिए उपयोग किए जाने वाले टिशू पेपर के बराबर के रूप में इस्तेमाल किया गया है - तो समस्याओं की उम्मीद की जानी चाहिए। हालाँकि, मुझे संदेह है कि समस्या इससे कहीं अधिक सूक्ष्म है।

बात आधुनिक कंप्यूटिंग हार्डवेयर (एम्बेडेड उपकरणों सहित) की तुलना में लोगों को उन्हें क्रेडिट देने की तुलना में बहुत तेज है। अधिकांश लोग, यहां तक ​​कि "अनुभवी" प्रोग्रामर भी सराहना करते हैं कि कंप्यूटर कितनी तेज हैं। 100ms एक लंबा समय है - एक बहुत लंबा समय । और जैसा कि ऐसा होता है, यह "बहुत लंबा समय" 2 तरीके काटता है:

  • पहला यह है कि प्रोग्रामर अनावश्यक रूप से उन चीजों के बारे में चिंता करते हैं जो कंप्यूटर बहुत जल्दी करता है। (ऐसा होता है कि यह सिर्फ एक ऐसी चिंता थी " प्रति सेकंड 300 गुना मूल्य बढ़ाना " जिसने मुझे पहले स्थान पर पहुंचा दिया।)
  • दूसरा यह है कि वे कभी-कभी उचित चिंता दिखाने में विफल होते हैं जब चीजें बहुत लंबे समय तक होती हैं (कंप्यूटिंग समय पर)। इसलिए:
    • यदि वे नेटवर्क पर या स्टोरेज डिवाइस के साथ संचार करते समय विलंबता के प्रभावों को अनदेखा करते हैं;
    • यदि वे अवरुद्ध एक धागे के प्रभाव को अनदेखा करते हैं और दूसरे धागे की प्रतीक्षा करते हैं;
    • अगर वे भूल जाते हैं कि क्योंकि कंप्यूटर इतनी जल्दी काम करते हैं, तो यह किसी कार्य को दोहराने में बहुत सक्षम है, जितना कि डेवलपर को किसी समस्या के बारे में पता चले बिना।
    • ... यदि इस तरह के ओवरसाइट्स का कोई संयोजन होता है, तो एक दिनचर्या अप्रत्याशित रूप से बहुत धीमी गति से (कंप्यूटिंग टाइमस्केल पर) चलेगी। कुछ दोहराते हैं और यह भी मनुष्यों द्वारा ध्यान देने योग्य होगा - लेकिन नीचे पिन करने के लिए मुश्किल हो सकता है क्योंकि सैकड़ों परस्पर जुड़ी चीजें सभी अपने आप से जल्दी से चल रही हैं।

क्या पहली बार इन उत्पादों को खरीदने के लिए यह मेरी गलती है?

हाँ बिलकुल। ठीक है, आप व्यक्तिगत रूप से नहीं बल्कि सामान्य रूप से उपभोक्ता। उत्पाद चेकलिस्ट द्वारा बेचे जाते हैं (और खरीदे जाते हैं )। बहुत कम उपभोक्ता बेहतर प्रदर्शन की मांग कर रहे हैं।

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

लेकिन वे नहीं करते, इसलिए हम नहीं हैं; और हर साल नए सेल फोन तेजी से हार्डवेयर पर धीमी गति से चलते हैं।

(नहीं पूछे गए सवाल।)

  • क्या लोगों को दोष देना विपणन है? आंशिक रूप से। उन्हें रिलीज की तारीख चाहिए। और जब कहा जाता है कि करघे, "काम कर रहे हैं" और "इसे तेज करो" के बीच का विकल्प एक नो-ब्रेनर है।
  • क्या बिक्री करने वाले लोग दोषी हैं? आंशिक रूप से। वे चेकलिस्ट में अधिक सुविधाएँ चाहते हैं। वे फीचर सूचियों को प्रचारित करते हैं और प्रदर्शन को अनदेखा करते हैं। वे (कभी-कभी) अवास्तविक वादे करते हैं।
  • क्या प्रबंधकों को दोष देना है? आंशिक रूप से। अनुभवहीन प्रबंधक कई गलतियां कर सकते हैं, लेकिन यहां तक ​​कि बहुत अनुभवी प्रबंधक दूसरों की चिंताओं के पक्ष में प्रदर्शन के मुद्दों को हल करने के लिए (काफी सही) बलिदान समय दे सकते हैं।
  • क्या दोष देने के लिए विनिर्देशों हैं? आंशिक रूप से। यदि किसी चीज़ को विनिर्देशन से बाहर रखा गया है, तो बाद में उसके बारे में "भूलना" बहुत आसान है। और अगर यह विशेष रूप से नहीं कहा गया है, तो लक्ष्य क्या है? (हालांकि मैं व्यक्तिगत रूप से मानता हूं कि यदि कोई टीम अपने काम पर गर्व करती है, तो वे प्रदर्शन की परवाह किए बिना चिंता करेंगे।)
  • क्या शिक्षा को दोष देना है? शायद। शिक्षा हमेशा बैक-फुट पर होगी। मैं निश्चित रूप से "शिक्षा" को अस्वीकार करता हूं जो तेजी से एक सतही समझ सॉफ्टवेयर विकास के साथ शुरुआती को मंथन करता है। हालांकि, शिक्षा जो सिद्धांत के साथ समर्थित है, और सीखने की संस्कृति को खराब करती है।
  • दोष के लिए उन्नयन कर रहे हैं? आंशिक रूप से। नया सॉफ्टवेयर, पुराना हार्डवेयर वास्तव में भाग्य को लुभा रहा है। संस्करण X जारी होने से पहले भी, X + 1 योजना में है। नया सॉफ्टवेयर संगत है, लेकिन क्या पुराना हार्डवेयर काफी तेज है? क्या इसका परीक्षण किया गया था? एक विशेष प्रदर्शन फिक्स को नए सॉफ़्टवेयर में रोल किया जा सकता है - एक बीमार-सलाह वाले सॉफ़्टवेयर अपग्रेड को प्रोत्साहित करना।

मूल रूप से, मेरा मानना ​​है कि कई योगदान कारक हैं। तो, दुर्भाग्य से इसे ठीक करने के लिए कोई चांदी की गोली नहीं है। लेकिन इसका मतलब यह नहीं है कि यह कयामत और उदासी है। चीजों को बेहतर बनाने में योगदान देने के तरीके हैं।

तो, इन उत्पादों के लिए किस बिंदु पर चीजें गलत हुईं?

IMHO हम वास्तव में किसी एक बिंदु की पहचान नहीं कर सकते हैं। कई योगदान कारक हैं जो समय के साथ विकसित हुए हैं।

  • बीन काउंटर: लागत में कटौती, बाजार समय। लेकिन फिर क्या हमने बिना दबाव के हासिल की गई प्रगति को आगे बढ़ाया होगा?
  • उच्च मांग और उद्योग में कुशल लोगों की कम आपूर्ति। न केवल प्रोग्रामर, बल्कि प्रबंधक, परीक्षक और यहां तक ​​कि बिक्री-लोग भी। कौशल और अनुभव की कमी से गलतियाँ होती हैं। लेकिन फिर से यह सीखने की ओर भी ले जाता है।
  • ब्लीडिंग-एज तकनीक। एक प्रौद्योगिकी के परिपक्व होने तक, यह नियमित रूप से अप्रत्याशित तरीकों से काटेगा। लेकिन फिर यह पहली बार में कई फायदे प्रदान करता है।
  • जटिल जटिलता। समय के साथ, उद्योग विकसित हुआ है: अधिक उपकरण, प्रौद्योगिकियां, परतें, तकनीक, सार, हार्डवेयर, भाषाएं, भिन्नता, विकल्प। यह आधुनिक प्रणालियों की "पूर्ण" समझ रखने के लिए कुछ हद तक असंभव बनाता है। हालाँकि, हम परिणाम के रूप में बहुत कम समय में बहुत कुछ करने में सक्षम हैं।

प्रोग्रामर के रूप में हम अपने ग्राहकों को इस दर्द से बचने के लिए क्या कर सकते हैं?

मेरे कुछ सुझाव हैं (तकनीकी और गैर-तकनीकी दोनों) जो मदद कर सकते हैं:

  • सोफ़र में यह संभव है - अपने उत्पाद का उपयोग करें। अजीब, धीमी या असुविधाजनक चीजों को प्रकट करने के लिए पहले हाथ के अनुभव की तरह कुछ भी नहीं है। हालाँकि आपको "इनसाइडर नॉलेज" के कारण जानबूझकर कमियों को दरकिनार करने से बचना होगा। उदाहरण के लिए, यदि आपको संपर्कों को सिंक करने में कोई समस्या नहीं है क्योंकि आप इसे पिछले दरवाजे पायथन स्क्रिप्ट के साथ करते हैं - तो आप "उत्पाद" का उपयोग नहीं कर रहे हैं। जो अगले बिंदु तक लाता है ...
  • अपने उपयोगकर्ताओं को सुनें (अधिमानतः पहला हाथ, लेकिन समर्थन के माध्यम से कम से कम दूसरा हाथ)। मुझे पता है कि प्रोग्रामर (आम तौर पर) दूर रहना पसंद करते हैं और मानव संपर्क से बचते हैं; लेकिन इससे आपको अपने उत्पाद का उपयोग करते समय अन्य लोगों की समस्याओं का पता लगाने में मदद नहीं मिलती है। उदाहरण के लिए, आप यह नहीं देख सकते हैं कि मेनू विकल्प धीमा है, क्योंकि आप सभी शॉर्टकट जानते हैं और विशेष रूप से उन का उपयोग करते हैं। यहां तक ​​कि अगर मैनुअल पूरी तरह से सभी शॉर्टकट को दस्तावेज़ करता है, तो कुछ लोग अभी भी मेनू को पसंद करेंगे - अपर्याप्त रूप से धीमा होने के बावजूद।
  • निरंतर आधार पर अपने तकनीक कौशल और ज्ञान को बेहतर बनाने के लिए प्रयास करें। गंभीर रूप से आपके द्वारा सीखी गई हर चीज़ का विश्लेषण करने का कौशल विकसित करें। अपने ज्ञान को नियमित रूप से पुनः प्राप्त करें। कुछ मामलों में, आप जो जानते थे, उसे भूलने के लिए तैयार रहें। जो लाता है ...
  • कुछ तकनीकों / तकनीकों से सूक्ष्म गलतफहमी और गलत क्रियान्वयन हो सकता है। सामान्य ज्ञान या उपलब्ध साधनों के विकास के माध्यम से अन्य लोग इसके पक्ष में (जैसे सिंगलेट्स) गिर सकते हैं। कुछ विषय इतने पेचीदा होते हैं कि वे "hocus-pocus पंडितों" का एक समूह पैदा करते हैं जो गलत सूचना के विशाल शरीर का प्रचार करते हैं। मेरा एक विशेष बगबेर बहु-थ्रेडिंग के आसपास गलत सूचना है। एक अच्छा बहु-थ्रेडेड कार्यान्वयन उपयोगकर्ता अनुभव को बेहतर बना सकता है। दुर्भाग्य से मल्टी-थ्रेडिंग के लिए गलत सूचनाओं का एक बहुत प्रदर्शन काफी कम कर देगा, अनियमित कीड़े बढ़ाएगा, डेड-लॉक जोखिम बढ़ाएगा, डीबगिंग को जटिल करेगा आदि: याद रखें: सिर्फ इसलिए कि "विशेषज्ञ" ने कहा, यह सच नहीं है।
  • स्वामित्व लेने। (गंभीरता से नहीं, मैं बोर्डरूम बिंगो नहीं खेल रहा हूं।) कुछ चेकलिस्ट आइटमों पर वरीयता लेने वाले प्रदर्शन विशेषताओं के लिए प्रबंधकों, उत्पाद मालिकों, बिक्री वाले लोगों से बातचीत करें। बेहतर विनिर्देशों की मांग। बचकाना नहीं, बल्कि ऐसे सवाल पूछकर जो प्रदर्शन के बारे में सोच रहे लोगों को मिलता है।
  • समझदार उपभोक्ता बनें। उस फोन को चुनें जिसमें कम फीचर्स हैं लेकिन तेज है। (तेजी से सीपीयू नहीं, तेजी से यूआई।) फिर इसके बारे में अपनी बड़ाई ! जितने अधिक उपभोक्ता प्रदर्शन की मांग करना शुरू करेंगे, उतने अधिक बीन काउंटर इसके लिए बजट बनाना शुरू कर देंगे।

यह एक बहुत ही गहन, सुविचारित उत्तर है! संयोगवश, मैंने टीम मीटिंग से वापस आने के बाद यह अधिकार पढ़ा, जहां थीम "# 1 ए-प्राथमिकता बग इस चक्र: विलंबता> 60ms है, यह 33ms होना है, ZOMG !!! 1!"
18

1

आपकी पहली गलती, और शायद इसीलिए आपको डाउन वोट मिला है, यह स्पष्ट रूप से स्पष्ट अतिशयोक्ति का हकदार है। क्या आप वास्तव में विश्वास करने की उम्मीद करते हैं कि iPhone और iPad खराब हैं।

अंततः ग्राहक जिम्मेदार है। यह लागत में कमी आती है और ग्राहक को भुगतान करने के लिए तैयार किया जाता है और बदले में उन्हें क्या मिलता है। यदि वे गति से अधिक सुविधाएँ चुनते हैं, तो उन्हें यही मिलता है। यदि वे गति से अधिक मूल्य चुनते हैं, तो वही निर्मित और बेचा जाता है। यदि ब्रांड छवि अधिक महत्वपूर्ण है ..... अंततः ग्राहक अपने बटुए के साथ तय करता है कि क्या महत्वपूर्ण है और क्या नहीं। आपके पास एक ब्रांड वेश्या बनने और उत्पादों को खरीदने का विकल्प है क्योंकि हर कोई करता है, या एक स्वतंत्र विचारक हो, चमक और विपणन प्रचार के पीछे देखो, और कुछ खरीदें जो आपकी आवश्यकताओं को पूरा करता है।

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

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


2
मेरे iPhone नंबर अतिशयोक्ति नहीं हैं; मैंने उन्हें अपने फोन का उपयोग करते समय ज़ोर से सेकंड गिनकर प्राप्त किया। इस मुद्दे पर youtube.com/watch?v=Pdk2cJpSXLg पर हास्य (यदि कम चरम) का चित्रण है । इसके अलावा, जब मैंने इसे खरीदा तो मेरा फोन ठीक था! फोन चुनते समय मैंने प्रदर्शन का सावधानीपूर्वक मूल्यांकन किया। लेकिन यह Apple के प्रत्येक क्रमिक फर्मवेयर अद्यतन के साथ धीमा और धीमा हो गया, जो कि अनुपयोगिता के बिंदु पर है। मुझे लगता है कि यह Apple के अपडेट को स्थापित करने के लिए मेरी गलती हो सकती है।
क्रैशवर्क्स

मैं प्रोग्रामरों को बहुत हद तक दोष देता हूं - मैं हर समय बग और भयानक उपयोग के मामले के विश्लेषण के साथ वाणिज्यिक ऐप देखता हूं कि उनके काम में किसी भी सक्षमता या गर्व के साथ कोई भी डेवलपर कभी भी जारी नहीं करेगा, भले ही वे किसके लिए काम कर रहे हों - ये लोग हैं हमारे पेशे के लिए एक अपमान है।
वेक्टर

1

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

यदि आपके पास एक iPhone 3G है, तो Apple ने कुछ OS अपडेट जारी किए जो केवल नए उपकरणों के लिए अनुकूलित थे। 3 जी के लिए बाद में ओएस अपडेट 3 जी पर थोड़ा बेहतर प्रदर्शन प्रदान कर सकता है।


1
"समय से पहले अनुकूलन कभी-कभी बुरा होता है, लेकिन जब अच्छे उपयोगकर्ता अनुभव के लिए आवश्यक नहीं होता है" तो यह समय से पहले अनुकूलन नहीं है
कार्लोस कैंपडरो

1
कभी-कभी आपको वास्तविक अड़चनों पर मेट्रिक्स से पहले बहुत सारे सामान का अनुकूलन शुरू करना पड़ता है, जिसमें अनुकूलन की आवश्यकता होती है, अन्यथा सिस्टम शेड्यूल और प्रदर्शन को पूरा करने वाले पोस्ट-ऑप्टिमाइज़ेशन के लिए आर्कीटेक्टेड गलत निकलता है।
हॉटपावर 2

0

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


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

मैं इस कथन से असहमत हूं। AT & T Uverse से Comcast में जाने के बाद, मैंने पाया है कि Comcast के लिए DVR Uverse बॉक्स की तुलना में अविश्वसनीय रूप से धीमा है। यह देरी का कारण हो सकता है, लेकिन इसका मतलब यह नहीं है कि यह एकमात्र कारण होगा कि बॉक्स धीमा है।
जेटी

-2

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


2
स्पष्टीकरण के बिना, यह जवाब उस स्थिति में बेकार हो सकता है जब कोई अन्य व्यक्ति एक विपरीत राय पोस्ट करता है। उदाहरण के लिए, यदि कोई व्यक्ति "ऐप्स को नियंत्रित करता है और महान डेवलपर्स द्वारा नियुक्त किए जाने वाले लोगों द्वारा नियंत्रित किया जाता है" जैसे दावे करता है , तो यह उत्तर पाठक को दो विरोधी राय लेने में कैसे मदद करेगा? एक बेहतर आकार में इसे संपादित करने पर विचार
gnat
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.