निम्न स्तर की प्रोग्रामिंग - मेरे लिए इसमें क्या है? [बन्द है]


32

वर्षों से मैंने "निम्न स्तर" की भाषाओं पर विचार करते हुए खुदाई करने पर विचार किया है। मेरे लिए इसका मतलब है सी और असेंबली। हालाँकि मेरे पास इसके लिए अभी तक कोई समय नहीं था, और न ही यह कभी-कभी निराला रहा है।

अब चूँकि मुझे कोई भी विषमता नहीं दिख रही है, मुझे ऐसा लग रहा है कि मुझे या तो बस कुछ समय निर्धारित करना चाहिए जब मैं इस विषय का अध्ययन करूंगा या योजना को हमेशा के लिए छोड़ दूंगा।

मेरा स्थान

पिछले 4 वर्षों से मैंने "वेब प्रौद्योगिकियों" पर ध्यान केंद्रित किया है, जो बदल सकता है, और मैं एक एप्लिकेशन डेवलपर हूं, जो बदलने की संभावना नहीं है।

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

अच्छी उपयोगिता हासिल करने के लिए, मेरा मानना ​​है कि निम्नलिखित चीजें व्यवहार्य हैं

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

मुझे लगता है कि प्रदर्शन को छोड़कर निम्न स्तर की प्रोग्रामिंग मेरी मदद करने वाली नहीं है। लेकिन प्रदर्शन के लिए निम्न स्तर की भाषा में एक संपूर्ण ऐप लिखना मेरे लिए समय से पहले का अनुकूलन है।

मेरा प्रश्न

निम्न स्तर की प्रोग्रामिंग मुझे क्या सिखा सकती है, अन्य भाषाएं मुझे क्या नहीं सिखाएंगी? क्या मुझे कुछ याद आ रहा है, या यह सिर्फ एक कौशल है, जो कि अनुप्रयोग विकास के लिए बहुत कम उपयोग है? कृपया समझें, कि मैं C और असेंबली के मूल्य पर सवाल नहीं उठा रहा हूँ। यह सिर्फ इतना है कि मेरे रोजमर्रा के जीवन में, मैं काफी खुश हूं कि उस दुनिया की सभी पेचीदगियां दूर हो गई हैं और मेरे लिए प्रबंधित की जाती हैं (ज्यादातर सी / सी ++ और खुद विधानसभा में लिखी गई परतों द्वारा)। मुझे अभी कोई अवधारणा नहीं दिख रही है, यह मेरे लिए नया हो सकता है, केवल विवरण मुझे अपने सिर के साथ सामान करना होगा। तो इसमें मेरे लिए क्या है?

मेरा निष्कर्ष

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


6
@ THELQ: मेरा सवाल यह नहीं है कि इसका उपयोग क्यों करें , लेकिन मैं इससे क्या सीख सकता हूं
:

1
उदाहरण: मूल बातें वापस
17

जवाबों:


9

निम्न स्तर की प्रोग्रामिंग कोने के मामलों के लिए होती है जहां सामान्य डेस्कटॉप कंप्यूटर पर तुरंत मौजूद नहीं होने की आवश्यकता होती है। यह एक गति अड़चन हो सकती है, या एक स्मृति अड़चन या कुछ पूरी तरह से अलग हो सकती है, और यह देखना बहुत ही दिलचस्प है कि उन आवश्यकताओं को क्या किया जा सकता है।

इसे हाइकस या लाइमेरिक्स के रूप में सोचें, जहां प्रतिबंध इसे दिलचस्प बनाते हैं।

आज आपको जो असंभव लग रहा है उसमें क्या संभव है, इसका अंदाजा लगाने के लिए, यहां सबसे बड़ी हैक में से एक है। 1 Kb RAM में शतरंज! http://users.ox.ac.uk/~uzdm0006/scans/1kchess/


1
मुझे लगता है कि मैं वास्तव में "प्रतिबंधों को दिलचस्प बनाने" के लिए जाने वाला हूं। यहां उल्लिखित सभी चीजों में से, यह संभवतः सबसे अच्छा है। स्कूल में वापस, मैं अपने कैलकुलेटर पर 32kB मेमोरी और 8Mhz सीपीयू के साथ गेम खेल रहा हूं। यह मज़ेदार था, फिर भी मैंने बहुत कुछ नहीं सीखा जिससे मैं अब तक लाभ उठा सकता था।
back2dos

डाउनवॉटर, कृपया उल्लेख क्यों करें?

29

मैं अभी हाल ही में यही सोच रहा था। मैं वर्तमान में खुद को C # डेवलपर के रूप में मानता हूं - जो मेरे करियर के लिए पूरी तरह से ठीक है।

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

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

पुरानी भाषाओं का उपयोग करके, मुझे लगता है कि आप अपने आप को बहुत कुछ करने के लिए मजबूर हैं। C # में मैं कुछ ऐसा कर सकता हूं myArray.SortBy(x=>x.Name)। कोई रास्ता नहीं मैं ऐसा करने में सक्षम हो जाएगा। सी में मैं स्वीकार कर रहा हूँ कि भाषा मेरे लिए सबसे अच्छा छँटाई करेगी। अगर मैं इसे सी में करना था, तो मैं अपने विश्वविद्यालय के मॉड्यूल के दिनों में वापस जा सकता हूं और अपने विभिन्न प्रकार और खोज एल्गोरिदम को संशोधित करूंगा।

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


15
+1 हार्डवेयर में घूमने के प्यार के लिए और क्या चिकोटी देखते हुए - एक असली गीक
गैरी रोवे

2
यदि आप चाहें तो आप अपने आप को C # में सॉर्ट फ़ंक्शन लिख सकते हैं। यदि आप चाहते हैं तो आप बस C में सॉर्ट करने के लिए लाइब्रेरी फ़ंक्शन का उपयोग कर सकते हैं: gnu.org/s/libc/manual/html_node/Array-Sort-Function.html। मैं यहां तक ​​कि पुरानी भाषाओं का उपयोग करके भी कहूंगा, आपको खुद कम चीजें करनी होंगी। क्योंकि ज्यादातर समस्याएं पहले ही हल हो चुकी हैं। : वैसे भी पहिया reinenting से लोगों को नहीं रोकता है यही कारण है कि
back2dos

15

मेरा सुझाव एक बौद्धिक जिज्ञासा के रूप में सी के साथ खेलने के लिए है। भारी समय निवेश न करें क्योंकि यह इसके लायक नहीं है।

सुझाए गए लक्ष्य:

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

8

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

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

यह आपकी नींव में सुधार करेगा, लेकिन यह शायद आपके वेब ऐप को बेहतर नहीं करेगा


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

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

1
@ जोर्ग: दिलचस्प है। Intel x86 या 6502s की तुलना में इनमें से कितने CPU सक्रिय वाणिज्यिक उपयोग में हैं?
स्टीवन ए। लोव

1
@ Jörg, आप इन CPU को कहाँ पाते हैं?

1
@ थोर: गति यहां सवाल नहीं है, शिक्षा है।
स्टीवन ए। लोव

8

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


2
+1 इस धारणा के लिए कि हर भाषा आपके विचार में कैसे बदलती है।
सीन

7

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


1
गीक मस्ती के लिए +1। हालांकि मुझे कहना होगा, मैं एक गीक नहीं हूं। और मुझे हार्डवेयर से नफरत है :)
back2dos

1
गति अंतर आमतौर पर अप्रासंगिक है। यह वेब ऐप्स के लिए विशेष रूप से सच है, जहां सर्वर-साइड प्रसंस्करण आमतौर पर अड़चन नहीं है।
डेविड थॉर्नले

डेविड: मैं औसत ब्रेड-एंड-बटर वेब ऐप के लिए पूरी तरह से सहमत हूं। अन्य डोमेन में, अंतर बहुत प्रासंगिक हो सकता है।
15:28 बजे user281377

1
@ back2dos, यदि हार्डवेयर के करीब प्रोग्रामिंग का विचार आपको अपील नहीं करता है, तो मैं कहूंगा कि इसके साथ परेशान मत करो। यह खुद को लैटिन सीखने के लिए मजबूर करने जैसा होगा क्योंकि यह बहुत बाद की रोमांस भाषाओं का आधार था।
tcrosley

2
पर्याप्त मेमोरी जावा सी। की तुलना में अधिक तेज या तेज है

5

जिज्ञासा के लिए हुर्रे!

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

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

इसके बाद की सबसे अच्छी बात: एक सीपीयू सिम्युलेटर (एमुलेटर में खिलौना; मैं उन शब्दों को मिलाता हूं) - ये Z80, 6502, 8086 ... सभी पुराने 8-बिट्स के लिए मौजूद हैं। यह एक प्रोग्रामर के लिए सबसे अधिक शैक्षिक और मजेदार हो सकता है जो यह नहीं जानता है कि टांका लगाने वाले लोहे का कौन सा सिरा पकड़ना है (हालांकि कोई यह सीखता है कि बहुत तेज :) वीडियो मेमोरी में टेक्स्ट कैसे लिखा जाता है, असेंबली कोड ट्रिक कैसे प्रदर्शन के साथ मदद करते हैं। .. इस स्तर पर खोज करने के लिए बहुत सारी मजेदार चीजें हैं।

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


+1 क्योंकि यह एकमात्र ऐसा उत्तर था जो इंगित करता था। मैंने सोचा था कि # 1 और स्वीकृत उत्तर होगा।
एरिक

4

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

इसके अलावा, जो भी किसी भी अन्य भाषा में क्रमादेशित है, चाहे वह कितना भी अच्छा क्यों न हो, उसे गोल-गोल घुमाया जा सकता है।


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

ट्रांजिस्टर और लॉजिक चिप्स से अपने स्वयं के सीपीयू का निर्माण करके कोई भी इस तरह के अंडर-हुड रहस्य से बच सकता है: डी (मेरी पसंदीदा तकनीक कल्पनाओं में से एक!) एक महान जवाब के लिए वैसे भी +1।
डैरनडब्ल्यू

निष्पक्ष बिंदु! यद्यपि जब मैंने अंतिम बार कोडांतरक हाइपरथ्रेडिंग का उपयोग किया था, तो शायद आमतौर पर सीपीयू के बजाय तेजी से सिलाई की बात की जाती थी ...
Dan O

2

क्या निम्न स्तर की प्रोग्रामिंग सीखने / अभ्यास करने का कोई अच्छा कारण है। संदर्भ के आधार पर मेरे पास खुद के विभिन्न जवाब हैं।

सबसे पहले, मैं C प्रोग्रामिंग (लेकिन यह भी OCaml और Java) सिखा रहा हूं, छात्र को हार्ड साइड से प्रोग्रामिंग सीखने के लिए प्रेरित करना शायद कार्य का सबसे कठिन हिस्सा है। अब तक मुझे मिला सबसे अच्छा तर्क "समझ" है: उच्च स्तर की भाषाएं कई अंतर्निहित तंत्रों को छिपाती हैं और कुछ समय अच्छे के लिए नहीं, वे आपको उच्च स्तर पर रहने के लिए भी धक्का देते हैं जब कुछ निम्न स्तर की चालें वास्तव में उपयोगी हो सकती हैं ( प्रदर्शन के लिए, अधिकांश समय।) यह समझना कि आप जो उपयोग कर रहे हैं वह वास्तव में इसे बेहतर उपयोग करने में मदद कर सकता है। मेरे शिक्षण अनुभव ने मुझे साबित कर दिया है कि जिन छात्रों ने निचले स्तर की प्रोग्रामिंग सीखी है (और अन्य उपयोगकर्ता उन्मुख नहीं हैं, ऐसे कंपाइलर) अधिक अनुकूलनीय हैं और तेजी से नए उच्च स्तर की अवधारणा या उपकरण सीखते हैं।

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

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

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


1

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


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

4
@ back2dos, खेल इंजन अभी कहीं नहीं दिखाई देते हैं - किसी को उन्हें लिखना होगा। और आपको क्या लगता है कि OpenGL में लिखा गया है? सी नहीं#। इन दिनों अधिकांश अनुप्रयोगों के लिए निम्न स्तरीय भाषाओं का उपयोग करने की आवश्यकता नहीं है ... लेकिन बहुत सारे लोग अन्य क्षेत्रों में काम करते हैं जिन्हें इसकी आवश्यकता होती है।
ग्रैंडमास्टरबी 20

1

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

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

1) गंदी मेमोरी ट्रिक्स। C यह समझने का सबसे अच्छा तरीका है कि प्रोग्रामर पागलपन में कोई नीचे नहीं है :)

2) GOTO का उपयोग वास्तव में (और उपयोगी) रोलबैक त्रुटियों के लिए किया जाता है

3) बेहतर सीखें कि मेमोरी आवंटन कैसे काम करता है (हीप और स्टैक के बीच अंतर?)।

तो मूल रूप से मेरी थीसिस है: यदि आप पहले ही विश्वविद्यालय समाप्त कर चुके हैं और आपको अभी भी C की आवश्यकता नहीं है, तो इसे न सीखें :)


2
C को यह जानने के लिए कि चीजें निम्न स्तर पर कैसे काम करती हैं, यह समझने में मदद कर सकती है कि जब आप टपका हुआ हो तो चीजें गलत क्यों हो रही हैं।
माइकल शॉ

1

आपको निम्न स्तरीय भाषाओं को समझने की आवश्यकता नहीं है, लेकिन आपको यह समझना चाहिए कि आपकी चुनी हुई उच्च स्तरीय भाषा के कवर के नीचे क्या चल रहा है। निम्न स्तर की भाषा का उपयोग करना आपको यह सिखाएगा, लेकिन यह एकमात्र तरीका नहीं है।

यहां निम्न स्तर की अवधारणाओं के कुछ उदाहरण दिए गए हैं जो उच्च स्तरीय भाषाओं को प्रभावित कर सकते हैं।

संकेत:

List<object> listOne = new List<object>();
List<object> listTwo = listOne;

listTwo.Add(new object());

Debug.WriteLine(listOne.Count); //do you know what this will be?

स्ट्रिंग्स:

string initial = "initial";
string another = initial;

another = "changed!";
Debug.WriteLine(initial); //what about this?

सूची:

जब आप किसी सूची को किसी लिंक्डलिस्ट में उपयोग करते हैं? (कोई सूची कैसे काम करती है, इसके निम्न स्तर पर समझे बिना यह जानना लगभग असंभव है)

-

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


1

निम्न स्तर की प्रोग्रामिंग मुझे क्या सिखा सकती है, अन्य भाषाएं मुझे क्या नहीं सिखाएंगी?

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

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

इसके अलावा, आप बिट्स और बाइट्स सीखेंगे। बिट जोड़तोड़, हेक्साडेसिमल आदि ये चीजें आप अब और तब भी वेब / डेस्कटॉप प्रोग्रामिंग करते समय सामना कर सकते हैं। एन्क्रिप्शन एल्गोरिदम एक ऐसा उदाहरण है जहां इसका उपयोग किया जाता है।

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