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