क्या ऐसा इसलिए है क्योंकि ये सभी मूल कोड के बजाय प्रबंधित, कचरा एकत्र करने वाली भाषाओं में लिखे गए थे?
नहीं। धीरे-धीरे कोड खराब प्रदर्शन करेगा। निश्चित रूप से, एक विशेष भाषा दूसरों को हल करते समय समस्याओं के कुछ वर्गों को पेश कर सकती है। लेकिन अच्छे प्रोग्रामर पर्याप्त समय दिए गए वर्कअराउंड खोजने में काफी सक्षम हैं।
क्या यह व्यक्तिगत प्रोग्रामर हैं जिन्होंने इन उपकरणों के लिए सॉफ्टवेयर लिखा है?
आंशिक रूप से। कई मामलों में यह कम से कम एक योगदान कारक है। यह एक उद्योग का दुर्भाग्यपूर्ण दुष्प्रभाव है जहां अच्छे प्रोग्रामर उच्च मांग और कम आपूर्ति में हैं। इसके अलावा तकनीकी क्षमता के विभिन्न स्तरों के बीच की खाई काफी बड़ी हो सकती है। तो यह इस कारण से है कि कभी-कभी प्रोग्रामर कुछ सॉफ्टवेयर को लागू करने के लिए काम करते हैं, बस इसे काम करने के लिए बधाई दी जा सकती है (प्रकार)।
इन सभी मामलों में ऐप डेवलपर्स को ठीक से पता था कि वे किस हार्डवेयर प्लेटफ़ॉर्म को लक्षित कर रहे हैं और उसकी क्षमताएं क्या हैं; क्या उन्होंने इसे ध्यान में नहीं रखा?
आंशिक रूप से। एक शुरुआत के लिए, सटीक हार्डवेयर प्लेटफॉर्म शायद ज्ञात नहीं है, क्योंकि सॉफ्टवेयर विकास के दौरान समानांतर में विभिन्न निर्माताओं के साथ अक्सर बातचीत की जाती है। वास्तव में, प्रारंभिक रिलीज के बाद अंतर्निहित हार्डवेयर में छोटे (लेकिन जरूरी नहीं कि महत्वहीन) परिवर्तन भी हो सकते हैं। हालाँकि, मैं सहमत हूँ कि सामान्य क्षमताओं को जाना जाएगा।
समस्या का एक हिस्सा यह है कि सॉफ्टवेयर शायद हार्डवेयर पर विकसित नहीं है, यह एमुलेटर में किया गया है। यह सही डिवाइस के प्रदर्शन के लिए खाते में मुश्किल बनाता है, भले ही एमुलेटर 100% सटीक हों - जो वे नहीं हैं।
बेशक यह वास्तव में रिलीज से पहले उचित प्रोटोटाइप हार्डवेयर पर अपर्याप्त परीक्षण को सही नहीं ठहराता है। यह दोष शायद देव / क़ा नियंत्रण के बाहर है।
क्या यह वह आदमी है जो दोहराता है "अनुकूलन सभी बुराई की जड़ है," क्या उसने उन्हें भटका दिया?
नहीं, मुझे पूरा यकीन है कि वे उसे वैसे भी नहीं सुनते हैं; अन्यथा वह इतनी बार गलत नहीं होगा (यह " समय से पहले अनुकूलन ..." माना जाता है )। :-D
यह अधिक संभावना है कि बहुत सारे प्रोग्रामर अनुकूलन के संबंध में 2 चरम सीमाओं में से एक लेते हैं।
- या तो वे इसे पूरी तरह से नजरअंदाज कर देते हैं।
- या वे अपने आप को minutiae के साथ देखते हैं जिसका वास्तविक प्रदर्शन आवश्यकताओं से कोई लेना-देना नहीं है । शुद्ध प्रभाव यह है कि बजट खत्म हो जाता है और वास्तविक प्रदर्शन की समस्याओं को सुरक्षित रूप से अनुकूलित करने के लिए कोड बहुत अधिक बाधित होता है ।
क्या यह "ओह यह सिर्फ एक अतिरिक्त 100ms" की मानसिकता थी जब तक कि उन सभी मिलिसेकंड मिनटों तक नहीं जुड़ते?
संभवतः। जाहिर है कि अगर Sleep(100)
एक गंभीर अंग के रक्तस्राव को धीमा करने के लिए उपयोग किए जाने वाले टिशू पेपर के बराबर के रूप में इस्तेमाल किया गया है - तो समस्याओं की उम्मीद की जानी चाहिए। हालाँकि, मुझे संदेह है कि समस्या इससे कहीं अधिक सूक्ष्म है।
बात आधुनिक कंप्यूटिंग हार्डवेयर (एम्बेडेड उपकरणों सहित) की तुलना में लोगों को उन्हें क्रेडिट देने की तुलना में बहुत तेज है। अधिकांश लोग, यहां तक कि "अनुभवी" प्रोग्रामर भी सराहना करते हैं कि कंप्यूटर कितनी तेज हैं। 100ms एक लंबा समय है - एक बहुत लंबा समय । और जैसा कि ऐसा होता है, यह "बहुत लंबा समय" 2 तरीके काटता है:
- पहला यह है कि प्रोग्रामर अनावश्यक रूप से उन चीजों के बारे में चिंता करते हैं जो कंप्यूटर बहुत जल्दी करता है। (ऐसा होता है कि यह सिर्फ एक ऐसी चिंता थी " प्रति सेकंड 300 गुना मूल्य बढ़ाना " जिसने मुझे पहले स्थान पर पहुंचा दिया।)
- दूसरा यह है कि वे कभी-कभी उचित चिंता दिखाने में विफल होते हैं जब चीजें बहुत लंबे समय तक होती हैं (कंप्यूटिंग समय पर)। इसलिए:
- यदि वे नेटवर्क पर या स्टोरेज डिवाइस के साथ संचार करते समय विलंबता के प्रभावों को अनदेखा करते हैं;
- यदि वे अवरुद्ध एक धागे के प्रभाव को अनदेखा करते हैं और दूसरे धागे की प्रतीक्षा करते हैं;
- अगर वे भूल जाते हैं कि क्योंकि कंप्यूटर इतनी जल्दी काम करते हैं, तो यह किसी कार्य को दोहराने में बहुत सक्षम है, जितना कि डेवलपर को किसी समस्या के बारे में पता चले बिना।
- ... यदि इस तरह के ओवरसाइट्स का कोई संयोजन होता है, तो एक दिनचर्या अप्रत्याशित रूप से बहुत धीमी गति से (कंप्यूटिंग टाइमस्केल पर) चलेगी। कुछ दोहराते हैं और यह भी मनुष्यों द्वारा ध्यान देने योग्य होगा - लेकिन नीचे पिन करने के लिए मुश्किल हो सकता है क्योंकि सैकड़ों परस्पर जुड़ी चीजें सभी अपने आप से जल्दी से चल रही हैं।
क्या पहली बार इन उत्पादों को खरीदने के लिए यह मेरी गलती है?
हाँ बिलकुल। ठीक है, आप व्यक्तिगत रूप से नहीं बल्कि सामान्य रूप से उपभोक्ता। उत्पाद चेकलिस्ट द्वारा बेचे जाते हैं (और खरीदे जाते हैं )। बहुत कम उपभोक्ता बेहतर प्रदर्शन की मांग कर रहे हैं।
अपनी बात को स्पष्ट करने के लिए: पिछली बार जब मैं सेल-फोन खरीदना चाहता था, तो स्टोर इन-स्टोर से खेलने के लिए डेमो मॉडल भी नहीं दे सकता था। स्क्रीन को देखने के लिए स्टिकर के साथ वे सभी प्लास्टिक के गोले थे। तुम भी उस तरह वजन के लिए एक महसूस नहीं कर सकते - अकेले प्रदर्शन या प्रयोज्य करते हैं। मेरा कहना है कि यदि पर्याप्त लोगों ने उस व्यवसाय मॉडल पर आपत्ति जताई, और अपनी आपत्तियों को खारिज करने के लिए अपनी जेब से वोट दिया , तो हम सही दिशा में एक छोटा कदम होगा।
लेकिन वे नहीं करते, इसलिए हम नहीं हैं; और हर साल नए सेल फोन तेजी से हार्डवेयर पर धीमी गति से चलते हैं।
(नहीं पूछे गए सवाल।)
- क्या लोगों को दोष देना विपणन है? आंशिक रूप से। उन्हें रिलीज की तारीख चाहिए। और जब कहा जाता है कि करघे, "काम कर रहे हैं" और "इसे तेज करो" के बीच का विकल्प एक नो-ब्रेनर है।
- क्या बिक्री करने वाले लोग दोषी हैं? आंशिक रूप से। वे चेकलिस्ट में अधिक सुविधाएँ चाहते हैं। वे फीचर सूचियों को प्रचारित करते हैं और प्रदर्शन को अनदेखा करते हैं। वे (कभी-कभी) अवास्तविक वादे करते हैं।
- क्या प्रबंधकों को दोष देना है? आंशिक रूप से। अनुभवहीन प्रबंधक कई गलतियां कर सकते हैं, लेकिन यहां तक कि बहुत अनुभवी प्रबंधक दूसरों की चिंताओं के पक्ष में प्रदर्शन के मुद्दों को हल करने के लिए (काफी सही) बलिदान समय दे सकते हैं।
- क्या दोष देने के लिए विनिर्देशों हैं? आंशिक रूप से। यदि किसी चीज़ को विनिर्देशन से बाहर रखा गया है, तो बाद में उसके बारे में "भूलना" बहुत आसान है। और अगर यह विशेष रूप से नहीं कहा गया है, तो लक्ष्य क्या है? (हालांकि मैं व्यक्तिगत रूप से मानता हूं कि यदि कोई टीम अपने काम पर गर्व करती है, तो वे प्रदर्शन की परवाह किए बिना चिंता करेंगे।)
- क्या शिक्षा को दोष देना है? शायद। शिक्षा हमेशा बैक-फुट पर होगी। मैं निश्चित रूप से "शिक्षा" को अस्वीकार करता हूं जो तेजी से एक सतही समझ सॉफ्टवेयर विकास के साथ शुरुआती को मंथन करता है। हालांकि, शिक्षा जो सिद्धांत के साथ समर्थित है, और सीखने की संस्कृति को खराब करती है।
- दोष के लिए उन्नयन कर रहे हैं? आंशिक रूप से। नया सॉफ्टवेयर, पुराना हार्डवेयर वास्तव में भाग्य को लुभा रहा है। संस्करण X जारी होने से पहले भी, X + 1 योजना में है। नया सॉफ्टवेयर संगत है, लेकिन क्या पुराना हार्डवेयर काफी तेज है? क्या इसका परीक्षण किया गया था? एक विशेष प्रदर्शन फिक्स को नए सॉफ़्टवेयर में रोल किया जा सकता है - एक बीमार-सलाह वाले सॉफ़्टवेयर अपग्रेड को प्रोत्साहित करना।
मूल रूप से, मेरा मानना है कि कई योगदान कारक हैं। तो, दुर्भाग्य से इसे ठीक करने के लिए कोई चांदी की गोली नहीं है। लेकिन इसका मतलब यह नहीं है कि यह कयामत और उदासी है। चीजों को बेहतर बनाने में योगदान देने के तरीके हैं।
तो, इन उत्पादों के लिए किस बिंदु पर चीजें गलत हुईं?
IMHO हम वास्तव में किसी एक बिंदु की पहचान नहीं कर सकते हैं। कई योगदान कारक हैं जो समय के साथ विकसित हुए हैं।
- बीन काउंटर: लागत में कटौती, बाजार समय। लेकिन फिर क्या हमने बिना दबाव के हासिल की गई प्रगति को आगे बढ़ाया होगा?
- उच्च मांग और उद्योग में कुशल लोगों की कम आपूर्ति। न केवल प्रोग्रामर, बल्कि प्रबंधक, परीक्षक और यहां तक कि बिक्री-लोग भी। कौशल और अनुभव की कमी से गलतियाँ होती हैं। लेकिन फिर से यह सीखने की ओर भी ले जाता है।
- ब्लीडिंग-एज तकनीक। एक प्रौद्योगिकी के परिपक्व होने तक, यह नियमित रूप से अप्रत्याशित तरीकों से काटेगा। लेकिन फिर यह पहली बार में कई फायदे प्रदान करता है।
- जटिल जटिलता। समय के साथ, उद्योग विकसित हुआ है: अधिक उपकरण, प्रौद्योगिकियां, परतें, तकनीक, सार, हार्डवेयर, भाषाएं, भिन्नता, विकल्प। यह आधुनिक प्रणालियों की "पूर्ण" समझ रखने के लिए कुछ हद तक असंभव बनाता है। हालाँकि, हम परिणाम के रूप में बहुत कम समय में बहुत कुछ करने में सक्षम हैं।
प्रोग्रामर के रूप में हम अपने ग्राहकों को इस दर्द से बचने के लिए क्या कर सकते हैं?
मेरे कुछ सुझाव हैं (तकनीकी और गैर-तकनीकी दोनों) जो मदद कर सकते हैं:
- सोफ़र में यह संभव है - अपने उत्पाद का उपयोग करें। अजीब, धीमी या असुविधाजनक चीजों को प्रकट करने के लिए पहले हाथ के अनुभव की तरह कुछ भी नहीं है। हालाँकि आपको "इनसाइडर नॉलेज" के कारण जानबूझकर कमियों को दरकिनार करने से बचना होगा। उदाहरण के लिए, यदि आपको संपर्कों को सिंक करने में कोई समस्या नहीं है क्योंकि आप इसे पिछले दरवाजे पायथन स्क्रिप्ट के साथ करते हैं - तो आप "उत्पाद" का उपयोग नहीं कर रहे हैं। जो अगले बिंदु तक लाता है ...
- अपने उपयोगकर्ताओं को सुनें (अधिमानतः पहला हाथ, लेकिन समर्थन के माध्यम से कम से कम दूसरा हाथ)। मुझे पता है कि प्रोग्रामर (आम तौर पर) दूर रहना पसंद करते हैं और मानव संपर्क से बचते हैं; लेकिन इससे आपको अपने उत्पाद का उपयोग करते समय अन्य लोगों की समस्याओं का पता लगाने में मदद नहीं मिलती है। उदाहरण के लिए, आप यह नहीं देख सकते हैं कि मेनू विकल्प धीमा है, क्योंकि आप सभी शॉर्टकट जानते हैं और विशेष रूप से उन का उपयोग करते हैं। यहां तक कि अगर मैनुअल पूरी तरह से सभी शॉर्टकट को दस्तावेज़ करता है, तो कुछ लोग अभी भी मेनू को पसंद करेंगे - अपर्याप्त रूप से धीमा होने के बावजूद।
- निरंतर आधार पर अपने तकनीक कौशल और ज्ञान को बेहतर बनाने के लिए प्रयास करें। गंभीर रूप से आपके द्वारा सीखी गई हर चीज़ का विश्लेषण करने का कौशल विकसित करें। अपने ज्ञान को नियमित रूप से पुनः प्राप्त करें। कुछ मामलों में, आप जो जानते थे, उसे भूलने के लिए तैयार रहें। जो लाता है ...
- कुछ तकनीकों / तकनीकों से सूक्ष्म गलतफहमी और गलत क्रियान्वयन हो सकता है। सामान्य ज्ञान या उपलब्ध साधनों के विकास के माध्यम से अन्य लोग इसके पक्ष में (जैसे सिंगलेट्स) गिर सकते हैं। कुछ विषय इतने पेचीदा होते हैं कि वे "hocus-pocus पंडितों" का एक समूह पैदा करते हैं जो गलत सूचना के विशाल शरीर का प्रचार करते हैं। मेरा एक विशेष बगबेर बहु-थ्रेडिंग के आसपास गलत सूचना है। एक अच्छा बहु-थ्रेडेड कार्यान्वयन उपयोगकर्ता अनुभव को बेहतर बना सकता है। दुर्भाग्य से मल्टी-थ्रेडिंग के लिए गलत सूचनाओं का एक बहुत प्रदर्शन काफी कम कर देगा, अनियमित कीड़े बढ़ाएगा, डेड-लॉक जोखिम बढ़ाएगा, डीबगिंग को जटिल करेगा आदि: याद रखें: सिर्फ इसलिए कि "विशेषज्ञ" ने कहा, यह सच नहीं है।
- स्वामित्व लेने। (गंभीरता से नहीं, मैं बोर्डरूम बिंगो नहीं खेल रहा हूं।) कुछ चेकलिस्ट आइटमों पर वरीयता लेने वाले प्रदर्शन विशेषताओं के लिए प्रबंधकों, उत्पाद मालिकों, बिक्री वाले लोगों से बातचीत करें। बेहतर विनिर्देशों की मांग। बचकाना नहीं, बल्कि ऐसे सवाल पूछकर जो प्रदर्शन के बारे में सोच रहे लोगों को मिलता है।
- समझदार उपभोक्ता बनें। उस फोन को चुनें जिसमें कम फीचर्स हैं लेकिन तेज है। (तेजी से सीपीयू नहीं, तेजी से यूआई।) फिर इसके बारे में अपनी बड़ाई ! जितने अधिक उपभोक्ता प्रदर्शन की मांग करना शुरू करेंगे, उतने अधिक बीन काउंटर इसके लिए बजट बनाना शुरू कर देंगे।