क्या उच्च स्तरीय डेवलपर के लिए विधानसभा का अध्ययन करने में समय बिताना बुद्धिमानी है? [बन्द है]


33

यह स्पष्ट है कि निम्न स्तर के सामान का ज्ञान हमारे काम में बहुत महत्वपूर्ण है।

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

कब बहुत देर हो चुकी है, और कब नहीं? और अगर ऐसा है नहीं बहुत देर हो चुकी है, तो कैसे एक बेहतर सीखने (अत्यधिक समय बिताने नहीं कुछ गहराई प्राप्त करने के लिए और समझने के अर्थ में) के बारे में जाना होगा?


एक पोस्ट में बहुत सारे सवाल :)
शमीम हाफिज़

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

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

जवाबों:


43

विश्वास नहीं होता कि किसी ने डिबगिंग का उल्लेख नहीं किया है ...

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

लेकिन मैं अभी भी disassembler को खोल सकता हूं और देख सकता हूं कि आपके उच्च-स्तरीय तर्क ने आखिरकार क्या किया , खराब डेटा को इसके मूल में वापस ट्रेस किया, यह पता लगाया कि किसने FPU नियंत्रण रजिस्टर को बदल दिया ...

इसने मेरे बारे में सोचने की तुलना में मेरे बेकन को अधिक बार बचाया है। और इसे सीखने में कभी देर नहीं हुई - 'नेट' पर बहुत सारे महान संदर्भ और ट्यूटोरियल हैं, और आपकी मशीन पर चलने वाले किसी भी कार्यक्रम के बारे में पर्यावरण के अनुकूल है।


10
यदि मैं कर सकता हूं तो +1 और मैं इसे और बढ़ा दूंगा। यदि कोई अन्य कारण नहीं है, तो प्रत्येक गंभीर डेवलपर को इसके लिए ASM पढ़ने में सक्षम होना चाहिए।
मेसन व्हीलर

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

3
+1 असेंबली एकमात्र भाषाओं में से एक है जो आपको यह समझने के लिए मजबूर करती है कि प्रोसेसर वास्तव में कैसे काम करता है। यह उच्च स्तरीय भाषा के साथ आपके विकास में मदद करता है। जरूर पढ़े: blogs.msdn.com/b/ericlippert/archive/2010/09/30/…

अंतर्निहित कंप्यूटर को जानना INSANELY सहायक है, चाहे डीबगिंग, ऑप्टिमाइज़ेशन, या सरासर जिज्ञासा के लिए। गंभीरता से, विधानसभा भाषा के कम से कम एक या दो परिवारों को पढ़ना सीखें। यहां तक ​​कि अगर आप इसे कभी नहीं पढ़ते हैं या इसे सीखने के बाद लिखते हैं, तो यह भविष्य में चीजों को समझने के तरीके को प्रभावित करेगा। अब, यदि आप किसी अन्य भाषा में नहीं लिखना चाहते हैं, तो यह थोड़ा अधिक हो सकता है ...
माइकल Trausch

1
@ मेसन: मुझे नहीं पता कि "हर गंभीर डेवलपर" को एएसएम पढ़ने में सक्षम होना चाहिए। यदि आप जावास्क्रिप्ट लिख रहे हैं या एक मोटी फ्रेमवर्क (जैसे .NET या जावा) में निर्मित प्रोग्रामिंग भाषा का उपयोग कर रहे हैं, तो मैं ASM को एक गंभीर डेवलपर होने के लिए आवश्यक नहीं समझ सकता। कहा जा रहा है कि उच्च स्तर की प्रोग्रामिंग भाषाओं और परिवेशों में भी, कंप्यूटर बहुत कम स्तर पर निर्देशों को कैसे कार्यान्वित करता है, इसकी समझ काफी सहायक हो सकती है।
स्कॉट मिचेल

15

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

तो जैसा कि आप कहते हैं, निम्न स्तर के सामान का ज्ञान महत्वपूर्ण है, लेकिन विधानसभा में व्यावहारिक ज्ञान नहीं है।


1
मैं दूसरा। आप एक अच्छी जीवित प्रोग्रामिंग कमा सकते हैं और कभी भी ASM को पढ़ना / लिखना नहीं है । कुछ ऐसे पद हैं जिनकी आवश्यकता है। अपने कोड में एक दौड़ की स्थिति के बाद एक डंप पढ़ना प्रक्रिया को नीचे ले गया। या यदि आप बहुत सघन-गहन कार्यक्रम लिखते हैं (जैसे कि जीपीयू समांतरकरण / ओपनसीएल)। देव कार्यों का प्रतिशत जहां आपको इन कार्यों को करने की आवश्यकता होगी, वे बहुत कम हैं।
यजॉर्ग

11

आप वास्तव में कोई निम्न स्तर प्रोग्रामिंग कौशल है, तो मैं होगा अत्यधिक अपने खाली समय में कुछ सीखने की सलाह देते हैं। आपको इसके विशेषज्ञ बनने की आवश्यकता नहीं है; बस प्रवीणता के कुछ स्तर तक पहुँचने। आपको अपने लिए यह करने के लिए संकलक या पुस्तकालयों के आधार पर, गणित के बहुत सारे काम खुद करने होंगे। यह प्रोग्रामिंग में पठनीयता को समझने में आपकी मदद करेगा, क्योंकि अधिकांश विधानसभा निर्देश एक प्रोसेसर निर्देश के अनुरूप होते हैं। आपको थोड़े बड़े कार्यक्रमों में जटिलता का प्रबंधन करना होगा, जैसे कि चीजों के लाभ के बिना if...else। यह आपको उच्च स्तरीय कार्यक्रमों को सरल लिखने में मदद करेगा, क्योंकि विधानसभा के अनुभव ने आपको सिखाया होगा कि यह पढ़ना कितना आसान है।

इसके अलावा, याद रखें कि असेंबली एक भाषा नहीं है! यह एक सामान्य शब्द है, जिसका मूल रूप से एक प्रोसेसर का निर्देश सेट है जिसे एक प्रतीकात्मक भाषा में सार किया गया है। विभिन्न प्रोसेसर में अलग-अलग निर्देश सेट होते हैं, और इसलिए अलग-अलग विधानसभा भाषाएं होती हैं। जब आप 'असेंबली' सीखते हैं, तो आप एक प्रक्रिया सीखते हैं, न कि एक भाषा।


8

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

कंप्यूटर संगठन और डिजाइन का प्रयास करें


1

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

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


1

आपको पता होना चाहिए कि यह क्या है और कंप्यूटर क्या कर रहा है। Knuth के MIX की तरह कुछ सीखने से आपको मदद मिलेगी। ज्यादातर अपने कोड की दक्षता का न्याय करने में सक्षम है। जाओ कंप्यूटर प्रोग्रामिंग की कला प्राप्त करें और इसे पढ़ें। यह आपको एक स्मार्ट प्रोग्रामर बना देगा।


1

क्या आपकी दिशा से संबंधित सामान का अध्ययन करने पर ध्यान देना अधिक उचित नहीं है? या क्या कोई कारण है कि आपको निम्न-स्तरीय मूल बातें सीखने के लिए कुछ समय बिताना चाहिए?

उत्तर:

  1. यदि आप एम्बेडेड सिस्टम प्रोग्राम करने के लिए अपनी दिशा बदलने की योजना नहीं बना रहे हैं, तो असाध्य सीखने का कोई कारण नहीं है। यह भी सोचा कि असेंबली सीपीयू पर निर्भर है आप कुछ मूल बातें सीख सकते हैं, लेकिन आपका ज्ञान सीपीयू वास्तुकला और उस सीपीयू के लिए निर्देश पर आधारित होगा।
  2. मान लीजिए कि आप विंडोज के लिए कोड करते हैं। यदि आप उच्च स्तर की भाषा की तुलना में निम्न स्तर सीखना चाहते हैं जो आपको वर्तमान दिशा में लाभ पहुंचा सकती है, तो मैं आपको Windows I गहरी, Windows API, Windows मेमोरी प्रबंधन आदि सीखने की सलाह दूंगा। बस आप जिस OS / प्लेटफ़ॉर्म पर कोडिंग कर रहे हैं, उसे सीखें।
  3. अपनी वर्तमान उच्च स्तरीय भाषा, जैसे स्मृति प्रबंधन, कचरा संग्रह आदि पर अपने कौशल में सुधार करें। यदि आप निम्न स्तर पर जाना चाहते हैं।

0

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


0

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


0

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

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

अंत में, यही कारण है कि कम्प्यूटिंग में सभ्य विश्वविद्यालय / कॉलेज के पाठ्यक्रम में हर चीज से पहले अच्छी गणित की क्षमता मांगी जाती है, क्योंकि यह प्रभावी रूप से नीचे की ओर है।

Maths -> Physics                ->
      -> Chemistry -> Materials -> Hardware Design -> Microcode      -> Assembler
                                                   -> Bus Interfaces -> Peripherals

... Assembler    -> Low Level      -> High Level   ->
... OS / Drivers -> API Level      -> Applications -> User

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

तो: क्या आपको एक उच्च-स्तरीय कोडर के रूप में कोडांतरक को जानने की आवश्यकता है?  इस से मदद मिलेगी।


0

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

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

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