क्या मुझे डेटा संरचनाओं और एल्गोरिदम में निवेश करना चाहिए? [बन्द है]


28

इन दिनों, मैं डेटा संरचनाओं और एल्गोरिदम में भारी निवेश कर रहा हूं और कुछ प्रोग्रामिंग पहेलियों को हल करने की कोशिश कर रहा हूं।
मैं जावा और क्लोजर के साथ कोड और हल करने की कोशिश कर रहा हूं।

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

डेटा संरचनाओं और एल्गोरिदम का अध्ययन करके, क्या मैं एक बेहतर प्रोग्रामर बनने जा रहा हूं या वे विषय केवल कॉलेज के वर्षों के दौरान महत्वपूर्ण हैं?


5
आप किन डेटा संरचनाओं और एल्गोरिदम के साथ काम कर रहे हैं? आप उन पर किन प्रोग्रामिंग पज़ल्स का उपयोग कर रहे हैं?
ओस्टरवाल

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

जवाबों:


24

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

एल्गोरिदम और डेटास्ट्रक्चर के लिए ज्ञान का न्यूनतम स्तर, सफल होने के लिए, आपको इसकी आवश्यकता होगी:

  • उनमें से अधिकांश के बारे में पता होना (नए लोगों पर पढ़ना कभी-कभी जैसे वे बाहर आते हैं)
  • पता है कि अच्छा, परीक्षण, काम करने वाले क्रियान्वयन कहां मिलेंगे
  • एल्गोरिदम और उनकी उपयोगिता की तुलना करने में सक्षम हो
  • एक छोटे स्रोत के साथ एक खुले स्रोत के उदाहरण को सही तरीके से कॉपी करने में सक्षम हों, जिसमें एक छोटा सा ट्वीकिंग हो

नहीं है कोई * अधिकतम * । यदि आप चाहते हैं, तो आप अपने अध्ययन को पीएचडी स्तर और उससे आगे ले जा सकते हैं। यह उपयोगिता सीधे तौर पर उस तरह की नौकरियों से संबंधित होती है, जिसमें आप रुचि रखते हैं और किस तरह का काम आपको सबसे दिलचस्प और फायदेमंद लगता है।

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

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


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

1
ऊग, पायथन में उककोन की एल्गोरिथ्म लिखना काफी कठिन है, मैं इसे विधानसभा में करने की कल्पना करना भी शुरू कर सकता हूं।
rjzii

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

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

14

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

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

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


मैं 2007 से पेशेवर रूप से जावा प्रोग्रामिंग कर रहा हूं (मेरा मतलब है कि नौकरी कर रहा है)। अब मैं कुछ आईओएस विकास करने जा रहा हूं।
चिरॉन

9

आप अपना समय बर्बाद नहीं कर रहे हैं।

यदि, आपकी नौकरी के दौरान, आपको एक उपकरण या रूपरेखा का उपयोग करने की आवश्यकता है जिसे आपने पहले उपयोग नहीं किया है, तो आप इसे सीखेंगे और इसका उपयोग करेंगे।

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

जो मैं कहने की कोशिश कर रहा हूं, यह उस तरह का सामान है जिसे आप सिर्फ सीखकर नहीं सीखेंगे, आपको इसे सीखने की जरूरत है , या तो शैक्षणिक स्थिति में, या प्रयास के व्यक्तिगत निवेश के माध्यम से, जैसा कि आप कर रहे हैं अब कर रहा हूँ।


6

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


1

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

जब आप रुचि रखते हैं और ध्यान केंद्रित करते हैं, तो आप एक बेहतर प्रोग्रामर बन जाएंगे, जब आप ऐसी परियोजनाओं पर काम करते हैं जो व्यावहारिक लगती हैं लेकिन थोड़ी सुस्त होती हैं।

खरगोश छेद नीचे, डोरोथी!


1

मैंने OpenGL के साथ C / C ++ में बहुत समय हैक करने में बिताया। मैं भाषाओं और एपीआई को अच्छी तरह से जानता हूं ... और मैं उस अनुभव के कारण एक उचित डेवलपर और प्रोग्रामर बन गया हूं। यह कहा, वास्तविक एल्गोरिदम विभिन्न सामना करने के लिए आवश्यक ज्ञान का सामना करना पड़ा है।

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

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

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


0

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

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