पहली प्रोग्रामिंग लैंग्वेज के रूप में असेंबली? [बन्द है]


12

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

नोट: मैं कोई शिक्षक नहीं हूँ, बस उत्सुक हूँ


5
मुझे लगता है कि यह कंप्यूटर विज्ञान और सॉफ्टवेयर इंजीनियरिंग / विकास का अध्ययन करने वाले लोगों के लिए बेहतर है
इमरान उमर बुकश

1
@ इमरान मैं प्रिंसिपल से सहमत हूं, लेकिन कॉलेज के हर स्तर के प्रोग्राम के बारे में मैं सोच सकता हूं कि कंप्यूटर साइंस में डिग्री हो, जो ज्यादातर सॉफ्टवेयर इंजीनियरिंग में काम करने वाले लोगों द्वारा कमाए जाते हैं। (मैं इस सवाल को एक प्रोग्रामिंग कैरियर के लिए एक गंभीर आधार के बारे में मान रहा हूं, उदाहरण के लिए एक हाई-स्कूल सर्वे कोर्स नहीं)
G__

7
@ इमरान - मैंने पाया कि थोड़ा आश्चर्यचकित हूं। कंप्यूटर विज्ञान निश्चित रूप से गणित और सिद्धांत की ओर अधिक झुकाव है? बिट-फ़िडलिंग की तुलना में सेट्स, एब्स्ट्रैक्ट अलजेब्रा और एसिम्प्टोटिक नोटेशन में अधिक रुचि और मूव-ब्ला-टू-ब्लाह की अंतहीन पुनरावृत्ति।
स्टीव

2
कंप्यूटर विज्ञान में निश्चित रूप से अमूर्त विषय हैं, लेकिन यह कुछ मामलों में "हार्डवेयर के करीब" भी है। मैंने एक बार एक कंप्यूटर विज्ञान सम्मेलन, एलआईसीएस में भाग लिया। मुझे याद है कि इसके पास विभिन्न छंटाई वाले एल्गोरिदम के डेटा स्थानीयता के बारे में कागजात थे जो मुझे लगता है कि एल्गोरिदम की व्यावहारिक दक्षता के अध्ययन के लिए सैद्धांतिक नींव देता है। असेंबली के बारे में, मुझे व्यक्तिगत रूप से यह कुछ सैद्धांतिक संगणना मॉडल (ट्यूरिंग मशीन, काउंटर मशीन ...) से मिलता जुलता लगता है
जोह 12

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

जवाबों:


14

असेंबली कोड के साथ एक नए प्रोग्रामर को प्रेरित करना मुश्किल होगा। एक गतिशील हैलो, उपयोगकर्ता वेबसाइट कम प्रयास के साथ बहुत अधिक कूलर है। मैं यह नहीं कह रहा हूं कि मौलिक पाठ समान हैं, लेकिन एक परिचयात्मक पाठ्यक्रम में एक बड़ी प्रेरणादायक सामग्री होने वाली है, या फिर कोई दूसरा पाठ्यक्रम नहीं होगा।

मुझे याद है कि मेरे शुरुआती प्रोग्रामिंग पाठ्यक्रमों को स्कीम में पढ़ाया गया था और मैं ज्यादातर निराश था कि मैं आसानी से एक .exe और "रन" मेरे प्रोग्राम को संकलित नहीं कर सकता था (मुझे लगा कि एमएस विज़ुअल बेसिक प्रोग्रामिंग का अंत-सभी था)। यह वर्षों बाद तक नहीं था कि मैं वास्तव में समझ गया था कि मैं किस शक्तिशाली उपकरण के साथ खेल रहा था। मुझे लगता है कि मैंने इसे और अधिक सराहा होगा और उन पाठों को बेहतर तरीके से प्राप्त किया होगा, यदि मुझे कुछ शुरुआती अनुभव कुछ पहले से अधिक व्यावहारिक थे।


20
मैंने कई छात्रों को देखा है जो एक एलईडी ब्लिंक और एक मोटर चाल बनाने के लिए बहुत अधिक चकित थे।
whatsisname

1
@Whatsisname +1, जो एक अच्छा प्रभावशाली डेमो बना देगा, जब तक कि इसे इलेक्ट्रॉनिक्स में पकड़े बिना किया जा सकता है। बेशक, यह एक उच्च-स्तरीय भाषा के साथ भी किया जा सकता है यानी रूम्बा हैकिंग, अगर "ड्राइवर" एक प्रशिक्षक-प्रदान किए गए ब्लैक बॉक्स थे।
G__

1
VIC20, C = 64 और इसी तरह की मशीनों पर असेंबली द्वारा नए प्रोग्रामर को प्रेरित किया गया था।
जायस

2
@Gaius पहले नहीं! आप उन मशीनों को चालू करते हैं और आप एक बुनियादी दुभाषिया में हैं। असेंबली अनुभव की एक उचित राशि के बाद आती है और जो कुछ कर सकती है उसकी सीमाओं को
मारती

1
@whatsisname लेकिन आप एलईडी को ब्लिंक करने और असेंबली सीखने के लिए बिना मोटर्स को हिलाने के लिए Arduino की तरह कुछ का उपयोग कर सकते हैं
Ken लियू

12

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

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

क्या अधिक दिलचस्प लगता है, एक सरल गेम के लिए एक तेज प्रोटोटाइप लिखना और एल्गोरिथ्म पर बदलाव के साथ, या रजिस्टरों और निम्न-स्तरीय सामान के साथ संघर्ष करना?


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

10
CashCommons पर @ जॉन: खराब सादृश्य। असेंबलर से शुरू करना हथौड़ों, कीबोर्ड, वेट और डैम्पर्स को शुरू करने जैसा है। और फिर ब्लैक-की, व्हाइट-कुंजी व्यवसाय को समझाने के लिए संगीत सिद्धांत (पंद्रहवें चक्र) पर आगे बढ़ रहा है। फिर एक पैमाने पर खेलने से पहले अभी तक अधिक संगीत सिद्धांत पर आगे बढ़ रहा है।
S.Lott

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

3
CashCommons पर @ जॉन: "एक पियानो का निर्माण या मरम्मत"। यही कोडांतरक के साथ सादृश्य है। कोडांतरक में एक तुच्छ "हैलो वर्ल्ड" लिखा जा सकता है, लेकिन यह सिर्फ ओएस एपीआई कॉल है - प्रभाव में कोडांतरक के सभी भयानक विवरणों को अनदेखा करता है। I / O ड्राइवरों को लिखने के लिए, कोडांतरक आवश्यक है। उसी तरह हथौड़ों और डैम्पर्स के निर्माण और प्रदर्शन के बारे में है, प्रदर्शन नहीं।
एस.लॉट

1
@ S.Lott: हम्म्म्म ... मुझे लगता है कि विशेष निर्देश सेट चिप पर निर्भर करता है, है ना? अच्छी बात।
जॉन

7

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

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

यह हो सकता है , अच्छी तरह से काम करता है, तो यह सही किया है। बस थोड़ा सावधान रहें...


समस्या की जटिलता के लिए +1। मेरा मत उच्च स्तरीय भाषा कार्यान्वयन के खिलाफ कुछ कोडांतरक कार्यान्वयन के विपरीत होगा। और शायद x86 के बजाय एक एमुलेटर में 68000 कोडांतरक का उपयोग करें - मुझे नहीं पता कि x86 / amd64 कोडांतरक कैसे विकसित हुआ है, लेकिन 68000 8086 रास्ता-बैक के साथ काम करने के लिए बहुत साफ और आसान था। शायद यह भी विचार करने योग्य है - एक वर्चुअल मशीन असेंबलर जैसे कि आप एलएलवीएम के साथ मिल सकते हैं। असली असेंबलर के समान नहीं, लेकिन यह बहुत सारे समान सिद्धांतों को साझा करता है, और शायद अधिक प्रासंगिक है।
स्टीव314 19

C के साथ समवर्ती ASM सिखाना एक बहुत अच्छा विचार लगता है
Anto

@ Steve314: मैं 86 कोडांतरक पर नहीं कर रहा हूँ, लेकिन ऐसा लगता है यह 8086. की तुलना में अधिक जटिल हो गया है
डेविड थोर्नले

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

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

7

असेंबली पहली भाषा थी जिसे हमने इलेक्ट्रॉनिक्स स्कूल (1900 के दशक में) में सीखा था और यह एक प्राकृतिक पसंद की तरह लग रहा था। हमने असतत घटकों से हमारे पाठ्यक्रमों के माध्यम से, रेसिस्टर-ट्रांजिस्टर लॉजिक, लॉजिक गेट्स, इंटीग्रेटेड सर्किट, प्रोसेसर, और असेंबली में प्रोग्रामिंग पर काम किया। इन कक्षाओं में बहुत सारे छात्रों ने पहले कभी भी किसी भी भाषा में प्रोग्राम नहीं किया था और उन्होंने इसे सही तरीके से उठाया।

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


7

एक बात सुनिश्चित है, अगर लोग पहले विधानसभा को सीखते हैं, इसे बनाते हैं, तो वे अद्भुत प्रोग्रामर होंगे।

यह मुझे याद दिलाता है कि मैंने कब ड्राइव करना सीखा। मेरी मम्मी ने जिद की

आत्मविश्वास हासिल करने तक एक स्वचालित कार पर जानें, और फिर आप हमारी मैनुअल कारों को चला सकते हैं।

यह तर्क वह नहीं चाहती थी कि मैं जितना संभव हो उससे अधिक विचलित होऊं, लेकिन एक ही बार में।

इसे लागू करने के लिए सीखें कि कैसे प्रोग्राम करना है, क्या एक शिक्षार्थी पर एक बार में सब कुछ फेंकना आवश्यक है? वे सीखते हैं कि एक चर क्या है उसी समय वे सीखते हैं कि वे कितने डेटा को किस तरह के रजिस्टर में संग्रहीत कर सकते हैं?

आधे से अधिक वर्ग ने हमारी असेंबली क्लास को विफल कर दिया, और यह उन लोगों का एक समूह था, जिन्होंने उस समय 2+ वर्षों के लिए खुद को प्रोग्रामिंग का जानकार माना था।

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


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

1
क्या आपने इस संभावना पर विचार किया है कि प्रशिक्षक ने असेंबली लैंग्वेज क्लास पढ़ाने का काम कम-से-कम किया?
जॉन आर। स्ट्रॉहैम

मुझे लगता है कि उन्होंने एक अद्भुत काम किया।
3

3

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

नहीं

लेकिन किसी को मशीन की अच्छी समझ होगी

वह लाभप्रद क्यों है? क्या आप एक उदाहरण या संकेत दे सकते हैं कि यह किसी भी मूल्य का कैसे हो सकता है?

फायदे और नुकसान?

लाभ: कोई नहीं।

नुकसान:

  • झंडे और राज्यों और रजिस्टरों और जटिल मेमोरी-एड्रेसिंग योजनाओं और I / O उपकरणों और DMA के बारे में यादृच्छिक ट्रिविया का एक अव्यवस्था और घड़ी चक्र और सामान। जिनमें से कोई भी आधुनिक वीएम-आधारित भाषाओं और कंप्यूटिंग को समझने में मदद नहीं करता है।

  • वास्तविक समस्या-समाधान जिससे कंप्यूटर वास्तव में लागू होते हैं, से एक डिस्कनेक्ट।

  • अंत-उपयोगकर्ताओं से एक तलाक और व्यावहारिक डेटा और प्रसंस्करण समस्याओं को हल करने की आवश्यकता है।

  • मशीन और आभासी मशीन और संकलक और दुभाषिया के स्पष्टीकरण और दुनिया को पकड़े हुए कछुओं के पूरे ढेर की एक अनावश्यक आवश्यकता।

  • बहुत सारे विस्तृत "यह एक उच्च स्तर की भाषा में एक 'वस्तु' का भौतिक कार्यान्वयन है जो वे अंततः आते हैं।

  • उच्च स्तरीय भाषा में बहुत सारे विस्तृत "यह है कि कैसे विधि कार्यों को भेजा जाता है" जो अंततः वे आते हैं।

  • बहुत सारे "यह 80386 पर लागू नहीं होता है, लेकिन 80586 चिपसेट पर लागू होता है" स्पष्टीकरण।

  • बहुत से निम्न-स्तरीय OS API कॉल करने से ASM प्रोग्राम कुछ भी होता है जो किसी के द्वारा उपयोगी होने के समान प्रतीत होता है।

पहली प्रोग्रामिंग भाषा का बिंदु चिपसेट में महारत हासिल करना नहीं है।

पहली प्रोग्रामिंग लैंग्वेज की बात है

  1. समझें कि कंप्यूटिंग के बारे में कैसे सोचना है।

  2. समझें कि उपयोगी डेटा प्रोसेसिंग कैसे करें।

  3. समझें कि कैसे कुछ किया जाए। डिजाइन - कोड - परीक्षण।


1
@ एस.लॉट - ज़रूर, यह मेरे मूल प्रश्न का बिंदु नहीं है, लेकिन उच्च स्तरीय भाषाओं में जाने से पहले इनका होना फायदेमंद हो सकता है । मुझे गलत मत समझो, तुम एक वैध बिंदु बनाओ।
Anto

3
-1 आपके बहुत सारे नुकसान मैं फायदे पर विचार करता हूं। यह जानने के लिए बेहतर है कि निम्न स्तर कैसे काम करता है, इससे पहले कि आप इसे ऊपर से उपयोग करें। नींव महत्वपूर्ण हैं।
परिक्रमा

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

4
कोडांतरक का लाभ यह प्रदर्शित करता है कि एक वास्तविक कंप्यूटर कैसे काम करता है। तुम्हे पता हैं। सब कुछ वास्तव में चलता है
पॉल नाथन 20

1
@ एस.लॉट - नहीं, लेकिन इसका मतलब है कि आप बहुत से पुराने ज्ञान का उपयोग कर सकते हैं जो आपने इकट्ठा किए हैं और समय के साथ नए ज्ञान को जोड़ते हैं। देखो, उच्च-स्तरीय भाषाएं जैसे कि पायथन समय के साथ नए संस्करणों के साथ आती हैं, लेकिन पुराना ज्ञान अभी भी प्रयोग करने योग्य है (और वास्तव में, पायथन ने v3 के साथ पीछे की संगतता को तोड़ दिया)
Anto

3

यदि मुझे एक पाठ्यक्रम डिजाइन करने का काम सौंपा गया था, तो मेरे पास पहले सेमेस्टर में दो पाठ्यक्रम होंगे: asm + बेसिक कंप्यूटर ऑर्गनाइजेशन / आर्किटेक्चर, और स्कीम में स्थापित एक SICP- आधारित कोर्स। दूसरा सेमेस्टर स्कीम में डेटा संरचनाओं और प्राथमिक एल्गोरिदम के आसपास उन्मुख होगा।

दूसरा वर्ष डेल्फी, C ++ या C # में से एक का उपयोग करके एक साल की परियोजना होगी, जो आधुनिक सॉफ्टवेयर डिजाइन (OO डिजाइन, कुछ कार्यात्मक डिजाइन, सॉफ्टवेयर इंजीनियरिंग, संस्करण नियंत्रण, आदि) पर केंद्रित है।

यह प्रभाव अमूर्त और व्यावहारिक दोनों में गहन ग्राउंडिंग देने के लिए होना चाहिए, तीसरे और चौथे वर्षों में गहराई से पाठ्यक्रमों के लिए अग्रणी।


3

मैं टीए परिचयात्मक कंप्यूटर विज्ञान कक्षाओं में जाता था, और मुझे लगता है कि यह एक बुरा विचार है।

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

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


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

3

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

मैंने बहुत कुछ सीखा कि कैसे कमोडोर ने काम किया, लेकिन मोटरोला चिप में एक बहुत ही सरल ओपोड सेट था। 255 से कम opcodes को एक दूसरे से अलग रखना बहुत मुश्किल नहीं है। मैं Intel 8086 के लिए प्रोग्रामिंग के लिए Motorolla 6510 चिप पर अपने अनुभव को पार्ले करने में सक्षम नहीं था । चिप्स और सिस्टम आर्किटेक्चर बहुत अलग थे। मुझे लगता है कि मुझे अमीगा की मोटरोला 68000 चिप के साथ-साथ चलने में भी यही परेशानी होगी।

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

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

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


1

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

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


0

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


0

मुझे लगता है कि विधानसभा भाषा केवल तभी समझ में आने वाली है जब आप चीजों पर ध्यान केंद्रित करेंगे:

  • मेमोरी प्रबंधन तकनीक
  • HW IO (विशेषकर समय और प्रदर्शन संबंधी चुनौतियाँ)
  • सीपीयू सुविधाएँ - विशेष रूप से, सुरक्षा सुविधाएँ

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

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

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