साक्षात्कारों में डेटा संरचनाएं इतनी महत्वपूर्ण क्यों हैं? [बन्द है]


106

मुझे यह स्वीकार करना चाहिए कि जब मैंने कॉलेज से स्नातक किया तो मैं डेटा संरचनाओं में इतना मजबूत नहीं था। अपने स्नातक के दौरान पूरे कैंपस प्लेसमेंट में, मैंने देखा है कि अमेज़ॅन, माइक्रोसॉफ्ट आदि जैसी अधिकांश बड़ी-बड़ी टेक कंपनियां मुख्य रूप से डेटा संरचनाओं पर ध्यान केंद्रित करती हैं। ऐसा प्रतीत होता है कि डेटा संरचनाएं केवल एक चीज है जो वे स्नातक से उम्मीद करते हैं।

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

संभवतः मेरी जावा बैकग्राउंड के कारण, तब, मैंने कोड दक्षता और तर्क को केवल तभी समझा जब ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग जैसे ऑब्जेक्ट्स, इंस्टेंस आदि के बारे में बात की गई थी, लेकिन मैंने कभी बिट्स और बाइट्स के स्तर में नीचे नहीं गिराया। मैं नहीं चाहता था कि लोग डेटा स्ट्रक्चर्स में मेरे इस ज्ञान की कमी के लिए मेरी ओर देखें।

तो वास्तव में यह सब डेटा स्ट्रक्चर्स पर क्यों जोर देता है?


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

6
@greengit: हैश मैप लागू करने और इसके एपीआई का उपयोग करने के बीच अंतर है। एक साक्षात्कार में मुझे क्या महत्व होगा यदि वे मेरे लिए एक आवेदन का वर्णन करेंगे, तो मुझे केंद्रीय डेटा संरचनाओं का निर्माण करने के लिए कहा, और मेरी पसंद की व्याख्या की।
ग्योर्गी एंड्रेसेक

7
आप क्या पूछना पसंद करेंगे?
16

13
@Jurily - कंटेनर लाइब्रेरी का उपयोग कब करना है, यह समझने के लिए, यह अंतर्निहित डेटा संरचना कैसे काम करती है, इसके बारे में कुछ जानकारी होना चाहिए। यह स्वीकार करना कठिन है कि आप कोड की दक्षता के बारे में जानते हैं यदि आप उन पुस्तकालयों के समय और स्थान की जटिलताओं को नहीं जानते हैं जो आप उपयोग कर रहे हैं - सिर्फ इसलिए कि यह छोटे परीक्षण डेटासेट पर अच्छी तरह से काम करता है इसका मतलब यह नहीं है कि यह बड़े डेटासेट के लिए अच्छा होगा। वास्तविक दुनिया में। IMO, समय और स्थान की जटिलताओं को समझना एपीआई को समझने का एक हिस्सा है जितना कि कक्षा और विधि के नामों को जानना - शायद अधिक, क्योंकि intellisense आपको जटिलताएं नहीं बताएगा।
स्टीव ३४

2
एक अच्छी डेटा संरचना स्वच्छ, सरल कोड देती है। एक खराब डेटा संरचना जटिल कोड देती है। सही होना जरूरी है।

जवाबों:


121

Microsoft जैसी अधिकांश बड़ी तकनीकी कंपनियां मुख्य रूप से डेटा संरचनाओं पर ध्यान केंद्रित करती हैं। ऐसा प्रतीत होता है कि डेटा संरचनाएं केवल एक चीज है जो वे स्नातक से उम्मीद करते हैं।

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

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

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

मुझे यह स्वीकार करना चाहिए कि मैं डेटा संरचनाओं में इतना मजबूत नहीं था

यह अच्छा है कि आप अपने बारे में जानते हैं। यदि आप अपने बारे में बदलने में असमर्थ हैं या अनिच्छुक हैं तो मेरी सिफारिश है कि आप ऐसी नौकरी के लिए आवेदन न करें जिसके लिए डेटा संरचनाओं के साथ सुविधा की आवश्यकता हो।

यह सामान्य दृष्टिकोण है कि एक अच्छा प्रोग्रामर आवश्यक रूप से डेटा संरचनाओं के बारे में अच्छे ज्ञान वाला है।

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

यह सब डेटा स्ट्रक्चर्स पर क्यों जोर देता है?

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

क्या डेटा स्ट्रक्चर्स में ज्ञान नहीं होना वास्तव में प्रोग्रामिंग में किसी के करियर को प्रभावित करता है?

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

क्या इस विषय में ज्ञान वास्तव में एक अच्छे और बुरे प्रोग्रामर को अलग करने का पर्याप्त आधार है?

नहीं, लेकिन लगभग हमेशा उन डेवलपर्स का पता लगाना पर्याप्त है जो Microsoft में सफल होने की संभावना नहीं रखते हैं। चूँकि मुझे मुख्य रूप से यह पता लगाने में दिलचस्पी है कि डेटा संरचनाओं का ज्ञान उन कारकों में से एक है जिनका मैं साक्षात्कार में परीक्षण करता हूँ।


10
धन्यवाद एक टन एरिक! यह सबसे कम demotivating उत्तर है जो मुझे अपने प्रश्न के लिए मिला है। :-)
वामसी इमनी

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

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

2
@ क्लोजर कॉउबॉय ने प्रिंसटन द्वारा पेश किए गए कौरसेरा के 'एल्गोरिदम I' पाठ्यक्रम को देखें। मैं एक आत्म-सिखाया प्रोग्रामर भी हूं और सीएस सिद्धांत ज्ञान में अपने अंतराल को भरने में मदद करने के लिए बहुत कुछ कर रहा हूं।
इवान प्लाइस

133

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

क्या, डेटा स्ट्रक्चर्स में ज्ञान नहीं होना वास्तव में प्रोग्रामिंग में किसी के करियर को प्रभावित करता है?

हाँ। निश्चित रूप से। जब तक आप अपना सारा जीवन CRUD एप्लीकेशन लिखने में व्यतीत नहीं करना चाहते।

या इस विषय में ज्ञान वास्तव में एक अच्छे और बुरे प्रोग्रामर को अलग करने के लिए पर्याप्त आधार है?

नहीं, यह पर्याप्त नहीं है। लेकिन कुछ चीजें हैं जो आप नौकरी के साक्षात्कार में पूछ सकते हैं जो पर्याप्त हैं। और मैं कहूंगा कि एल्गोरिदम ज्ञान बेहतर संकेतक में से एक है, कम से कम स्कूल से बाहर के लोगों के लिए, जहां आप काम के अनुभवों के बारे में नहीं पूछ सकते।


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

3
@konrad: कि मैं "व्यावहारिक उद्देश्यों के लिए" से क्या मतलब है। मैं एक डेटा संरचना या एल्गोरिथ्म के बारे में नहीं सोच सकता हूं जो "अप्रचलित" हो गया है, और मुझे संदेह है कि आप एक नौकरी के साक्षात्कार में एक में आएंगे। और चूंकि अधिकांश एल्गोरिदम / डेटा संरचनाएं हमारे वर्तमान हार्डवेयर से बहुत पहले विकसित की गई थीं और अभी भी उपयोगी हैं, इसलिए मुझे लगता है कि किसी प्रकार का समन्वय चल रहा है, जहां नए हार्डवेयर विकास डेटा संरचनाओं द्वारा निर्देशित होते हैं जिन्हें हम जानते हैं।
nikie

यदि / जब संगामिति वास्तविक रूप से अनिवार्य हो जाती है, तो मैं एक महान डेटा संरचना के बारे में सोच सकता हूं जो अप्रचलित हो जाती है :)
होमडे

9
@konrad: और अगर / जब क्वांटम कंप्यूटर मानक बन जाते हैं, तो मैं कुछ और सोच सकता हूं। लेकिन मुझे लगता है कि ओपी तब तक अपने नौकरी के साक्षात्कार के साथ इंतजार नहीं करना चाहता है ;-)
nikie

3
... या जब हमारे नए एअर इंडिया के अधिपति
दंडित

45

मैं एक त्वरित शिक्षार्थी हूं और मैं बहुत कम समय के भीतर नए ढांचे, एपीआई या प्रोग्रामिंग भाषा सीख सकता हूं।

बहुत कठोर ध्वनि नहीं है, लेकिन कोई भी आधा-सभ्य डेवलपर अपेक्षाकृत कम समय में एक नई भाषा या रूपरेखा चुन सकेगा।

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

(कम से कम, वे जो कुछ भी वर्तमान में उपयोग कर रहे हैं , उसके अलावा बुनियादी बातों का परीक्षण करना चाहिए ... कंप्यूटर-विज्ञान विज़ार्ड को काम पर रखने का कोई मतलब नहीं है यदि वह अपने जीवन में कभी भी कोड की एक पंक्ति नहीं लिखी है)


1
कंप्यूटर साइंस यहां के कीवर्ड्स में से एक है। डेटा संरचनाएं आमतौर पर एक मास्टर में गहराई से देखी जाती हैं और स्पष्ट रूप से एक महत्वपूर्ण विषय है।
जेम्स पी।

1
डेटा संरचनाएं तब तक सार्वभौमिक हैं जब तक कि आप विशुद्ध रूप से कार्यात्मक प्रोग्रामिंग पर नहीं आते: पी।
तिखन जेल्विस

30

क्या आप मानते हैं कि एफ 1 रेसर्स सिर्फ तेज कार चलाते हैं? नहीं, वे जिस कार को चलाते हैं उसे समझते हैं और वे इसे धुनने के लिए यांत्रिकी / इंजीनियरों के साथ काम करते हैं। बेशक, एक सामान्य ड्राइवर सिर्फ ड्राइव करता है।

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

लेकिन कई कंपनियां एफ 1 डेवलपर्स की तलाश में हैं। वे लोग जो यह जानकर विकसित होंगे कि उनके कोड के पीछे क्या है। ऐसे लोग जो कंपनी को कुछ बेहतर बनाने में मदद करेंगे।

यह न केवल डेटा संरचनाओं को जानना काफी अच्छा है, क्योंकि आप उन्हें "पूर्व पकाया" रूप में उपयोग करेंगे। यह भी अच्छा है क्योंकि आप कुछ ऐसा बनाएंगे जो उनके विचार से प्राप्त होता है।



तो रुको, क्या आप कह रहे हैं कि मेरे एक प्रोग्रामर होने के बीच सहसंबंध है, और इससे पहले कि मैं इसे ड्राइव करूं, एक कार को जानने की मेरी अजीब आदत है?
रोबी

@ रोबी: +1 LOL क्या आप चीजों को डिसाइड करना पसंद करते हैं?
graffic

2
हाँ। मेरे पिताजी ने मुझे सिखाया कि कैसे कुछ भी अलग करना है। उसने मुझे यह सिखाने की उपेक्षा की कि चीजों को एक साथ कैसे रखा जाए, जिससे मुझे पता चले कि वह सारी जिंदगी मेरे साथ है।
रॉबी

17

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

फिर भी, वह सही रहा। डेटा संरचनाओं का विश्लेषण करने में सक्षम होने के कारण, किसी दिए गए समस्या के लिए सही डेटा संरचना लागू करें या यहां तक ​​कि नई डेटा संरचनाओं के साथ आने के लिए एक इंजीनियर के कई गुणों की आवश्यकता होती है:

  • एक ठोस समस्या को मॉडल करने के लिए अमूर्त ढूँढना
  • समस्याओं को कम करने में सक्षम होना
  • तार्किक रूप से / औपचारिक रूप से सक्षम होने के कारण
  • रचनात्मकता
  • आदि।

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

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


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


3
और के बारे में ArrayList, डेटा संरचनाओं को समझना होता बिना तुम भी नहीं हो सकता है एहसास है कि ArrayListनहीं काफी पैमाने करता है और आप पाते हैं और संरचनाओं और एल्गोरिदम कि पैमाने की रचना करने की जरूरत है।
phogog

12

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

कहा जा रहा है कि, इनका ज्ञान साक्षात्कार के संदर्भ में आपके करियर को प्रभावित कर सकता है, खासकर यदि आप Google जैसे इंजीनियरिंग-उन्मुख कार्यस्थलों पर साक्षात्कार करते हैं। अन्य कंपनियाँ अब उस पहलू की परवाह कर सकती हैं।

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

यदि आप उन्हें दिलचस्प पाते हैं और आपके पास उनके साथ छेड़छाड़ कर सकते हैं, तो आप उन विषयों के बारे में और जानने की सलाह देंगे, जहाँ आप शायद उनके साथ काम कर सकते हैं।

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


7

तो वास्तव में यह सब डेटा स्ट्रक्चर्स पर क्यों जोर देता है?

दो कारण।

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

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


मैं यहां एक राय प्रस्तुत करने जा रहा हूं जो विवादास्पद होने की संभावना है। के सवाल क्यों एक डेटा संरचना या किसी अन्य दक्षता और प्रदर्शन करने के लिए नीचे हो जाता है। हम डेवलपर्स को क्या नहीं करने के लिए कहते हैं? समय से पहले कोई अनुकूलन नहीं! जब तक आप यह नहीं जानते हैं कि डेटा संरचना की पसंद प्रदर्शन समस्याओं का कारण बन रही है, तो 'राइट' को चुनने वाला वह है जिससे आप सबसे अधिक परिचित हैं। कोई अन्य निर्णय समय से पहले अनुकूलन है, और इसलिए बुराई है!
टॉम डब्ल्यू

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

द्विआधारी ढेर पर पिकिंग हीप हो सकता है। हीप बनाम सूची (हीप उपयुक्त है) का उपयोग करना नहीं है।
15:

5

वे मौलिक हैं, लेकिन यह भी, आप स्नातकों को क्या प्रश्नोत्तरी देंगे? उन्हें अपने पाठ्यक्रम कार्य के बाहर का अनुभव हो सकता है या नहीं भी हो सकता है। उनके पाठ्यक्रम में जावा, या इसके विपरीत, Microsoft तकनीकों को शामिल किया गया हो सकता है। डेटा संरचनाएं आम जमीन हैं।


+1 के लिए आप किस पर स्नातक की उपाधि प्राप्त करेंगे, क्योंकि और कुछ नहीं है कि सभी COMP विज्ञान स्नातकों को पता होना चाहिए कि आप भी जानते हैं।
इयान

4

अक्सर सबसे अच्छा कोड निम्न स्तर की डेटा संरचनाओं को फिर से बनाने से बचता है। यह उच्च स्तरीय भाषाओं में विशेष रूप से सच है। मैंने CRUD नौकरियों में भी निम्न स्तर के डेटा संरचना प्रश्नों के प्रति रुझान देखा है। YMMV, लेकिन ऐसा लगता है कि हैकर वैज्ञानिक विशेषज्ञता पर जोर दिया है एक महान डेवलपर बनाने वाले अन्य कौशल:

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

डेटा संरचनाएं महान हैं। डेटा संरचनाएं महत्वपूर्ण हैं। हर प्रोग्रामर को उनकी समझ होनी चाहिए। हालाँकि, हम इन मूल सिद्धांतों को उनकी जगह से बाहर धकेलने के प्रति जुनूनी हो गए हैं। यह सभी डेटा संरचनाओं के बारे में नहीं है, और 99% मामलों में डेटा संरचनाओं की मूल बातें से परे प्रश्न पूछने की आवश्यकता नहीं है। यदि आप एक लेखाकार का साक्षात्कार कर रहे हैं, तो उनसे यह पूछें कि 81 को 9 से विभाजित क्या है, लेकिन यदि आप पूछते हैं कि "98425454242412 * 4512324 का घनमूल क्या है? एक कैलकुलेटर के बिना?" तब आप उचित, स्मार्ट, प्रतिभाशाली और सहमत लोगों का एक अच्छा प्रतिशत भयावह होगा। पूछें कि क्या वे एक बुनियादी संबंधपरक डेटा मॉडल का निर्माण कर सकते हैं, पूछ सकते हैं कि क्या वे संबंधित ढांचे द्वारा प्रदान की गई विस्तारित संरचना संरचनाओं का उपयोग कर सकते हैं, और पूछें कि क्या वे यह बता सकते हैं कि बाइनरी खोज फ्लैट खोज की तुलना में तेज़ है, लेकिन इससे बहुत आगे जाने की बात नहीं है। यदि वे उन चीजों को कर सकते हैं, तो सबसे अच्छे, सबसे अधिक पेशेवर, सबसे रचनात्मक एक गुच्छा की तलाश शुरू करें।

मुझे जोएल का लेखन बहुत पसंद है, लेकिन मुझे लगता है कि उसकी "जावा स्कूल" की बात गलत है। ऐसी बहुत सी चीजें हैं जो साबित कर सकती हैं कि कोई व्यक्ति C ++ को प्राप्त करने से परे स्मार्ट है। इसके बारे में सोचो, आप 10 मिनट के लिए किसी से बात कर सकते हैं, बिना उन्हें सूचक अंकगणित के बारे में पूछें, और एक अच्छा विचार प्राप्त करें कि क्या वे प्रकार हैं या नहीं, जो चीजें कर सकते हैं और सामान का पता लगा सकते हैं। हमें इस तरह की आवश्यकता नहीं है:

साक्षात्कारकर्ता: "मुझे अपनी उपलब्धियों के बारे में बताएं।"

कोडर: "मेरी अंतिम स्थिति में मैं एक अरब डॉलर की वित्तीय फर्म के लिए एक कस्टम ईआरपी सिस्टम के लिए एकमात्र डेवलपर था। हमने शेड्यूल से महीनों पहले डिलीवरी की, और सिस्टम पिछले 3 वर्षों से उत्पादन में है।"

साक्षात्कारकर्ता: "मुझे स्पष्ट करने दें। मुझे अपनी प्रोग्रामिंग उपलब्धियों के बारे में बताएं "

कोडर: "उम्म ..."

साक्षात्कारकर्ता: "उदाहरण के लिए, क्या आपने कभी अपनी खुद की लिंक्ड सूची बनाई है?"

कोडर: "... [बाहर घूमना]"


दिलचस्प - अच्छी सूची। कैसे इसके बारे में थोड़ा अलग देखो? 1. परियोजना / समय प्रबंधन: चीजों को इस तरह से तैयार करने में सक्षम होना कि डेटा संरचनाएं साक्षात्कार समय के केवल छोटे हिस्से को बर्बाद कर दें। 2. सामाजिक कौशल की एक न्यूनतम राशि: एक डेवलपर जो यह समझने में सक्षम है कि साक्षात्कारकर्ता आमतौर पर अधिक दिलचस्प क्षेत्रों के लिए आगे बढ़ने से पहले बुनियादी डेटा संरचनाओं को बस जल्दी से जांचना चाहते हैं। 3. डेटा संरचनाओं की मूल बातें की, अच्छी तरह से, की कमी ज्ञान के कारण हो सकता है कि distractions के बिना जल्दी और लगातार नई चीजें सीखने की क्षमता
gnat

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

1
मैं सोच सकता हूं कि ईआरपी सिस्टम पर काम करने वाला लड़का टीम के लिए अच्छा नहीं है।
क्रिस्टोफर महान

4

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

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


2

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

WHY वास्तव में हम सभी को मूल स्क्रिप्ट किडी, कोड बंदर और कंप्यूटिंग वर्ल्ड की ग्रंट से अलग क्यों करता है। लिंक की गई सूची के बजाए हैश टेबल का उपयोग क्यों करें, मेरी हैश टेबल को लगभग 6।-.8 के क्लस्टर घनत्व पर होना चाहिए, मुझे एक दोहरी लिंक की गई सूची के बजाय यहां एक परिपत्र से जुड़ी सूची का उपयोग क्यों करना चाहिए। मुझे अपना कोड सबसे खराब स्थिति में दक्षता 'x' और औसत मामले में 'y' पर चलना चाहिए।

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

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


0

डेटा संरचनाएं सभी कार्यक्रमों का मूल आधार हैं। जरूरी नहीं कि आपको उनकी गहरी समझ होनी चाहिए, लेकिन आपको यह जरूर पता होना चाहिए कि वे कैसे काम करते हैं।

क्यों? क्योंकि आपका सभी कोड डेटा के साथ इंटरैक्ट और हेरफेर करता है। यदि डेटा सेट को किसी संरचना में संग्रहीत नहीं किया जा सकता है, तो इसका उपयोग नहीं किया जा सकता है। डेटा एक घर की निर्माण सामग्री की तरह है। जब तक आप इसे एक संरचना में एक साथ नहीं रखते हैं, तब तक आपके पास बोर्डों का एक बेकार ढेर है।

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

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


-2

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

मुझे कहना होगा कि इससे पहले कि मैं एक डेटा संरचना वर्ग लेता, मुझे लगता था कि वे महत्वपूर्ण नहीं थे, लेकिन कम से कम जब एक लिंक की गई सूची (या एरियर लेलिस्ट) व्यावहारिक नहीं हो पा रही हो या उनमें से ड्रॉ बैक महत्वपूर्ण हो तो क्या होगा।


"यदि आप हर चीज के लिए एक लिंक्डलिस्ट का उपयोग करते हैं, तो यह दिखा सकता है कि आप नहीं जानते कि आप क्या कर रहे हैं" या आप एक लिस्प प्रोग्रामर हैं :-)
पीटर अलेक्जेंडर

@Peter - जो तब मेरी बात साबित करेगा कि आप नहीं जानते कि आप क्या कर रहे हैं! ;)
जेटी

यह हटाए गए उत्तर के लिए एक मृत लिंक पर आधारित प्रतीत होता है - पाठकों के लिए काफी भ्रामक है। क्या आप इस बात का ध्यान रखने के लिए आईएनजी को संपादित करेंगे ?
gnat

-2

आप अच्छा कोड लिखते हैं या नहीं यह एक व्यक्तिपरक कथन है। यह जानना महत्वपूर्ण है कि कार्यात्मक कोड हमेशा अच्छा कोड नहीं बनाता है।

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

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

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


-3

डेटा संरचनाएं कई चीजों के ब्लॉक का निर्माण कर रही हैं जिन्हें आप करना चाहते हैं। यदि आप प्रत्येक डेटा संरचना, इसकी कमजोरियों और मजबूत बिंदुओं के लिए उपयोगों को जानते हैं तो आप आसानी से समस्याओं को हल कर सकते हैं।

उदाहरण के लिए, हमें हजारों वस्तुओं का प्रबंधन करने की आवश्यकता थी। हर बार एक समय में हमें किसी वस्तु के टाइमस्टैम्प को उसकी आईडी के अनुसार अपडेट करने की आवश्यकता होती है। हर बार एक समय में हमें उन वस्तुओं को हटाने की आवश्यकता होती है जो एक्स मिनट से अधिक समय तक अपडेट नहीं हुई थीं।

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

तो, मैं कहूंगा कि महत्वपूर्ण बात यह जानना है कि प्रत्येक डेटा संरचना का उपयोग कैसे और कब करना है, इसके बारे में सोचने के बिना। लेकिन मुझे नहीं लगता कि वास्तव में यह समझने के बिना कि वे कैसे काम करते हैं, इसे हासिल करने का कोई तरीका है।

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