मैं यह कैसे सुनिश्चित कर सकता हूं कि मैं वास्तव में सीख रहा हूं कि किसी भाषा के विवरण को सीखने के बजाय कैसे प्रोग्राम करना है? [बन्द है]


82

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

मैं यह कैसे सुनिश्चित कर सकता हूं कि मैं वास्तव में सीख रहा हूं कि किसी भाषा के विवरण को सीखने के बजाय कैसे प्रोग्राम करना है ? और मैं प्रोग्रामिंग कौशल कैसे विकसित कर सकता हूं जिसे केवल एक के बजाय सभी भाषाओं के लिए लागू किया जा सकता है?


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

42
साथ ही, जो लोग एक सप्ताह में एक भाषा सीखने में सक्षम होने का दावा करते हैं, उन्हें यह परिभाषित करने की आवश्यकता है कि जब वे "सीखें" तो उनका क्या मतलब है। "What do you mean you're not an expert in LanguageX?!? I can learn a language in a Week!"। 1 सप्ताह बाद:"See, I've learnt the language, and here's a Hello World example I copied from Wikipedia to prove it!"
JohnL

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

10
@PaRR: बाइक की सवारी करना सीखने में मुझे 10,000 घंटे नहीं लगे। या तैरना, उस बात के लिए।
रॉबर्ट हार्वे

7
@PaRR कहावत इसके बारे में है कि एक हुनर ​​में महारत हासिल करने के लिए 10k घंटे लगते हैं , न कि इसे केवल "सीखने" के लिए
Tobias Kienzler

जवाबों:


96

"कौशल" की कुछ हास्यास्पद अवधारणा को पूरा करने के बारे में चिंता न करें, इसलिए आमतौर पर ऐसे बयानों में सुना जाता है जैसे:

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

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

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

जैसा कि यह पता चला है, प्रोग्रामिंग भाषाओं, तकनीकों और दृष्टिकोणों की एक पूरी कड़ी है, जो कि 95% से विदेशी हैं जो हमने कभी किया है या किया है। कई लोग इस बात से पूरी तरह अनजान हैं कि इनमें से कोई भी अन्य अवधारणाएँ भी मौजूद हैं, जो ठीक है और ये अवधारणाएँ नियोजित और प्रभावी प्रोग्रामर होने के लिए आवश्यक नहीं हैं।

लेकिन तथ्य यह है: ये तकनीकें और दृष्टिकोण मौजूद हैं, वे कई अलग-अलग चीजों के लिए अच्छे हैं और बहुत उपयोगी हो सकते हैं, लेकिन वे वैसा नहीं हैं जैसा आप उपयोग कर रहे हैं और लोग बस उन्हें दोपहर की दोपहर के साथ नहीं उठा सकते हैं।

इसके अलावा, मैं कहूंगा कि अधिकांश मामले ऐसे हैं जहां लोग दावा करते हैं कि वे ऐसी जटिल चीजें सीख सकते हैं जैसे प्रोग्रामिंग लैंग्वेज इतनी जल्दी एक हफ्ते में, वे थोड़े से डायनामिक क्रूगर इफेक्ट , विकिपीडिया (जोर मेरा) से पीड़ित हैं :

Dunning-Kruger प्रभाव एक संज्ञानात्मक पूर्वाग्रह है जिसमें अकुशल व्यक्ति भ्रम श्रेष्ठता से पीड़ित होते हैं, गलती से उनकी क्षमता औसत से अधिक होती है। इस पूर्वाग्रह को उनकी गलतियों को पहचानने के लिए अकुशल की एक मेटासेक्सेटिव अक्षमता के लिए जिम्मेदार ठहराया गया है।

मैं पीटर नोरविग द्वारा कार्यक्रम सीखने की अवधारणा पर लोगों को इस अधिक अनुभवी perview का उल्लेख करूंगा: दस वर्षों में कार्यक्रम करना सीखें

शोधकर्ताओं (ब्लूम (1985), ब्रायन एंड हैटर (1899), हेस (1989), सिमोन एंड चेस (1973) ने दिखाया है कि शतरंज खेलने, संगीत सहित किसी भी विस्तृत क्षेत्र में विशेषज्ञता विकसित करने में लगभग दस साल लगते हैं। रचना, टेलीग्राफ ऑपरेशन, पेंटिंग, पियानो बजाना, तैराकी, टेनिस, और न्यूरोसाइकोलॉजी और टोपोलॉजी में अनुसंधान। कुंजी जानबूझकर अभ्यास है: न केवल इसे बार-बार करना, बल्कि एक कार्य के साथ खुद को चुनौती देना जो आपकी वर्तमान क्षमता से परे है, इसे आज़माना, इसे करने के बाद और बाद में अपने प्रदर्शन का विश्लेषण करना और किसी भी गलतियों को सुधारना। फिर दोहराएं। और फिर से दोहराएं।


निश्चित रूप से, अतिव्यापी सिद्धांतों का एक सेट है जो सभी भाषाओं को सीखना आसान बना देगा!

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

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


11
Enh। एक भाषा को "जानने" और एक में एक मामूली बग को खोजने और ठीक करने के लिए पर्याप्त कुशल होने के बीच अंतर है। एक अच्छा प्रोग्रामर उत्तरार्द्ध को बहुत जल्दी कर सकता है, यहां तक ​​कि पुरातन भाषाओं में भी।
तेलस्टिन

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

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

4
मैं कहता हूँ कि यह इतना Dunning-Kruger प्रभाव नहीं है, जितना कि "प्रोग्रामिंग भाषा" = "c-style प्रोग्रामिंग भाषा"। सी ++ की एक सभ्य राशि, सी # की एक सभ्य राशि और पर्ल और अजगर की कुछ ख़ुशबूओं को जानने के बाद, मुझे उम्मीद है कि मैं एक सप्ताह में जावा, पीएचपी इत्यादि में यथोचित धाराप्रवाह बन सकता हूं। जरूरी नहीं विशेषज्ञ, लेकिन कम से कम काफी धाराप्रवाह। मैं था कुछ ही दिनों में जावास्क्रिप्ट लेने। उस समय, यह मुख्य रूप से उन दोनों के बीच अंतर सीखने के बारे में है। नोट: सबसे लोकप्रिय वास्तविक दुनिया भाषा हैं ग की तरह। जरूरी नहीं कि प्रोलॉग का कहना ही सही होगा।
neminem

2
@WayneWerner गंभीरता से, हास्केल या प्रोलॉग और अल्गोल भाषाओं के बीच का अंतर सिंटैक्स से बहुत अधिक है, आप सिर्फ मिथक को नष्ट कर रहे हैं। मेरा परीक्षण ऊपर लें: एक सप्ताह हस्केल सीखने की कोशिश करें और देखें कि यह आपके लिए कैसे काम करता है। ईमानदारी से, यह आपके लिए अच्छा होगा, बहुत कुछ ऐसा करने से सीखने के लिए।
जिमी हॉफ

51

... मैं प्रोग्रामिंग कौशल कैसे विकसित कर सकता हूं जिसे केवल एक के बजाय सभी भाषाओं के लिए लागू किया जा सकता है?

इस प्रश्न की कुंजी भाषा को पार करना है और यह सोचना है कि जिस भाषा में आप कोडिंग कर रहे हैं वह नहीं है।

WAT?

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

यह एक बोली जाने वाली भाषा सीखने में एक जैसा दिखता है। कई भाषाएं बोलने वाले लोग धाराप्रवाह अर्थ समझते हैं , और यह किसी दिए गए भाषा में निकलता है।

आईट्रेकिंग वीडियो कोड कॉम्प्रिहेंशन विथ आई ट्रैकिंग एंड आई-ट्रैकिंग कोड एक्सपेरिमेंट (नोविस) की जोड़ी में इस एएसटी के कुछ सुराग देखे जा सकते हैं जहां एक भिखारी और अनुभवी प्रोग्रामर की आंख के मूवमेंट देखे जाते हैं। एक अनुभवी प्रोग्रामर अपने मानसिक मॉडल में कोड को 'कंपाइल' कर सकता है और इसे अपने सिर में 'रन' कर सकता है, जबकि शुरुआत करने वाले को कीवर्ड द्वारा कोड कीवर्ड पर पुनरावृति करना होता है।

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

एक बार जब सिर में एएसटी का उपयोग करने की यह क्षमता होती है, तो इसी तरह के विचार के भीतर एक और भाषा सीखना ( बीफुन्ज जाना जावा से एक कूद है, लेकिन फोर्थ से उतना नहीं है ) बहुत आसान हो जाता है - यह 'बस' है एएसटी को एक नई भाषा में अनुवाद करना जो 3 जी, 4 वें और 5 वें (आदि ...) समय के लिए बहुत आसान है।


एक क्लासिक लेख है, रियल प्रोग्रामर पास्कल का उपयोग नहीं करते हैं । इस का हिस्सा पढ़ता है:

... निर्धारित रियल प्रोग्रामर किसी भी भाषा में फोरट्रान प्रोग्राम लिख सकता है

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

इसके लिए, मुझे ACM द्वारा प्रकाशित एक लेख, किसी भी भाषा में फोरट्रान को लिखने के लिए कैसे नहीं लिखना चाहिए । लेख का तीसरा पैराग्राफ (जो प्रमुख उद्धरण नहीं है) सीधे हाथ पर प्रश्न को संबोधित करता है:

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

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

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

इस बिंदु को पार करने के लिए, किसी को कई भाषाओं में कोड लिखना जारी रखना होगा, कोड को डिज़ाइन करते समय उन भाषाओं में नहीं सोचना चाहिए, बल्कि भाषा के मुहावरों के साथ काम करने के लिए डिज़ाइन को कोड में अनुवाद करते समय उन पर सोचें।

वहां पहुंचने का एकमात्र तरीका है - प्रोग्रामिंग कौशल विकसित करने में सक्षम होना जो सभी भाषाओं पर लागू हो सकता है - भाषाओं को सीखना जारी रखना है और एक भाषा से जुड़ी होने के बजाय उस मानसिक प्रोग्रामिंग भाषा को लचीला रखना है।

( प्रस्तुत किए गए विचार से भारी उधार लेने के लिए कैओसपांडियन के लिए मेरी माफी ।)


3
माफी मांगने की कोई जरूरत नहीं है। मुझे लगता है कि आपने एक प्रभावशाली उत्तर लिखा है।
ChaosPandion

मैं उस व्यक्ति को श्रेय देना चाहता था जो मुझे इस दिशा में सोच रहा था कि मैं उत्तर लिखूं।

3
यह बहुत अच्छा जवाब है। काश मैं दो बार उत्थान कर पाता।
वेन वर्नर

2
वास्तव में यही कारण है कि आपको पहले OO नहीं सीखना चाहिए, क्योंकि यह आपके दिमाग को सबसे खराब एएसटी की कल्पना के साथ प्रारूपित करता है।
मुर्दाघर।

1
@ जिमीहॉफ - आप सही हो सकते हैं। मैंने हमेशा शुरू में एक भाषा का उपयोग करके सिखाया है और धीरे-धीरे बाद में शुरू किया है। फिर भी मुझे लगता है कि यह खोज के लायक है क्योंकि मैं हमेशा ब्रेक मार सकता हूं और उन्हें एक भाषा पर केंद्रित कर सकता हूं। (SML वास्तव में एक बहुत अच्छा विकल्प लगता है।)
ChaosPandion

12

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

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

और हाँ, आप हास्केल जैसी भाषाओं की खोज करेंगे जो आपको कुछ नया सिखाएंगे, एक बार जब आप बुनियादी बातों में एक मजबूत आधार होंगे।

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


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

1
क्या सच नहीं है? आपको चलना या दौड़ने से पहले सीखना होगा कि कैसे क्रॉल करना है।
रॉबर्ट हार्वे

1
आह, मुझे निर्दिष्ट करना चाहिए, मेरा मतलब था अंतिम पैराग्राफ, मैं बाकी जवाब से सहमत हूं
जोज़फग

1
मैंने पिछले पैराग्राफ को एक के साथ बदल दिया है जो मेरी भावना को बेहतर बनाता है।
रॉबर्ट हार्वे

5

प्रोग्रामिंग इस तरह से हल करने में समस्याओं के बारे में है कि समाधान को इस तरह के एक प्रतिबंधित व्याकरण में व्यक्त किया जा सकता है कि इसे एक प्रोग्रामिंग भाषा के साथ लागू किया जा सकता है। प्रोग्रामिंग की कला इसलिए समस्याओं को हल करने की कला है।

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

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

मैं 30 साल (OMFG!) के लिए प्रोग्रामिंग कर रहा हूं और अभी भी php.netPHP में कमांड देखने के लिए उपयोग करता हूं क्योंकि यह मेरी पहली भाषा नहीं है।

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

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


आपकी टिप्पणी पहला मॉडल और पैटर्न के बारे में मैंने पढ़ा है! मैं आपकी टिप्पणी के साथ 100% हूं, एक बात यह है कि एक भाषा प्राप्त करें और एक कार्यक्रम बनाना शुरू करें। एक और समस्या पर विचार करना है और इसे हल करने के लिए उपयुक्त उपकरण ढूंढना है, फिर आप एक भाषा की तलाश शुरू करते हैं और प्रोग्राम करना शुरू करते हैं।

3

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

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

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


1

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

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

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


1

मेरी रणनीति हमेशा विशिष्ट कौशल के बजाय शुद्ध कौशल पर ध्यान केंद्रित करने की रही है।

पाइथन (या किसी भी भाषा) के सीखने के बजाय आप जो भी करना चाहते हैं उसके लिए विशेष वाक्यविन्यास, अपने मस्तिष्क चक्रों को सार समस्याओं को हल करने में खर्च करें, जैसे कि उस श्रेणी की हर समस्या को सबसे अच्छा हल कैसे करें।

इस तरह, आपको पता चल जाएगा कि भाषा को कोई फर्क नहीं पड़ता है, और ज्यादातर कालातीत कौशल होंगे जो किसी भी भाषा में प्रोग्रामिंग के लिए उपयोग किए जा सकते हैं।

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

कई उत्तरों में जो कहा गया है, उसके विपरीत, अन्य प्रोग्रामर को न सुनें, आप एक नॉब हैं और ऐसा कोई तरीका नहीं है जिससे आप असली डील से नकली को बता सकें, इसलिए आप नमक के चम्मच के साथ सब कुछ लेना बेहतर समझते हैं।

आप हर समय पूछताछ करना चाहते हैं और केवल तभी स्वीकार करते हैं जब समाधान तेज, सुरुचिपूर्ण और विश्वसनीय हो।


1
"अन्य प्रोग्रामर की बात नहीं मानी" - हाँ यकीन है। "- यदि आप पठनीय और आसानी से बनाए रखने योग्य कोड लिख चुके हैं तो आपको कैसे पता चलेगा? - आपका सहकर्मी आपको कोड की समीक्षा करने के बाद बताता है। राशनेल: आप इसे स्वयं निर्धारित नहीं कर सकते हैं क्योंकि आप लेखक के रूप में अधिक जानते हैं क्योंकि कोड स्वयं कहता है। कंप्यूटर आपको उन कारणों के लिए नहीं बताया जा सकता है, जो यह नहीं बता सकते हैं कि एक पेंटिंग कला है या नहीं। इसलिए, आपको एक और मानव की आवश्यकता है - सॉफ्टवेयर को बनाए रखने में सक्षम - जो आपने लिखा है उसे देखें और उसकी राय दें ... " ( उद्धरण स्रोत )
gnat

@ जगन को जो अच्छा लगे वो करो। मैं सिर्फ आपको बता रहा हूं कि चूंकि अधिकांश प्रोग्रामर गंदगी के लिए कोड नहीं कर सकते हैं, इसलिए उनकी प्रतिक्रिया संभावित रूप से हानिकारक है, और आपको इससे निपटने के लिए बैग और नमक के बैग लाने चाहिए। इसके अलावा, मेरा मानना ​​है कि "नैतिकता द्वारा संपादन योग्य और पठनीय" गुणवत्ता का संकेत नहीं है। विश्वास करो कि तुम क्या चाहते हो, लेकिन -1 के आसपास मत जाओ क्योंकि लोग आपकी दृष्टि से सहमत नहीं हैं।
मुर्दाघर।

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

जो कुछ। सामग्री> फ़ॉर्म। अपना रूप रखो, मैं अपनी सामग्री रखूँगा।
मुर्दाघर।

0

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

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

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


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

@ जिम्मीहॉफ़ - अच्छे अंक!
सिस्टम डाउन

1
"कैसे मूल प्रोसेसर निर्देशों को एक साथ स्ट्रिंग किया जाता है (...)" शुरुआती लोगों के लिए भयानक विचार की तरह लगता है (ओपी ने कहा कि वह एक नहीं है लेकिन तर्क के लिए मान लेते हैं। यह वास्तव में शिक्षण के बिना 'माइक्रो-ऑप्टिमाइज़ेशन' सिखाएगा। अनुकूलन करने के लिए (3-5 चरण की वास्तुकला को थोड़ा पुराना माना जा सकता है ...)। मुझे गलत मत समझिए - CA का आकर्षक - लेकिन 'उचित' प्रशंसा के लिए 'आउट-ऑफ-ऑर्डर' और 'मल्टीस्कूलर' जैसे शब्दों की आवश्यकता होगी। और शायद कुछ बुनियादी प्रोग्रामिंग अनुभव के बाद आते हैं।
Maciej Piechotka

0

खैर, मैं जो कहना चाहता था, वह ज्यादातर पहले ही कहा जा चुका है। मैं जो जोड़ना चाहूंगा वह बहुत सरल सादृश्य है।

यदि प्रोग्रामिंग भाषाओं को मात्र उपकरण माना जाता है, तो भी एक में अच्छा होने का कोई तर्क नहीं है, दूसरे में अच्छा है।

बस प्रतिष्ठित मास्टर तलवारबाजों के एक झुंड पर विचार करें, अचानक अपनी तलवारें डाल दीं और 7 दिनों के प्रशिक्षण के बाद भाले के साथ युद्ध के लिए रवाना हो गए। क्या हुआ होगा? उनका नरसंहार किया जाएगा।

भाषाएं अक्सर सीखना मुश्किल नहीं होता है, लेकिन यह अच्छा होने के लिए धैर्य और व्यायाम करता है। इसके अतिरिक्त, प्रोग्रामिंग सीखने का कोई सही तरीका नहीं है।

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

यहां कुछ चीजें हैं जो आप भाषा सीखते समय करना चाहते हैं।

  • भाषा के बारे में पढ़ें। अगर यह दिलचस्प लगता है अपने आप से हैलो वर्ल्ड ऐप (ओं) को आज़माएं।
  • कुछ ट्यूटोरियल, ट्रिक्स, ब्लॉग पढ़ें।
  • इसमें सिर्फ़ मज़े के लिए साधारण ऐप बनाएं।
  • विभिन्न विशेषताओं का परीक्षण करें।
  • यदि आप वास्तव में इसे पसंद करते हैं, तो कुछ किताबें और / या वीडियो ट्यूटोरियल खरीदें।
  • अच्छे पुस्तकालयों की खोज करें।
  • उत्तरों की खोज करें, केवल तभी पूछें जब आप उत्तर न पा सकें।
  • दूसरों से जवाब माँगने में मदद करें (यहाँ से बेहतर कहाँ है?)
  • कुछ उपयोगी बनाओ। कैलकुलेटर ऐप बनाना एक अच्छा व्यायाम हो सकता है, लेकिन अगर आप TO-DO सूची ऐप बनाते हैं और वास्तव में आप अपने पीसी / फोन पर उपयोग करते हैं, तो भावना 100 गुना संतोषजनक है।

नई भाषाओं का अनुभव करें, नए पुस्तकालयों का पता लगाएं, अपने खाली समय पर नई चालें सीखें। इससे पहले कि आप जानते हैं कि आप अपने कौशल से खुद को आश्चर्यचकित करेंगे।


0

मेरे मामले में, मैं सीखता हूं कि वास्तव में निम्नलिखित के माध्यम से कैसे प्रोग्राम करें:

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

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


0

मुझे लगता है, यदि आप विश्लेषणात्मक रूप से सोच सकते हैं, तो आपके पास एक अच्छी शुरुआत है।

किसी भी भाषा को जानें जो आप चाहते हैं और अपने आप को उदाहरणों की एक श्रृंखला गढ़ने का काम करें जैसे कि लगभग कभी पुस्तक में प्रस्तुत किया गया है जो प्रोग्रामिंग सिखाता है।

अगला अपनी समस्याओं को हल करने का प्रयास करें। विभिन्न समाधान खोजने और उनकी तुलना करने की कोशिश करें। गति और स्मृति-उपयोग आमतौर पर उपयोग किए जाने वाले कारक हैं जो मायने रखते हैं। अन्य प्रोग्रामर के साथ अपने समाधान पर चर्चा करें।

अन्य प्रोग्रामर का कोड पढ़ें और यह समझने की कोशिश करें कि उन्होंने इस तरह से समस्या को क्यों हल किया।

मानक तरीकों पर अवलोकन प्राप्त करने के लिए आपको एल्गोरिदम के बारे में कुछ किताबें भी पढ़नी चाहिए। नई समस्याएं अक्सर पुरानी समस्याओं का संशोधन होती हैं।

टीमों में कोड के साथ बहुत सारे अभ्यास और काम करने से आपको अपने कौशल को कदम दर कदम बढ़ाने में मदद मिलेगी।

मुझे उम्मीद है कि मेरी राय आपको कम से कम आंशिक रूप से सवाल जवाब करती है।

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