मैं एक अच्छा डेवलपर होने के लिए कोड लिखने में सक्षम होने से कैसे जा सकता हूं?


10

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

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

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


2
अनुभव एक अच्छा शिक्षक है।
बर्नार्ड

क्या बड़ा और जटिल सॉफ्टवेयर सरल और अधिक सीधे फॉरवर्ड सॉफ्टवेयर का संग्रह नहीं है?
ऋग

5
"क्योंकि कला के बारे में सबसे महत्वपूर्ण बात काम करना है। हर दिन बैठकर कोशिश करने के अलावा कुछ और मायने नहीं रखता।" - स्टीवन प्रेसफील्ड
रयान काइल

उसी तरह से आप कार्नेगी हॉल में जाते हैं ...
माइकल ब्राउन

1
आप कार्नेगी हॉल के लिए एक ही रास्ता - अभ्यास!
मार्टिन बेकेट

जवाबों:


11

मेरी राय में, आप अनुभव करने और चीजों को करने के कई तरीकों के साथ काम करके एक अच्छे डेवलपर बन जाते हैं। आपने कहा है कि आपको "यहाँ मेरे विचार" से लेकर "यहाँ मेरा समाधान" तक जाने में समस्या है। यह एक अनुभवी डेवलपर होने के साथ-साथ सॉफ्टवेयर डेवलपमेंट मेथोडोलॉजी की ओर कुछ अधिक है।

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

कुछ चीजें हैं जो मैंने दूसरों से और विभिन्न परियोजनाओं पर काम करने के दौरान सीखी हैं, जैसे:

  • सब कुछ परीक्षण योग्य बनाएं, इससे आपका जीवन बहुत आसान हो जाएगा;
  • आप एक संपूर्ण डिजाइन की उम्मीद नहीं कर सकते हैं और ऐसा करने में अनुभव न होने पर उद्यम के अनुप्रयोगों / अगले सबसे बड़े गेम शीर्षक / अधिक डिज़ाइन करने में सक्षम हो सकते हैं;
  • यदि आपको ऐसा करने का अनुभव नहीं है और दूसरों से सीखा हुआ है, तो अच्छे सॉफ्टवेयर डिजाइन करना मुश्किल है;
  • आपके पास पहली बार एक आदर्श डिज़ाइन नहीं होगा, यहां तक ​​कि एक अनुभवी डेवलपर के रूप में - चीजें बदल जाती हैं और इसलिए; आपका डिजाइन भी हो सकता है;
  • चीजों को लिखें: लेखन / ड्राइंग / व्हाइटबोर्डिंग / पेंटिंग / जो कुछ भी आप इसके साथ सहज महसूस करते हैं, यह आपके द्वारा लिखी गई चीजों को आसान बना देता है। जैसे कि GUI डिज़ाइन, क्लास डायग्राम, आदि मेरे अनुभव में, "कुछ एक साथ हैक करने" के लिए जाने से संभावित रूप से असफल होने की क्षमता होती है;
  • पहिया को सुदृढ़ न करें, आपको नहीं करना चाहिए। यदि आप अपने स्वयं के हाशप को लागू करने की कोशिश कर रहे हैं तो आप शायद कुछ गलत कर रहे हैं। शोध संबंधी बातें, और कोड लिखने से पहले सोचें।

आशा है कि कुछ मदद करता है।


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

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

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

मैं एक बहुत ही दृश्य व्यक्ति हूं इसलिए चित्र हमेशा मुझे चीजों को समझने और काम करने में मदद करते हैं :-)
डेको

5

ठीक है, मेरी राय में, किसी भी पेशे के रूप में, एक अच्छा पेशेवर बनने के लिए यह क्या है - सैद्धांतिक गठन के अलावा - अनुभव है

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

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

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

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

वैसे भी, मुझे लगता है कि अनुभव प्राप्त करने का कोई शॉर्टकट नहीं है, और इसे अनुशासन और धैर्य के साथ किया जाना चाहिए ।


यह एक अच्छा सादृश्य है। अन्य लोगों के कोड को पढ़ने से मेरी शैली में मदद मिली है , लेकिन आप सही हैं, यह मुझे कोई वास्तविक अनुभव नहीं देता है। किसी और ने ओएसएस मार्ग जाने का सुझाव दिया। मुझे लगता है कि मैं उस पर गौर करूंगा।

4

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

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

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


2

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


1

मेरे लिए, यह सॉफ्टवेयर के एक बड़े टुकड़े को छोटे टुकड़ों में तोड़ने में मदद करता है। और फिर उन टुकड़ों को और भी छोटे भागों में तोड़ दें। हर सॉफ्टवेयर प्रोग्राम तर्क के छोटे टुकड़ों का एक संग्रह है।

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

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

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

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

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


0

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

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

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


0

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

मुख्य रूप से, आपको कुछ तामझाम के साथ, वैज्ञानिक पद्धति का पालन करना चाहिए।

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

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

यह प्राथमिक समस्या की उप समस्याएँ बन जाती है। तो, फिर से चरणों का पालन करें। हमें अंतिम परिणाम प्राप्त करने के लिए एक मध्यवर्ती वस्तु की आवश्यकता होती है, इसलिए यह हमारी नई समस्या बन जाती है। यह विघटित हो जाता है छोटा सा, आसानी से समझा, वर्गों में समस्या नीचे। जैसा कि प्रत्येक टुकड़ा हल किया जाता है, समाधान एक साथ pieced है।

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