क्या * * प्रोग्रामिंग अवधारणाएं हैं जिन्हें मुझे अपने शिल्प (प्रोग्रामिंग) की गहरी समझ होनी चाहिए? [बन्द है]


13

महत्व के क्रम में, यदि ऐसा करना संभव है और यह नहीं हो सकता है, तो यह जानना महत्वपूर्ण है कि प्रोग्राम करने का तरीका जानने की सबसे महत्वपूर्ण नींव हैं। एल्गोरिदम, पुनरावृत्ति, पुनरावृत्ति, आदि?

ध्यान दें कि मैंने कहां रखा है, जहां मेरा सवाल है। मैंने हाल ही में एक इंटरनेट पोस्ट पढ़ा जिसमें कहा गया था कि 10 में से 9 प्रोग्रामर हांफ नहीं सकते हैं !

http://www.codinghorror.com/blog/2007/02/why-cant-programmers-program.html

मैं यह जानना चाहता हूं कि यह वास्तव में क्या है जब मैं प्रोग्रामिंग और मेरे निपटान के लिए बुनियादी साधनों की एक व्यापक समझ को पूरा करने की कोशिश कर रहा हूं। मूल रूप से मैं हवा के सभी रंगों के साथ पेंट करने में सक्षम होना चाहता हूं।


3
जेफ एटवुड का पद वास्तव में गहन प्रोग्रामिंग ज्ञान के बारे में नहीं है ... यह वास्तविकता के बारे में है कि कई लोगों के पास प्रोग्रामिंग के बारे में कुछ बुनियादी, मौलिक अंतर्दृष्टि का अभाव है, और उन मौलिक अंतर्दृष्टि की कमी उन्हें महत्वपूर्ण प्रोग्रामिंग कौशल विकसित करने से कैसे रोकती है।
रॉबर्ट हार्वे

2
मुझे समझ नहीं आ रहा है कि यह सवाल क्यों बंद किया गया। यह एक ऐसा सवाल है जिसे 5 बार तारांकित किया गया है और इसके बहुत सारे सहायक उत्तर हैं। यह उस तरह की जानकारी है जो मैं भर में आना चाहता हूं - सिर्फ इसलिए कि कोई सरल उत्तर नहीं है मतलब यह नहीं है कि जानकारी अच्छे मूल्य की नहीं है, शायद programmers.stackexchange.com को फिर से मूल्यांकन करने की आवश्यकता है जो सवालों को बंद करने के लिए मानदंड है।
रॉकलैन

@LachlanB मैंने फिर से खोलने के लिए मतदान किया ... सफल होने के लिए 4 और वोटों की आवश्यकता है
माइकल ब्राउन

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

जवाबों:


18

यह सूची एक शुरुआत है ... आप एक बड़ा सवाल पूछ रहे हैं!

  • कैसे स्पष्ट करें और लिखें कि ग्राहक क्या चाहते हैं ("आवश्यकताओं")। यह अपने आप में एक कला है। यदि आप ऐसा कर सकते हैं, तो आपका प्रोग्रामिंग कार्य बहुत बेहतर होगा।
  • कैसे अनुमान और परियोजना की योजना। लोग आपसे एक अनुमान पूछेंगे, तैयार रहें।
  • अन्य लोगों के कोड की रचनात्मक समीक्षा कैसे करें।
  • डिजाइन पैटर्न्स। यह बड़ा वाला है। लेकिन अति ख़ुशी से इसका इस्तेमाल न करें।
  • बग, समस्या और सुविधा अनुरोधों के बीच अंतर जानें
  • रूपरेखा / पुस्तकालयों के साथ अद्यतित रहें। आपको उनका उपयोग करने की आवश्यकता नहीं है, लेकिन आपको यह जानने की आवश्यकता है कि वे क्या करते हैं और उनके समर्थक / कोन हैं। अगर कुछ रास्ता बहुत कठिन लगता है, तो शायद (उम्मीद है) चीजों को करने का एक बहुत आसान तरीका है।
  • फ्लोचार्ट में जटिल एल्गोरिदम को कैसे दस्तावेज़ित करें या इसे केवल अंग्रेजी में लिखें। उम्मीद न करें कि कोई व्यक्ति आपके कोड को रिवर्स करने की कोशिश में 2 दिन बिताएगा।
  • अपनी कोड संरचना को कैसे व्यवस्थित करें ताकि कोई और इसे समझ सके
  • अपना कोड कैसे कमेंट करें
  • यूनिट टेस्ट कैसे लिखें
  • जानिए क्या चल रहा है हुड के नीचे। जैसे एक वेब सेवा कॉलिंग - यह वास्तव में क्या कर रही है?
  • कक्षाओं में तर्क को दूर कैसे करें।
  • कोड को कैसे रिफैक्ट करें
  • काफी कुछ प्रोग्रामिंग भाषाओं का सार जानें। आपको आश्चर्य होगा कि आप अन्य क्षेत्रों से क्या सीख सकते हैं
  • अन्य प्रोग्रामर को कैसे बताएं कि क्या लिखना है।
  • प्रबंधन को कैसे समझा जाए कि आप क्या कर रहे हैं और क्यों कर रहे हैं।
  • जैसे पीटर ने कहा, कैसे डीबग करें। मैं उनकी हर बात से सहमत हूं, असली प्रोग्रामर डिबग करते हैं, सिर्फ अनुमान नहीं।
  • उन्माद के साथ कैसे काम करें। वहाँ उनमें से एक बहुत कुछ है।
  • STUFF DONE कैसे प्राप्त करें। अगर आप सामान नहीं कर सकते तो दुनिया के सभी सिद्धांत आपकी मदद नहीं करेंगे।

मैंने इसी तरह की लाइनों के साथ एक और सवाल का जवाब दिया (समान सामग्री के साथ) यहाँ:

युक्तियाँ, दिशानिर्देश, पेशेवर कोड प्रदान करने के लिए याद रखने वाले बिंदु?


1
+1: STUFF हो गया! कुछ साल पहले मैंने एक रेंट पोस्ट किया था जिसमें कहा गया था कि यह एक इंजीनियर की परिभाषित विशेषता थी - उन्हें सामान मिलता है। कभी-कभी यह सुंदर नहीं होता है, और कभी-कभी आपको वापस जाना होगा और इसे फिर से करना होगा, लेकिन दिन के अंत में वे सामान प्राप्त
पीटर रोवेल

@PeterRowell: आपको यह एक दिलचस्प पढ़ने को मिल सकता है: brandonsavage.net/when-to-write-bad-code
Marjan Venema

दुर्भाग्य से यह प्रश्न वास्तव में ऐसा नहीं है जो साइट के प्रश्नोत्तर दर्शन और प्रारूप पर फिट बैठता है, लेकिन यह आपके उत्तर के मूल्य को कम नहीं करता है। यदि आप इसका विस्तार करना चाहते हैं और प्रत्येक बिंदु के लिए थोड़ा स्पष्टीकरण जोड़ते हैं, तो यह हमारे सामुदायिक ब्लॉग के लिए एक शानदार ब्लॉग पोस्ट बना देगा ।
यानिस ३०'१३

@MarjanVenema: हां, मैं उससे पूरी तरह सहमत हूं। 80 के दशक में मुझे एक नए संपादक के लिए एक युक्ति लिखने का काम सौंपा गया था, जिसे मैंने कोडिंग शुरू करने से पहले अनुमोदित किया था। मैं एक सप्ताह से अधिक उस खाली स्क्रीन को घूरता रहा, यह जानने की कोशिश करता रहा कि मुझे कुछ समझ में नहीं आया। मेरे प्रबंधक ने मेरी प्रगति में कमी के साथ अपनी नाराजगी व्यक्त की। 3 दिन के सप्ताहांत के बाद उन्होंने अपने डेस्क पर एक मसौदा तैयार किया। उन्होंने पूछा कि क्या हुआ था, और मैंने कहा कि मैंने सप्ताहांत में संपादक लिखा था, और फिर बस मैंने जो काम किया था उसकी एक कल्पना लिखी। मैंने कुछ कोड को फिर से लिखा था, लेकिन यह ज्यादातर रिफ्लेक्टर / क्लीनअप था।
पीटर रोवेल

1
@YannisRizos - मुझे इस पर एक ब्लॉग लिखने में दिलचस्पी होगी। क्या आप मुझे किसी भी दिशा-निर्देश के साथ एक ईमेल भेजना चाहेंगे या क्या मुझे कुछ लिखना चाहिए?
रॉकलन

22

" आदि " शीर्षक के तहत कुछ ऐसा आता है जो आपके समय का 50% या अधिक आसानी से ले सकता है।

डिबग करना सीखें।

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

"मुझे पता है" के बजाय "मुझे लगता है" कहना सीखें। आपको केवल "मुझे पता है" कहने के लिए मिलता है जब आप "सोचते हैं" कुछ सच (या गलत) है, और फिर आप इसे साबित करते हैं!

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

Nontrivial बग को तकनीक के एक शस्त्रागार की आवश्यकता होती है। एक क्लासिक जो अलास्का में सबसे अधिक गैर-समय से संबंधित कीड़े जल्दी से स्पॉटलाइट कर सकता है। अलास्का में कहीं एक भेड़िया है; आधे हिस्से में राज्य की एक बाड़ का निर्माण। भेड़िया किस तरफ है? उस साइड को आधे में काटें। बल्कि, कुल्ला, दोहराएं। कोड में अच्छी तरह से चुने हुए स्थानों पर 20 बार ऐसा करने से उस क्षेत्र में कमी आती है जहां बग (भेड़िया) 1/1048576 तक हो सकता है। उस भेड़िये को मार डालो।

युक्ति: हैंडवॉव्स को देखें - मानसिक, मानसिक, या किसी अन्य प्रकार का। जैसे ही आप (या आपके सहकर्मी) फ़्लिंच / डायवर्ट / कोड के एक हिस्से पर दिए गए ध्यान को कम से कम करते हैं, पूरी तरह से पागल हो जाते हैं । क्योंकि जिस क्षेत्र को आप सिर्फ बग जानते हैं , वह नहीं हो सकता है, भले ही आपने d * mn चीज की तलाश में घंटों / दिन बिताए हों और फिर भी उसे नहीं पा सके ... यह बग के लिए उच्चतम संभावना स्थान है। किसी को भी 'अलविदा' नहीं मिलता है , किसी को भी (मशीन, ओएस, संकलक या आप सहित ) किसी भी प्रकार का "सम्मान" नहीं मिलता है। एक बग है। अवधि। वाक्य का अंत। अब d * mn चीज को मारते जाओ।

मैं ऐसे किसी स्कूल के बारे में नहीं जानता जो खुद के विषय के रूप में डिबगिंग सिखाता हो। IMNSHO, यह साक्ष्य का सबसे चमकदार टुकड़ा हो सकता है कि वे (विश्वविद्यालयों / प्रोफेसरों) आपको प्रोग्रामर बनने के लिए नहीं सिखा रहे हैं, वे, आपको, उनके जैसा होना सिखा रहे हैं ... जैसे? कठोर? शायद। सच? स्वयं को मानसिक रूप से तैयार करें। अब इसे साबित करें।


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

1
शानदार उत्तर - कोई भी कोड लिख सकता है, असली प्रोग्रामर डिबग कर सकता है।
रॉकलैन

@ JörgWMittag: मैं स्वचालित प्रतिगमन परीक्षण का बहुत बड़ा प्रशंसक हूं। मैंने पहली बार 80 के दशक के मध्य में एक खोज इंजन प्रोजेक्ट पर इसका उपयोग किया था, और कोड के कुछ निर्दोष दिखने वाले टुकड़े में "मामूली" परिवर्तन दिखाई देने के बाद जो सामान बाहर गिर गया था, मैं हैरान (चौंक गया!)। (ध्यान दें: यह 200,000+ सी का SLOC था, और स्मृति प्रबंधन समस्याएं हमारे अस्तित्व का प्रतिबंध थीं।)
पीटर रोवेल

3

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

ऐसा लगता है कि आप वास्तव में एक बेहतर डेवलपर होने के बारे में चिंतित हैं, न कि केवल एक जैक-ऑफ-एक-ट्रेड। मुझे लगता है कि सराहनीय है, और मैं उन कुछ चीजों को साझा कर सकता हूं जिन्होंने मुझे सीखने में मदद की है कि कैसे कार्यक्रम करें।

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

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

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


2

YAGNI : "हमेशा चीजों को लागू करें जब आपको वास्तव में उनकी आवश्यकता होती है, कभी नहीं जब आप सिर्फ यह सोचते हैं कि आपको उनकी आवश्यकता है।"

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


1

एक प्रोग्रामर होने के बारे में जानने के लिए सबसे महत्वपूर्ण बात यह है कि लेखन कोड एक पीस है, और उत्पादन करने के लिए आपको जो भुगतान किया जा रहा है, उसके उत्पादन के लिए एक कार्यवाहक "ब्लू कॉलर" रवैया आपको किसी भी गूढ़ सीखने की तुलना में आगे तक ले जाएगा।

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

संपादित करें:

यदि आप इस पर विश्वास नहीं करते हैं और आपने मुझे नीचा दिखाया है, तो आप यह नहीं जानते हैं कि आपके पास 20 साल तक ऐसा करने का दृढ़ संकल्प है। मुझे पता है कि मैं ऐसा करता हूं क्योंकि मैं इसे स्वीकार करता हूं। ;)


0

एक हालिया प्रश्न, किसी एक से संबंधित, और उत्तर में इस ब्लॉग का एक लिंक था , जो एक ही कोण से एक ही समस्या पर चर्चा करता है।

संभवतः किसी भी डेवलपर के लिए सबसे महत्वपूर्ण अवधारणा "विनम्रता" है .... एक बार जब आप स्वीकार करते हैं कि आप यह सब नहीं जानते हैं, तो आप समाधान तलाशने के लिए खुले हैं। प्रोग्रामिंग पर ब्लॉग लिखने वाले ज्यादातर लोग टॉप परसेंटाइल में हैं, और समस्या यह है कि अभी तक कई लोगों ने अपनी नशीली प्रवृत्ति को नियंत्रित किया है .... यही वजह है कि वे ब्लॉग ..... आपको इन ब्लॉगर्स की पहचान करना सीखना होगा वहाँ पर ध्यान न दें

लिंक किया गया ब्लॉग वास्तव में एक शेख़ी से ज्यादा कुछ नहीं है - हर उद्योग में शिकायत है कि हाल के स्नातक बेकार हैं, उन्हें उपयोगी और उत्पादक होने में वर्षों लगते हैं। शायद समस्या यह है कि ये स्वघोषित गुरु वास्तव में बहुत ज्यादा उम्मीद करते हैं और यह भूल गए हैं कि एक बार वे FizzBuzz को हल करने में सक्षम नहीं होंगे। हर कोई शीर्ष 10 प्रतिशत में नहीं हो सकता है, परिभाषा के अनुसार, आधे प्रोग्रामर औसत से नीचे हैं ......


मैं मानता हूं कि लोग बहुत भाग लेते हैं, लेकिन मुझे लगता है कि आपके द्वारा ऊपर पोस्ट किए गए पदों का बिंदु यह है कि जिन लोगों को FizzBuzz को हल करने का तरीका नहीं पता था , वे प्रोग्रामिंग नौकरियों के लिए आवेदन कर रहे थे , जो सिर्फ शुरुआत होने और रैप करने की जरूरत से अलग है प्रोग्रामिंग मुहावरों के आसपास अपने सिर। मैं विनम्रता के बारे में इस बात पर आपसे सहमत हूँ, और बहुत से लोग यह नहीं जानते कि वह क्या है।
रुसलानड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.