आप दूसरे का कोड कैसे पढ़ते हैं? [बन्द है]


23

लगभग हर उन्नत प्रोग्रामर का कहना है कि अन्य पेशेवरों के कोड को पढ़ना बहुत उपयोगी है। आमतौर पर वे खुले स्रोत की सलाह देते हैं।

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

जवाबों:


25

आप इसे पढ़ते हैं या नहीं?

हाँ।

यदि आप करते हैं, तो कितनी बार

रोज। लगातार। मैं कई ओपन-सोर्स प्रोजेक्ट्स (ज्यादातर पायथन-संबंधी) के साथ काम करता हूं और स्रोत को पढ़ना चाहिए क्योंकि यह सबसे सटीक प्रलेखन है।

और कोड पढ़ने की प्रक्रिया क्या है?

उम। खोलें और पढ़ें।

इसके अलावा, SVN से निपटने के लिए newbies के लिए यह थोड़ा मुश्किल है - फाइलों का एक गुच्छा। इसका क्या उपाय है?

खोलें और पढ़ें। तो और पढ़ें

यह आसान नहीं है। कुछ भी आसान नहीं है। समझने के लिए कोई रॉयल रोड नहीं है। यह काम लेता है।


आपको जवाब के लिए धन्यवाद। यह परिभाषित करने का तरीका क्या है कि कोड अच्छा है या नहीं? क्योंकि हर ओपन सोर्स प्रोजेक्ट असली पेशेवरों द्वारा नहीं किया जाता है?
सर्गेई

1
@Sergey: "यह परिभाषित करने का तरीका क्या कोड अच्छा है या नहीं?" कोड पढ़ें। "अच्छा" व्यक्तिपरक है। यदि यह मददगार है, और आप इसे समझ सकते हैं, तो यह अच्छा है। यदि यह भ्रामक है, या वास्तव में काम नहीं करता है, तो यह अच्छा नहीं है। कई, कई गुणवत्ता वाले गुण हैं: बनाए रखने योग्य, सुरक्षित, अनुकूलनीय, उच्च प्रदर्शन, आदि, आदि, कोड एक पर अच्छा हो सकता है और दूसरे में कम अच्छा हो सकता है।
एलटी

7
मैं विरोध नहीं कर सका: osnews.com/images/comics/wtfm.jpg
गैरी विलोबी

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

जबकि मैं उन लोगों की प्रशंसा करता हूं जो वापस बैठ सकते हैं और कोड पढ़ सकते हैं जैसे वे एक उपन्यास पढ़ते हैं, मुझे यह कई बार थकाऊ लगता है। मैंने महसूस किया है कि मेरे लिए 'रीडिंग कोड' वास्तव में उन गतिविधियों का वर्णन नहीं करता है जो मैं करता हूं - जो मैं करता हूं उसके लिए एक बेहतर वाक्यांश है 'कोड कॉम्प्रिहेंशन' और इसमें डॉक्यूमेंट पढ़ना, एक डिबगर में कदम रखना और यहां तक ​​कि परीक्षण पढ़ना शामिल है। मैंने कोड पढ़ने के बारे में एक लंबी पोस्ट लिखी है - technikhil.wordpress.com/2010/07/06/how-to-read-code-a-primer
निखिल

9

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

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

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


कोड पढ़ने का एक पहलू अमूर्तता है। यह जानने के लिए कि स्रोत कैसे व्यवस्थित किए जाते हैं, निश्चित रूप से कोड रीडिंग की प्रक्रिया को अमूर्त करते हैं।
डेविड गाओ

5

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

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

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


4

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


1
+1: मुझे भी। // मेरे पास एक बार एक बॉस था जिसने रिफैक्टिंग पर ध्यान दिया और मुझ पर समय बर्बाद करने का आरोप लगाया। वह समझ नहीं पाया। कैसा बेवकूफ है।
जिम जी।

2

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

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

पढ़ना शुरू करें, कुछ प्रवेश बिंदुओं या अन्यथा आवश्यक धुरी कक्षाओं / विधियों को खोजने का प्रयास करें, और यह समझने का निर्माण करें कि यह सब वहां से कैसे आता है। तुरंत नहीं होगा, समय लगेगा, लेकिन अगर कोई प्रलेखन नहीं है, तो भी किया जा सकता है।


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

0

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

लेकिन इसके अलावा, यह भाषा, प्रोग्रामिंग तकनीकों में फैले ज्ञान का एक सभ्य राशि लेता है और कोड के उद्देश्य के बारे में भी जटिल कोड में गोता लगाने में सक्षम है।

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


0

"पहले, उच्च स्तर पर शुरू होने के बाद, एक पक्षी-दृष्टि को देखें" जैसा कि @Berin Loritsch ने दावा किया है कि यदि आप किसी भी तरह के हैं तो आप unittests और / या इंटीग्रेशन को देख सकते हैं।

unittests यह देखने के लिए दिलचस्प है कि (एपी) विवरण कैसे काम करते हैं।

इंटीग्रेटेस्ट आमतौर पर बसाइनप्रोसेस पर एक अच्छा अवलोकन देता है।

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