अगर मैं C ++ के लिए रैखिक बीजगणित पैकेज का उपयोग करता हूं तो क्या इसे आलसी माना जाता है?


11

पहले, मुझे कुछ पृष्ठभूमि देने से पहले मैं वास्तव में प्रश्न बताता हूं। मैं भौतिकी का अध्ययन करता हूं और मेरी सभी प्रोग्रामिंग कक्षाएं MATLAB जैसी आसान प्रोग्रामिंग भाषाओं में रही हैं। आसान से मेरा मतलब है कि भाषा आपके लिए बहुत सोच समझ कर काम करती है ... अगले सालों के लिए मैं कंप्यूटर विज्ञान के पाठ्यक्रम ले रहा हूँ और मैं प्रोग्रामिंग में अपना कैरियर बनाने की सोच रहा हूँ।

बहुत सारे कॉलेज पाठ्यक्रमों को C ++ में देखते हुए, MATLAB के समान सिंटैक्स के साथ एक रैखिक बीजगणित पैकेज (आर्मडिलो) का उपयोग करना आलसी माना जाएगा?

मैं अभी एक आनुवंशिक एल्गोरिथ्म का कोडिंग कर रहा हूं, और जब यह MATLAB में तेजी से चला गया तो इन पैकेजों की सहायता के बिना C ++ में बहुत समय लग रहा है।

यह वास्तविक जीवन में कैसे काम करता है? आपको किन पैकेजों का उपयोग करने की अनुमति है?

उदाहरण के लिए, मैं अपने सी ++ ज्ञान को आर्मडिलो के साथ नहीं बनाना चाहता और न ही अन्य अधिक व्यापक रूप से उपयोग किए जाने वाले पैकेजों जैसे "वेक्टर.एच" "एल्गोरिथ्म" "सूची" आदि का गहरा ज्ञान होना चाहिए।


9
आपको ऐसी किसी भी चीज़ का उपयोग करने की अनुमति है जिसके पास आपकी परियोजना के अनुरूप लाइसेंस हो। अन्यथा आप सिर्फ अपना समय बर्बाद कर रहे हैं। (सही प्रकार का) आलस्य अच्छा है
रिचर्ड टिंगल


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

@RichardTingle: एक के रूप में वरिष्ठ अधिकारियों यह न करे नहीं है जब तक ;-) कुछ भी उपयोग कर सकता है
डॉक ब्राउन

अपने शीर्षक में परिवर्तन lazyकरें sensible, और उत्तर "हां" है (यह मानते हुए कि आप एक कार्य कर रहे हैं जिसमें रैखिक बीजगणित शामिल है, निश्चित रूप से)।
जेरी कॉफिन

जवाबों:


21

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

कोड पुन: उपयोग के लाभ हैं:

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

विचार करने के लिए कुछ चीजें हैं:

  • लाइसेंसिंग। जिस कोड का आप पुन: उपयोग करना चाहते हैं उसके लेखक उसके पास कॉपीराइट रखते हैं, और आप उसकी अनुमति के बिना कोड का उपयोग नहीं कर सकते। पुस्तकालय एक लाइसेंस के साथ आएंगे जो आपको बताता है कि आप उनके साथ क्या कर सकते हैं, और यदि आप पुस्तकालय का उपयोग करना चाहते हैं, तो आपको लाइसेंस का पालन करना होगा। आर्मडिलो मोज़िला पब्लिक लाइसेंस 2.0 के तहत है, जिसका अर्थ है कि आप इसे स्वतंत्र रूप से उपयोग कर सकते हैं।
  • एकता। यदि आपकी परियोजना बड़ी है, तो 3 पार्टी पुस्तकालयों को एकीकृत करने के लिए यह काफी जटिल हो सकता है। आपके द्वारा लाइब्रेरी से बाहर निकलने की मात्रा के आधार पर, यह इसके लायक नहीं हो सकता है।
  • वितरण। यदि कोई लाइब्रेरी केवल DLL के रूप में उपलब्ध है, या सिस्टम के साथ कुछ पंजीकरण की आवश्यकता है, लेकिन आपके वितरण की विधि में "इस निष्पादन योग्य कहीं कॉपी करना" शामिल होना चाहिए, तो आप लाइब्रेरी का उपयोग करने में सक्षम नहीं हो सकते हैं।

जैसा कि कहा जाता है, एक प्रोग्रामर में, आलस्य एक गुण है।


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

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

1

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

जब आप एक वास्तविक जीवन की प्रोग्रामिंग परियोजना कर रहे हों, तो आप कुछ अवधारणाओं / ज्ञान को सीखने के लिए सहयोगी के रूप में कोड नहीं लिख रहे हों; आप एक इंजीनियरिंग उत्पाद बनाने की कोशिश कर रहे हैं। इंजीनियरिंग वास्तव में आविष्कार के बारे में नहीं है, लेकिन किसी विशेष व्यावहारिक आवश्यकता को संबोधित करने के लिए पहले से ही दूसरों द्वारा निर्धारित नींव पर निर्माण करना। एक कहावत है कि प्रोग्रामिंग 80% पढ़ना है / दूसरों के पुस्तकालयों / कोडों का पुन: उपयोग कर रहा है और 20% खुद लिख रहा है। थोड़ा अतिरंजित हो सकता है, लेकिन आप भावना प्राप्त करते हैं।

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

इस अंतर को स्पष्ट करें, और आप समझ जाएंगे कि आप क्या कर रहे हैं।

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