यदि आपका एल्गोरिथ्म सही है, तो क्या इससे कोई फर्क पड़ता है कि आपको इसे लिखने में कितना समय लगा? [बन्द है]


11

मुझे हाल ही में पता चला है कि फेसबुक के पास एक प्रोग्रामिंग चुनौती थी कि अगर सही तरीके से पूरा किया जाए तो आपको अपने आप फोन इंटरव्यू मिल जाता है।

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

यह नमूना चुनौती आपको 45 मिनट की समय सीमा देती है, लेकिन आपको यह देखने के लिए कि क्या यह आपकी समय सीमा समाप्त होने के बाद गुजरता है, तब भी आपको अपने कोड का परीक्षण करने की अनुमति देता है।

मुझे ऐसा कोई भी प्यारा गणित समाधान नहीं मिला जो इसे हल कर सके, और मैं नहीं चाहता था कि मुझे लगता है कि धोखा होगा। इसलिए मैंने उस चुनौती को हल करने की कोशिश की जो मैं अपने दम पर कर सकता हूं।

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

यह मुझे आश्चर्य हो रहा है, वास्तव में क्या यह वास्तव में मायने रखता है कि यह मुझे लंबे समय तक ले गया? मेरा मतलब है कि यह एक संकेत है कि मैं इस तरह की जगह पर नौकरी पाने में सक्षम नहीं होऊंगा (न केवल फेसबुक, बल्कि Google, फॉग क्रीक, आदि) और मेरी आकांक्षाओं को कम करने की आवश्यकता है, या तथ्य यह है कि मैं वास्तव में पारित हो गया हूं मेरे पहले प्रयास पर भले ही इसे बहुत अच्छा लगा हो?


12
यह यहाँ मायने रखता है - क्या यह आपके लिए पर्याप्त है?

2
आप क्यों मानते हैं कि एक बड़े .com नाम के लिए काम नहीं करने का मतलब है कि आप अपनी आकांक्षाओं को कम करते हैं?
मौविसिल

@mouviciel का मतलब यह नहीं था कि मैं एक बड़े .com नाम के साथ काम करने की अपनी आकांक्षाओं को कम कर सकता हूं, लेकिन एक कंपनी के लिए काम करना अधिक पसंद करता है, जहां प्रोग्रामिंग एक प्राथमिक भूमिका है जो एक ऐसी कंपनी में काम कर रही है जो रिटेल की तरह कुछ और करती है, जहां कोई भी यह नहीं समझता है कि आप क्या करते हैं।
जेडी इसहाक

5
फेसबुक और गूगल के साथ शामिल होने वाले फॉग क्रीक सॉफ्टवेयर में LOL।
georgiecasey

जवाबों:


42

व्यवहार में यह मायने रखता है कि आपको कितना समय लगता है। एक जो 45 मिनट में समस्या को हल कर सकता है, वह है - बाकी सभी समान - पांच घंटे से अधिक उत्पादक है जो 4 घंटे लगते हैं, और इसलिए एक नियोक्ता के लिए अधिक आकर्षक है।

उस ने कहा, आप यह नहीं कहते कि इस समस्या को हल करने में आपको चार घंटे क्यों लगे।

  • क्या आप अपने सर्वश्रेष्ठ (अच्छी तरह से खिलाया, थके हुए, पूरी तरह से केंद्रित) पर नहीं थे?
  • क्या समस्या अच्छी तरह से निर्दिष्ट थी, या क्या आपको अपने आप पर अतिरिक्त शोध करने की आवश्यकता थी?
  • क्या आपको ऐसा करने के लिए नई चीजें सीखनी थीं?
  • उपकरण परिचित थे या नहीं?
  • आदि।

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


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

@ जॉनहैक्स तो समस्या यह थी कि आप हनोई के टावर्स से अपरिचित थे। अधिकांश प्रोग्रामर मुझे पता है जब इसे पुनरावृत्ति के बारे में पढ़ाया जा रहा है (प्रत्येक डिस्क आंदोलन अनिवार्य रूप से "मेरे ऊपर डिस्क को एक खाली खूंटी में स्थानांतरित करें" जो अच्छी तरह से पुनरावृत्ति के लिए मैप करता है)। क्या आपने औपचारिक शिक्षा प्राप्त की है और यदि ऐसा है तो किस स्तर पर?

@ ThorbjørnRavnAndersen, मैंने स्कूल में कोई प्रोग्रामिंग नहीं सीखी। मुझे स्वयं सिखाया गया है, मैंने नौकरी पर, किताबों से, प्रयोग करके आदि से सीखा, मैं खेल से परिचित नहीं था (वानरों के ग्रह में खेले जा रहे एक समान खेल को याद करने के अलावा), मुझे यह जानने के लिए Google के पास भी जाना था जिसे "हनोई का टावर" कहा जाता है। मैं पुनरावर्तन को समझता हूं (कम से कम मुझे लगता है कि मैं ऐसा करता हूं) और मैंने यहां इसका इस्तेमाल किया। लेकिन बस पहेली को हल करना मेरे लिए बहुत अधिक आसान होता, कठिन हिस्सा यह था कि "क्या पैटर्न हर बार संभव के रूप में कम से कम चालें पैदा करेगा।"
बजे जेडी इसहाक

@ जॉनहैक्स प्रोग्रामिंग पियानो खेलना बहुत पसंद है - आप अपने दम पर अच्छा कर सकते हैं, लेकिन वास्तव में अच्छा पाने के लिए आपको एक अनुभवी शिक्षक द्वारा चीजों को सही तरीके से करने के लिए सिखाया जाना चाहिए। क्या आप इस बारे में विस्तार से बता सकते हैं कि आप पहेली को कैसे हल कर सकते हैं लेकिन "क्या यह इष्टतम है" भाग कठिन है?

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

13

यह एक ऐसी कंपनी के लिए मायने रखता है, जो अच्छे नकदी प्रवाह के साथ सामान्य डेवलपर्स की तलाश में है , क्योंकि तेज का मतलब है कि अधिक काम किया जा सकता है। हालांकि, कई अन्य मामलों में (मैं ज्यादातर मामलों में लोगों का तर्क था वास्तव में,), यह बात नहीं है जितना अपने के रूप में समस्याओं को हल करने की क्षमता है, और अपने उन्हें अच्छी तरह से हल करने की क्षमता

मैं पाँच अलग-अलग प्रकार की समस्या हल कर सकता हूँ:

वो जो...

  1. ... एक साफ और कुशल समाधान के साथ समस्याओं को जल्दी से हल कर सकते हैं।
  2. ... समस्याओं को जल्दी से हल कर सकते हैं , लेकिन एक गंदे और अक्षम समाधान के साथ।
  3. ... समस्याओं को धीरे-धीरे हल कर सकते हैं , लेकिन एक साफ और कुशल समाधान के साथ समाप्त हो सकते हैं।
  4. ... समस्याओं को धीरे-धीरे हल कर सकते हैं , लेकिन एक गंदे और अक्षम समाधान के साथ समाप्त हो सकते हैं।
  5. ... समस्याओं को हल नहीं कर सकते , या तो जल्दी से, या धीरे-धीरे।

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

कुछ उदाहरण:

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

5

हनोई का टावर? यह विश्वविद्यालय में मेरे फ्रेशमैन कोर्स पर (फ़ाइबोनैचि के ठीक बाद) मेरे पहले प्रोग्रामिंग असाइनमेंट्स में से एक था - हाँ, मेरे पास उन कार्यात्मक प्रोग्रामिंग फ्रीक्स में से एक के साथ कक्षाएं थीं :)। और मैं कंप्यूटर साइंस पर भी नहीं हूँ, मैं कंप्यूटर इंजीनियरिंग पर हूँ।

और फिर भी, अधिकांश तथाकथित 'प्रोग्रामर' इस तरह के एल्गोरिदम को सही ढंग से नहीं लिख सकते हैं, क्योंकि अधिकांश प्रोग्रामर भयानक हैं। (जोड़ा मज़ा के लिए fizzbuzz के लिए खोज)

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

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

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


3

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

तो, यह तथ्य कि आपने आवंटित समय सीमा के भीतर परीक्षण पूरा नहीं किया है, इसका मतलब यह नहीं है कि आप एक खराब प्रोग्रामर हैं; आप सिर्फ फेसबुक को करिश्माई मानने की परिभाषा को फिट करने के लिए नहीं होते हैं। मेरी राय में, यह ठीक है।


0

समय परिपक्व होता है, लेकिन यह विचार नहीं मिलता है कि अगर आप इसे लंबा समय लेते हैं तो आप बेवकूफ हैं। बहुत सारे लोगों के पास "यादगार" चीजें हैं। वे पुनरावर्तन जैसी तकनीकों को लागू करने का अभ्यास करते हैं ताकि यह 2cd प्रकृति का हो जाए। ऐसा नहीं है कि उनकी होशियार, वे सिर्फ 2cd प्रकृति के मुद्दे पर अभ्यास किया है और आप भी कर सकते हैं!

निम्नलिखित गणित समस्या पर विचार करें: 2 + 2 =?

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


-1

लोग वास्तव में परवाह नहीं करते हैं कि आप कुछ करने में कितना समय बिताते हैं; बस अपने समय सीमा और सभी अच्छी तरह से मिलें।


7
इसलिए जब समय सीमा "अभी से 45 मिनट" है और आप चार घंटे बाद समाप्त करते हैं, तो लोग ध्यान देते हैं।

1
मेहरदाद का मतलब यह है कि आप समय सीमा को पूरा करने के लिए समयोपरि काम कर सकते हैं: D
quant_dev

1
यदि आपको ओवरटाइम करने के लिए काम करना है तो अन्य देवों के लिए ओवरटाइम की आवश्यकता नहीं होगी - आपको तब कोई स्टॉप नहीं मिलेगा जब पुल को वास्तव में पंखे से
टकराया जाए

-1

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

वैसे भी, यह सबसे बड़ी कंपनियों में से एक है, इसलिए वे जो चाहें कर सकते हैं। लेकिन समय सीमा IMHO साक्षात्कार में सबसे खराब कारकों में से एक है, मैं हमेशा दबा हुआ महसूस करता हूं, जल्दी उठता हूं, सब कुछ साफ नहीं कर सकता, और सभी विवरणों पर ध्यान केंद्रित नहीं कर सकता जो वास्तव में काम करते समय बहुत महत्वपूर्ण हैं। :) यकीन है कि आप समाधान को तेजी से हल कर सकते हैं, जैसे, व्यवस्थापक तक पहुंच सेट करें ताकि सब कुछ काम करे + 'SELECT * FROM pass WHERE usr == ' + user_input, लेकिन किसी भी सुरक्षित और अच्छी तरह से लिखित कार्य के साथ मुझे गर्व होगा, मुझे कुछ समय की आवश्यकता होगी और 45 मिनट वास्तव में काफी तीव्र है।


1
मुझे लगता है कि वे ऐसे लोगों को चाहते हैं जो बस याद रखें कि हनोई समस्या का टॉवर क्या है (यह एक क्लासिक है)।
क्वांट_देव

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

इस तरह एक परीक्षण में, वे जरूरी नहीं कि "अच्छे इंटरफ़ेस डिजाइन" और "प्लंबिंग" की तलाश कर रहे हों - मुझे उम्मीद है कि वे समस्या को समझने और इसे हल करने के लिए एक एल्गोरिथ्म बनाने की क्षमता को देखना चाहते हैं। अगर भाषा में अड़चन नहीं थी, तो जावा और एक्लिप्स जैसी किसी चीज़ का उपयोग करना आखिरी बात है। मैं अजगर और एक न्यूनतम पाठ संपादक / कॉम्पैक्ट आईडीई का उपयोग करूंगा। (नहीं कह रही है कि आप अपने आप को जावा का उपयोग करेंगे, बस 'कह ...)
occulus
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.