विकास पर सोच


88

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

यह कहने की जरूरत नहीं है कि यह बहुत आसानी से नहीं हुआ, इसलिए मैंने प्रोजेक्ट में शामिल एक वरिष्ठ प्रोग्रामर से सलाह ली कि इसे कैसे अपनाया जाए।

उन्होंने कहा कि मैं काम को बहुत सोच समझ कर कर रहा था, और इसलिए कि मैंने इस पैमाने के प्रोजेक्ट को कभी नहीं निपटाया, इससे पहले कि मैं डिजाइन पैटर्न पर बहुत अधिक समय खर्च कर रहा हूं। अपने बुद्धिमान शब्दों में, उन्होंने मुझे "F * ck the future, build for now" कहा।

क्या यह ट्रेंड प्रोग्रामर आमतौर पर इस तरह की परियोजना के बारे में जाने के दौरान अनुसरण करते हैं? उदाहरण के लिए, यदि आपको अवधारणा मॉडल का प्रमाण करने के लिए कहा गया है, तो क्या यह एक सामान्य प्रवृत्ति है कि काम के उदाहरण को जल्द से जल्द मिटा दिया जाए?

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


5
यह एक डिजाइन की तुलना में कोडिंग से अधिक लगता है
बालोग पाल

22
I + 1-ed सिर्फ "F * ck the future, build for now" के लिए। अगर उसे इस कथन का समर्थन करने का मन करता है, तो मुझे खुशी होगी कि जब भी मैं कुछ स्क्रैप करने के बाद एक डॉग लॉग ओवर करता हूं, तो मैं उसे क्रेडिट करूंगा।
18

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

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

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

जवाबों:


112

बचाव के लिए कप्तान स्पष्ट!

मैं यहाँ पर कप्तान हूँ और कहता हूँ कि वहाँ कुछ मध्य मैदान पाया जाना है।

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

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

अभी के लिए बनाएँ अगर ...

  • इस परियोजना को खत्म किया जा रहा है
  • परियोजना का जीवनकाल छोटा है
  • प्रोजेक्ट में एक्सटेंशन नहीं होना चाहिए
  • परियोजना में जोखिम प्रभाव मूल्य नहीं है (ज्यादातर छवि के संदर्भ में)

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

सामान्य समस्या को बाद के लिए छोड़ दें, यदि यह कभी आवश्यक हो सकता है और प्रयास के लायक है:

XKCD: सामान्य समस्या

भविष्य के लिए बनाएँ यदि ...

  • परियोजना सार्वजनिक होगी
  • परियोजना पुन: उपयोग किया जाने वाला एक घटक है
  • परियोजना अन्य परियोजनाओं के लिए एक कदम है
  • परियोजना में अनुवर्ती परियोजनाओं या संवर्द्धन के साथ सेवा रिलीज होगी

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

दिशा-निर्देश

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

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

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

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

बस सरल चीजों का निर्माण करें।

Dilemmata

Overengineering

क्या यह ट्रेंड प्रोग्रामर आमतौर पर इस तरह की परियोजना के बारे में जाने के दौरान अनुसरण करते हैं?

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

प्रोटोटाइपिंग / क्विक-एन-डर्टी / कम अधिक है

क्या यह जल्द से जल्द एक व्यावहारिक उदाहरण को मिटाने के लिए एक विशिष्ट प्रवृत्ति है?

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

सीधे उत्पादन के लिए शिपिंग प्रोटोटाइप पर दिलबर्ट

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

प्रोटोटाइप का उपयोग कब करें?

प्रोटोटाइप का उपयोग करने के लिए सबसे अच्छी प्रकार की परियोजनाओं के रूप में संकेत हैं :

[...] प्रोटोटाइप सिस्टम में सबसे अधिक फायदेमंद है जिसमें उपयोगकर्ताओं के साथ कई इंटरैक्शन होंगे।

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

"तिथि करने के लिए तेजी से प्रोटोटाइप के सबसे उत्पादक उपयोगों में से एक पुनरावृत्त उपयोगकर्ता आवश्यकताओं इंजीनियरिंग और मानव-कंप्यूटर इंटरफ़ेस डिज़ाइन के लिए एक उपकरण के रूप में किया गया है।"

दूसरी ओर:

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

और अगर आपके पास एक हरा राक्षस है, तो बस बजट के भीतर एक प्रोटोटाइप रखना सुनिश्चित करें ...

प्रोटोटाइपिंग अवधि के विस्तार पर दिलबर्ट


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

3
मैं काफी हैरान हूं कि मैं यहां क्यों उतरूंगा। कृपया उस पर जानकारी देने के लिए पर्याप्त रहें, इसलिए मैं अपने तरीके, सेंसि की त्रुटियों को देख सकता हूं।
जाइलम ha ’

7
मैं एक मैकेनिकल इंजीनियर के साथ काम करता था, जो इसे इस तरह रखता था: क्या आप अपने उत्पाद को अंडर-इंजीनियर या ओवर-इंजीनियर चाहते हैं? ये वास्तव में केवल दो विकल्प हैं।
गाय सिरटन

1
@SamtheBrand: महान संपादन के लिए धन्यवाद। काफी बेहतर।
ज्येष्ठ

1
@ हाइलम: कभी-कभी मैं विचारों को अंक ट्रैकिंग में डाल देता हूं (यदि आपकी परियोजना एक के लिए काफी बड़ी है) तो मुझे उन्हें मेरे सिर के पीछे से हटाने की अनुमति देता है। यह जानते हुए कि वे किसी तरह से दूसरों को दिखाई देते हैं, मुझे ऐसा महसूस होता है कि मुझे अपने सिर में उन्हें लगातार घूमने की आवश्यकता नहीं है (हालांकि वहाँ एक संतुलन कार्य भी है =]]।
afuzzyllama

54

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

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

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

  1. डिज़ाइन करें और थोड़ा चर्चा करें।
  2. कोड का एक गुच्छा लिखें जो कुछ करता है।
  3. समस्याओं और STOP कोडिंग को पहचानें।
  4. डिजाइन के बारे में गंभीर हो जाओ और गति या अपने कोड-मोजो को खोने के बारे में चिंता करना बंद करो और परियोजना प्रबंधक की उपेक्षा करें (आप उसे एक एहसान कर रहे हैं।)।
  5. परियोजना को नियंत्रण में रखें। अपनी गंदगी ठीक करो। सुनिश्चित करें कि हर कोई योजना को समझता है। प्रोजेक्ट को नियंत्रण में रखें।

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

अंत में, आपका कोड डिज़ाइन है। यह दस्तावेजों, आरेखों, बैठकों, ईमेल, व्हाईटबोर्ड चर्चाओं, एसओ प्रश्नों, तर्कों, कॉसिंग, फिट्स ऑफ़ रेज और कॉफ़ी चैट्स विद कॉफ़ी पर समर्थित है। वहाँ एक बिंदु है जहाँ आप किसी भी अधिक डिज़ाइन नहीं कर सकते हैं और अधिक डिज़ाइन समय को फेंकने के लिए जोखिम उठा सकते हैं क्योंकि आप केवल कोड लिखने की कोशिश कर रहे हैं। इसके अलावा, अधिक कोड आप बेहतर मौका लिखते हैं आप एक डिजाइन दोष पेश करेंगे जिसे आप अपने तरीके से कोड नहीं कर सकते हैं। मल के लिए फिर से समय।


1
+1 के लिए doing your bosses a favor, भले ही वे ऐसा न सोचते हों
सुपर

2
+1 महान पोस्ट। यह वास्तव में एक अच्छा प्रबंधक है जो पहचानता है कि एक अच्छे डिजाइन को नष्ट करने की आवश्यकता है - और यह आवश्यक रूप से कीबोर्ड को शामिल नहीं करता है!
रॉबी डी

Argg अगर केवल मैंने शुरू करने से पहले इस उत्तर को पढ़ा! धन्यवाद, और किसी ऐसे व्यक्ति के लिए, जो इस उद्योग में शुरुआत कर रहा है, मैं इन पागल शिक्षाओं से प्यार कर रहा हूं।
sf13579

2
+1 के लिएYou have to plan and plan a lot, but don't do it all at once.
राफेल एम्सॉफ

2
@ गीक: मोजो, फ्लो, ज़ोन ... या जो भी geeky / ट्रेंडी / हिपस्टर शब्द है, वह उत्पादकता की स्थिति का वर्णन करने के लिए चुना जा सकता है।
जाइलम ha

24

क्या प्रोग्रामर आमतौर पर भविष्य के बारे में सोचे बिना कुछ काम करते हैं?

हाँ।

क्या उन्हें ऐसा करना चाहिए?

नहीं।

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

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

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


3
यद्यपि आप जो कहते हैं, वह बहुत मायने रखता है, क्योंकि मेरा व्यक्तिगत अनुभव मुझे अन्यथा बताता है। आमतौर पर जब devs मोड में मिलता है @F *** k it ... बस इसे शिप करें @ सभी जगह पर कॉपी पेस्ट कोड की एक नाव लोड हो जाती है। अंतिम परिणाम पूरी तरह से असहनीय है। आगे की सोच केवल सीमाओं और संशोधनों के बारे में नहीं है, बल्कि रखरखाव भी है।
न्यूटॉपियन

13

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

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

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


1
आगे सोचने के अन्य कारण भी हैं: जो कार्यक्षमता आप विकसित कर रहे हैं वह एक स्प्रिंट में फिट नहीं होती है। तो, आप या तो इसे कृत्रिम रूप से तोड़ते हैं, या आप किसी भी कार्यक्षमता को लागू करने से इनकार करते हैं जिसे आप एक स्प्रिंट के भीतर पूरा नहीं कर सकते।
जियोर्जियो

रिफैक्टिंग का उल्लेख करने के लिए +1। मैं विश्वास नहीं कर सकता कि अब तक अन्य जवाबों में से कोई भी इसका उल्लेख नहीं करता है। यदि आप रिफ्लेक्टर करते हैं तो YAGNI केवल व्यवहार्य है।
इयान गोल्डबी

7

क्या यह ट्रेंड प्रोग्रामर आमतौर पर इस तरह की परियोजना के बारे में जाने के दौरान अनुसरण करते हैं?

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

यह सब सोचना बहुत आसान है कि एक ऐप को ऐसा करना चाहिए और उसे व्यापक रूप से अलग करना चाहिए।

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

उदाहरण के लिए, यदि आपको अवधारणा मॉडल का प्रमाण करने के लिए कहा गया है, तो क्या यह एक सामान्य प्रवृत्ति है कि काम के उदाहरण को जल्द से जल्द मिटा दिया जाए?

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


6

उन्होंने कहा कि मैं काम को सोच-समझकर कर रहा था, और क्योंकि मैंने इस तरह के एक बड़े प्रोजेक्ट से कभी समझौता नहीं किया था, इसलिए मैं डिजाइन पैटर्न पर बहुत अधिक समय खर्च कर रहा था। अपने बुद्धिमान शब्दों में, उन्होंने मुझे "F * ck the future, build for now" कहा।

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

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

यह एक आदर्शवादी कल्पना है और जीवन इस तरह से काम नहीं करता है।

एक मूर्ख यह सोचकर एक परियोजना में भाग जाएगा कि वह सिर्फ "कर सकता है" और इसे पूरा कर सकता है। सफलता उस डेवलपर के पक्ष में होगी जो अनदेखी चुनौतियों के लिए तैयार करता है, और अपने पेशे को ठीक शिल्प कौशल की तरह मानता है।

कोई भी वरिष्ठ डेवलपर आलोचना कर सकता है, निंदा कर सकता है और शिकायत कर सकता है - और सबसे ज्यादा!

जबकि वह आपको बताती है कि आप "ओवर थिंकिंग" प्रोजेक्ट हैं। मैं आपको वास्तव में पहले "सोच" पर बधाई देता हूं। आपने अपना पहला कदम एक बेहतर डेवलपर और दूसरे व्यक्ति के रूप में लिया है।

क्या यह ट्रेंड प्रोग्रामर आमतौर पर इस तरह की परियोजना के बारे में जाने के दौरान अनुसरण करते हैं? उदाहरण के लिए, यदि आपको अवधारणा मॉडल का प्रमाण करने के लिए कहा गया है, तो क्या यह एक सामान्य प्रवृत्ति है कि काम के उदाहरण को जल्द से जल्द मिटा दिया जाए?

ठीक यही अवधारणा का प्रमाण है। यह जल्दी से जल्दी किसी चीज को मैश करने की कोशिश है ताकि लोग एक कदम पीछे ले जा सकें और इसे देख सकें। यह गलतियों, गलत काम और समय / धन को रोकने के लिए किया जाता है।

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

यह आपके विचारों को प्रदर्शित करने का एक अवसर भी है। ऐसा कई बार हुआ है जब मैंने एक प्रोटोटाइप पेश किया है जो चीजों को एक ऐसे स्तर पर ले गया है जिसकी उन्हें उम्मीद नहीं थी।


1
इंटरनेट में छद्म आकाओं के प्लेग का उल्लेख करने के लिए +1
फॉक्सकॉल्ड

5

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

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

यदि आप परिचित नहीं हैं तो आप देख सकते हैं कि वृद्धिशील विकास कैसे काम करता है। सफल तरीके आमतौर पर एक या एक से अधिक स्तरों पर पुनरावृत्त होते हैं, तंग प्रतिक्रिया चाहते हैं और कुछ कंकाल पर बढ़ते हैं।


3

योजना को रोकने और कोडिंग शुरू करने के लिए सलाह सुनने के लिए कुछ अच्छे कारण हैं;

  1. एक डेवलपर के रूप में केवल 18 महीनों के बाद, यह संभावना नहीं है कि आप इसके लिए योजना बनाने के लिए भविष्य के बारे में अच्छी तरह से अनुमान लगा सकते हैं, चाहे आपके कॉलेज का जीपीए कोई भी हो। यह कुछ ऐसा है जो उज्ज्वल लेकिन अनुभवहीन डेवलपर्स के लिए पकड़ना बेहद मुश्किल है, क्योंकि यह सब आप नहीं जानते कि आप क्या नहीं जानते हैं। हो सकता है कि पुराने हाथों ने आपकी दृष्टि में इस कमजोरी को पहचान लिया हो, और समझदारी से आपको इसे बस करने और अपना सर्वश्रेष्ठ प्रदर्शन करने के लिए प्रोत्साहित किया।

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

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

यह अपनी खुद की खामियों को देखने के लिए एक बहुत आत्मनिरीक्षण और अहंकार मुक्त डेवलपर लेता है, इसलिए इस के बाकी हिस्सों को पढ़ने से पहले थोड़ी देर ध्यान करें, ऐसा न हो कि आप खुद को अपनी कमजोरियों को नजरअंदाज करने का बहाना दें ...

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

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

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


-6

मुझे अपना कोड दिखाएं और मैं आपको बताऊंगा कि आप कौन हैं

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

आप जो कोड बना रहे हैं

आपका कोड जीवन के लिए आपका कार्यक्रम है।

एक प्रोग्रामर जो बुरा कोड लिख रहा है, वह स्ट्रिपटीज़ क्लब में नाचने वाले बैले डांसर की तरह है

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

अंत में, आपको गोगोल के उपन्यास 'द पोर्ट्रेट' को पढ़ना चाहिए, और आपको मुख्य चरित्र की कहानी द्वारा चेतावनी दी जानी चाहिए। आप मित्र चित्र के आदमी के समान हैं। वह आपको पैसे का लालच दे रहा है, लेकिन आप इसकी ऊंची कीमत चुकाएंगे।


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

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