क्या सी डेवलपर्स के लिए वैज्ञानिक / इंजीनियरिंग प्रोग्रामिंग को संवाद करने का एक अनुशंसित तरीका है?


16

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

उदाहरण के लिए, क्या मुझे MATLAB कोड प्रदान करना चाहिए और समझाना चाहिए कि यह लाइन से क्या कर रहा है? या, क्या मुझे केवल गणित / एल्गोरिथ्म प्रदान करना चाहिए, इसे स्पष्ट अंग्रेजी में समझाना चाहिए, और सी डेवलपर को इसे अपने तरीके से इस समझ के साथ लागू करने दें (जैसे कि मैं मान सकता हूं कि डेवलपर समझता है कि जटिल गणित के साथ कैसे काम किया जाए (यानी काल्पनिक) संख्या), हिस्टोग्राम कैसे उत्पन्न करें, एक FFT प्रदर्शन करें, आदि)?

या, वहाँ एक बेहतर तरीका है? मुझे उम्मीद है कि मुझे ऐसा करने की आवश्यकता नहीं है, इसलिए मुझे आश्चर्य है कि अगर कोई सी डेवलपर्स इस स्थिति में भाग गया और किसी भी पारंपरिक ज्ञान को साझा कर सकता है कि वे इस कार्य को कैसे स्थानांतरित करना चाहते हैं?

किसी भी टिप्पणी के लिए अग्रिम धन्यवाद।


3
क्या आपने केवल matlab कोड को c में बदलने के लिए mcc का उपयोग करने की कोशिश की है? मुझे लगता है किmcc -c matlabfile.m
विल टेट

4
जब आप प्रोग्रामर को किराए पर लेते हैं, तो निर्दिष्ट करें कि उसे C और Matlab कोड दोनों को समझना चाहिए। गति पर आपके जोर को देखते हुए, आपको संभवतः C के बजाय C ++ का उपयोग करना चाहिए (हालांकि कुछ देखभाल के साथ, यह कभी धीमा नहीं होता है, और अक्सर तेज होता है)।
जेरी कॉफिन

3
@willytate: इसके लिए आवश्यक है कि आपके पास माटलैब कंपाइलर हो, यह विशेष रूप से कुशल कोड का उत्पादन नहीं करता है, और आप किस कोड को संकलित कर सकते हैं, इसकी कुछ सीमाएं हैं।
जोनास

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

3
क्या अधिकांश समय वास्तविक एल्गोरिथ्म में, या फाइलों, IO, और पार्सिंग के साथ काम करने में बिताया जाता है? औसत C कोडर FFT और मैट्रिक्स कोड लिखने में सक्षम नहीं होने जा रहा है जो MATLAB कार्यान्वयन के साथ प्रतिस्पर्धा में कहीं भी आता है। यदि पार्सिंग, IO, और फ़ाइल फ़िडलिंग वह जगह है जहाँ आपका प्रोग्राम अपना समय व्यतीत कर रहा है, तो आपके C प्रोग्रामर को उस पर ध्यान केंद्रित करना चाहिए, और गोंद कोड लिखना चाहिए जो MATLAB पुस्तकालयों से फ़ंक्शन को कॉल करता है। यदि एफएफटी / मैट्रिक्स अपघटन / ओडीई समाधान अड़चन है, तो आपको संख्यात्मक तरीकों के अनुभव के बहुत से सी प्रोग्रामर को खोजना होगा।
चार्ल्स ई। ग्रांट

जवाबों:


15

मैं इसी तरह की स्थिति में हूं क्योंकि मैं भी लोगों को अपना मैटलैब कोड C ++ में पोर्ट करवाता हूं।

आपके कोड की जटिलता पर बहुत कुछ निर्भर करता है, साथ ही साथ C / C ++ डेवलपर के कौशल के स्तर पर और उनकी समझ पर कि वे क्या लागू करने वाले हैं - वे जितने बेहतर हैं और वे आपकी समस्या को बेहतर समझते हैं, उतना ही अधिक स्वतंत्र रूप से वे काम कर सकते हैं।

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

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

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


सॉफ्टवेयर के लिए वैध परीक्षण परिणाम होने के लिए +1। Matlab से C / C ++ में पोर्टिंग कोड यह जानना कठिन है कि परिणाम क्या दिखना चाहिए।
rjzii

12

मैं यह नहीं कह रहा हूँ कि यह आपके लिए लागू होता है, लेकिन: ज्यादातर लोग जो केवल MATLAB में कोड लिखते हैं, बुरा कोड लिखते हैं। बहुत खराब, खराब स्वरूपण, संरचना और प्रलेखन के साथ।

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

अपना कोड पोर्ट करने वाले व्यक्ति के लिए इसे आसान बनाने के लिए:

  1. यह सुनिश्चित करने के लिए अपने कोड को रिफलेक्टर करें कि विभिन्न कार्यों में ऑपरेशन टूट गए हैं। MATLAB की एक-कार्य-प्रति-फ़ाइल शैली फ़ंक्शंस को बहुत लंबा करने के लिए प्रोत्साहित करती है और बहुत सारे ऑपरेशन शामिल करती है। यह भी सुनिश्चित करें कि डुप्लिकेट किए गए कोड को सहायक कार्यों के लिए बाहर निकाला गया है, भले ही इससे अधिक फ़ाइलों में परिणाम सामान्य रूप से MATLAB प्रोजेक्ट के लिए काम करना चाहते हों।

  2. आपके कोड में उपयोग किए गए किसी भी जादू की संख्या या स्थिरांक, और उन शर्तों को समझाएं जिनके तहत वे मान्य हैं।

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

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

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

  6. सुनिश्चित करें कि कोड पोर्ट करने वाला व्यक्ति मूल MATLAB कोड के साथ आउटपुट की तुलना करने में सक्षम है, और यदि संभव हो तो, पूरी तरह से इनपुट और सही आउटपुट का परीक्षण सूट प्रदान करें।

  7. यदि पोर्टिंग करने वाला व्यक्ति संख्यात्मक विश्लेषण नहीं जानता है, तो आपको पोर्टिंग प्रक्रिया की देखरेख करने और यह सुनिश्चित करने की आवश्यकता होगी कि आप सी कोड की समीक्षा करें और समझें। यह आप दोनों के लिए बहुत शैक्षिक होगा।


मैं आपके तकनीकी मूल्यांकन से सहमत हूं और आप अच्छे अंक (1 - 7) बनाते हैं, लेकिन मुझे लगता है कि "ज्यादातर लोग जो केवल MATLAB में कोड करते हैं" के बारे में विज्ञापन होमिनम अनावश्यक और असत्य था।

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

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

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

4

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

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

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


3

Matlab संकलक का उपयोग नहीं करने का वित्तीय कारण अच्छी तरह से समझा जा सकता है। हालांकि, आप मुफ्त स्कैलाब का उपयोग सी कनवर्टर के लिए कर सकते हैं। प्रक्रिया होगी

  • अपने कोड को Matlab से Scilab में M2SCI टूल से परिवर्तित करें ,
  • "सिलाब 2 सी" का उपयोग करके सीलैब कोड को सी में परिवर्तित करें ,
  • क्रॉस टेस्ट कोड,
  • उन अड़चनों को खोजने के लिए एक प्रोफाइलर का उपयोग करें जिनकी मानव आंख की जरूरत है।

आदर्श रूप से सिलाब की कोई जानकारी प्रक्रिया में आवश्यक नहीं है और इस समाधान के लिए कुछ समय लेने के लिए पर्याप्त आसान है (व्यवहार में, यह शायद उतना सरल नहीं है ...)

नोट: मैंने यह कोशिश नहीं की, लेकिन यह एक ऐसा समाधान है जिसकी मैंने खुद को समान कारणों से परिकल्पना की है।


2

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

यह आपके डेवलपर को उनके कोड का परीक्षण करने में बहुत मदद करेगा, और यह सुनिश्चित करेगा कि गुणवत्ता एक उचित स्तर पर है।


2

जोनास द्वारा महान पोस्ट, विशेष रूप से कोड का परीक्षण करने का एक तरीका प्रदान करने पर बिंदु। यहाँ कुछ अतिरिक्त सुझाव दिए गए हैं:

  • शेयरिंग कोड। MATLAB स्रोत प्रदान करने पर विचार करें लेकिन इसकी संरचना या अन्य विवरण (सिंटैक्स से आपकी व्यक्तिगत शैली) को समझाने के लिए तैयार रहें। सी डेवलपर उच्च-स्तरीय अवधारणाओं, एल्गोरिदम और गणित ( और उम्मीद है कि आपने अपने कोड पर टिप्पणी की ) को उम्मीद है

  • प्रलेखन। यह महत्वपूर्ण होगा कि आपके पास परियोजना को परिभाषित करने वाले स्पष्ट दस्तावेज हों; आखिरकार, यदि व्यक्ति MATLAB में धाराप्रवाह नहीं है, तो कोड बहुत उपयोगी संदर्भ नहीं हो सकता है।

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


1

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

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