एक वैज्ञानिक वातावरण में प्रोग्रामिंग के लिए अभ्यास? [बन्द है]


91

पृष्ठभूमि

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

अब, चीजें वास्तव में आश्चर्यजनक रूप से ठीक हुईं, लेकिन प्राकृतिक विज्ञान के लोग अपने सॉफ्टवेयर का विकास कैसे करते हैं?

प्रशन

कुछ ठोस सवाल:

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

इस प्रकार उत्तर का सारांश

इस प्रकार के उत्तर (या मेरी व्याख्या) अब तक: (2008-10-11)

  • सबसे व्यापक रूप से इस्तेमाल होने वाली भाषाएँ / पैकेज:
    • LabVIEW
    • अजगर
      • साथ SciPy , NumPy , PyLab , आदि (यह भी देखें डाउनलोड और लिंक के लिए ब्रैंडन के उत्तर)
    • C / C ++
    • Matlab
  • संस्करण नियंत्रण का उपयोग लगभग सभी उत्तरदाताओं द्वारा किया जाता है; बग ट्रैकिंग और अन्य प्रक्रियाएं बहुत कम आम हैं।
  • सॉफ्टवेयर बढ़ईगीरी पाठ्यक्रम वैज्ञानिकों को प्रोग्रामिंग और विकास तकनीक सिखाने का एक अच्छा तरीका है।
  • चीजों को कैसे सुधारें?
    • लोगों को सख्त प्रोटोकॉल का पालन करने के लिए मजबूर न करें।
    • स्वयं एक वातावरण स्थापित करें, और दूसरों को लाभ दिखाएं। उन्हें स्वयं संस्करण नियंत्रण, बग ट्रैकिंग आदि के साथ काम करना शुरू करने में मदद करें।
    • अन्य लोगों के कोड की समीक्षा करने से मदद मिल सकती है, लेकिन इस बात से अवगत रहें कि हर कोई इसकी सराहना नहीं कर सकता है।

जवाबों:


27

वैज्ञानिक सॉफ़्टवेयर, एस्प विकसित करने के लिए आपने किन भाषाओं / वातावरण का उपयोग किया है। डेटा विश्लेषण? क्या पुस्तकालय? (जैसे, आप प्लॉटिंग के लिए क्या इस्तेमाल करते हैं?)

मैं के लिए काम करता था Enthought , के प्राथमिक कॉर्पोरेट प्रायोजक SciPy । हमने उन कंपनियों के वैज्ञानिकों के साथ सहयोग किया, जिन्होंने कस्टम सॉफ्टवेयर विकास के लिए उत्साहित किया था। Python / SciPy वैज्ञानिकों के लिए एक आरामदायक वातावरण प्रतीत हो रहा था। यदि आप एक सॉफ्टवेयर पृष्ठभूमि के बिना वैज्ञानिक हैं, तो C ++ या Java की तुलना में इसे शुरू करना बहुत कम डराने वाला है।

Enthought अजगर वितरण विश्लेषण सहित सभी वैज्ञानिक कंप्यूटिंग पुस्तकालयों, साजिश रचने 3 डी visualation, आदि, के साथ आता है

क्या प्रोग्रामिंग में किसी महत्वपूर्ण पृष्ठभूमि के बिना लोगों के लिए कोई प्रशिक्षण था?

उत्साहित, SciPy प्रशिक्षण प्रदान करता है और SciPy समुदाय मेलिंग सूचियों पर सवालों के जवाब देने के बारे में बहुत अच्छा है।

क्या आपके पास संस्करण नियंत्रण, बग ट्रैकिंग जैसे कुछ भी था?

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

आप प्रोग्रामिंग के लिए एक सभ्य वातावरण बनाने की कोशिश करने के बारे में कैसे जा सकते हैं, व्यक्तिगत वैज्ञानिकों के रास्ते में बहुत अधिक हो रही बिना (भौतिक विज्ञानी जिद्दी लोग हैं!)

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


21

पाठ्यक्रम सॉफ्टवेयर बढ़ईगीरी विशेष रूप से वैज्ञानिक कंप्यूटिंग करने वाले लोगों के उद्देश्य से है और इसका उद्देश्य सॉफ्टवेयर इंजीनियरिंग की मूल बातें और सबक सिखाना है, और उन्हें परियोजनाओं पर लागू करना सबसे अच्छा है।

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

मैंने लगभग 8 या 9 व्याख्यान सुने हैं और लगता है कि इसकी अत्यधिक अनुशंसा की जानी है।

संपादित करें: व्याख्यान के MP3 भी उपलब्ध हैं ।


16

यहाँ परमाणु / कण भौतिकी।

  • मुख्य प्रोग्रामिंग का काम ज्यादातर फोरट्रान में CERNLIB (PAW, MINUIT, ...) और GEANT3 का उपयोग करके किया जाता है , हाल ही में यह ज्यादातर C ++ में ROOT और Geant4 के साथ किया गया है । विशेष उपयोग में कई अन्य पुस्तकालय और उपकरण हैं, और LabVIEW कुछ उपयोग यहां और वहां देखता है।
  • इस व्यवसाय के मेरे अंत में डेटा अधिग्रहण का मतलब अक्सर निम्न स्तर का काम होता है। अक्सर सी में, कभी-कभी विधानसभा में भी, लेकिन यह मर रहा है क्योंकि हार्डवेयर अधिक सक्षम हो जाता है। दूसरी ओर, कई बोर्ड अब FPGA के साथ बनाए गए हैं जिन्हें गेट ट्विडलिंग की आवश्यकता है ...
  • वन-ऑफ्स, ग्राफिकल इंटरफेस, आदि लगभग कुछ भी उपयोग करते हैं ( Tcl / Tk का उपयोग बड़े पैमाने पर किया जाता है, और मैं अधिक पर्ल / Tk और Python / Tk हाल ही में देख रहा हूं) जिसमें कई पैकेज शामिल हैं जो ज्यादातर कण समुदाय के अंदर मौजूद हैं ।
  • कोड लिखने वाले बहुत से लोगों के पास बहुत कम या कोई औपचारिक प्रशिक्षण नहीं है, और मौखिक परंपरा द्वारा प्रक्रिया बहुत ही असमान रूप से प्रसारित की जाती है, लेकिन अधिकांश सॉफ्टवेयर समूह के नेता इस प्रक्रिया को गंभीरता से लेते हैं और इस क्षेत्र में अपनी कमियों को पूरा करने के लिए आवश्यक पढ़ते हैं।
  • मुख्य उपकरणों के लिए संस्करण नियंत्रण सर्वव्यापी है। लेकिन कई व्यक्तिगत प्रोग्रामर अपने छोटे कार्यों के लिए इसकी उपेक्षा करते हैं। औपचारिक बग ट्रैकिंग उपकरण कम सामान्य होते हैं, जैसे कि रात के निर्माण, इकाई परीक्षण और प्रतिगमन परीक्षण।

चीजों को बेहतर बनाने के लिए:

  1. स्थानीय सॉफ्टवेयर नेताओं के अच्छे पक्ष पर जाएं
  2. उस प्रक्रिया को लागू करें जिसे आप अपने स्वयं के क्षेत्र में उपयोग करना चाहते हैं, और उन लोगों को प्रोत्साहित करें जिन्हें आप इसका उपयोग करने देते हैं।
  3. रुको। भौतिकवादी अनुभवजन्य लोग हैं। यदि यह मदद करता है, तो वे (अंततः!) नोटिस करेंगे।

चीजों को बेहतर बनाने के लिए एक और सुझाव।

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

11

यह थोड़ा पेचीदा हो सकता है, लेकिन उम्मीद है कि प्रासंगिक होगा।

मैं नेशनल इंस्ट्रूमेंट्स, आरएंडडी के लिए काम करता था, जहां मैंने एनआई आरएफ और कम्युनिकेशन टूलकिट के लिए सॉफ्टवेयर लिखा था। हमने LabVIEW का काफी इस्तेमाल किया, और यहां हमारे द्वारा पालन की जाने वाली प्रथाएं हैं:

  1. स्रोत नियंत्रण। NI Perforce का उपयोग करता है। हमने नियमित काम किया - देव / ट्रंक शाखाएं, निरंतर एकीकरण, कार्य।
  2. हमने स्वचालित परीक्षण सूट लिखे।
  3. हमारे पास कुछ लोग थे जो सिग्नल प्रोसेसिंग और संचार की पृष्ठभूमि के साथ आए थे। हमारे पास नियमित रूप से कोड समीक्षाएं होती थीं, और यह सुनिश्चित करने के लिए कि उनका कोड मार्क तक था, यह सुनिश्चित करने के लिए सर्वोत्तम अभ्यास दस्तावेज़ हैं।
  4. कोड समीक्षाओं के बावजूद, कुछ अवसर थे जब "सॉफ्टवेयर लोग", जैसे कि मुझे दक्षता के लिए इस कोड में से कुछ को फिर से लिखना पड़ा।
  5. मुझे पता है कि जिद्दी लोगों के बारे में आपका क्या मतलब है! हमारे पास ऐसे लोग थे जो सोचते थे कि उनके कोड में संभावित प्रदर्शन सुधार को इंगित करना एक सीधा व्यक्तिगत अपमान था! यह कहे बिना जाता है कि यह अच्छे प्रबंधन के लिए कहता है। मैंने सोचा कि इन लोगों से निपटने का सबसे अच्छा तरीका धीरे-धीरे जाना है, परिवर्तनों के लिए कड़ी मेहनत नहीं करना और यदि आवश्यक हो तो गंदा काम करने के लिए तैयार रहना। [उदाहरण: उनके कोड के लिए एक परीक्षण सूट लिखें]।

9

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

मैं संस्करण नियंत्रण का बहुत बड़ा प्रशंसक हूं। मैंने अपने शोध प्रबंध के लिए सभी कोड के लिए अपने घर के सर्वर पर चल रहे वॉल्ट का इस्तेमाल किया। अभी मैं एक तोड़फोड़ सर्वर स्थापित करने के लिए विभाग को प्राप्त करने की कोशिश कर रहा हूं, लेकिन मेरा अनुमान है कि मैं इसका उपयोग करने वाला एकमात्र व्यक्ति होगा, कम से कम पहले। मैंने FogBugs के साथ थोड़ा सा खेला है, लेकिन संस्करण नियंत्रण के विपरीत, मुझे नहीं लगता कि यह लगभग एक व्यक्ति टीम के लिए उपयोगी है।

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


7

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

2.) हम यहाँ मिश्रण में लोगों को फेंक देते हैं। हमारे पास बहुत से कोड बहुत गन्दे हैं, लेकिन वैज्ञानिक आमतौर पर बिखरे हुए गुच्छा होते हैं जो उस तरह की बात को बुरा नहीं मानते हैं। आदर्श नहीं है, लेकिन हमारे पास देने के लिए चीजें हैं और हम गंभीर रूप से समझ गए हैं। हम धीरे-धीरे बेहतर हो रहे हैं।

3.) हम एसवीएन का उपयोग करते हैं; हालाँकि, हमारे पास बग ट्रैकिंग सॉफ़्टवेयर नहीं है। हमारे बारे में जितना अच्छा हो उतना अच्छा है कि एक txt फ़ाइल है जो आपको बताती है कि कीड़े विशिष्ट कीड़े कहाँ हैं।

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


6

मैं "फ्लोटिंग-पॉइंट अंकगणित के बारे में क्या जानना चाहिए" हर कंप्यूटर वैज्ञानिक को पढ़ने की सलाह देते हैं । नियमित आधार पर मेरे द्वारा सामना की जाने वाली बहुत सी समस्याएं फ्लोटिंग पॉइंट प्रोग्रामिंग के मुद्दों से आती हैं।


5

मैं एक भौतिक विज्ञानी हूँ जो संघनित पदार्थ भौतिकी के क्षेत्र में काम कर रहा है, शास्त्रीय और क्वांटम मॉडल का निर्माण कर रहा है।

भाषाएँ:

  • C ++ - बहुत बहुमुखी: कुछ भी, अच्छी गति के लिए इस्तेमाल किया जा सकता है, लेकिन यह MPI में आने पर थोड़ा असुविधाजनक हो सकता है
  • ऑक्टेव - कुछ पूरक गणनाओं के लिए अच्छा है, बहुत सुविधाजनक और उत्पादक

पुस्तकालय:

  • अर्माडिलो / ब्लिट्ज ++ - सी ++ के लिए फास्ट ऐरे / मैट्रिक्स / क्यूब एब्स्ट्रक्शन
  • Eigen / Armadillo - रैखिक बीजगणित
  • जीएसएल - सी के साथ उपयोग करने के लिए
  • LAPACK / BLAS / ATLAS - बहुत बड़ा और तेज़, लेकिन कम सुविधाजनक (और FORTRAN में लिखा गया है)

ग्राफिक्स:

  • GNUPlot - इसका बहुत साफ और साफ उत्पादन होता है, लेकिन कभी-कभी ऐसा नहीं होता
  • उत्पत्ति - साजिश रचने के लिए बहुत सुविधाजनक है

विकास के औजार:

  • विम + प्लगइन्स - यह मेरे लिए बहुत अच्छा काम करता है
  • जीडीबी - सी / सी ++ के साथ काम करते समय एक महान डिबगिंग टूल
  • कोड :: ब्लॉक - मैंने इसे कुछ समय के लिए इस्तेमाल किया और इसे काफी आरामदायक पाया, लेकिन विम अभी भी मेरी राय में बेहतर है।

यदि आपका c ++ आपके c की तुलना में धीमा चल रहा है तो आप इसका गलत उपयोग कर रहे हैं। 'कोर्स, यह करना आसान है, लेकिन यह एक और मामला है। :: 7 साल के लिए सी + + के साथ काम कर रहे हैं, और अभी भी हर समय नई चीजें सीख रहे हैं ::
dmckee --- पूर्व-मध्यस्थ बिल्ली का बच्चा

मैं वास्तव में C ++ का बहुत बड़ा प्रशंसक हूं, लेकिन यह देखना मुश्किल है कि यह C या फोरट्रान की तुलना में "कितना धीमा" हो सकता है। जब तक कि आप HPC के लिए C वेरिएंट जैसे UPC और CUDA के लिए C शामिल नहीं करते।
सुगाक्कू

4

मैं ब्रिटेन के एक विश्वविद्यालय में भौतिक विज्ञानी के रूप में काम करता हूं।

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

  • वैज्ञानिक सॉफ़्टवेयर, एस्प विकसित करने के लिए आपने किन भाषाओं / वातावरण का उपयोग किया है। डेटा विश्लेषण? क्या पुस्तकालय? (जैसे, आप प्लॉटिंग के लिए क्या इस्तेमाल करते हैं?)

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

नियंत्रण सॉफ्टवेयर आमतौर पर LabVIEW में किया जाता है, हालांकि हम वास्तव में डेल्फी का उपयोग करते हैं जो कुछ हद तक असामान्य है।

  • क्या प्रोग्रामिंग में किसी महत्वपूर्ण पृष्ठभूमि के बिना लोगों के लिए कोई प्रशिक्षण था?

मैं उन दोनों विश्वविद्यालयों द्वारा दिए गए ग्रिड कंप्यूटिंग, 3 डी विज़ुअलाइज़ेशन, लर्निंग बूस्ट आदि पर सेमिनार कर चुका हूँ। एक स्नातक के रूप में हमें एक्सेल और मैटलैब के लिए VBA सिखाया गया था लेकिन C / MatLab / LabVIEW अधिक सामान्य है।

  • क्या आपके पास संस्करण नियंत्रण, बग ट्रैकिंग जैसे कुछ भी था?

नहीं, हालांकि लोगों के पास व्यक्तिगत विकास सेटअप हैं। हमारा कोड आधार 'सर्वर' पर एक साझा फ़ोल्डर में है जिसे एक सिंकिंग टूल के साथ चालू रखा गया है।

  • आप प्रोग्रामिंग के लिए एक सभ्य वातावरण बनाने की कोशिश करने के बारे में कैसे जा सकते हैं, व्यक्तिगत वैज्ञानिकों के रास्ते में बहुत अधिक हो रही बिना (भौतिक विज्ञानी जिद्दी लोग हैं!)

एक समय में एक ही कदम! मैं साझा फ़ोल्डर को कुछ अधिक ठोस के साथ बदलने की कोशिश कर रहा हूं, शायद एक एसवीएन क्लाइंट ढूंढ रहा हूं जो मौजूदा सिंकिंग टूल व्यवहार की मदद करेगा।

मैं कहूंगा कि पूरी तरह से, अधिकांश प्राकृतिक विज्ञान परियोजनाओं के लिए, आमतौर पर शोध करने में बेहतर समय व्यतीत होता है!


अपने विचारों को साझा करने के लिए धन्यवाद! मैं मानता हूं कि "समय आमतौर पर शोध करने में बेहतर रूप से व्यतीत होता है", लेकिन यह देखते हुए कि प्रोग्रामिंग में संस्करण नियंत्रण और बुनियादी प्रशिक्षण जैसी चीजों की कमी के कारण अक्सर कितना समय नष्ट हो जाता है, मैं कहूंगा कि वैज्ञानिक इस मुद्दे को कम आंकेंगे।
onnodb

4

भूतपूर्व शैक्षणिक भौतिक विज्ञानी और अब औद्योगिक भौतिक विज्ञानी ब्रिटेन यहां:

वैज्ञानिक सॉफ़्टवेयर, एस्प विकसित करने के लिए आपने किन भाषाओं / वातावरण का उपयोग किया है। डेटा विश्लेषण? क्या पुस्तकालय? (जैसे, आप प्लॉटिंग के लिए क्या इस्तेमाल करते हैं?)

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

क्या प्रोग्रामिंग में किसी महत्वपूर्ण पृष्ठभूमि के बिना लोगों के लिए कोई प्रशिक्षण था?

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

क्या आपके पास संस्करण नियंत्रण, बग ट्रैकिंग जैसे कुछ भी था?

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

आप प्रोग्रामिंग के लिए एक सभ्य वातावरण बनाने की कोशिश करने के बारे में कैसे जा सकते हैं, व्यक्तिगत वैज्ञानिकों के रास्ते में बहुत अधिक हो रही बिना (भौतिक विज्ञानी जिद्दी लोग हैं!)

मैं स्नातक स्तर पर कुछ सॉफ्टवेयर इंजीनियरिंग विचारों को पेश करने की कोशिश करूंगा और फिर स्नातक स्तर पर अभ्यास द्वारा उन्हें सुदृढ़ करूंगा, ऊपर वर्णित सॉफ्टवेयर बढ़ईगीरी पाठ्यक्रम जैसे संसाधनों को संकेत भी प्रदान करता हूं।

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


4

वैज्ञानिक सॉफ़्टवेयर, एस्प विकसित करने के लिए आपने किन भाषाओं / वातावरण का उपयोग किया है। डेटा विश्लेषण? क्या पुस्तकालय? (जैसे, आप प्लॉटिंग के लिए क्या इस्तेमाल करते हैं?)

पायथन, न्यूमपी और पाइलैब (प्लॉटिंग)।

क्या प्रोग्रामिंग में किसी महत्वपूर्ण पृष्ठभूमि के बिना लोगों के लिए कोई प्रशिक्षण था?

नहीं, लेकिन मैं मल्टीमीडिया रिसर्च लैब में काम कर रहा था, इसलिए लगभग हर व्यक्ति के पास कंप्यूटर साइंस बैकग्राउंड था।

क्या आपके पास संस्करण नियंत्रण, बग ट्रैकिंग जैसे कुछ भी था?

हां, संस्करण नियंत्रण के लिए तोड़फोड़ , बग ट्रेसिंग और विकी के लिए Trac । आप मुफ्त बग ट्रैकर / संस्करण नियंत्रण होस्टिंग से प्राप्त कर सकते हैं http://www.assembla.com/ अगर उनकी टीओएस आपकी परियोजना के अनुकूल है

आप प्रोग्रामिंग के लिए एक सभ्य वातावरण बनाने की कोशिश कैसे करेंगे, व्यक्तिगत वैज्ञानिकों के रास्ते में बहुत अधिक हो रही बिना (भौतिक विज्ञानी जिद्दी लोग हैं!)।

सुनिश्चित करें कि बुनियादी ढाँचा स्थापित है और अच्छी तरह से बनाए रखा है और स्रोत नियंत्रण के लाभों को बेचने की कोशिश करें।


3

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

यह कहने के बाद, कुछ मुद्दे हैं। बहुत बड़े डेटासेट के साथ R बहुत धीमा हो सकता है (मैंने वास्तव में इसे केवल 50,000x30 डेटासेट के साथ देखा है) और चूंकि इसकी व्याख्या की जाती है कि आपको इस संबंध में फोरट्रान / सी का लाभ नहीं मिलता है। लेकिन, आप (बहुत आसानी से) आर को सी और फोरट्रान साझा पुस्तकालयों को कॉल करने के लिए प्राप्त कर सकते हैं (या तो नेटलिब जैसी किसी चीज़ से या जिसे आपने खुद लिखा है।) तो, एक सामान्य वर्कफ़्लो होगा:

  • क्या करना है बाहर काम करो।
  • आर में कोड को प्रोटोटाइप करें।
  • कुछ प्रारंभिक विश्लेषण चलाएं।
  • धीमे कोड को C या फोरट्रान में फिर से लिखें और R से कॉल करें।

जो मेरे लिए बहुत अच्छा काम करता है।

मैं अपने विभाग में (100 लोगों में से) केवल एक व्यक्ति हूं, जो संस्करण नियंत्रण का उपयोग करता है (मेरे मामले में gituibib.com के साथ git का उपयोग करके।) यह बजाय चिंताजनक है, लेकिन वे इसे आज़माने के लिए उत्सुक नहीं हैं। बाहर और आसपास ज़िप फ़ाइलों के साथ सामग्री हैं (yuck।)

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


2

वैज्ञानिक सॉफ़्टवेयर, एस्प विकसित करने के लिए आपने किन भाषाओं / वातावरण का उपयोग किया है। डेटा विश्लेषण? क्या पुस्तकालय? (जैसे, आप प्लॉटिंग के लिए क्या इस्तेमाल करते हैं?)

मेरे स्नातक भौतिकी विभाग ने LabVIEW कक्षाएं सिखाईं और अपने शोध परियोजनाओं में इसका बड़े पैमाने पर उपयोग किया।

दूसरा विकल्प MATLAB है , जिसमें मुझे कोई अनुभव नहीं है। या तो उत्पाद के लिए शिविर हैं; प्रत्येक के अपने फायदे / नुकसान हैं। आपको किस तरह की समस्याओं को हल करना है, इसके आधार पर, एक पैकेज दूसरे की तुलना में अधिक बेहतर हो सकता है।

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

क्या आपके पास संस्करण नियंत्रण, बग ट्रैकिंग जैसे कुछ भी था?

पीछे मुड़कर देखें, तो हमने ऐसा नहीं किया और अगर हम करते तो यह सब आसान हो जाता। सब कुछ तोड़ने और इसे ठीक करने के लिए घंटों संघर्ष करने जैसा कुछ नहीं!

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

आप प्रोग्रामिंग के लिए एक सभ्य वातावरण बनाने की कोशिश करने के बारे में कैसे जा सकते हैं, व्यक्तिगत वैज्ञानिकों के रास्ते में बहुत अधिक हो रही बिना (भौतिक विज्ञानी जिद्दी लोग हैं!)

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


2

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

संस्करण के बारे में, कुछ मर्क्यूरियल को पसंद करते हैं , क्योंकि यह रिपॉजिटरी को प्रबंधित करने और परिभाषित करने के लिए अधिक स्वतंत्रता देता है। हालाँकि मुझे इसके साथ कोई अनुभव नहीं है।

साजिश रचने के लिए मैं Matplotlib का उपयोग करता हूं । मुझे जल्द ही एनिमेशन बनाना होगा, और मैंने MEncoder का उपयोग करके अच्छे परिणाम देखे हैं । यहाँ एक उदाहरण है जिसमें एक ऑडियो ट्रैक भी शामिल है।

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

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

कुछ संकेत के रूप में, मैं यह भी सुझाव देता हूं:

  • एकल-वर्ण चर का उपयोग नहीं करना। जब आप दिखावे को खोजना चाहते हैं, तो आपको हर जगह परिणाम मिलेंगे। कुछ का तर्क है कि एक सभ्य आईडीई यह आसान बनाता है, लेकिन फिर आप आईडीई तक स्थायी पहुंच रखने पर निर्भर होंगे। यहां तक ​​कि ii, jj और kk का उपयोग करना पर्याप्त हो सकता है, हालांकि यह विकल्प आपकी भाषा पर निर्भर करेगा। (उदाहरण के लिए, एस्टोनियन में कोड कमेंट किए गए हैं तो डबल स्वर कम उपयोगी होंगे)।

  • कोड की शुरुआत से ही टिप्पणी करना।

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

  • अनावश्यक और स्वचालित बैकअप का उपयोग करें! (संस्करण नियंत्रण के साथ)।


2

निश्चित रूप से, वर्तमान, काम-में-प्रगति, और स्रोत कोड की स्थिर स्नैपशॉट प्रतियां रखने के लिए सबवर्सन का उपयोग करें । इसमें होमग्रोन सॉफ्टवेयर टूल्स के लिए C ++, जावा आदि और एक-बंद प्रोसेसिंग के लिए क्विक स्क्रिप्ट शामिल हैं।

विज्ञान में मजबूत झुकाव और "लोन काउबॉय" विकास पद्धति के लिए इंजीनियरिंग लागू करने के साथ, ट्रॉज, टैग और जो कुछ भी था उसमें रिपॉजिटरी के आयोजन की सामान्य प्रथा - परेशान मत करो! वैज्ञानिक और उनके लैब तकनीशियन घुमा-फिराकर घुँघरू बनाना पसंद करते हैं, इलेक्ट्रोड से टकराते हैं और वैक्यूम लीक का पीछा करते हैं। यह सभी के लिए सहमत होने के लिए एक नौकरी के लिए पर्याप्त है, पायथन / न्यूमपी कहते हैं या कुछ नामकरण सम्मेलन का पालन करते हैं; उन्हें रहस्यमय सॉफ्टवेयर डेवलपर प्रथाओं और सम्मेलनों का पालन करने की कोशिश करना भूल जाते हैं।


2

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


क्या आपने कभी वितरित संस्करण नियंत्रण प्रणाली का उपयोग करने की कोशिश की है?
एंड्रयू ग्रिम

1
वितरित सिस्टम के लगभग सभी इसे केंद्रीकृत लोगों के समान आसान बनाते हैं। आप केवल एक संशोधन संख्या (एसवीएन में) के बजाय एक कमिट आईडी (जीआईटी शर्तों में) रिकॉर्ड करते हैं।
फिल मिलर

2

वैज्ञानिक सॉफ़्टवेयर, एस्प विकसित करने के लिए आपने किन भाषाओं / वातावरण का उपयोग किया है। डेटा विश्लेषण? क्या पुस्तकालय? (जैसे, आप प्लॉटिंग के लिए क्या इस्तेमाल करते हैं?)

मेरे द्वारा उपयोग की जाने वाली भाषाएं, संख्यात्मक और संबंधित सामग्री के लिए:

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

मेरा संपादक Emacs है, हालांकि मैं संपादन फ़ाइलों की तरह त्वरित सामान के लिए vim का उपयोग करता हूं।

प्लॉटिंग के लिए, मैं आमतौर पर एक टेक्स्ट फाइल जेनरेट करता हूं और उसे gnuplot में फीड करता हूं।

डेटा विश्लेषण के लिए, मैं आमतौर पर एक पाठ फ़ाइल उत्पन्न करता हूं और जीएनयू आर का उपयोग करता हूं।

मैं यहां बहुत से लोगों को फोरट्रान (ज्यादातर 77, लेकिन कुछ 90), बहुत सारे जावा और कुछ पायथन का उपयोग करते हुए देखता हूं। मुझे वे पसंद नहीं हैं, इसलिए मैं उनका उपयोग नहीं करता।

क्या प्रोग्रामिंग में किसी महत्वपूर्ण पृष्ठभूमि के बिना लोगों के लिए कोई प्रशिक्षण था?

मुझे लगता है कि यह मेरे लिए लागू नहीं होता है, क्योंकि मैंने सीएस में स्नातक किया है - लेकिन जहां मैं काम करता हूं कोई औपचारिक प्रशिक्षण नहीं है, लेकिन लोग (इंजीनियर, भौतिक विज्ञानी, गणितज्ञ) एक दूसरे की मदद करते हैं।

क्या आपके पास संस्करण नियंत्रण, बग ट्रैकिंग जैसे कुछ भी था?

संस्करण नियंत्रण बिल्कुल महत्वपूर्ण है! मैं अपना कोड और डेटा तीन अलग-अलग मशीनों में रखता हूं, दुनिया के दो अलग-अलग हिस्सों में - गिट रिपॉजिटरी में। मैं उन्हें हर समय सिंक करता हूं (इसलिए मेरे पास संस्करण नियंत्रण और बैकअप है!) मैं बग नियंत्रण नहीं करता हूं, हालांकि मैं ऐसा करना शुरू कर सकता हूं। लेकिन मेरे सहकर्मी बीटीएस या वीसीएस बिल्कुल नहीं करते हैं।

आप प्रोग्रामिंग के लिए एक सभ्य वातावरण बनाने की कोशिश करने के बारे में कैसे जा सकते हैं, व्यक्तिगत वैज्ञानिकों के रास्ते में बहुत अधिक हो रही बिना (भौतिक विज्ञानी जिद्दी लोग हैं!)

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

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


2

मैं F # सुझाव देता हूं कि विज्ञान से संबंधित जोड़-तोड़ करने के लिए एक संभावित उम्मीदवार के रूप में गणितीय निर्माणों के लिए अपने मजबूत अर्थ संबंधों को देखते हुए।

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


1

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

यदि आप अधिक सामान्य स्क्रिप्टिंग भाषा का उपयोग करना चाहते हैं, तो मैं पायथन के साथ जाऊंगा। इसके लिए दो चीजें हैं:

  • इंटरैक्टिव शेल जहां आप प्रयोग कर सकते हैं
  • इसका स्पष्ट (हालांकि कभी-कभी लंबा) सिंटैक्स

एक अतिरिक्त लाभ के रूप में, इसमें उन अधिकांश चीजों के लिए पुस्तकालय हैं जिन्हें आप इसके साथ करना चाहते हैं।


1

मैं इस क्षेत्र में कोई विशेषज्ञ नहीं हूं, लेकिन मैंने हमेशा समझा है कि यह वही है जो MATLAB के लिए बनाया गया था। स्रोत नियंत्रण के लिए SVN के साथ MATLAB को एकीकृत करने का एक तरीका है

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