क्या यह जानना ठीक है कि आपने जो कार्यक्रम बनाया है, उसे जाने बिना कैसे जीना है?


16

मेरा मतलब है, वास्तव में उपयोगी कार्य हैं जो समस्याओं को हल कर सकते हैं जब आप फंस जाते हैं और यह नहीं जानते कि इस या उस प्रोग्रामिंग भाषा के आपके ज्ञान के साथ कैसे हल करें जो आप उपयोग करते हैं ... उदाहरण के लिए, जावास्क्रिप्ट के लिए C ++ या JQuery के लिए बूस्ट या स्प्रिंग के लिए जावा ... वे सेकंड में समस्याओं को हल करते हैं और आपको वास्तव में परवाह नहीं है कि उन्होंने यह कैसे किया (इसके बावजूद कि वे उसी भाषा में लिखे जा रहे हैं जो आप प्रोग्रामिंग कर रहे हैं) ... तो मुझे आश्चर्य है कि मैं अकेला हूँ केवल लिबास का उपयोग नहीं करते हुए खरोंच से मेरी समस्याओं के समाधान लिखने में सक्षम है या यह मानक अभ्यास है?


वे व्यक्तियों की समस्याओं का समाधान नहीं करते हैं, वे संबंधित क्षेत्रों में आम समस्याओं के लिए एक समाधान हैं।
अभिमरण कुगथासन

इसलिए यह ठीक है कि संबंधित क्षेत्र में आम समस्याओं को कैसे हल किया जाए और यह कहा जाए कि "बस *** का उपयोग करें (आपका पसंदीदा काम यहां)" यह तय नहीं होगा कि यह वास्तव में कैसे हुआ?
कबुम्बुस

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

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

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

जवाबों:


22

क्या यह समझना ठीक नहीं है कि समस्याओं को स्वयं कैसे हल करें, और इसके बजाय पुस्तकालयों का उपयोग करें?

सामान्य तौर पर, नहीं, यह नहीं है।

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

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

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


13

एक बार computerworld.com.au ने बज्ने स्ट्राउस्ट्रप से पूछा "क्या आपके पास अप और आने वाले प्रोग्रामर के लिए कोई सलाह है?"
और उसने जवाब दिया"कंप्यूटर विज्ञान की नींव को जानें: एल्गोरिदम, मशीन आर्किटेक्चर, डेटा संरचनाएं, आदि। तकनीक से आवेदन करने के लिए केवल नेत्रहीन कॉपी न करें। जानें कि आप क्या कर रहे हैं, कि यह काम करता है, और यह क्यों काम करता है। आपको नहीं लगता। जानिए कि उद्योग पांच साल के समय में क्या होगा या आप क्या कर रहे होंगे, इसलिए सामान्य और उपयोगी कौशल का एक पोर्टफोलियो इकट्ठा करें। बेहतर, अधिक राजसी कोड लिखने की कोशिश करें। एक पेशेवर गतिविधि के "प्रोग्रामिंग" को और अधिक करने के लिए काम करें। निम्न स्तर की "हैकिंग" गतिविधि (प्रोग्रामिंग भी एक शिल्प है, लेकिन सिर्फ एक शिल्प नहीं) से कम है। क्षेत्र में क्लासिक्स और बेहतर उन्नत पाठ्यपुस्तकों से सीखें; आसानी से पचने वाले "कैसे करें" से संतुष्ट न हों गाइड और ऑनलाइन प्रलेखन - यह उथले है। "
आशा है कि यह आपके संदेह को स्पष्ट करेगा कि एक के लिए क्या आवश्यक हैसच्चा प्रोग्रामर और किसी के लिए एक होना आवश्यक है


4
+1 - मुझे लगता है कि यह नोट करना महत्वपूर्ण है - जबकि मैं 100% स्ट्रॉस्ट्रुप से सहमत हूं - ओपी को यह विचार नहीं करना चाहिए कि इसका मतलब है कि वह हर एक चीज पर पहिया को फिर से मजबूत करना चाहिए जो वह करता है। कंप्यूटर विज्ञान शिक्षा में स्ट्रिंग क्लास और मर्गेर्सॉर्ट और अन्य एल्गोरिदम को लागू करने का मुख्य कारण यह है कि जब हम अपनी पसंद की भाषा में उपलब्ध पुस्तकालयों का उपयोग करते हैं, तो हम समझेंगे कि हुड के नीचे क्या होता है। नींव की अच्छी समझ के साथ पर्याप्त पुस्तकालयों से
निपटें

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

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

12

हाँ - और हम सब करते हैं!

उदाहरण के लिए, कुछ मैक-संबंधित ग्राफिक्स कोड में एक बहुत ही सरल बग मैं ठीक कर रहा था। बग के आसपास के कोड में कई चरण शामिल हैं:

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

वहाँ एक भयानक बहुत चल रहा है! यहाँ कुछ चीजें हैं:

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

क्या आप सभी विवरणों को समझते हैं कि वास्तव में उन सभी चीजों को कैसे लागू किया जाता है? मुझे यकीन है कि नहीं! मुझे संदेह है कि ग्रह पर बहुत सारे लोग हैं जो करते हैं - शायद कोई भी नहीं। इसलिए मुझे इसकी चिंता नहीं है।

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


1
यदि मैं सभी कोड को समझने के लिए उपयोग करता हूं, जो मैं नियमित रूप से उपयोग करता हूं, तो मुझे JPEGs, ज्यामितीय डेटा प्रतिनिधित्व सहित डेटा संपीड़न को समझने की आवश्यकता होगी जिसमें <i> नर्स बुक </ i>, पीडीएफ और यू 3 डी के प्रारूप, और प्रारूप बहुत अधिक। मुझे हर चीज पर संदर्भ मिल गया है, लेकिन मैं कभी भी इस सबको कम करने वाला नहीं हूं।
डेविड थॉर्नले

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

5

मुझे लगता है कि पुस्तकालयों का उपयोग करने का मुख्य कारण यह है कि वे हर समय "पहिया को सुदृढ़ नहीं" करते हैं, उन समस्याओं को अमूर्त करते हैं जिन्हें वे हल करना चाहते हैं। आप स्वयं समस्याओं को हल करने का प्रयास कर सकते हैं, लेकिन इसमें अधिक समय लगेगा।

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

इसके अलावा, हम आम तौर पर वैसे भी मुश्किल हिस्सों का सार करके समस्याओं को हल करते हैं, तो यह ठीक क्यों नहीं है?


5

पुस्तकालय आम समस्याओं के समाधान प्रदान करने के लिए हैं। आपको यह तय करने की आवश्यकता है कि क्या वे उस विशेष समस्या को हल करते हैं जिसे आप हल कर रहे हैं। वे नहीं जानते कि समस्या का समाधान कैसे किया जाए। उदाहरण के लिए, मान लें कि आपके आवेदन के लिए एक हैश तालिका की आवश्यकता है, आपको यह समझने के लिए पर्याप्त ज्ञान होना चाहिए कि हैश तालिका क्या समस्या हल कर रही है। आपको यह निर्धारित करने में सक्षम होना चाहिए कि आप जिस पुस्तकालय का उपयोग कर रहे हैं, वह आपके आवेदन में काम करेगा या नहीं। मेरा मानना ​​है कि अपर्याप्त तकनीकी ज्ञान के लिए पुस्तकालय का उपयोग करना सही उपयोग का मामला नहीं है। पुस्तकालय का उपयोग करने के निर्णय को घूमना चाहिए या नहीं पुस्तकालय का उपयोग विकास को गति देगा और एक परीक्षण और विश्वसनीय समाधान प्रदान करेगा। एक पुस्तकालय का उपयोग करने का निर्णय किसी समस्या को हल करने में असमर्थता प्रोग्रामर के चारों ओर घूमना नहीं चाहिए।


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

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

5

आपके ऊपर, वास्तव में

आप जिन उपकरणों के साथ बेहतर तरीके से काम कर रहे हैं, उन्हें बेहतर तरीके से समझ सकते हैं।

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

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


5

अपने दायरे और प्रक्रिया के अपने हिस्से को जानना महत्वपूर्ण है।

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

दूसरी ओर, यदि आप एक कंपाइलर लिख रहे हैं, तो आप बेहतर तरीके से जानते हैं कि कंपाइलर कैसे काम करता है, क्योंकि इस प्रक्रिया में आपका हिस्सा है।

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


2

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

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

जिन चीजों को मैं यहां जोड़ना चाहता हूं, वह "निर्भरता" है। एक समुदाय के रूप में, हम सभी दूसरों पर निर्भर हैं। हम अपने आवेदन के निर्माण के लिए दिग्गजों पर खड़े हैं: जावा, .NET, एपीआई ... और हम अपने काम के बारे में दिग्गजों पर भरोसा करते हैं; क्योंकि यह इतने सारे लोगों के लिए काम करता है। यदि आपके पास फ्रेमवर्क, या एपीआई के बारे में कोई समस्या है, तो एक अच्छा मौका है कि अन्य लोगों ने इसका कहीं न कहीं सामना किया है, और एक समाधान / काम है।

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

उस संभावना का सामना करने के लिए, मुझे लगता है कि एक समाधान है: क्योंकि अधिकांश प्रोग्रामर आसानी से एक पुस्तकालय की "सतह के काम" को पकड़ सकते हैं, और केवल कभी-कभी हमें वास्तव में किसी ऐसे व्यक्ति की आवश्यकता होती है जो बहुत अच्छी तरह से समझने वाला हो: ऐसा करने के लिए टीम को विभाजित करें। एक टीम को शामिल करने की कोशिश करना, जिसमें हर एक ने लगभग 1,2 उपयोगी पुस्तकालयों / उपकरणों / "कौशल सेट" को शामिल किया है : इसमें jQuery के बारे में अच्छा अनुभव है, एक ने डेटाबेस के साथ विशेषज्ञ किया है, ... यह जोखिमों को कम करने में बहुत मदद करेगा।


2

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

क्विकॉर्ट को कॉल करते समय, आपको सबसे खराब स्थिति व्यवहार के बारे में पता होना चाहिए। एसे हमलावर सबसे खराब स्थिति डेटा को इंजेक्ट करने और एक DoS प्रदर्शन करने में सक्षम हो सकता है।

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

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


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

1

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

प्रोग्रामिंग में कठिन चीजों में से एक अपने आप से सभी समस्याओं को हल करने के लिए प्रलोभन पर काबू पा रही है।


1

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


1

किंडा ...

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

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

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

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

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