जब आप यह जानते हैं कि यह वास्तव में कैसे काम करता है, तो आप कुछ कोड कैसे करते हैं? [बन्द है]


14

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

इसके बारे में गुगली करने से विम का रेपब्यू रेपो बन गया, जो मेरे लिए बेकार है क्योंकि कोडबेस बहुत बड़ा है और कोड मुझे भ्रमित कर रहा है। मुझे सी में एक टेक्स्ट एडिटर बनाने के लिए ट्यूटोरियल भी मिला जो कि तरह तरह के विम का कार्य करता है।

हालाँकि मैंने ट्यूटोरियल का अनुसरण करने के बारे में सोचा था, यह धोखा देने जैसा लगता है। Vim डेवलपर्स ने कैसे पता लगाया कि विशिष्ट ट्यूटोरियल के बिना vim कोड कैसे करें? या वे सरल पाठ संपादकों से शुरू किया था? उन्होंने यह कैसे पता लगाया कि भाषाओं और उनके प्रलेखन के ज्ञान से ही

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


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

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

3
माना। इसे आपके लिए कुछ सीखने का मौका के रूप में लें जो कई शुरुआती कठिन तरीके से सीखते हैं। थोड़ा शुरू करो । और विम का कोड भी पढ़ें। आप मौजूदा कोड को पढ़कर बहुत कुछ सीख सकते हैं।
लैवि

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

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

जवाबों:


17

यदि यह आपकी पहली प्रोग्रामिंग परियोजना है, तो एक साधारण पाठ संपादक भी जटिल हो सकता है। Vim या OS जैसी कोई चीज़ पूरी तरह से प्रश्न से बाहर है।

समस्या का अनुमोदन

सामान्य तौर पर, आरंभ करने का तरीका लगभग अधिकांश परियोजनाओं के लिए समान है, हालांकि:

  • आप अपनी आवश्यकताओं को इकट्ठा करें। सॉफ्टवेयर वास्तव में क्या करेगा?
  • आप बहुत कम आवश्यकताओं के साथ शुरू करते हैं और फिर बिट द्वारा कार्यक्षमता जोड़ते हैं।
  • आप उप-समस्याओं में अपनी वर्तमान आवश्यकताओं द्वारा उत्पन्न समस्याओं का विघटन करते हैं।
  • आप अपनी उप-समस्याओं को तब तक टालते रहें, जब तक आपको कुछ पता न हो कि आपको कैसे लागू करना है।

उदाहरण

पाठ संपादक का उदाहरण लेते हैं।

  • आप स्क्रीन पर एक पाठ फ़ाइल के एक हिस्से को प्रदर्शित करना चाहते हैं, वर्ण डालें और हटाएं और वर्तमान संस्करण को बचाएं।

  • बस एक फ़ाइल को पढ़ने और उसकी सामग्री को प्रदर्शित करने के साथ शुरू करें।

  • आप निम्नलिखित उप-समस्याओं की पहचान करेंगे (दूसरों के बीच):

    • मुझे फ़ाइल का नाम कैसे पता चलेगा?
    • किसी फ़ाइल नाम को देखते हुए, मैं फ़ाइल सामग्री कैसे प्राप्त करूं?
    • किसी फ़ाइल की सामग्री को देखते हुए, मैं उन्हें कैसे प्रदर्शित करूँ?

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

अगला चरण

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

उस समय, यह कुछ बुनियादी वास्तुकला और डिजाइन अवधारणाओं को सीखने का समय है।


हे आदमी सलाह के लिए धन्यवाद! मुझे लगता है कि मैं यह दृष्टिकोण लूंगा। मैं थोड़ा जिद्दी हूं, जब यह मेरे दिमाग को बदलने की बात आती है, लेकिन आपने जो सुझाव दिया है, मुझे लगता है कि मैं यह देखने की कोशिश करूंगा कि फाइल दर्शक कैसे बना जाए। हो सकता है कि फ़ाइल मेटाडेटा को किसी तरह दिखाने का कोई तरीका भी जोड़ें? मैं शायद खुद को समझ सकता हूं। आपका बहुत बहुत धन्यवाद!
Faithlesss

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

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

15

तुम नहीं।

यदि आपको कुछ भी करने का अस्पष्ट विचार नहीं है, तो यह संकेत है कि यह आपके मौजूदा कौशल से परे है। क्योंकि अगर आपको पता नहीं है कि कैसे शुरू करना है, तो आप निश्चित रूप से ऐप के सबसे मुश्किल हिस्से में आने पर कोई विचार नहीं करेंगे।


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

3
@ अल्फािथलेस - फाइल पढ़ने और लिखने वाली चीज़ एक बुनियादी मध्यवर्ती कदम की तरह लगती है।
टेलस्टीन

9
एक फ़ाइल दर्शक तो एक अच्छा परियोजना, जैसे की तरह एक पेजर हो सकता है less, moreया viewकार्यक्रम। वे संपादकों के कुछ पहलुओं को साझा करते हैं, जो बिना संपादित किए गए बफ़र्स की जटिलता के बिना हैं।
आमोन

@Telastyn मैं तुम्हें मिल गया। फिर एक फ़ाइल दर्शक बनाने पर गौर करें, शायद एक साधारण एक जो मूल पाठ प्रारूपों को पढ़ सकता है, और फिर यह पता लगा सकता है कि कुछ कैसे पढ़ना है, शायद एक json या csv फ़ाइल? इसे पार्स करने के लिए उतना कठिन नहीं होना चाहिए, मुझे वास्तव में स्ट्रिंग के लिए देखना होगा। मुझे लगता है कि प्रलेखन। सलाह के लिए धन्यवाद!
Faithlesss

2
@Falesslesss भी एक पंक्ति संपादक की विशेषताओं पर एक नज़र है , पाठ संपादक कार्यक्रमों के पूर्ववर्ती
Bergi

2

आपको यह तय करने की आवश्यकता है कि आप अपने पाठ संपादक को कैसे काम करना चाहते हैं।

यह शुरू से अंत तक अपनी खुद की परियोजनाओं को विकसित करने के सबसे आक्रामक और पुरस्कृत अनुभवों में से एक है। कोई भी आपको निर्माण करने के लिए आवश्यकता नहीं भेज रहा है। आपको अपनी आवश्यकताओं को विकसित करने की आवश्यकता है।

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

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

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


1

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

कई विकल्प दिमाग में आते हैं:

  • आपके द्वारा परिचित कुछ उत्पाद के कोड का अध्ययन करें। यदि आप में कुशल हैं vim, तो उस पर नज़र डालें और कुछ छोटा और अलग-थलग समझने की कोशिश करें, जैसे कि यह डेटा का प्रतिनिधित्व कैसे करता है, या किसी एकल वर्ण ( fकमांड) की खोज करता है।
  • एक बहुत ही सरल कार्यक्रम के कोड का अध्ययन करें और अपने रास्ते वहाँ से काम करते हैं: catतो आदेश wcतो grepतो sedउदाहरण के लिए।
  • एक कार्यक्रम लिखने की कोशिश करें जो संपादक की केवल एक विशेषता है। हो सकता है कि किसी फ़ाइल की प्रत्येक पंक्ति में दूसरा वर्ण हटाएं (उसे वापस लिखे बिना), या फ़ाइल के 70 में से केवल 50 लाइनों को प्रदर्शित करें।

1
सामान्य पैटर्न के बारे में थोड़ा सा जानने के बिना, मुझे लगता है कि विम जैसी बड़ी परियोजना के एक छोटे से टुकड़े को समझना भी व्यर्थ होने वाला है। हालांकि, बहुत छोटे खुले स्रोत परियोजनाओं को देखना एक अच्छा विचार है। मुझे लगता है कि इस तरह के एक कार्यक्रम के लिए एक लक्षित परिवर्तन करने का प्रयास सीखने के लिए एक शानदार तरीका होगा। लाभ: आप वास्तविक दुनिया के कार्यक्रमों में उपयोग किए जाने वाले कुछ पैटर्न सीखेंगे। नुकसान: आप एक विरोधी पैटर्न भी सीख सकते हैं।
डबल यू
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.