किसी व्यक्ति को FP कोड पढ़ने के लिए कैसे सोचना चाहिए?


14

मैंने लगभग पाँच महीने पहले विश्वविद्यालय से स्नातक किया है, और पिछले चार महीनों से एक स्थानीय स्टार्टअप में काम कर रहा हूँ। विश्वविद्यालय में रहते हुए, मैंने अपने दम पर हास्केल, एफ # आदि का अध्ययन किया। हमें विश्वविद्यालय में जावा सिखाया गया था, लेकिन मैं बहुत जल्द ही कार्यात्मक प्रोग्रामिंग के संपर्क में था, और इसके साथ कहीं अधिक समय बिताया था, जितना मैंने अपूर्ण प्रोग्रामिंग के साथ किया था। नतीजतन, मेरे दिमाग को एक कार्यात्मक सोच के लिए तार दिया जाता है। मैं जिस कंपनी में शामिल हुआ, वह पायथन का उपयोग करती है, और कोड बहुत जरूरी है। मैं एक बहुत कठिन समय अनिवार्य कोड पढ़ रहा हूँ। मैं म्यूटेशन का ट्रैक नहीं रख सकता। जब for-if-else-for -... नेस्टिंग चार से अधिक स्तर गहरा हो जाता है, तो मैं कोड में क्या हो रहा है उसका ट्रैक पूरी तरह से खो देता हूं। इसे जोड़ने के लिए, पायथन एक गतिशील भाषा है, इसलिए कोड में कोई प्रकार नहीं हैं। यह कुछ हफ़्ते हो गए हैं जब से हम हमारे कोडबेस के एक हिस्से को समझने की कोशिश कर रहे हैं (जो माना जाता है कि 'मामूली रूप से जटिल है'), लेकिन मैंने इसे समझने में अब तक कोई सराहनीय प्रगति नहीं की है। कृपया मुझे उस कोड को समझने के बारे में कुछ व्यावहारिक तकनीकों की पेशकश करनी चाहिए। अग्रिम में धन्यवाद!

संपादित करें:
शायद मुझे यह भी उल्लेख करना चाहिए कि कोड में वास्तव में बहुत सारी टिप्पणियां नहीं हैं, और नाम भी बहुत सहज नहीं हैं।


1
क्या आपके पास कोई टिप्पणी या गलत टिप्पणी नहीं होगी? मुझे यकीन है कि टिप्पणी आपके द्वारा उल्लिखित शर्तों के तहत अच्छी तरह से उम्र नहीं होगी।
लैरी कोलमैन

जब तक कि कोड कोड के उस अत्यंत छोटे उपसमुच्चय में न हो, जिसे "आत्म-टिप्पणी" के रूप में जिम्मेदार ठहराया जा सकता है, तो मैं कम से कम कुछ टिप्पणियां करना चाहता हूं, जिसमें कम से कम कई सहायक संकेत शामिल हो सकते हैं जो मुझे अन्यथा अशोभनीय बकवास के माध्यम से मार्गदर्शन करने के लिए! लेकिन यह सिर्फ मुझे है!
जॉन टोबलर 27'11

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

जवाबों:


14

विरासत कोड को समझना कठिन है। इसका कार्यात्मक बनाम प्रक्रियात्मक से कोई लेना देना नहीं है।

  1. किसी तरह का एक नक्शा बनाएँ। पायथन पैकेज और मॉड्यूल का एक घटक आरेख। प्रत्येक मॉड्यूल के लिए, आपको वर्ग आरेख बनाने की आवश्यकता होगी।

  2. अजगर दुभाषिया का उपयोग करें। आपको मॉड्यूल आयात करने में सक्षम होना चाहिए, वस्तुओं का निर्माण करना चाहिए और अंतःक्रियात्मक रूप से व्यायाम करना चाहिए। यही कारण है कि अजगर लोकप्रिय है। आप यह type(x)देखने के लिए प्रिंट कर सकते हैं कि वास्तव में चर ( x ) किस प्रकार का है।

  3. जब संदेह हो, तो यूनिट टेस्ट कोड अवश्य पढ़ें। यदि कोई इकाई परीक्षण कोड नहीं है, तो आपके पास एक नया कोड आधार सीखने के अलावा बड़ी, बड़ी समस्याएँ हैं।

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

  5. 'ऑटोडोक' के साथ स्फिंक्स का उपयोग करें जो आप सीख रहे हैं।

सबसे महत्वपूर्ण हिस्सा यह है। अपने सिर में चीजों को रखना मुश्किल है। प्रलेखन फ़ाइलों पर चीजों को रखना आसान है।


6
+1। किसी भी विरासत कोड को समझना कठिन है, भले ही वह अच्छी तरह से लिखा गया हो।
क्वांट_देव

12

मैं एक बहुत कठिन समय अनिवार्य कोड पढ़ रहा हूँ। जब for-if-else-for -... नेस्टिंग चार स्तर से अधिक गहरा हो जाता है, तो मैं कोड में क्या हो रहा है उसका ट्रैक पूरी तरह से खो देता हूं।

प्रतीक्षा करें ... कोई भी इस तरह के गहरे घोंसले के स्तर के साथ पूरी तरह से कोड का ट्रैक खो देता है। या जैसा कि लिनुस टॉर्वाल्ड्स ने डाला:

यदि आपको इंडेंटेशन के 3 से अधिक स्तरों की आवश्यकता है, तो आप वैसे भी खराब हो सकते हैं, और अपने कार्यक्रम को ठीक करना चाहिए।

शायद मुझे यह भी उल्लेख करना चाहिए कि कोड में वास्तव में कई टिप्पणियां नहीं हैं, और नाम भी बहुत सहज नहीं हैं।

ऐसा लगता नहीं है जैसे आपकी कंपनी सामान्य सर्वोत्तम प्रथाओं का पालन कर रही है।

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

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

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


खरोज समस्या भी बदतर हो सकते हैं: जब भाषा स्तंभ कोड (आरपीजी) की तरह है, और वहाँ नहीं है किसी भी वास्तविक खरोज। कुछ उपकरण इसे ठीक करने का प्रयास करते हैं ...
घड़ी की कल-मेज़बान

2

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

अन्यथा, मैं सुझाव दूंगा कि जिस तरह से यह लिखा गया है, उसके लिए अधिक सामान्य अजगर कोड पढ़ने के लिए।


2

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

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


1

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

(मेरे पास ग्रहण के अच्छे परिणाम थे और साथ ही साथ पीडदेव को ग्रहण प्लगइन के रूप में)

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