कम्प्यूटेशनल विधियों को सीखने के लिए प्राथमिकताएं, जब मुझे एक शुरुआत स्नातक छात्र के रूप में पुस्तकालयों का उपयोग करके अपना कोड लिखना चाहिए?


10

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


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

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

धन्यवाद। मैं प्रश्न को केंद्रित करने के लिए कुछ संपादन करूंगा, और फिर उत्तर पोस्ट करूंगा।
ज्योफ ऑक्सीबेरी

जवाबों:


10

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

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

केवल अन्य परिदृश्य जो मैं सोच सकता हूं (यानी, अन्य भी हो सकते हैं) हैं:

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

10

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

आप पाएंगे कि अपने वैज्ञानिक अनुसंधान को बढ़ाने के लिए सॉफ्टवेयर लिखने में सक्षम होने के कारण आप लगभग किसी भी शोध टीम के मूल्यवान सदस्य बन जाएंगे। हालाँकि, इस समय को आपके शैक्षणिक साथियों या शैक्षणिक पदों के लिए काम पर रखने वालों द्वारा "मूल्यवान" नहीं माना जाएगा।

2011 अनुसंधान प्रिंसटन, पर किए गए सर्वेक्षण से "कम्प्यूटेशनल विज्ञान के अभ्यास के एक सर्वेक्षण" :

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

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

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

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

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


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


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

6

मुझे लगता है कि लागत-लाभ विश्लेषण वांछित वैज्ञानिक कंप्यूटिंग साक्षरता पर निर्भर करता है जिसे आप अपनी पढ़ाई के दौरान हासिल करना चाहते हैं।

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

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

प्रवीणता का सही स्तर क्या है यह आपके करियर पर निर्भर करता है। देखें कि आपके क्षेत्र में काम करने वाले लोगों द्वारा किस स्तर के कौशल का उपयोग किया जाता है।

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