विकास प्रक्रिया को समझने के लिए गैर-प्रोग्रामर प्राप्त करना


66

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

गैर-प्रोग्रामरों को अपेक्षाओं को प्रबंधित करने और सॉफ्टवेयर विकास के अन्य प्रकारों से सॉफ्टवेयर विकास अलग-अलग कैसे होता है, इसके तरीके क्या हैं?


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

जवाबों:


34

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

और गैर-प्रोग्रामर के साथ एक अच्छा कार्य संबंध स्थापित करने के मूल्य को कम मत समझो। यदि आप यह स्थापित कर सकते हैं कि आपके फैसले पर भरोसा किया जा सकता है, तो वे आपको गंभीरता से लेंगे जब आप अलार्म को ध्वनि देते हैं कि एक्स शानदार ढंग से विफल हो रहा है यदि आप वाई pronto नहीं करते हैं, भले ही वे पूरी तरह से आपके तर्क को न समझें।


इसे इंगित करने के लिए +1। कुछ भी नहीं एक परियोजना के लिए और अधिक खतरनाक है अगर तकनीक-लोग और गैर-तकनीक वाले लोगों को एक-दूसरे के प्रति कोई सम्मान नहीं है।
मेहर

28

एक दृष्टिकोण जो मैंने सफल पाया है वह यह है:

हम सभी जानते हैं कि एक कंप्यूटर केवल और ठीक वही करता है जो उसे करने के लिए कहा जाता है।

प्रोग्रामिंग वह तरीका है जिससे हम कंप्यूटर को बताते हैं कि हम बाद में क्या करते हैं ।

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

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


4
+1 के लिए "अब हम बाद में क्या चाहते हैं, यह बताने के लिए"। इसके अलावा इस धारणा के साथ कि अधिकांश सॉफ्टवेयर नया सामान करता है।

12

IMO, मैंने पाया है कि चुस्त प्रक्रियाओं (जैसे स्क्रैम, क्रिस्टल, इत्यादि) द्वारा दी गई पारदर्शिता यह दिखाने की दिशा में एक लंबा रास्ता तय करती है कि विकास कैसे औसत हितधारक के लिए काम करता है।


1
यदि आप 100% विकास कर रहे हैं तो यह एक शानदार रणनीति है। यदि देव का कोई हिस्सा किसी अन्य पार्टी द्वारा संभाला जाता है, तो आपको शायद थोड़ा सा समझौता करना होगा।
JBRWilkinson

3

रूपक द्वारा व्याख्या एक टपका हुआ अमूर्त है, लेकिन यहाँ कुछ विचार हैं जो अक्सर मेरे लिए काम करते हैं:

ध्यान दें कि इनमें से कोई भी स्पष्टीकरण काम का बहाना नहीं करता है।

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

जब वह विफल हो जाता है, तो मैं इस तथ्य पर वापस लौटता हूं कि जबकि गणितीय रूप से यह साबित करना संभव है कि किसी कार्यक्रम में कोई त्रुटि नहीं है, इसमें भारी मात्रा में समय लगता है और यह प्रयास के लायक नहीं होगा।

अंत में, मैं पूछता हूं कि क्या इंटेल और माइक्रोसॉफ्ट बग से बचने में असमर्थ हैं, वे हमसे कैसे उम्मीद करते हैं?


2
Microsoft के बारे में बहुत अच्छी बात
Casebash

1
यह साबित करना असंभव नहीं है कि एक कार्यक्रम ऐसा करता है और वह। हालाँकि, कंप्यूटर के लिए यह कहना असंभव है कि कोई भी दिया गया प्रोग्राम अंततः ऐसा करना बंद कर देगा या नहीं।

1
-1 @ ThorbjørnRavnAndersen सही है। यह पोस्ट गलत है। कार्यक्रमों को सही साबित करने के लिए बहुत संभव है (शुद्धता की एक निश्चित धारणा तक), हम में से कुछ हर समय ऐसा करते हैं। मुझे लगता है कि पोस्टर रुकने की समस्या के महामारी विज्ञान के परिणाम को गलत समझता है, और इस प्रकार गैर-प्रोग्रामर को असत्य दावों के साथ भ्रमित कर रहा है।
फिलिप जेएफ

2

मैंने और अधिक विस्तार से इसी तरह के सवाल का जवाब दिया है , लेकिन जिस्ट है, "प्रोग्रामिंग एक कारखाने या एक विधानसभा लाइन के निर्माण की तरह है।"


यह दुख की बात है। मेरा मानना ​​है कि प्रोग्रामिंग एक कला है। आप कुछ बनाने की कोशिश करते हैं जिसमें बहुत सारी विशेषताएं होती हैं, साधारण कमांड, विधियों और कक्षाओं के छोटे बिट्स पर निर्माण करते हैं। अधिकतर आप एक हथौड़ा के साथ काम नहीं है - आप ध्यान से जिस तरह से आप उन्हें रखना चाहते चीजों को आकार करने की कोशिश ...
mhr

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

2

यह कहने का पारंपरिक तरीका है प्रोजेक्ट मैनेजमेंट ट्रायंगल: स्कोप, लागत और शेड्यूल के तीन प्रतिस्पर्धी मानदंड; आमतौर पर "सस्ता, तेज, अच्छा - दो उठाओ" के रूप में व्यक्त किया जाता है।

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

विज्ञान, कठिन या मृदु पर आधारित पेशेवर, अन्वेषण की एक प्रक्रिया से नहीं गुजरता है, कम-से-इष्टतम (या सिर्फ सादे गलत) युक्तियों का पालन करते हुए गलत और गलत अवधारणाएँ बनाता है, यह पता चलता है कि परीक्षण और त्रुटि के लिए क्या काम करता है, और दोहराता है जब तक संसाधन समाप्त हो जाते हैं या प्रदर्शन का पर्याप्त स्तर प्राप्त नहीं हो जाता है, तब तक बार-बार प्रक्रिया करें?

कोई भी प्रक्रिया कभी भी खामियों से मुक्त नहीं होती है, हालांकि यह उच्च गुणवत्ता के स्तर तक पहुंच बना सकती है।

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


ऑटोमोटिव तुलना के साथ महान बिंदु, वह एक तैनात अनुप्रयोग के निरंतर रखरखाव के बारे में एक बिंदु बनाने का एक शानदार तरीका है।
किंग्सओल्मन

0

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


0

आप इसकी तुलना उन चीज़ों से कर सकते हैं जिन्हें वे देख सकते हैं और यदि संभव हो तो हर रोज़ इस्तेमाल करें।

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

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

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

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

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

Microsoft, Apple, Google, और Amazon जैसे उद्योग के नेता उपयोगकर्ताओं को अपेक्षाकृत सस्ते ग्राहक प्रदान करते हैं। लेकिन उनके पास बहुत बड़ा खर्च है जो उन उत्पादों को सक्षम बनाता है। उनका अनुभव बताता है कि सॉफ्टवेयर महंगा है, लेकिन मूल्यवान और लाभदायक है। वे अक्सर गुणवत्ता के बीच समझौता करते हैं, वे सभी सुविधाएँ चाहते हैं, और समय के सही होने पर बाजारों में पहुँच रहे हैं। प्रत्येक उत्पाद जो वे बनाते हैं वह सफल नहीं होता है, और वे कभी-कभी कुत्तों को विजेताओं में बदल देते हैं, विपणन और बिक्री का नाम बदल देते हैं, या अपने नुकसान में कटौती करते हैं और बाद के उत्पादों में जो कुछ भी सीखते हैं उसका उपयोग करते हैं।


0

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


0

लागत और समय।

समय

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

लागत

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


-2

मेटाफ़ोर्स लीकी एब्स्ट्रैक्ट हैं, फिर भी वे छोटे कदम हैं जो आपको समझने के करीब ले जाते हैं।

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


-2

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


यह एक बुरा विचार है IMO। यह एक ग्राहक को एक मोप सौंपने की तरह है जो उसे यह दिखाने के लिए कि एक गीला फर्श को साफ करना कितना कठिन है।
सुन्दीप
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.