नोट: निम्नलिखित पोस्ट में विवादास्पद राय शामिल हो सकती है, इसलिए कृपया ध्यान दें कि वे केवल मेरी राय हैं, और किसी को अपमानित करने का इरादा नहीं है।
मैं 1999 के बाद से किसी न किसी रूप में प्रोग्रामिंग कर रहा हूं। मैंने शुरुआत में आर का इस्तेमाल किया और फिर बाद में 2004 के आसपास, ज्यादातर पायथन में बदल गया।
कई वैज्ञानिक अनुप्रयोगों के लिए, उदाहरण के लिए, सिमुलेशन, जिसमें एमसीएमसी जैसी चीजें शामिल हैं, दोनों आर और पायथन बहुत धीमे हैं और ऊपर उठने की आवश्यकता है। ऐसा करने का सामान्य तरीका C या C ++ के साथ है। आर और पायथन दोनों के लिए, यह वही है जो मैंने किया था, सी ++ के साथ आर के सी एपीआई और पायथन के साथ बूस्ट पायथन लाइब्रेरी का उपयोग किया।
हालांकि, विभिन्न कारणों से, यह संयोजन आदर्श समाधान नहीं है। प्रोग्रामिंग में क्या महत्वपूर्ण है, विशेष रूप से एल्गोरिदम? स्पष्टता और गति, जो निश्चित रूप से संबंधित हैं। एक भाषा जितनी अधिक अभिव्यंजक होती है, उतनी ही तेजी से उसमें लिख सकता है।
1) जहाँ तक स्पष्टता जाती है, न तो आर और न ही पायथन वास्तव में मेरी राय में वैज्ञानिक एल्गोरिदम लिखने के लिए आदर्श हैं। वे अंतर्निहित एल्गोरिथ्म के लिए बारीकी से नक्शा नहीं करते हैं। हालांकि, वे दोनों C ++ से काफी बेहतर हैं।
2) मुझे पायथन में लिखने में आनंद आता है, जो एक सुखद भाषा है, हालांकि जैसा कि ऊपर उल्लेख किया गया है कि यह एल्गोरिथमिक कार्य के लिए आदर्श नहीं है। हालाँकि, जब किसी को गति मुद्दों के कारण पायथन / C ++ संयोजन के साथ काम करना पड़ता है, तो यह मिश्रण साथ काम करने के लिए काफी कम सुखद हो जाता है। आमतौर पर ऐसा होता है कि मैं पहली बार पायथन में लिखता हूं, और एक बार मेरे पास कुछ ऐसा है जो अच्छी तरह से काम कर रहा है, अक्सर पता चलता है कि यह बहुत धीमा है (बहुत धीमी गति से कुछ व्यक्तिपरक मूल्य के लिए)। फिर मुझे इस निर्णय का सामना करना है कि क्या कुछ अनुचित राशि को C ++ में फिर से लिखना है, या सुस्ती के साथ रखा जाए। मैं अक्सर महसूस करता हूं कि मैं धीमेपन के साथ काम करने से बेहतर हो सकता हूं, विशेष रूप से प्राप्त स्पीडअप अप्रत्याशित हैं। इसके अलावा, दोनों के बीच बूस्ट पायथन इंटरफ़ेस एक महत्वपूर्ण रखरखाव सिरदर्द है, और इस तरह से एक साथ चिपके हुए दो बहुत ही अलग-अलग भाषाओं में कोड होना केवल विचलित करने वाला है। बूस्ट पाइथन की कोई आलोचना नहीं की गई, यह उतना ही शक्तिशाली इंटरफ़ेस है जितना कोई कल्पना कर सकता है, और बहुत अधिक समय के लिए काम करता है।
अब, एक आदर्श दुनिया में, असीमित समय और संसाधनों के साथ, इनमें से कोई भी समस्या एक बड़ी बात नहीं होगी। हालाँकि, जिन वैज्ञानिक परियोजनाओं में मैंने काम किया है, उनमें मुझे निम्न अनुभव हुआ है।
परियोजना में मेरे सहयोगी हैं या नहीं, मैं हमेशा बड़ी संख्या में कंप्यूटिंग को हवा देता हूं। कुल 5 महत्वपूर्ण परियोजनाओं में, मेरी केवल एक परियोजना पर एक व्यक्ति से पर्याप्त भागीदारी थी। उस एक व्यक्ति ने अपना वजन खींचने से ज्यादा किया; उसने मेरे या अधिक के रूप में ज्यादा किया। हालांकि, सभी अन्य मामलों में, कई सहयोगियों के साथ परियोजनाओं सहित, मैंने सभी कम्प्यूटेशनल काम किया है (वस्तुतः)। जबकि मैं कह सकता हूं कि मुझे सर्वश्रेष्ठ सहयोगियों के साथ आशीर्वाद नहीं मिला है (यह आलस्य और अक्षमता का मिश्रण लगता है) यह मेरे लिए स्पष्ट नहीं है कि क्या इस स्थिति के भविष्य में बदलने की संभावना है।
कम्प्यूटेशनल वैज्ञानिक कार्य प्रयास का एक बड़ा हिस्सा है, और अगर मैं नहीं बदल सकता कि मेरे सहयोगी कैसे व्यवहार करते हैं, तो मैं अपने काम करने के तरीके को बदल सकता हूं। सबसे महत्वपूर्ण सुधार चीजों को और अधिक तेज़ी से प्राप्त करना होगा। जो मुझे यहां मुख्य विचार पर लाता है, जो यह है कि भाषाओं को कुछ कम रूढ़िवादी पर स्विच करने से मदद मिल सकती है। पिछले शोध के आधार पर, संभावना के क्रम में सबसे अधिक संभावना वाले उम्मीदवार कॉमन लिस्प और ओकेमेल हैं। मैं वर्षों से इस बारे में सोच रहा था, लेकिन हाल ही में इसके बारे में अधिक गंभीरता से सोच रहा हूं।
जहाँ तक मैं बता सकता हूँ, कुछ लोग वैज्ञानिक गणना के लिए या तो CL या Ocaml का उपयोग करते हैं। इस साइट को खोजने पर, मुझे सीएल (एक मेरा था) के लिए दो और ओकेमेल (मेरा) के लिए एक संदर्भ मिला। मेरे पास वर्षों से उत्साहजनक लोगों के साथ जुड़ने के लिए उत्साहवर्धक संपर्क है। 2008 में, मैं तमस के पप्प द्वारा पीटर सीबेल की "प्रैक्टिकल कॉमन लिस्प" (जो मैं स्वयं करता हूं) की एक पुस्तक समीक्षा में आया था । इसने मेरा ध्यान आकर्षित किया, क्योंकि यह लिस्प के लिए वैज्ञानिक कंप्यूटिंग के कुछ उल्लेखों में से एक था जो मैं नेट पर आया था। मैंने तमस को लिखा, जिन्होंने तुरंत मदद की और उत्साहजनक तरीके से जवाब दिया। उसे उद्धृत करने के लिए
मेरी प्रोग्रामिंग उत्पादकता शायद लिस्प के साथ दस गुना बढ़ गई, लेकिन ऐसा होने में लगभग एक साल लग गया और मैं अभी भी सीख रहा हूं (हालांकि मैं 2 महीने बाद भी काफी अच्छा कर रहा था)। इसलिए यदि आप कुछ समय के लिए महत्वपूर्ण हैं, तो स्विच को स्थगित कर दें।
आपको लोगों से क्लॉज़ पर विचार करने पर विचार करना चाहिए, मैं अकेला ऐसा नहीं हूं जो इन चीजों के बारे में जानता हूं, अन्य लोग लिस्प पर वैज्ञानिक कंप्यूटिंग करते हैं।
उनका एक ब्लॉग और GitHub पेज भी है ।
एक अन्य व्यक्ति जिसका मैंने संक्षेप में (दिसंबर 2006 में) ईरा कलेट के साथ पत्राचार किया , जिसने विकिरण ऑन्कोलॉजी के संदर्भ में कॉमन लिस्प का उपयोग किया है।
शायद ऐसे अन्य लोग हैं जो लिस्प पर वैज्ञानिक कंप्यूटिंग करते हैं, लेकिन मुझे किसी के बारे में पता नहीं है।
लोगों को सीएल के साथ होने वाली सबसे आम समस्या पुस्तकालयों की कमी है। यह सामान्य प्रयोजन कंप्यूटिंग में एक गंभीर समस्या है, लेकिन वैज्ञानिक कंप्यूटिंग में ऐसा नहीं हो सकता है, विशेष रूप से एल्गोरिदम के जमीनी कार्यान्वयन से। विशेष रूप से, मैं मूल गणित पुस्तकालय के साथ अधिकतर समय प्राप्त कर सकता हूं, जिसमें संभावना वितरण कार्य, एक बहुआयामी सरणी पुस्तकालय, और कंटेनर का एक मूल सेट जैसे मानचित्र, सेट, सूची आदि शामिल हैं जैसा कि सी ++ और पायथन मानक पुस्तकालय में पाया जाता है।
मुझे पता है कि मैं सीएल के बारे में जितना काम करता हूं, उससे कम ओकेमेल के बारे में जानता हूं, लेकिन इसे विकल्प के रूप में फेंक दिया। यह बहुत तेजी से माना जाता है, फ्रेंच शोधकर्ताओं द्वारा एक मुफ्त कार्यान्वयन है, और वैज्ञानिक कंप्यूटिंग के लिए भाषाओं के एमएल परिवार के सबसे व्यवहार्य लगता है।
निष्कर्ष निकालने के लिए, मैं सोच रहा हूं कि क्या दूसरों के पास इसका अनुभव है, और उनके पास क्या विचार हैं, यदि कोई है।
EDIT: जिन मुद्दों पर मैंने ऊपर चर्चा की है, उनके संदर्भ में मैं पहले हाथ के अनुभव में दिलचस्पी रखता हूं। जैसे यदि आप पायथन और C ++ (या R और C ++) का उपयोग करते हैं और अधिक अस्पष्ट भाषा में चले जाते हैं, तो मुझे आपके अनुभवों के बारे में सुनने में सबसे अधिक दिलचस्पी होगी।