कोड लिखने के लिए लोग बेहद जटिल और कठिन लेखन और प्रबंधन कैसे करते हैं? [बन्द है]


27

SQLite स्रोत कोड पढ़ना IMO मिशन असंभव है। फिर भी यह काफी जटिल सॉफ्टवेयर का प्रयोग करने योग्य टुकड़ा है (यह सब के बाद एक पूर्ण विकसित डेटाबेस है) जिसे अन्य कोड से डाउनलोड, संकलित और उपयोग किया जा सकता है और यह लगातार अपडेट किया जाता है।

कोड लिखने के लिए लोग इस तरह के बेहद जटिल और कठिन लेखन को कैसे प्रबंधित करते हैं?


1
मुझे लगता है, वे नहीं करते हैं:
पावका

2
@Pawka: जहाँ "वे" SQLite लोगों को शामिल नहीं करता है।
फ्रैंक शियरर

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

1
क्या किसी ने कभी बहुत बड़ा प्रोजेक्ट देखा है जिसे पढ़ना आसान था?
जेफ डेविस

2
हायरिंग
इंटर्न्स

जवाबों:


19

जटिल और जटिल के बीच एक बड़ा अंतर है। निम्नलिखित के बारे में यह रकम है। :)

http://codebetter.com/blogs/dru.sellers/archive/2009/09/25/complex-vs-complicated.aspx

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

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

अंत में, कुछ डेवलपर के पास कोड बेस में कूदने और इसे बाहर निकालने की क्षमता नहीं है। कई लोग कोड के आधार के विशाल आकार या वास्तुकला पर अभिभूत महसूस करेंगे। दूसरों को इसमें कूदने में कोई समस्या नहीं होगी। यह सब डेवलपर्स की ताकत पर निर्भर करता है।


31

SQLite के विशिष्ट मामले में, विकास और रखरखाव में उपयोग करने के लिए उन्हें चुना गया मुख्य उपकरण स्वचालित परीक्षण है। वे अपने टेस्ट सूट में 100% कवरेज (शाखा कवरेज, स्टेटमेंट कवरेज नहीं) पर गर्व करते हैं। उनके अनुसार, यह दुनिया में सबसे अच्छे परीक्षण किए गए सॉफ़्टवेयर उत्पादों में से एक है। इसलिए उन्हें तुरंत पता चल जाता है कि जब उन्होंने कुछ जोड़ा या बदला तो एक प्रतिगमन का कारण बनता है, और उसी के परिणामस्वरूप बहुत निडरता से विकास कर सकते हैं।

http://sqlite.org/testing.html

सुंदर चौंका देने वाली संख्या - उनके पास उत्पादन कोड के रूप में परीक्षण कोड की कई पंक्तियों के रूप में लगभग 640 गुना है

संपादित करें: यह प्रश्न मृतकों में से उठाया गया है, ऐसा लगता है! और एक साल बाद थोड़ा और अधिक, वही पृष्ठ रिपोर्ट करते हैं कि उनके पास उत्पादन के रूप में परीक्षण कोड की कई पंक्तियों के रूप में 1177 बार है!


2
कोई और नहीं, लेकिन मैं इसे गर्व के बिंदु के बजाय एक समस्या के रूप में देखता हूं ?
स्टीफन

1
वास्तव में मैं नहीं मानता। डेटाबेस को सबसे पहले विश्वसनीय होना चाहिए।
ts01

5
@ स्टीफन, क्यों कई परीक्षण मामलों में एक समस्या होगी ?

1
समय की एक कमर? बहुत से परीक्षण छोटे परीक्षण (IMHO) के समान ही खराब हैं
Dainius

9
यदि परीक्षण एक संभावित मामले को कवर करता है जहां कोड विफल हो सकता है तो समय की बर्बादी कैसे हो सकती है?
रामहुंड

7
  • समय के साथ कार्यशीलता विकसित होती है।
    • नई कार्यक्षमताएं नए ग्राहकों की आवश्यकताओं से प्रेरित होती हैं।
    • पुराना कोड एक तरह से लिखा गया था, जो भविष्य में पुराने कोड को तोड़े बिना भविष्य में लागू होने वाली कार्यक्षमताओं को जोड़ने की अनुमति देता है।
  • डोमेन विशेषज्ञ (इस मामले में, डेटाबेस कंप्यूटर विज्ञान में एक प्रसिद्ध डोमेन है।)
  • सामुदायिक प्रतिक्रिया
    • कीड़े
  • खड़ी सीखने की अवस्था अच्छी तरह से तैयार और दृढ़ता के लिए कोई समस्या नहीं थी। आरामदायक बनने में 6 महीने, 1 साल या उससे भी अधिक समय लग सकता है और यही कुछ लोगों के साथ जुड़ने में सक्षम है।
  • व्यावसायिक प्रेरणाएँ। मौद्रिक समर्थन के बिना, बहुत कम लोग समय और ऊर्जा को सीखने की अवस्था में निवेश कर सकते हैं।

4

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

SQLite वास्तव में "बड़े सॉफ्टवेयर प्रोजेक्ट्स" के पैमाने पर अपेक्षाकृत छोटा है, लेकिन अगर आप विंडोज ऑपरेटिंग सिस्टम की तरह कुछ देखते हैं, तो आपके पास ऐसे लोग होंगे जो सिर्फ कर्नेल पर काम करते हैं, जो लोग सिर्फ शेल पर काम करते हैं, जो लोग सिर्फ काम करते हैं इंटरनेट एक्सप्लोरर पर, जो लोग सिर्फ विंडो मैनेजर पर काम करते हैं, आदि आदि। कोई व्यक्ति जो "शेल" में काम करता है, वह टोपी के ड्रॉप पर कर्नेल में बग को ठीक करने में सक्षम नहीं होता है।

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

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

SQLite जैसे ओपन सोर्स प्रोजेक्ट्स के लिए, यह वास्तव में थोड़ा कठिन है क्योंकि मौजूदा डेवलपर्स के लिए नए डेवलपर्स को "ट्रेन" करने के लिए कोई प्रेरणा नहीं है। तो आप पाएंगे कि आप अपने दम पर कुछ और हैं। लेकिन आप अभी भी डेवलपर फ़ोरम या मेलिंग लिस्ट पर मदद पा सकते हैं। मदद के कुछ रूप।


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

4

पढ़ने में कठिन और जटिल प्रोजेक्ट में अंतर है। यदि कोई व्यक्ति उस भाषा को गहराई से नहीं समझता है जो परियोजना लिखी गई थी या परियोजना के डोमेन का मतलब यह नहीं है कि कोड बुरी तरह से लिखा गया है।

मेरी सलाह:

  • सुनिश्चित करें कि आप परियोजना की भाषा समझते हैं। यह भाषा पर्याप्त नहीं है।
  • कोड पर हाथ डालने से पहले डोमेन के बारे में विस्तार से जानें।

मेरे लिए SQLite जटिल है और कुछ भी जटिल नहीं है। इस परियोजना का डोमेन व्यापक अवधारणाओं के बारे में गहरी समझ की मांग करता है।


3

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


1
एलओएल, मैंने इस तरह से सोमन के साथ काम किया, अगर कुछ करने के कई तरीके थे (और हमेशा वहाँ हैं) वह हमेशा सबसे जटिल, जटिल समाधान का चयन करेगा। मुझे नहीं लगता कि वह इसके बारे में जानते भी थे।
HLGEM

3

कोड लिखने के लिए लोग इस तरह के बेहद जटिल और कठिन लेखन को कैसे प्रबंधित करते हैं?

यदि वे मूल कोडर हैं, और वे इसे बनाए रखते हैं, तो वे इसे "पढ़ने के लिए जटिल और कठिन" के रूप में नहीं देखते हैं। वे शायद इसे "सरल और पढ़ने में आसान" के रूप में देखते हैं, क्योंकि उन्होंने इसे खुद लिखा था।

किसी भी कोड को समझने में समय लगता है। यह सिर्फ इतना है कि कुछ दूसरों की तुलना में अधिक समय लेते हैं :)


2

आप अपने सिर को किसी भी कोड-बेस के चारों ओर लपेट सकते हैं यदि आपके पास - दृढ़ता, धैर्य और एक पद्धतिगत दृष्टिकोण है - लेकिन मुख्य रूप से दृढ़ता :-)


1

यदि चीजें हमेशा उसी तरह से की जाएं तो प्रबंध करना बहुत आसान हो जाता है। मैं SQLite कोड नहीं जानता, लेकिन मैं ऐसे वातावरण में काम कर रहा हूं जहां कई परियोजनाएं हैं। व्यावसायिक मामले (eq लॉजिक) को समझने के अलावा, जैसा कि सब कुछ मूल रूप से हर जगह (डेटाबेस एक्सेस, आदि) किया जाता है, किसी अन्य प्रोजेक्ट पर काम करना शुरू करना अपेक्षाकृत आसान है। लंबा पाठ छोटा: उपयुक्त तरीके से कोडिंग दिशानिर्देश - जीवन और ऐसे कोड को कहीं अधिक आसान बनाते हैं। यह SQLite कोडर्स के लिए सहायकों में से एक हो सकता है।


1
  • यदि आप सॉफ़्टवेयर के मूल लेखक हैं, और आपने इसके साथ> 10 वर्षों के लिए काम किया है, और आप एक प्रतिभाशाली व्यक्ति हैं, तो पूरी बात को समझना संभव हो सकता है। जटिल सॉफ़्टवेयर के बड़े टुकड़े (जैसे कि SQLite या लिनक्स कर्नेल) में वास्तव में एक मूल लेखक होता है जिसके पास पूर्ण, गहरी समझ होती है, भले ही अन्य लोगों ने योगदान दिया हो।
  • यदि सॉफ़्टवेयर आर्किटेक्चर सेंस (उच्च सामंजस्य, कम युग्मन) है, तो पूरी बात को समझना उपयोगी परिवर्धन और उसमें संशोधन करने के लिए कोई शर्त नहीं है।
  • RDBMS या OS को समझना कुछ विशेष मामले हैं, जिनमें अंतर्निहित CS सिद्धांतों की गहरी समझ की आवश्यकता होती है। "साधारण" सॉफ़्टवेयर एप्लिकेशन के साथ ऐसा नहीं है।

1

वे इसे सरल तरीके से लिखने की कोशिश करते हैं लेकिन सरल तरीके से नहीं।

जितना हो सके उतना सरल जाना, चीजों को समझने / पढ़ने में तेज कर सकता है, भले ही इसमें कुछ समय लग सकता है।


1

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

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

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