आप प्रोग्रामिंग के पहले सिद्धांत को क्या मानते हैं?


59

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

तो, आपको क्या लगता है कि प्रोग्रामिंग का पहला सिद्धांत क्या है? मैं थोड़ी देर बाद अपना जवाब दूंगा।


हम फाइट क्लब की बात नहीं करते।
जॉब

जवाबों:


97
  1. चुंबन - यह सरल बेवकूफ रखें
  2. DRY - खुद को दोहराएं नहीं
  3. YAGNI - आपको इसकी आवश्यकता नहीं है

KISS यह रखें सरल स्मार्ट होना चाहिए। पहली बार आपको अपने कोड के एक बड़े हिस्से को फिर से लिखना होगा क्योंकि आपने स्मार्ट और एक्स्टेंसिबल डिज़ाइन नहीं किया था जिससे आप सहमत होंगे। :)

8
मुझे लगता है कि KISS होना चाहिए "यह सरल बेवकूफ रखें,!"
डेनिस सी

मैं वास्तव में एक ब्लॉग पोस्ट पर काम कर रहा हूं कि कैसे ये दोनों एक प्रोग्रामर के दिल के सबसे करीब और सबसे प्यारे हैं और एक ही समय में ये कितने ऑक्सीमोरोन हैं, जितनी बार आपको दूसरे के खिलाफ एक चुनने की आवश्यकता होगी

10
मैं YAGNI भी जोड़ूंगा।

3
@Programmin टूल - मुझे नहीं लगता कि "बेवकूफ़" बहुत अच्छा है। मुझे लगता है कि यह बताता है कि हमारे पास "स्मार्ट" होना चाहते हैं और यह अनावश्यक जटिलता के रूप में प्रकट होता है। जैसा कि मैं इसे देखता हूं, "बेवकूफ" हमें इस प्रवृत्ति को याद दिलाने की कोशिश करता है जिससे हमें यह याद रखने में मदद मिलती है कि हम शुरू में क्या सोचते हैं "स्मार्ट" आमतौर पर नहीं है।
कोडकइज़न जूल

37

कोड लिखें जैसे कि यह आप थे जो उस कोड को बनाए रखना होगा।


यह एक बहुत ही व्यावहारिक

19
कोड को इस तरह लिखें जैसे कि एक कुल्हाड़ी से चलने वाले मानस को बनाए रखना होगा। FTFY।
सेमीकॉलन

10
... और कुल्हाड़ी मारने वाला मनोरोगी जानता है कि तुम कहाँ रहते हो।
CAD

2
.., और उसने अपने कुल्हाड़ी को तेज कर दिया है ...
Roalt

1
... और वह आपकी तरफ से काम कर रहा है।
ब्रोकन_विंडो जूल

29

जितना हो सके आलसी रहें।


2
फिर, बहुत सामान्य, IMO। यह इस सवाल का जवाब देता है कि "आलसीपन आलसीपन की उचित मात्रा है, वास्तव में?", क्योंकि स्पष्ट रूप से "मैला" कुछ ऐसा है जो आप या तो नहीं चाहते हैं।

यह पर्ल के "आलस्य, अधीरता, और हब्रिस" का एक संदर्भ है

तो हम विभिन्न प्रकार के आलस्य के बारे में बात कर रहे हैं? मैंने सोचा कि "आलसी" बॉब का अर्थ है "उलझ जाने से पहले अपने कोड को व्यवस्थित करने की जहमत न

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

3
@ बाल: हाँ, यह बात है। "सच्चा आलस्य" अब अपने साथ-साथ भविष्य में भी चीजों को आसान बना रहा है। जो चीजों को ठीक से करने के समान है। यदि आप कम काम करते हैं, लेकिन बाद में अधिक काम करते हैं, तो आप "जितना संभव हो उतना आलसी" नहीं हो रहे हैं :)

23

ज़ेन, भाग I: प्रोग्रामिंग केवल सड़क है, रास्ता नहीं।

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

ज़ेन, भाग II: यदि आप जल्दी में हैं, तो धीरे-धीरे टहलें। यदि आप वास्तव में जल्दी में हैं, तो चक्कर लगाएं।

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

डिजाइन त्रुटियां सबसे कठिन हैं और / या ठीक करना, अगला चरण उन सभी भागों में प्रोग्रामिंग त्रुटियां हैं जो हर किसी पर निर्भर करती हैं, फिर "वास्तविक शो-ऑफ सॉफ्टवेयर पार्ट्स"। यदि आपको किसी प्रोजेक्ट के अंत में एक डिजाइन त्रुटि को ठीक करने की आवश्यकता है, तो उम्म, यह अच्छा नहीं है ... ;-)

ज़ेन, भाग III: अपना रास्ता जानिए, नियो।

अपने पर्यावरण, औजारों और उस सामान को जानें जिस पर आप दैनिक आधार पर भरोसा करते हैं और इसे क्रमबद्ध करते हैं ताकि यह आपके लिए काम करे। सर्वश्रेष्ठ यदि आप अपने प्रोग्रामिंग "पर्यावरण" का उपयोग करते हैं तो यह स्वाभाविक है कि आपको इसके बारे में सोचना भी नहीं है। अगर आपको नौकरी करनी है तो "फैंसी नया सामान" पेश न करें बल्कि अपना काम करें। यह सामान एक नई परियोजना में पेश किया जा सकता है, अर्थात् तब जब आपके पास इसे तैयार करने और उपयोग करने का समय हो।


उह, और फिर फिर से: मैं प्रोग्रामिंग के बारे में बोलते हुए ज़ेन भूमि में उतरा :)

@part III - जब तक आप इसे करने के लिए भुगतान नहीं कर रहे हैं तब तक "फैंसी नया सामान" न जोड़ें!
जेसन

मैट्रिक्स संदर्भ के लिए +1। मैं एक अच्छा एक के लिए एक प्रकार की मछली हूँ (कि और जेन बनाता है मुझे अजगर के बारे में सोच।)

19

KISS (यह आसान बेवकूफ रखने के लिए,)।

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


मुझे लगता है कि यह बहुत सामान्य नियम है। यह सवाल है कि "आप 'सरल' को कैसे परिभाषित करते हैं, वास्तव में"।

3
और अगर तुम मूर्ख हो, तो तुम कैसे जानोगे कि यह सरल था?
स्टीवन ए। लोव

यह एक अच्छा है, स्टीवन :)

1
"यही कारण है कि आप प्रोग्रामिंग के पहले सिद्धांत को जानकर एक अच्छा प्रोग्रामर नहीं बन सकते हैं" - इसे प्यार करो।

1
@ डिमा: आप सही कह रहे हैं, मेरा मतलब है कि गुणवत्ता और सादगी (इस मामले में कम से कम) दोनों अपरिभाषित हैं, फिर भी हम इसे जानते हैं जब हम देखते हैं, अगर हमारी आँखें प्रशिक्षित होती हैं।
एड्रियानो वरोली पियाज़ा

18

सभी बुराईयो की जड़ समयपूर्व इष्टतमीकरण है। - डोनाल्ड नथ


चाहे कार्यान्वयन या डिजाइन में।

16

पहिया को सुदृढ़ न करें।


इस सवाल का सही जवाब है कि क्या किसी को पहिया को मजबूत करना चाहिए या नहीं, यह हमेशा "यह निर्भर करता है"। तो "पहिया को सुदृढ़ मत करो" केवल इतनी दूर चला जाता है। यह ज्यादातर समय एक अच्छे उत्तराधिकारी के रूप में काम कर सकता है, लेकिन हर बार नहीं।

5
कुछ "पहियों" को फिर से बनाने की आवश्यकता है।

डनलप को बताएं। उन्होंने वायवीय टायर का आविष्कार किया। यदि यह उसके लिए नहीं था, तो पहिया को फिर से मजबूत करने के लिए, हमारे पास एक बहुत ऊबड़ सवारी थी।
किबिनी

3
कैसे के बारे में: केवल पहिया को
सुदृढ़ करें

16

पहले समस्या को समझें!


आह, अंत में किसी एक के साथ। आप चुंबन ca, YAGNI, सभी आप चाहते हैं सूखी। यह बेकार है यदि आप कुछ भी नहीं के लिए कुछ प्रोग्राम करते हैं।

@ ई-सतीस: येप, कि जब मैंने पहली बार इसका उत्तर दिया तो मैंने क्या सोचा था। मैं सभी उत्तर के लिए स्क्रॉल करता हूं और आश्चर्यजनक रूप से पहले किसी ने पोस्ट नहीं किया।
ऑस्कररेज़

अच्छा उत्तर। जब प्रोग्रामर किसी समस्या की पूरी आवश्यकताओं को ठीक से नहीं समझ पाते हैं तो घंटे और घंटे बर्बाद हो जाते हैं।
स्टीव वॉर्थम

समस्या यह है: आप कैसे जानते हैं कि आप समस्या को समझते हैं?
CamelCamelCamel

13

YAGNI - आपको इसकी आवश्यकता नहीं होगी । YAGNI के पीछे का विचार आपकी आवश्यकताओं के लिए प्रोग्राम करना है, न कि संभावित, संभावित विशेषताओं के लिए। आधार यह है कि जिसे आपको प्रोग्राम करने की आवश्यकता है, उसे ध्यान में रखते हुए, आप कोड ब्लोट में कटौती करेंगे, जटिलता कम करेंगे, फीचर रेंगने से बचेंगे, और जो किया जा सकता है (और यह कैसे किया जा सकता है) पर प्रतिबंध कम करें। भविष्य।

मुझे लगता है कि यह मॉड्यूलर डिजाइन के साथ मिलकर काम करता है: भविष्य की विशेषताओं को मौजूदा कोड को फिर से डिज़ाइन किए बिना संवर्धित किया जा सकता है।


12

यह जानते हुए कि कब प्रोग्राम नहीं करना है।


पृथ्वी पर इसका क्या मतलब है?

और वह कब है?

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

मानव निर्णय और निर्णय लेना सब कुछ का हिस्सा है; कभी-कभी निर्णय को स्वचालित करने की कोशिश करने का कोई मतलब नहीं है।
S.Lott

1
उसका मतलब यह है कि कई प्रोग्रामिंग समस्याओं को शेल्फ अनुप्रयोगों, घटकों या पुस्तकालयों से खरीदकर सस्ता और अधिक समय पर हल किया जा सकता है।
गॉर्डन बेल

11

कॉफी में, बाहर कोड।


3
मेरे मामले में चाय =)

+1 hmm अधिक "कॉफी में, कोड + बहुत सारे टूटते हैं?" :) मुझे कॉफ़ी और चाय दोनों पसंद हैं, मैं दोनों तरह से
झूलता हूँ

10

यदि इसका परीक्षण नहीं किया गया था, तो इसे तोड़ दिया गया।


मैं उस एक पर सहमत हूं

7

एक सॉफ्टवेयर डिज़ाइन के निर्माण के दो तरीके हैं: एक तरीका यह है कि इसे इतना सरल बनाया जाए कि जाहिर तौर पर कोई कमी न हो, और दूसरा तरीका यह है कि इसे इतना जटिल बना दिया जाए कि कोई स्पष्ट कमी न रहे। पहली विधि कहीं अधिक कठिन है।

- चार्ल्स एंटनी रिचर्ड होरे


6
  1. कारण और प्रभाव के बीच अंतर (कंप्यूटर के साथ काम करना)

  2. तथ्य और राय के बीच अंतर (लोगों के साथ काम करना)

  3. जितना संभव हो उतना सरल, लेकिन कोई सरल (डिज़ाइन) नहीं


5

प्रोग्रामिंग एक साधन है, अंत नहीं है। या शायद, "मतलब नहीं होना चाहिए।"


5
  1. समझें कि कार्यक्रम किसी को खुश क्यों करेगा (अन्यथा, आप अन्य सभी बच्चों के साथ क्यों नहीं खेल रहे हैं?)। (यह व्यक्ति आप हो सकते हैं।)
  2. व्यवसाय डोमेन का एक वैचारिक मॉडल विकसित करें जो सभी आवश्यक जटिलता को कैप्चर करता है, और अधिक नहीं।
  3. सॉफ़्टवेयर आर्किटेक्चर का एक वैचारिक मॉडल विकसित करें जो सभी आवश्यक जटिलता को कैप्चर करता है, और अधिक नहीं।
  4. बेरहमी से अन्य सभी जटिलता को बाहर रखें।

सही कहा! अधिक सहमत नहीं
एंटनी

5

मेरी राय में, सबसे महत्वपूर्ण सिद्धांत है जटिलता की कमी से अच्छा कपोल-कल्पना के निर्माण

यह भी शामिल है

  • हल करने के लिए समस्या को समझना,
  • इसके लिए एक उचित समाधान डिजाइनिंग और
  • इसे लागू करना,
  • अधिमानतः एक तरह से कोड को समझने और बनाए रखने के लिए,

लेकिन उस बिंदु का भी निर्धारण जहां अमूर्तता को रोकना है और परिहार्य अतिरिक्त जटिलता के निर्माण को रोकने के लिए कार्यान्वयन प्रौद्योगिकियों (जैसे डेटाबेस सिस्टम, प्रोग्रामिंग भाषा) के मूलभूत गुणों को प्राप्त करना है।


4

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

इसके लिए एक कोरोलरी: साबित करें कि आप अपने चर और कार्यों और कक्षाओं को अच्छी तरह से नाम देकर हल करने की कोशिश कर रहे हैं।


4

यह तब तक काम नहीं करता जब तक आप इसे एक परीक्षण में नहीं दिखाते


6
यह सच नहीं है, मैंने काम किया है और परीक्षण नहीं किया है कि कोड के टन लिखा है! : D

1
"मैंने इसका परीक्षण नहीं किया है, मैंने केवल यह साबित किया है कि यह सही है" :)
डैनियल डारनास

4

पहले सोचो, बाद में कोड।

तुम कहीं नहीं होशियार हो जैसा कि तुम सोचते हो कि तुम हो। सवाल पूछो। अपने साथियों को महत्व देना सीखें।

डिबगिंग करते समय, पहला उत्तर लगभग हमेशा गलत होगा।

कोड जिसे आप बाहर निकालने के इरादे से लिखते हैं वह बहुत बड़ी प्रक्रियाओं की आधारशिला बन जाता है। कभी भी बेवजह लिखी हुई कोई बात न छोड़ें।


3

किसी भी समस्या को अप्रत्यक्ष की एक और परत के साथ हल किया जा सकता है।


वास्तव में, बहुत अधिक अप्रत्यक्ष होने के कारण स्वयं एक मुद्दा है जिसे पहचानने और हल करने की प्रतीक्षा की जा रही है। तो ..

अप्रत्यक्ष की एक और परत द्वारा ... हल! =)
एरिक फोर्ब्स

अजीब तरह से पर्याप्त है, यह सच है। वसंत को देखें ...


3

सिद्धांत: सॉफ्टवेयर नॉलेज कैप्चर है

परिणाम: ज्ञान निरूपण के लिए कई तकनीकें, सभी एब्सट्रैक्शन पर स्थापित हैं । हमें परतों, स्तरों, इनकैप्सुलेशन, चिंताओं को अलग करता है।

प्रक्रिया प्रतिनिधित्व के लिए कई तकनीकें, सभी अनुक्रम , विकल्प , पुनरावृत्ति पर स्थापित की गईं



3

हमेशा कोड लिखें जैसे कि जो व्यक्ति इसे बनाए रखेगा वह एक मनोवैज्ञानिक सीरियल किलर है जो जानता है कि आप कहां रहते हैं

इसके अलावा, कभी नहीं सोचें कि आप प्रोग्रामिंग के बारे में सब कुछ जानते हैं, सीखते रहें


2

मैं डिजिटल इलेक्ट्रॉनिक्स का अध्ययन करने के माध्यम से प्रोग्रामिंग में शामिल हो गया, इसलिए मुझे लगता है कि मेरे लिए बुनियादी तर्क गेट्स (नहीं, और, या, एक्सोर, इंप्लीज़) प्रोग्रामिंग के पहले सिद्धांत थे।



2

कचरा - कचरा बाहर यह कोई फर्क नहीं पड़ता कि आपका उपयोगकर्ता इंटरफ़ेस कितना अच्छा है यदि डेटा खराब है।


2

बहुत, बाकी सब कुछ इससे पैदा होता है। KISS संतुलन के दूसरे छोर सुनिश्चित करें कि आप पागलपन के स्तर के लिए सॉफ्टवेयर लालित्य का पीछा नहीं करना है।


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