एक डेवलपर को कंप्यूटर के हार्डवेयर के आंतरिक कामकाज को जानना चाहिए? [बन्द है]


13

मैं बात नहीं कर रहा हूं कि मेमोरी कैसे सौंपी गई है और मेमोरी मैनेजमेंट (ऐसी चीजें जो आप उदाहरण के लिए C से सीख सकते हैं) बल्कि हार्डवेयर पहलू और कंप्यूटर हार्डवेयर के प्रत्येक घटक आंतरिक रूप से कैसे काम करते हैं और कैसे वे एक दूसरे के साथ संवाद करते हैं।

आप में से कितने लोग यह सब जानते हैं?

जवाबों:


31

यह इस पर निर्भर करता है कि आप क्या करते हैं।

यदि आप एक एम्बेडेड डेवलपर हैं (और आप एक बहुत छोटे उपकरण में धातु के पास लिख रहे हैं), तो आपको सिस्टम में हर घटक से प्रत्येक में और बाहर जानने की आवश्यकता है।

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

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

यदि आप एक एप्लिकेशन डेवलपर हैं, तो आपको उचित स्तरों पर मेमोरी उपयोग को छोड़कर इसके बारे में जानने की आवश्यकता नहीं है।

यदि आप एक वेब डेवलपर हैं, तो इंटरनेट प्रोटोकॉल जानना आसान है, लेकिन मेमोरी के मुद्दों से निपटने के लिए इसके अलावा कोई भी अन्य सामान आवश्यक नहीं है।


20
अपनी मशीन के बारे में जानना हमेशा आपको बेहतर डेवलपर बनाता है, भले ही आप केवल लाइन-ऑफ-बिजनेस एप्लिकेशन ही करें। इस तरह के ज्ञान की आवश्यकता नहीं हो सकती है, लेकिन यह निश्चित रूप से महत्वपूर्ण है।
रॉबर्ट हार्वे

@ रॉबर्ट हार्वे: सही है, यही कारण है कि मैं कहता हूं " जानने की आवश्यकता नहीं है।" यह निश्चित रूप से इन बातों को जानने के लिए चोट नहीं करता है। :)
ग्रेफेड

2
+1, लेकिन मैं कुछ वेब डेवलपर्स को (अधिक से अधिक) जानता हूं जो कभी स्मृति उपयोग पर विचार नहीं करते हैं।
टिम पोस्ट

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

@AndrewHill: यह कब एक हार्डवेयर मामला है और एक एल्गोरिथम नहीं है? प्रश्न निम्न-स्तरीय हार्डवेयर व्यवहार को समझने के बारे में है, न कि उच्च-स्तरीय एल्गोरिदम को।
ग्रेफेड

12

नहीं, आपको नहीं करना है, लेकिन मुझे लगता है कि यह एक उत्कृष्ट विचार है। तार्किक स्तर पर चीजें कैसे काम करती हैं, इसका सामान्य अवलोकन सीखने से मुझे विकास में मदद मिली है।


6

मुझे लगता है कि एप्लिकेशन डेवलपर्स और वेब डेवलपर्स के बारे में टिप्पणी गलत है।

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

एक एप्लिकेशन स्टैंड बिंदु से, यदि आप किसी प्रकार का सीएडी प्रोग्राम विकसित कर रहे हैं, या कुछ ऐसा जो 3 डी रेंडरिंग करता है, तो आप उम्मीद कर सकते हैं कि ये एप्लिकेशन एल्गोरिदमिक और ग्राफिक रूप से गहन दोनों की गणना कर सकते हैं। यह सुनिश्चित करना समझदारी होगी कि एप्लिकेशन उत्तरदायी और प्रयोग करने योग्य है।

मैं यह नहीं कह रहा हूं कि आपको पीसीआई प्रोटोकॉल जैसी किसी भी चीज के बारे में समझना और उसे समझना होगा, लेकिन आप बेहतर तरीके से समझ सकते हैं कि इंटरफेस और हार्डवेयर क्या सक्षम है।

अंततः, यह महत्वपूर्ण है कि आप किस प्रकार का विकास करते हैं। आपके समझने के लिए आवश्यक विस्तार का स्तर बहस का विषय है।


2

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

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


1

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


0

मैं जो कुछ जानता हूं वह मैंने लगभग 25 साल पहले एक कंप्यूटर आर्किटेक्चर क्लास में सीखा था, और उस पर एक गैर-वास्तविक विश्व वास्तुकला पर।

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


0

मैं एक उच्च विद्यालय के कक्षा के रूप में जावा प्रोग्रामिंग सिखाता हूं। मैंने पाया है कि जब छात्र कंप्यूटर के आंतरिक कामकाज के बारे में कुछ जानते हैं, तो यह उन्हें प्रोग्रामिंग अवधारणाओं को समझने में मदद करता है।

मैं ओवरबोर्ड नहीं गया - सिर्फ सरल अवधारणाएं जैसे कि कैसे चीजों को स्मृति में संग्रहीत किया जाता है, छात्रों की मदद करने के लिए लगता है।


0

मैं इसका उत्तर देने जा रहा हूं जैसा कि शीर्षक में पूछा गया है:

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

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

क्या मुझे यह सब पता है? हेक नं। मैं SCSI के बारे में इतनी बेकार जानकारी भूल गया हूँ कि यह मज़ेदार भी नहीं है। हालाँकि, इसके बारे में सीखना एक अमूल्य अनुभव था। मैं अन्य हार्डवेयर संबंधित विवरणों को भी भूल गया हूं, लेकिन उन महत्वपूर्ण अवधारणाओं को याद करता हूं जो मैंने उस ज्ञान से सीखे थे।

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


0

प्रत्येक डेवलपर को कंप्यूटर इंजीनियरिंग से जुड़ी बुनियादी अवधारणाओं को जानना चाहिए: बाइनरी अंकगणितीय, आधार रूपांतरण, बूलियन बीजगणित, तर्क गेट्स, एक सीपीयू की संरचना (और घटक क्या करते हैं), कैश, वर्चुअल मेमोरी, संपीड़न, त्रुटि का पता लगाने और सुधार ...

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.