विरोधाभासी प्रोग्रामिंग सलाह को पुनः प्राप्त करना: कुछ काम करना और पुनरावृति बनाम वास्तव में इसे कोडिंग से पहले सोचना


19

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

सलाह का पहला टुकड़ा जल्दी से कुछ काम कर रहा था, देखें कि यह कैसे काम करता है (या तो प्रोटोटाइप या अनौपचारिक परीक्षण के माध्यम से), संस्करण में सुधार करें, देखें कि यह कैसे फिर से काम करता है, इसे फिर से सुधारें ... और तब तक चक्र दोहराएं जब तक आप काम न करें । इसे कभी-कभी "सर्पिल विकास" कहा जाता है या इसे "जल्दी रिलीज, अक्सर रिलीज" कहा जाता है।

सलाह का दूसरा भाग था: किसी भी कोड को लिखने से पहले एक परियोजना के बारे में सोचें।

मुझे दोनों तरीकों से सफलता मिली है और मैं कहूंगा कि मैं प्रत्येक दर्शन से सहमत हूं।

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

मैं इन परियोजनाओं के बारे में कैसे जाऊँ?

क्या मैं सिर्फ SOMETHING कोडिंग शुरू करता हूं और सीखता हूं (प्लेटफार्मों / विधियों / भाषाओं / आर्किटेक्चर) जैसा कि मैं जाता हूं - या क्या मैं कोडिंग से दूर रखता हूं और आईडीई खोलने से पहले भी एक टन का शोध / पठन करता हूं?

मैं प्रोग्रामिंग सलाह के इन विरोधाभासी टुकड़ों को कैसे समेटूं?


एक ही समय में, दोनों करें। Iterate, document, iterate, document, iterate और एक बार आपको एक स्पष्ट योजना मिल गई है जो काम करती है। इसे बनाएँ: D
मैट D

1
कुछ हद तक केंट बेक का निबंध "इसे चलाओ, फिर इसे सही बनाओ। इसे सही बनाओ, फिर इसे चलाओ": facebook.com/notes/kent-beck/runright-and-vice-versa/…
थंडर सिल्वा


1
मैं नहीं देखता कि वे कैसे विरोधाभासी हैं। मैं पहले बहुत सोचता हूं, और फिर जल्दी से कुछ काम करता हूं।
फजर्री

बहुत गहरा। मैं सहमत हूँ। मेरी औसत पेशेवर परियोजना लगभग ४० -५०% फ्रंट डिज़ाइन कार्य, १०, अधिकतम १५% कोडिंग और बाकी परीक्षण के लिए है।
मावग का कहना है कि मोनिका

जवाबों:


20

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

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

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

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


मैं जोड़ूंगा: यदि वास्तव में आवश्यक है तो कोडिंग शुरू करें। यदि कोई समस्या नहीं है, तो किसी को कोडिंग शुरू नहीं करनी चाहिए।
टासिस्टो

5

ऐसे कुछ निर्णय हैं जिन्हें समय से पहले किए जाने की आवश्यकता है।

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

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

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

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


1

मैं दोनों को परस्पर अनन्य नहीं देखता।

परियोजना प्रबंधन के किसी भी प्रकार की तरह आपको दीर्घकालिक दृष्टि और अल्पकालिक दोनों लक्ष्यों की आवश्यकता है।

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

आप कितनी बार / आदि जारी करते हैं। उस विशिष्ट कार्यप्रणाली पर निर्भर करता है जिसका आप उपयोग कर रहे हैं।

आपको जो शोध करना है, वह इस बात पर निर्भर करता है कि आपको क्या पता है कि आप क्या जानते हैं।


1

"Iteration" और "इसके माध्यम से सोचना" विरोधाभासी नहीं हैं, इसके बजाय वे पूरक हैं।

यहां तक ​​कि अपने चरम पर, वे एक ही स्थान पर पहुंचने के लिए दो रास्तों को दर्शाते हैं।

  • Iteration का चरम एक हजार बंदरों पर एक हजार बंदरों की पिटाई है। पर्याप्त समय के साथ शायद आपको कुछ ऐसा मिलेगा जो आवश्यकताओं को पूरा करता है।
  • "थ्रू इट थ्रू थ्रू" एक चरम झरना है। यदि आप भाग्यशाली हैं कि आपके द्वारा कोड वितरित करने से परियोजना की शुरुआत से आवश्यकताओं में नाटकीय रूप से परिवर्तन नहीं हुआ है। या आप विश्लेषण पक्षाघात के साथ समाप्त हो जाएगा और कुछ भी नहीं दिया है।

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

लेकिन आप केवल उस रास्ते के प्रमुख हिस्से देख सकते हैं, और निश्चित रूप से हर रास्ते पर नहीं रुकेंगे। यहीं से पुनरावृत्ति की नौबत आती है। आप आवेदन के संस्करणों के माध्यम से पुनरावृत्ति शुरू कर सकते हैं और इसके लिए प्रतिक्रिया मांग सकते हैं:

  • विस्तार के निचले स्तरों में आने वाली बाधाओं को पहचानें
  • उच्च स्तरीय पथ में उन संदिग्ध क्षेत्रों को स्पष्ट करने के लिए हितधारक की प्रतिक्रिया देखें।

निर्णय की लैटिन जड़ अर्थ है "काट देना"। Iteration आपको यह तय करने की अनुमति देता है कि केवल सिद्धांत और पुनरावृत्ति के बजाय व्यवहार में क्या काम करता है, आपको अन्य विकल्पों को काटने की अनुमति देता है जो संभव नहीं हैं।

इसलिए आपको यह समझने के लिए समस्या को समझना होगा कि आप क्या करने जा रहे हैं। लेकिन फिर आपको वास्तव में वास्तविक कोड में विचार को बदलने के लिए आवेदन के संस्करणों के माध्यम से पुनरावृति करने की आवश्यकता है।


0

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

ईमानदारी से, हालांकि, यह एक कठिन और तेज़ नियम नहीं है। मुझे वास्तव में लगता है कि आपको किसी भी परियोजना के लिए दोनों का मिश्रण करने की आवश्यकता है। आप जो भी करते हैं, उनमें से ज्यादातर संभवत: इस बात पर निर्भर करता है कि आप उस परियोजना के कितने करीब हैं जो आपने पहले ही पूरा कर लिया है।

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