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


37

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


10
यह इस बात पर निर्भर करता है कि आप कहां काम करते हैं और आप किसे प्रोग्रामर कहना चाहते हैं।
टिम

1
हां, यदि बिना किसी नकारात्मक विशेषण के।
डुवार्स 28'10

जवाबों:


79

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


6
वाह, मैं आधे रास्ते में "कोड बंदर" शब्द का उपयोग करने के लिए अत्यधिक राजनीतिक रूप से सही लोगों द्वारा गुमनामी में उतरने की उम्मीद करता था।
dsimcha

15
"सॉफ्टवेयर सिमियन" हमेशा पसंदीदा शब्दावली है
STW

3
मैं पूरी तरह से सहमत नहीं हूँ। सॉफ्टवेयर का प्रकार जो "खरोंच से" लिखा जा रहा है, बहुत प्रभावित करता है जो इसे लिखने में सक्षम है। कुछ सॉफ़्टवेयर को दूसरों की तुलना में स्वाभाविक रूप से कम (या अधिक) परिष्कार की आवश्यकता होती है।
निक स्प्रीजरित

8
+1, 20% क्योंकि मैं सहमत हूं, "रियल प्रोग्रामर टीएम" के कारण 5%, और 75% क्योंकि मैंने असेंबली भाषा सीखी और यह दिखावा करना चाहता हूं कि यह दर्द के लायक था
कार्सन मायर्स

3
मौजूदा नौकरियों में से अधिकांश में केवल 'कोड बंदरों' की आवश्यकता होती है। यह सामान्य है कि 'कोड बंदर' की नौकरियों में लोग अपने पिछले सभी ज्ञान को भूल जाते हैं, अपनी क्षमता के बावजूद हर दिन खुद को थोड़ा अधिक 'कोड बंदर' बनाते हैं। :(
सीएजी

32

जो लोग इतिहास नहीं जानते हैं, वे इसे फिर से संगठित करने के लिए निंदा करते हैं


75
दरअसल, जो लोग इतिहास नहीं जानते हैं, वे अच्छी तरह से ज्ञात ओ (एन लॉग एन) विधियों का उपयोग करने के बजाय ओ (एन 2) या ओ (एन 3) तरीकों का उपयोग करके इसे फिर से बनाने के लिए निंदा करते हैं, जो सभी 50 में बूस्ट खरीदने के लिए काफी पुराने हैं। राज्यों।
जॉन आर। स्ट्रॉह्म

@ जॉन ROFLMAO - बहुत सच है!
स्टीवन ए। लोव

3
.... इसे पुनः प्राप्त करने के लिए

30

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

जावा OTOH के लिए, एक अंतर है। मुझे लगता है कि जावा की मानक लाइब्रेरी आपको आपकी जरूरत के किसी भी डेटास्ट्रक्चर के बारे में प्रदान करती है। तथापि:

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

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

दो बातें निश्चित हैं:

  1. आप इस तरह के ज्ञान पर भरोसा किए बिना एक प्रोग्रामर के रूप में करियर बना सकते हैं।
  2. यह निश्चित रूप से उन्हें जानने के लिए आपको दुख नहीं होगा।

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

तो नहीं, आपको उनकी आवश्यकता नहीं है, लेकिन यह केवल आपके लाभ के लिए उन्हें जानना होगा।


13

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

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

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

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

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

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

जो भी आप चुनते हैं, उसके साथ शुभकामनाएं।


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

+1 अच्छी तरह से आशंकित 'मुझे लगता है कि आपके प्रश्न का उत्तर देने के लिए, आपको अपने आप से पूछना चाहिए, "मुझे क्या बनना है? मैं अपने करियर के साथ कहाँ जाऊंगा?"
बिल

12

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

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

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


1
आपके उत्तर के लिए धन्यवाद। मैं ua मजेदार इंटरव्यू के साथ लोगों को साझा करूंगा, मुझे इंटरसेव करने के लिए यूजर इंटरफेस की तरफ से कुछ अच्छे की आवश्यकता है, जो कि json css ajax javascript jquery आदि का उपयोग करके मुझसे पूछते हैं कि आप वेबसर्वर कैसे लिखेंगे। और जब एक शब्द फ़ाइल में सेव को दबाया जाता है तो क्या होता है
सुशील भरवानी

2
@ सुशील - मुझे लगता है कि जिस तरह की जगह पर आप काम नहीं करना चाहते ...
जॉन हॉपकिंस

@ सुशील: मैं पूरी तरह से @Jon हॉपकिंस से सहमत हूं। बेहतर काम करने वाले वेटर के रूप में काम करने से बेहतर है कि उस तरह की नौकरी लेना। वरिष्ठों के रूप में अयोग्य बेवकूफ होने से आप बेहद निराश हो जाएंगे और अपने व्यक्तिगत विकास में आपको रोक देंगे।
back2dos

6

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

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


बहुत बहुत धन्यवाद, मैं आपकी सलाह लूंगा और उन विषयों के बारे में सीखना शुरू करूँगा
महमूद होसाम

3

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


2

एल्गोरिदम का ज्ञान आप आत्मविश्वास से कहते हैं कि करने के लिए कैसे अपने विकल्पों करेंगे अनुमति देने के पैमाने पर ! मैं व्यक्तिगत रूप से इसे एक वरिष्ठ प्रोग्रामर होने के लिए आवश्यक मानता हूं


2

"यदि आप एक अच्छा प्रोग्रामर बनना चाहते हैं तो आप दो साल तक हर दिन केवल एक प्रोग्राम करें। यदि आप एक वर्ल्ड क्लास प्रोग्रामर बनना चाहते हैं, तो आप हर दिन दस साल के लिए प्रोग्राम कर सकते हैं, या आप दो साल तक हर दिन प्रोग्राम कर सकते हैं और एक एल्गोरिदम क्लास ले सकते हैं। । "

-चार्ल्स ई। लिसेरसन

चार्ल्स ई। लिसेर्सन द्वारा एल्गोरिदम के विश्लेषण से अच्छी सलाह - MIT


1

यह प्रोजेक्ट पर निर्भर करता है: मैं कंप्यूटर इंजीनियर में BEng हूं और मैं विश्लेषक प्रोग्रामर के रूप में काम करता हूं।

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

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

कुछ बेहतरीन लिंक:


1

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

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

  • कुछ हद तक, अगर आप प्रोग्रामर से प्रबंधन ट्रैक पर बाद में जाते हैं, तो यह ज्ञान अच्छा होगा, क्योंकि आप अभी भी इस ज्ञान के साथ परियोजनाओं के तकनीकी पहलुओं को बेहतर ढंग से समझ पाएंगे।

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


0

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

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

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

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