मुझे पता है कि कैसे प्रोग्राम करना है, और कैसे प्रोग्राम करना सीखना है, लेकिन आप सिस्टम को ठीक से कैसे बना सकते हैं? [बन्द है]


11

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

पुनश्च: अपने टैग को सही करने के लिए स्वतंत्र महसूस करें, मुझे नहीं पता कि मैं किस बारे में बात कर रहा हूं।

संपादित करें: मुझे लगता है कि मैंने जो कुछ उदाहरण लिखे हैं, वे अन्य प्रकार के सिस्टमों पर भी लागू होते हैं, मुझे अभी कोई अन्य अच्छे उदाहरण नहीं पता हैं क्योंकि मैं ज्यादातर वेब काम में शामिल रहा हूं।

जवाबों:


10

जहां तक ​​मैं बता सकता हूं, पेशेवर प्रोग्रामर इन चीजों को तीन मुख्य तरीकों से सीखते हैं:

  1. एक बुरे अनुभव से सीखना - आप कुछ गलत करते हैं। आप इसे ठीक करें। आप कहते हैं, "अरे, मुझे ऐसा दोबारा नहीं करना चाहिए। अगली बार मैं एक्स करूँगा।" आप स्पष्ट रूप से मोटी में हैं।
  2. बुरे अनुभव से पहले सीखना - आखिरकार, आप कुछ प्रकार की समस्याओं को देखना सीखते हैं। जब आप ऐसा करेंगे, तो आप इससे बचने की कोशिश करेंगे। हो सकता है कि आप एक किताब पढ़ें, हो सकता है कि आप वेब पर खोज करें, हो सकता है कि आप कुछ प्रयोग करें।
  3. अनुभवी सहयोगियों से सीखना - यह अब तक सबसे आसान है, हालांकि यह अभी भी आसान नहीं है। चाल पता लगा रही है कि क्या सहयोगी एक बुरे अनुभव का जवाब दे रहा है जो अभी भी प्रासंगिक है। प्रौद्योगिकी सब के बाद, आगे बढ़ती है।

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


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

1
मैं सहमत हूँ, Shadur, लेकिन मुझे लगता है कि कुछ बुरे अनुभव वास्तव में आपके खुद के होने की आवश्यकता है। कुछ लोग किनारे पर बैठने की कोशिश करते हैं, तब तक प्रतीक्षा करते हैं जब तक कि वे सही चीज़ नहीं बना सकते। लेकिन उन्हें वास्तव में बस वहां पहुंचने की जरूरत है और अगर वे अपने कौशल में सुधार करना चाहते हैं तो बनाना शुरू कर दें।
विलियम पीट्री

4

जब यह वेब ऐप्स की बात आती है, तो इस जवाब में संकलित अधिक अच्छी जानकारी है जो मैंने कभी देखी थी।

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


तो मुझे लगता है कि यह अलग-अलग चीजों के लिए अलग है फिर, एह?
मेटागुरु

कई मुद्दे, वेब ऐप्स के लिए विशिष्ट होंगे, और कई सामान्य होंगे। यकीन नहीं है कि मैं पूरी तरह से समझता हूं कि आप क्या पूछ रहे हैं।
क्वेंटिन-स्टारिन

3

मुझे विलियम पिएत्री का उत्तर बहुत कुछ (+1) पसंद है, लेकिन मेरा मानना ​​है कि इसे जोड़ने की आवश्यकता है। यहां तक ​​कि यह माना जाता है कि सिस्टम से आपका क्या मतलब है, जिसमें केवल सॉफ्टवेयर शामिल है।

लेकिन इससे पहले कि मैं इसके मांस में जाऊं, मुझे मदद के लिए एक किताब का पता नहीं है। वह सब जो इस प्रकार है, मैंने अनुभव से सीखा (जिसका अर्थ है कि विलियम ने जो तीन बिंदु बनाए थे)।

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

  1. व्यापार विश्लेषक

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

    यह पहली पास है कि सिस्टम को क्या करना चाहिए, गंभीर सोच की शुरुआत।

  2. सिस्टम आर्किटेक्ट

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

    यह कई मायनों में मदद करता है जो विचार करने की आवश्यकता को परिष्कृत करता है। व्यवसाय विश्लेषक द्वारा लिखित आवश्यकताओं के बारे में उस स्तर पर बहुत बार समस्याओं की खोज की जाएगी। कुछ पुनरावृत्तियों के लिए उनके पास अपनी समझ में सुधार करने के लिए कि वे क्या चाहते हैं और उनकी अभिव्यक्ति क्या है।

  3. सिस्टम डिजाइनर

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

    सिस्टम की वास्तुकला को और अधिक परिष्कृत करने की उम्मीद है, और इसलिए व्यापार विश्लेषण के संभावित।

  4. टेस्ट मैनेजर

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

यह एक छोटा सारांश है।

वे लोग / गल्स केवल चेन के सामान्य रन के लोगों के बारे में सोचने के लिए होते हैं जिनके बारे में सोचा जाना चाहिए।

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

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

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

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

एचपीएच, एएसएम।


2

यहाँ जानने के लिए, क्या इस तरह के सामान पर एक किताब है?

"एक पुस्तक" नहीं। बहुत सारी किताबे।

कोई शाही सड़क नहीं है

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

सही।

आप "आर्किटेक्चर" के बारे में बात कर रहे हैं, बड़े में प्रोग्रामिंग।

चरण 1. बहुत सारे कोड पढ़ें। एक वास्तविक बहुत। उन चीजों के बारे में सोचें जो आप करना चाहते हैं। संबंधित ओपन सोर्स प्रोजेक्ट खोजें। कोड पढ़ें। यह सब।

चरण 2. अधिक कोड पढ़ें। बहुत अधिक।

चरण 3. वास्तुकला पर किताबें पढ़ें।


2
पढ़ा पढ़ें। लेकिन मेरा सुझाव है कि यह केवल वही नहीं है जो आप सीखते हैं जब आप वास्तव में वास्तविक सिस्टम को लागू करते हैं।
क्वेंटिन-स्टारिन

@qes: सवाल था "आप कहाँ सीखते हैं कि सिस्टम को ठीक से कैसे बनाया जाए?" आप यह नहीं सीखते हैं कि वास्तविक सिस्टम का निर्माण बुरी तरह से होता है। वास्तव में, वास्तविक प्रणालियों को बुरी तरह से लागू करना सीखने के बिल्कुल विपरीत है।
एस.लॉट

3
कोड कम्प्लीट से, एक चीज जो मुझे सबसे अच्छी लगी वह थी: "सॉफ्टवेयर-इंजीनियरिंग क्षेत्र अतीत की सफलताओं और असफलताओं के उदाहरणों का असाधारण रूप से सीमित उपयोग करता है। यदि आप वास्तुकला में रुचि रखते थे तो आप [प्रसिद्ध आर्किटेक्ट्स] के चित्र का अध्ययन करेंगे ... कुछ इमारतों पर जाएँ ... "।
जैकब

@ S.Lott: जिसने इसे बुरा करने के बारे में कुछ कहा?
क्वेंटिन-स्टारिन

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

1

बहुत सारी पुस्तकों को पढ़ने के लिए बढ़ाना ...।

अब आप जानते हैं कि आपको एक समस्या है, आपको इन पुस्तकों को पढ़ने के बारे में बताने का कुछ मतलब है। (इससे पहले कि आप कुछ वास्तविक काम करते हैं, इन पुस्तकों पर चर्चा करने का कोई मतलब नहीं है)

गामा, हेल्म, जॉनसन और Vlissides द्वारा डिजाइन पैटर्न कार्यक्रम डिजाइन की भाषाएँ भाषा डिजाइन 1,2,3 और 4।

लेकिन हर पेटेंट को हर जगह लागू करने की कोशिश न करें जो आप देखते हैं कि इसका उपयोग किया जा सकता है

यह भी एक बुरी बात है।

उम्मीद है की यह मदद करेगा।


1

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

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

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

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


1
+1, हालांकि मैं सुझाव दूंगा कि सिर्फ करना ही काफी नहीं है। आपको पता नहीं चलेगा कि आपने इसे अच्छी तरह से या बुरी तरह से तब तक किया है जब तक कि आप कुछ समय बीत जाने के बाद उसी कोड को दोबारा नहीं बनाते हैं। और फिर भी, आप जान सकते हैं कि कुछ गलत है, लेकिन नहीं कि इसे कैसे सुधार किया जा सकता है। उन सभी को शॉर्ट-कट करने का एक तरीका यह है कि आप जो सीखने की कोशिश कर रहे हैं, उस पर अधिक अनुभवी लोगों से बहुत सारी प्रॉमट प्रतिक्रिया सुनिश्चित करें। तो हां, "करना" बहुत महत्वपूर्ण है, लेकिन सीखने की प्रक्रिया को तेज करने के लिए आप जो भी करते हैं, उस पर प्रतिक्रिया।
मार्जन वेनमा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.