मैं वास्तविक काम में जिन data structures और algorithms का उपयोग करता हूँ
(blog.pragmaticengineer.com)अक्सर कहा जाता है कि इंटरव्यू में पूछे जाने वाले algorithm सवाल वास्तविक काम में इस्तेमाल नहीं होते,
लेकिन लेखक ने Skype/Uber आदि में काम करते हुए जिन चीज़ों का बार-बार उपयोग किया, उन्हें उदाहरणों के साथ संकलित किया है और बुनियाद के लिए क्या पढ़ना चाहिए, इसकी भी सिफारिश की है।
ग्राफ़ और ग्राफ़ traversal : Skype & Uber
weighted graph और shortest path : SkyScanner
sorting : Skype
hash table और hashing : हर जगह
stack और queue : कभी-कभी
cryptography (Crypto), probability theory और अनुमान, Hexagonal Grid और hierarchical index : Uber
- इंटरव्यू में algorithms और data structures के बारे में
लोकप्रिय algorithms या असामान्य data structures को जानना महत्वपूर्ण नहीं है।
आपको यह समझना चाहिए कि algorithm क्या होता है, और Greedy algorithm जैसे सरल algorithms के बारे में स्वयं सोच सकना चाहिए।
hash table, queue & stack जैसे बुनियादी data structures पता होने चाहिए, लेकिन Dijkstra या A* जैसे विशेष algorithms को याद रखने की ज़रूरत नहीं है।
sorting से आगे के algorithms के साथ मेरा ज़्यादातर काम इतना ही रहा है कि ज़रूरत पड़ने पर उन्हें खोजकर समझने की कोशिश करूँ।
Red-Black या AVL tree जैसे असामान्य data structures के साथ भी यही बात है।
वास्तव में मुझे ऐसे data structures का उपयोग करने की नौबत नहीं आई, और अगर कभी ज़रूरत पड़ी भी तो मैं उन्हें फिर से खोजकर समझ लूँगा।
Silicon Valley में dynamic programming या असामान्य data structures पर सवाल पूछना धीरे-धीरे और आम होता जा रहा है।
ऐसे सवाल शायद बेहतरीन engineers चुनने में मदद करें, लेकिन इनके कारण वे लोग छूट जाते हैं जो वास्तव में ऐसे काम बहुत अच्छी तरह कर सकते हैं जिनमें advanced algorithm knowledge की ज़रूरत ही नहीं होती।
वास्तव में ज़रूरी है सबसे आम data structures की समझ और समस्या हल करने के लिए सबसे सरल algorithm को एक tool की तरह इस्तेमाल करने की क्षमता।
data structures और algorithms सिर्फ़ एक toolkit हैं।
software development करते समय इन्हें आत्मविश्वास के साथ इस्तेमाल करने वाले tools की तरह देखना चाहिए।
अगर आप इन tools को अच्छी तरह जानते हैं, तो इनके इस्तेमाल वाले code को पढ़ने में सहज हो जाएँगे।
साथ ही कठिन समस्याओं के समाधान implement करने में भी अधिक आत्मविश्वास आएगा।
बुनियादी चीज़ें समझने के लिए मैं निम्नलिखित चीज़ों की सिफारिश करता हूँ। (लिंक टिप्पणियों में हैं)
-
GeekforGeeks का Data Structures Overview (ऑनलाइन लेखों का संग्रह)
-
HackerRank का DataStructure Collection (समस्याएँ हल करते हुए सीखना)
-
Grokking Algorithms : चित्रों के माध्यम से concepts समझाने वाली algorithm किताब (अनूदित संस्करण उपलब्ध)
-
The Algorithm Design Manual और Algorithms: Fourth Edition बहुत ज़्यादा dry हैं और रोज़मर्रा के व्यावहारिक उपयोग के लिए उतनी उपयुक्त नहीं हैं।
3 टिप्पणियां
https://geeksforgeeks.org/overview-of-data-structures-set-1-linear-dat…
https://www.hackerrank.com/domains/data-structures
अंग्रेज़ी: https://www.amazon.com/gp/product/1617292230/?tag=amzneu-20
हिंदी संस्करण (Hanbit Media): https://www.hanbit.co.kr/store/books/look.php?p_code=B5896248244
The Algorithm Design Manual https://www.amazon.com/gp/product/1848000693?tag=amzneu-20
Algorithms : 4th Edition https://www.amazon.com/gp/product/032157351X/?tag=amzneu-20
लेख की शुरुआत में आने वाला Homebrew के डेवलपर Max Howell का किस्सा, जिसमें वह Google इंटरव्यू में व्हाइटबोर्ड पर binary tree invert नहीं लिख पाए और रिजेक्ट हो गए, काफी मशहूर है.
विडंबना यह है कि असली Google डेवलपर्स में से 90% Homebrew इस्तेमाल करते हैं, लेकिन खुद उसका डेवलपर ही रिजेक्ट हो गया..
वह 90% वाला आंकड़ा Homebrew डेवलपर ने अपनी तरफ़ से बताया था, और मुझे याद है कि उस ट्वीट पर एक Google डेवलपर ने जवाब दिया था कि यह बिल्कुल 90% नहीं है..
वैसे भी Google में डेस्कटॉप पर Ubuntu और लैपटॉप पर shell machine इस्तेमाल होती है, इसलिए खास तौर पर इसे इस्तेमाल करने की ज़रूरत भी शायद नहीं पड़ती होगी