जूनियर प्रोग्रामर्स पर स्क्रिप्टिंग भाषाओं का क्या प्रभाव पड़ता है? [बन्द है]


18

मैंने दूसरे दिन अपने एक शिक्षक से चर्चा की।

हमने उन प्रभावों पर बहस की, जो सरल स्क्रिप्टिंग भाषाओं (जैसे पायथन या रूबी) के जूनियर प्रोग्रामर पर हैं।

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

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

इससे पहले कि पूरी तरह से पता लगाया गया था कक्षा समाप्त हो गई।


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

तो, स्क्रिप्टिंग भाषाओं का जूनियर प्रोग्रामर पर क्या प्रभाव पड़ता है?


8
मेरा तात्पर्य गधे से नहीं बल्कि व्याकरण से है। grickar.quickanddirtytips.com/affect-versus-effect.aspx
सिंगलटन

4
मैंने ऑटोमैटिक ट्रांसमिशन वाली कार चलाना सीखा। बाद में, मुझे मैनुअल ट्रांसमिशन के साथ एक मिला। सीखने में कुछ समय लगा, और मुझे यह सौभाग्यशाली लगा कि मुझे क्लच और शिफ्टिंग के साथ-साथ सब कुछ नहीं सीखना पड़ा।
डेविड थॉर्नले

2
@ एकलिंग: सच। किसी तरह मुझे xkcd.com/326 के बारे में सोचना था ...


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

जवाबों:


26

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

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

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


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

+1, यह मेरी सोच थी! काश मैंने इसे कक्षा से पहले पढ़ा होता :)
joe_coolish

22

इससे कोई फर्क नहीं पड़ता कि आप कहां से शुरू करते हैं। यह मायने रखता है कि आप शुरू करने के बाद कहां जाते हैं ।

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

मैंने BASIC के साथ शुरुआत की। मैं नहीं था रहने वहाँ।


सही उत्तर के लिए +1 - मूल प्रश्न कितना गलत है, यह स्पष्ट रूप से दिखाना! (पूरी तरह से संयोग के रूप में, मैंने बुनियादी के साथ भी शुरुआत की ;-)
पेटर टॉर्क

5
यह मुझे हैरान करता है कि कितने लोग वहाँ रहते हैं: .. o /
गैरी विल्बोबी

1
एक्सेलेंट जवाब। संक्षिप्त, सटीक और बिंदु तक। मैंने BASIC के साथ भी शुरुआत की।
माइकल रिले - AKA Gunny

11

आपका शिक्षक सही है, सिवाय इसके कि वह मानता है कि उसके परिणाम बुरे हैं।

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


6
आप से असहमत होंगे। परिणाम हैं , बुरी चीजें क्योंकि परिणाम अज्ञानता है। इसका मतलब यह है कि अंततः, कुछ टूट जाएगा और समस्या आपके समझ से कम स्तर पर होगी, और इसलिए आपको पता नहीं होगा कि इसे कैसे ठीक किया जाए। यह हमेशा एक बुरी बात है।
मेसन व्हीलर

6
तुम्हारे साथ सहमत होना होगा। हुड के नीचे क्या हो रहा है यह नहीं जानने के परिणाम एक सरल सादगी और अभिव्यक्ति की प्रत्यक्षता है जिसमें हार्डवेयर की बारीकियों की कोई चिंता नहीं है। अमूर्त के निचले स्तर भाषा डिजाइनरों के लिए हैं जो एप्लिकेशन डेवलपर्स नहीं हैं।
एस.लूट

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

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

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

5

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

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

असेंबलर निम्न स्तर का गतिशील रूप से टाइप किया जाता है (यदि प्रकारों की बात करें तो कोई भी समझदारी है), सी निम्न स्तर पर सांख्यिकीय रूप से टाइप किया जाता है, रूबी उच्च स्तर पर गतिशील रूप से टाइप किया जाता है, हास्केल उच्च स्तर पर सांख्यिकीय रूप से टाइप किया जाता है। जावा न तो उच्च और न ही निम्न स्तर का सांख्यिकीय रूप से टाइप किया गया है, C ++ उच्च और निम्न दोनों स्तर पर सांख्यिकीय रूप से टाइप किया गया है। और इसी तरह।

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

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

ऐसा हम सोचते हैं। मानव मस्तिष्क केवल सीमित मात्रा में सूचना "इकाइयों" की प्रक्रिया कर सकता है, लेकिन जानकारी के मात्राकरण में अमूर्तता की डिग्री बहुत कम मायने रखती है। उदाहरण के लिए: अभिव्यक्ति '34 * 75 'को पढ़ना हमारे लिए सरल है, इसकी गणना करना हमारे लिए सरल है, जबकि कंप्यूटरों के लिए यह दूसरा तरीका है। ब्लैक पिक्सेल्स के एक झुंड को एक स्क्विगली लाइन में पहचानने के लिए (और इस तरह से), जिसे तब पहचाना जा सकता है (और इस तरह फिर से अमूर्त) एक व्यक्तिगत अंक होने के लिए एक जबरदस्त काम है।
मेरी दादी एक फाइल खोलने के विचार को समझती हैं। हालाँकि उसे उस स्तर के नीचे कोई समझ नहीं है। और स्पष्ट रूप से, अगर उसे पहले हार्डवेयर और ऑपरेशन सिस्टम के आंतरिक कामकाज का अध्ययन करके यह सीखना पड़ता था और क्या नहीं, तो वह कभी भी वहां नहीं पहुंचती।

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

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

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


3

पायथन के बारे में कुछ भी सरल नहीं है। यूनिकोड और मेटा-प्रोग्रामिंग पर एक नज़र डालें।


मैं सहमत हूं कि पायथन बहुत जटिल और बहुत शक्तिशाली हो सकता है। लेकिन मूल बातें (स्ट्रिंग हेरफेर, सरणी हेरफेर, आदि) पायथन में सी की तुलना में बहुत आसान है
joe_coolish

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

1
तो फिर क्यों मेरे खोजा जा रहा था अगर filecontent.lower () में खोज (): काम नहीं कर रहा है? Python2.7 के साथ विंडोज़ पर tfs में UTF-16LE sql फ़ाइल में बम होने के कारण। मज़ा नहीं आ रहा था। यह काम कर रहा है। कुछ घंटे लगे। string.find () या तो काम नहीं कर रहा था ... अर्घघ!
क्रिस्टोफर महान

1
सी में संभाल करने के लिए यूनिकोड सरल कैसे है?
dan04

3

मैं एक और, बहुत गहरी समस्या को देखता हूं।

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

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


6
लेकिन पायथन और रूबी जोरदार टाइप्ड हैं। यह गतिशील रूप से टाइप किया जाने वाला ऑर्थोगोनल है। स्ट्रिंग्स और नंबर एक-दूसरे को रूपांतरित नहीं करते हैं
dsimcha

3
@dsimcha: हाँ - और यह कैसे मना करता है जो @Ingo ने कहा है?
जिम जी।

1
क्योंकि यह सवाल ज्यादातर रूबी और पायथन के बारे में है। मुझे लगा कि वह समझ रहा था कि उसे लगता है कि रूबी और पायथन कमजोर टाइप की हैं, जो एक आम गलतफहमी है।
dsimcha

1
@ davidk01 - यह मेरी बात है: मूल्यों के प्रकार हैं कि हम इसे चाहते हैं या नहीं। लेकिन गतिशील रूप से टाइप किए जाने पर (यदि वह शब्द आपको अधिक भाता है), चर नहीं। इसके बजाय, टाइप चेकिंग रनटाइम पर किया जाता है ताकि यूनिटीपे के कई वेरिएंट के बीच अंतर किया जा सके।
इंगो

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

2

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

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

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


2

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

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

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


1

स्क्रिप्टिंग भाषा प्रोग्रामर को मैला नहीं बनाती। समस्या डोमेन को समझने की स्पष्टता का अभाव (उदाहरण के लिए कार्यक्रम जिस व्यवसाय में कार्य करता है) वह ढलान का कारण बनता है।

जैसा कि पुरानी कहावत है, "आप किसी भी भाषा में COBOL लिख सकते हैं।", हालांकि मुझे संदेह है कि जब प्रत्येक डेटा प्रकार समान दिखता है , तो यह देखना कठिन हो जाता है कि आपके कार्यक्रम के आवश्यक पहलू क्या हैं, COBOL की एक प्रमुख विशेषता- ization।


1
संदेह करने से पहले इसे आज़माएं। मुख्य अंतर यह है कि आप जहां यह एक के बारे में एक बहुत नहीं देते है Fooया Barया पूरी तरह से आप कर सकते हैं जब तक अलग कुछ .frobnicate()यह किसी भी तरह से। स्पष्ट इंटरफेस के बिना।

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

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

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

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

1

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

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

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

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

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

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


0

मैं आपके शिक्षक के साथ हूं, लेकिन @Singletoned के साथ भी जब वह कहता है कि आपका शिक्षक परिणाम मान रहा है (उदाहरण के लिए, प्रदर्शन का कोई ज्ञान नहीं) खराब है।

मुझे लगता है कि सी के साथ शुरू करना स्क्रिप्टिंग भाषाओं के साथ शुरू करने से बेहतर है। एक शिक्षक के रूप में, मैं उस पूरे वॉन न्यूमैन आर्किटेक्चर चीज़ (ALU, रजिस्टरों, मेमोरी, आई / ओ पोर्ट्स, ...) पर ध्यान केंद्रित करूँगा, सीधे पॉइंटर्स पर जाऊँगा (मुझे क्षमा करें, यह वास्तव में एक महत्वपूर्ण अवधारणा है [जारी नहीं] VM भाषाओं में संदर्भ (यानी, पॉइंटर्स) मेमोरी लीक्स का एक प्रमुख स्रोत है), कुछ डेटा स्ट्रक्चर्स (ट्री, लिस्टेड लिस्ट, हैशटेबल 1 ) को हिट करते हैं , और फिर ... इसे अमूर्त स्तर पर कुछ और (OO, ) में किक करते हैं। कार्यात्मक प्रोग्रामिंग, कुछ - मजबूत स्थिर टाइपिंग नियम , यो \ m /, इसलिए कोई "स्क्रिप्टिंग भाषा"> :() नहीं है।

1 हम्म, शायद मैं w / आपके शिक्षक के प्रदर्शन के विचारों पर सहमत हूँ, आखिरकार।


मैला प्रोग्रामिंग मेमोरी लीक का एक स्रोत है और फ़ाइल हैंडल जैसे संसाधनों का ट्रैक रखने के लिए लोगों को सिखाने के लिए बहुत कुछ नहीं है। मेमोरी लीक के साथ अनगिनत सी प्रोग्राम हैं इसलिए मुझे यकीन नहीं है कि आप लोगों को जल्द से जल्द पॉइंटर्स सिखाने के साथ मिल रहे हैं।
davidk01

यह सच है, लेकिन ... (ए) बुनियादी बातों को नहीं समझने से कुछ बुरा कोड (हैकिंग-टिल-इट-राइट या मैला प्रोग्रामिंग के माध्यम से होता है), और (बी) मैं यह बताने की कोशिश कर रहा था कि पॉइंटर्स अभी भी प्रासंगिक क्यों नहीं हैं यह स्वीकार करते हुए कि C मेमोरी लीक के मामले में कचरा एकत्र करने वाली भाषाओं से बेहतर है। संकेत करने के लिए asap करने का उद्देश्य है, इसलिए हम तब C से बाहर निकल सकते हैं
JohnL4

0

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


0

तुम दोनों सही हो।

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

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

असल में, मुझे लगता है कि पूल के उथले छोर में शुरू करना ठीक है जब तक कि आप अंततः गहरे पानी के लिए हड़ताल नहीं करते।


0

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

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

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

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