
यदि आप प्रोग्रामिंग में रुचि रखते हैं, तो आपने वाक्यांश सुना होगा:
"हर किसी को प्रोग्रामिंग सीखने की जरूरत है क्योंकि यह आपको सोचना सिखाता है।"
- स्टीव जॉब्स
शायद आपने भी सोचा कि प्रोग्रामर के रूप में सोचने का क्या मतलब है?
वास्तव में, हम समस्याओं को हल करने के लिए एक अधिक कुशल तरीके के बारे में बात कर रहे हैं।
इस पोस्ट का उद्देश्य आपको यह सिखाना है।
इसे पढ़ने के बाद, आप अधिक सटीक रूप से समझ पाएंगे कि सबसे अच्छा समाधान खोजने के लिए क्या करने की आवश्यकता है।
यह महत्वपूर्ण क्यों है?
समस्या हल करना एक बुनियादी कौशल है।
हम लगातार समस्याओं का समाधान करते हैं। बड़ा और छोटा। हम यह कैसे करते हैं? कभी-कभी यह अच्छा है ... यदि आप भाग्यशाली हैं।
यदि आपके पास एक व्यवस्थित दृष्टिकोण नहीं है, तो आप संभवतः निम्नानुसार समस्याओं को हल करते हैं (मैंने ऐसा तब किया था जब मैं कोड शुरू कर रहा था:
- एक समाधान की कोशिश कर रहा है
- यदि यह फिट नहीं है, तो एक और प्रयास करें,
- यदि यह काम नहीं करता है, तो जीत तक चरण 2 को दोहराएं।
आप भाग्यशाली हो सकते हैं, लेकिन यह सबसे खराब तरीका है! और इसमें बहुत समय लग सकता है।
सबसे अच्छा तरीका:
- व्यवस्थित दृष्टिकोण है
- इसे अमल में लाएं।
“ज्यादातर नियोक्ता समस्याओं को सुलझाने की क्षमता को अधिक महत्वपूर्ण मानते हैं।
समस्याओं को लगभग सर्वसम्मति से हल करने की क्षमता सबसे महत्वपूर्ण क्षमता है जो नियोक्ता ढूंढ रहे हैं ... प्रोग्रामिंग भाषाओं, डिबगिंग और सिस्टम डिज़ाइन के ज्ञान से अधिक महत्वपूर्ण है।
एकीकृत सोच का प्रदर्शन और बड़ी जटिल समस्याओं को हल करने की क्षमता उतनी ही मूल्यवान है (यदि अधिक नहीं) काम करने के लिए आवश्यक बुनियादी तकनीकी मदद की तुलना में।
- हैकर रैंक ( 2018 डेवलपर कौशल रिपोर्ट )
व्यवस्थित दृष्टिकोण
सही दृष्टिकोण जानने के लिए, मैंने टिम फेरिस की पुस्तक
द 4-आवर्स शेफ को पढ़ाने के बारे में सलाह का पालन किया।
इसने मुझे वास्तव में प्रभावशाली लोगों के साथ एक साक्षात्कार के लिए प्रेरित किया:
सी। जॉर्डन बॉल (65,000
कोडरबाइट उपयोगकर्ताओं में से 1 या 2 वें स्थान पर) और
वी। एंटोन स्पारुल (लेखक के
रूप में इसके बारे में लेखक के लेखक
। रचनात्मक दृष्टिकोण कोड बनाने के लिए। ")।
मैंने उनसे वही सवाल पूछे, और क्या अनुमान लगाया? उनके उत्तर बहुत समान थे!
जल्द ही आप उन्हें भी पहचान लेंगे।
नोट: इसका मतलब यह नहीं है कि वे सभी ऐसा ही करते हैं। वे अलग लोग हैं, और आप उनसे अलग हैं। लेकिन अगर आप सही बुनियादी सिद्धांतों के साथ शुरू करते हैं, तो परिणाम बहुत बेहतर और बहुत तेजी से होगा।"सबसे गंभीर गलती जो मैं युवा प्रोग्रामरों के साथ देखता हूं, वह सिंटैक्स सीखने पर ध्यान केंद्रित कर रहा है, बजाय समस्याओं को हल करने के सीखने के।"
- वी। एंटोन स्प्राल
तो क्या करें जब आप एक नई चुनौती का सामना करें?
चलो चरणों के माध्यम से चलते हैं:
1. समझ
समझें कि वास्तव में क्या करने की आवश्यकता है। अधिकांश कार्य कठिन हैं क्योंकि आप उन्हें नहीं समझते हैं (यही कारण है कि यह पहला कदम है)।
आप कैसे जानते हैं कि आप समस्या का सार समझते हैं? इसे स्पष्ट भाषा में समझाने का प्रयास करें।
उस मामले को याद रखें जब आप एक कार्य पर तय किए गए थे और इसे खुद को समझाना शुरू कर दिया था। इस बिंदु पर, तार्किक त्रुटियां दिखाई देती हैं जो आपने पहले नहीं देखी हैं।
अधिकांश प्रोग्रामर इस भावना को जानते हैं।
यही कारण है कि आपको अपने कार्य का वर्णन करना चाहिए, आरेख खींचना चाहिए, या किसी को इसके बारे में बताना चाहिए (कुछ एक
रबर बतख का उपयोग करें)।
"यदि आप सरल भाषा में कुछ नहीं समझा सकते हैं, तो आप इसे नहीं समझते हैं।"
- रिचर्ड फेनमैन
2. योजना
एक योजना के बिना किसी समस्या को हल करने के लिए शुरू न करें, उम्मीद है कि इसमें भ्रमित न हों। अपने निर्णय की योजना बनाएं!
प्रोग्रामिंग में, आपको आगे नहीं जाना है। जानकारी का विश्लेषण और प्रक्रिया करने के लिए अपने मस्तिष्क को समय दें।
एक अच्छी योजना पाने के लिए, अपने आप को एक सरल प्रश्न का उत्तर दें:
"इनपुट एक्स पर लागू होने से, आउटपुट पर वाई प्राप्त करने के लिए क्या कदम उठाए जाने चाहिए?"
नोट: प्रोग्रामर्स के पास इसके लिए एक बढ़िया टूल है। टिप्पणियाँ!3. अपघटन
यह सबसे महत्वपूर्ण कदम है। सावधान!
एक बड़ी समस्या को हल करने की कोशिश न करें।
इसके बजाय, इसे उप-मुखौटे में विभाजित करें। उन्हें हल करना ज्यादा आसान होगा।
फिर सबसे सरल से शुरू करते हुए, सबटुक को हल करें। जब कार्य सरल लगता है, तो इसका मतलब है कि आप उत्तर जानते हैं (या इसके करीब हैं)।
दूसरों के स्वतंत्र रूप से प्रत्येक सबटस्क को हल करें और समाधान के बाद परिणाम गठबंधन करें।
सभी छोटे कार्यों के संयोजन से आपको मूल समाधान मिलेगा।
बधाई!
यह विधि समस्या समाधान की आधारशिला है। इसे याद रखें (यदि आवश्यक हो तो इस चरण को फिर से पढ़ें)।
अगर मैं हर युवा प्रोग्रामर को सिखा सकता हूं कि समस्याओं को कैसे हल किया जाए, तो यह तकनीकी ऋण की मात्रा को कम करेगा।
मान लीजिए आप एक प्रोग्राम लिखना चाहते हैं जो 10 अंकों का हो और तीसरा सबसे बड़ा रिटर्न दे। एक शुरुआत के लिए, यह एक कठिन काम हो सकता है, हालांकि इसके लिए केवल मूल सिंटैक्स का ज्ञान होना चाहिए।
यदि आप फंस गए हैं, तो आपको सरल बनाने की आवश्यकता है। तीसरी सबसे बड़ी संख्या के बजाय, सबसे बड़ी खोजने के बारे में कैसे? अभी भी बहुत जटिल है? तीन नंबरों में से सबसे बड़ा कैसे पता करें? या दोनों में से ज्यादा?
समस्या को तब तक कम करें जब तक आप यह नहीं समझते कि इसे कैसे हल किया जाए। निर्णय रिकॉर्ड करें। तब तक कार्य का विस्तार करें जब तक आप प्रारंभिक प्रश्न पर वापस नहीं आते।
- वी। एंटोन स्प्राल
4. फंस गए?
अब आप शायद बैठे हैं और सोच रहे हैं: "अरे, यह सब शांत है, लेकिन क्या होगा अगर मैं इस समस्या को हल नहीं कर सकता हूं?"
पहले गहरी सांस लें। चिंता मत करो। यह हर किसी के लिए होता है!
अंतर केवल इतना है कि सर्वश्रेष्ठ प्रोग्रामर ने बग्स को निर्धारित किया और परेशानियों को हल किया, न कि झुंझलाहट को।
वास्तव में, यहां तीन चीजें हैं जिन्हें आपको कठिनाइयों का सामना करने की कोशिश करनी चाहिए:
- डिबगिंग। चरण दर चरण जाँचें जहाँ आप अपने निर्णय में गलत हो सकते हैं। प्रोग्रामर इस डिबगिंग को कहते हैं।
"डिबगिंग की कला यह पता लगाने के लिए है कि आपने कार्यक्रम में क्या लिखा है और आप क्या लिखना चाहते हैं"
- एंड्रयू सिंगर
- दृष्टिकोण में बदलाव। एक कदम पीछे हटो। एक अलग कोण से कार्य को देखें। क्या कार्यान्वयन को अनदेखा करना और अधिक सामान्य दृष्टिकोण लागू करना संभव है?
“कभी-कभी हम इतने अधिक विस्तार में जाते हैं कि हम सामान्य सिद्धांतों को ध्यान में नहीं रखते हैं जिसके साथ हम उच्च स्तर पर समस्या को हल कर सकते हैं। [...]
इसका एक क्लासिक उदाहरण, निश्चित रूप से, लगातार पूर्णांक 1 + 2 + 3 + ... + n की एक लंबी सूची का योग है, जिसे युवा गॉस आसानी से सूत्र n (n + 1) / 2 का उपयोग करके गणना करते हैं, तत्वों की संख्या बढ़ाने से जुड़ी समस्याओं से बचते हैं ”
- सी। जॉर्डन बॉल
नोट: कभी-कभी सब कुछ हटाना और नई ताकतों के साथ शुरू करना बेहतर होता है। मैं गंभीर हूं। आपको आश्चर्य होगा कि यह कितना प्रभावी हो सकता है। - अध्ययन। ओह, अच्छा पुराना Google । कोई फर्क नहीं पड़ता कि आपका काम क्या है, सबसे अधिक संभावना है कि किसी ने आपके सामने इसे हल कर दिया है। इस व्यक्ति या समाधान का पता लगाएं। यदि आप इसे स्वयं समझ लेते हैं तो भी इसे करें। आप अन्य लोगों से बहुत कुछ सीख सकते हैं।
सावधानी: किसी बड़ी समस्या का हल न देखें। केवल छोटे उपशीर्षक के लिए समाधान देखें। क्यों? यदि आप कम से कम (कम से कम) तनाव नहीं करते हैं, तो आप कुछ भी नया नहीं सीखेंगे। यदि आपने कुछ नहीं सीखा, तो आपने अपना समय बर्बाद किया।
अभ्यास
एक हफ्ते में पेशेवर बनने की उम्मीद न करें। समस्याओं को अच्छी तरह से हल करने के लिए, आपको कई समस्याओं को हल करने की आवश्यकता है!
अभ्यास। अभ्यास। और फिर से अभ्यास करें। केवल समय के साथ ही आप यह कह पाएंगे: "इस समस्या को आसानी से हल किया जा सकता है <अपने समाधान का विकल्प यहां>"।
कैसे करें ट्रेनिंग? दिलचस्प विकल्प हैं!
शतरंज की पहेलियाँ, गणित की समस्याएं, सुडोकू, गो, एकाधिकार, वीडियो गेम आदि।
वास्तव में, सफल लोगों के बीच आम व्यवहार "हल करने वाले माइक्रोकट्स" की उनकी आदत है। उदाहरण के लिए, पीटर थिएल शतरंज खेलते हैं, और एलोन मस्क वीडियो गेम खेलते हैं।
बायरन रीव्स ने कहा: "यदि आप यह देखना चाहते हैं कि तीन से पांच वर्षों में व्यवसाय के नेता क्या देख सकते हैं, तो ऑनलाइन गेम देखें।"
तेजी से आगे। एलोन मस्क, रीड हॉफमैन, मार्क जुकरबर्ग और कई अन्य लोगों का कहना है कि गेम उनकी कंपनियों को स्थापित करने में उनकी सफलता के लिए मौलिक थे।
- मैरी मीकर ( 2017 इंटरनेट ट्रेंड्स रिपोर्ट )
क्या इसका मतलब यह है कि आपको केवल गेम खेलना चाहिए? बिल्कुल नहीं।
लेकिन अधिकांश खेलों का सार क्या है? यह सही है, समस्याओं को हल करने में!
तो व्यावहारिक अभ्यासों में क्या होना चाहिए। कुछ ऐसा जो आपको बहुत सारे सूक्ष्म-कार्यों को हल करने की अनुमति देगा (और आदर्श रूप से आप इसे पसंद करते हैं)।
उदाहरण के लिए, मुझे प्रोग्रामिंग कार्य पसंद हैं। और हर दिन मैं कम से कम एक (मुख्य रूप से
कोडरबाइट पर) हल करने की कोशिश करता हूं।
जैसा कि मैंने कहा, सभी कार्यों में समान समाधान मॉडल हैं।
निष्कर्ष
वह सब है!
अब आप जानते हैं कि प्रोग्रामर की तरह सोचने का क्या मतलब है।
आप यह भी जानते हैं कि समस्या समाधान एक अविश्वसनीय (बुनियादी) कौशल है जिसे विकसित करने की आवश्यकता है।
ध्यान दें, अब आप यह भी जानते हैं कि अपनी समस्या को सुलझाने के कौशल का अभ्यास कैसे करें!
अंत में, मैं चाहता हूं कि आप कई चुनौतियों का सामना करें।
“जब आप सोचते हैं कि आपने सफलतापूर्वक एक बाधा को पार कर लिया है, तो दूसरा दिखाई देता है। लेकिन यही जीवन को रोचक बनाता है। [...]
जीवन बाधाओं पर काबू पाने की प्रक्रिया है - किलेबंदी जिससे हमें गुजरना चाहिए।
हर बार आप कुछ नया सीखते हैं।
हर बार आप ताकत, ज्ञान और दृष्टिकोण विकसित करेंगे।
हर बार कम प्रतिस्पर्धा होगी। और अंत में, केवल आपका उन्नत संस्करण ही रहेगा। ”
- रयान हॉलिडे ( बाधा रास्ता है )
अब समस्याओं को हल करने जाओ!
और भाग्य आपके साथ हो सकता है!
सी। जॉर्डन बॉल और वी। एंटोन स्प्राल का
विशेष धन्यवाद । सहायक सलाह के लिए उन्होंने दिया।
इसके अलावा, मैं
लैम्बडा स्कूल के बिना अपने प्रोग्रामिंग ज्ञान को इतनी जल्दी प्राप्त नहीं कर सकता था। मैं उन्हें धन्यवाद या सिफारिश नहीं कर सकता।