क्या कंप्यूटर विज्ञान में अच्छा होना महत्वपूर्ण है? क्या इसे अच्छी तरह से जानने के लिए एल्गोरिथ्म को लागू करना चाहिए?
मुझे एक सीएस प्रोफेसर का मुहावरा याद है कि " मैं कभी कोड नहीं करता"
क्या कंप्यूटर विज्ञान में अच्छा होना महत्वपूर्ण है? क्या इसे अच्छी तरह से जानने के लिए एल्गोरिथ्म को लागू करना चाहिए?
मुझे एक सीएस प्रोफेसर का मुहावरा याद है कि " मैं कभी कोड नहीं करता"
जवाबों:
जब तक आप इसे कोड नहीं करेंगे, आपको एल्गोरिथ्म के बारे में अच्छी तरह पता नहीं होगा ।
कोडिंग आपके प्रोफेसर के लिए महत्वपूर्ण नहीं है, लेकिन आपको यह ध्यान रखना होगा कि उन्हें डीओ चीजों का भुगतान नहीं किया जाता है। उसे SAY चीजों (और राइट चीजों) के लिए भुगतान किया जाता है।
मैं एक पूर्व गणित प्रोफेसर हूं, इसलिए मैं इस गतिशील अच्छी तरह से समझता हूं।
यदि आप उनके पथ का अनुसरण करना चाहते हैं, और एक सैद्धांतिक कंप्यूटर वैज्ञानिक बनना चाहते हैं, तो हाँ, कोडिंग का कम महत्व है। लेकिन अगर आप करते हैं, तो विनम्रता बनाए रखना याद रखें, यह जानते हुए कि आपका वेतन उन चीजों द्वारा अर्जित संसाधनों द्वारा भुगतान किया जाता है जिन्होंने डीओ चीजों को चुना।
कंप्यूटर विज्ञान दूरबीनों के बारे में खगोल विज्ञान की तुलना में कंप्यूटर के बारे में अधिक नहीं है
- एद्गर दिक्स्ट्रा
मैं सहमत हूं।
यदि आप अमूर्त, मूलभूत कंप्यूटर विज्ञान अवधारणाओं में विशुद्ध कंप्यूटर विज्ञान अकादमिक होने के बारे में बात कर रहे हैं, तो जरूरी नहीं।
एक सादृश्य को मोड़ने के लिए: यह पूछना थोड़ा सा है कि क्या नासा के प्रत्येक रॉकेट वैज्ञानिक को "अच्छा रॉकेट वैज्ञानिक" होने के लिए अंतरिक्ष में उड़ना चाहिए। बिलकूल नही। एक अंतरिक्ष यात्री होना अंतरिक्ष उड़ान उद्योग का हिस्सा है, और एक बहुत ही हाथों का हिस्सा है, लेकिन इसका मतलब यह नहीं है कि जमीनी वैज्ञानिक अपने तरीके से उतने महत्वपूर्ण नहीं हैं।
उस ने कहा, यह शायद एक अच्छा विचार है कि उसने जो एल्गोरिथ्म बनाया है, उसे लागू करें, यदि वास्तव में इसे वास्तविक प्रोग्रामिंग भाषा में नहीं लिखा जाए। इस अर्थ में, आप एल्गोरिथम डिज़ाइन को गणित की एक शाखा के रूप में सोच सकते हैं।
एक सच्चे कंप्यूटर वैज्ञानिक होने के लिए कोडिंग सुपर महत्वपूर्ण नहीं है। और कोड में सोचने से वे सोच में बाधा डाल सकते हैं क्योंकि वे उपयोगी अमूर्त अवधारणाओं को विकसित करना चाहते हैं। अधिकांश उत्कृष्ट कोडर में जटिल एल्गोरिदम का विश्लेषण करने, या प्रोग्रामिंग भाषा, उन्नत खोज और सॉर्टिंग एल्गोरिदम, परिमित ऑटोमेटा सिद्धांत, वितरित कंप्यूटिंग सिद्धांत, आर-ट्रीज़, फ़ॉल्ट-टॉलरेंस प्रोटोकॉल, विश्वसनीय डेटा प्रोटोकॉल, जैसी अवधारणाओं को विकसित करने के लिए बौद्धिक चॉप नहीं है। सिग्नल प्रोसेसिंग एल्गोरिदम, क्रिप्टोग्राफिक सिद्धांत, प्रदर्शन विश्लेषण और अनुकूलन, कुशल कैशिंग, मैप-कम, विश्वसनीय सुरक्षा प्रोटोकॉल आदि। उत्कृष्ट कोडर और कंप्यूटर इंजीनियर आमतौर पर सिस्टम में इन सिद्धांतों का उपयोग कर सकते हैं जो वे बनाने और इसे काफी प्रभावी ढंग से करने की कोशिश कर रहे हैं, लेकिन यह वास्तव में कंप्यूटर सिस्टम इंजीनियर या कंप्यूटर प्रोग्रामर का क्षेत्र है।
कंप्यूटर प्रोग्रामर होने के लिए कोडिंग गंभीर रूप से महत्वपूर्ण है। कंप्यूटर वैज्ञानिकों द्वारा कार्यशील कोड में निर्मित उपयोगी अमूर्त अवधारणाओं को कैसे समझाना है, यह समझना भी उपयोगी है।
कंप्यूटर विज्ञान में एक बड़ी समस्या यह है कि उन्हें अक्सर गणित की समस्याओं का समाधान खोजना पड़ता है जिनकी आज की प्रोग्रामिंग समस्याओं को हल करने में बहुत कम उपयोगिता है। यहां तक कि अगर वे एक समाधान कोडित करते हैं, तो कोई भी वास्तव में इसका उपयोग करने में सक्षम नहीं होगा। डिजिटल सिग्नल प्रोसेसिंग सिद्धांत के बारे में सोचें। यह फूरियर, हिल्बर्ट और शैनन जैसे लोगों द्वारा आविष्कार किया गया था, लेकिन कम्प्यूटरीकृत डीएसपी समस्याओं के लिए आवेदन लगभग 20 साल पहले तक व्यापक रूप से संभव नहीं था।
कंप्यूटर शिक्षा में बड़ी समस्या यह है कि कंप्यूटर वैज्ञानिकों द्वारा पढ़ाए जाने वाले अधिकांश लोग कंप्यूटर वैज्ञानिक नहीं बनेंगे। लेकिन बहुत सारे कंप्यूटर वैज्ञानिकों को यह नहीं मिलता है। कोडिंग उनके लिए महत्वपूर्ण नहीं हो सकता है, लेकिन यदि आप उनकी कक्षा में हैं, तो यह आपके लिए महत्वपूर्ण है।
कंप्यूटर शिक्षा में एक और बड़ी समस्या यह है कि कई सच्चे कंप्यूटर वैज्ञानिकों के पास सॉफ्टवेयर विकास सिखाने में उपयोगी होने के लिए औद्योगिक अनुभव की कमी है। वे अनिवार्य रूप से कुछ ऐसा सिखाने की कोशिश कर रहे हैं जो वे वास्तव में नहीं जानते हैं। इससे उन्हें विश्वसनीयता खोनी पड़ती है। औद्योगिक सेटिंग में जो चीजें महत्वपूर्ण हैं, वे अक्सर इनमें से कुछ कंप्यूटर वैज्ञानिकों के साथ पंजीकृत नहीं होती हैं।
लंबे और छोटे, कोडिंग अधिकांश लोगों के लिए महत्वपूर्ण है जो "कंप्यूटर वैज्ञानिक" बन जाते हैं क्योंकि उन लोगों में से अधिकांश कंप्यूटर प्रोग्रामर और कंप्यूटर इंजीनियर बन जाएंगे।
उपक्षेत्र पर निर्भर करता है कि प्रोफेसर अंदर है।
संख्यात्मक विश्लेषण में सक्षम कोई भी शायद एक फोरट्रान होज़ है। कोई भी AI प्रोफेसर लिस्प या प्रोलॉग में कोड करेगा या ऐसा कुछ होगा।
कुछ अधिक गणितीय क्षेत्रों में, वास्तव में कोड की आवश्यकता नहीं है। मैं अभी भी एक स्पर्श संदिग्ध हूँ, खुद को।
एक असतत गणित तरह के आदमी के अधिक संकोच की तरह लगता है ... बस गणित और सिद्धांत में कंप्यूटर विज्ञान के पीछे। इस प्रकार के प्रोफेसरों को नमक के एक दाने के साथ क्या कहना है।
आप केवल सिद्धांत को समझने के साथ दूर हो सकते हैं, लेकिन मैंने हमेशा पाया कि मैंने एल्गोरिदम और इस तरह के 1000x को कोडित करने के बाद बेहतर समझा (उदाहरण के लिए बबल सॉर्ट बनाम क्विकॉर्ट), बिग-ओ को जानना बहुत अच्छा है लेकिन इसे बड़े डेटा के साथ अभ्यास में देखना -सेट्स आपको कम्प्यूटेशनल जटिलता को मापने के लिए एक निश्चित वास्तविक दुनिया की सराहना करता है)।
एक दिलचस्प बात यह है कि मैंने पाया है कि आप कंप्यूटर विज्ञान के सैद्धांतिक पहलुओं का अध्ययन करते हैं जो आसान कोडिंग बन जाता है। कुछ बिंदु पर आप किसी विशेष भाषा में चीजों को सोचना बंद कर देते हैं, बल्कि उन्हें कंप्यूटर की व्यापक अवधारणाओं के रूप में देखते हैं।
यह पूछने की तरह है कि क्या सभी अंग्रेजी प्रोफेसरों को मेरे दिमाग में फिल्में, टीवी श्रृंखला, उपन्यास, नाटक और कविताएं लिखने में सक्षम होना चाहिए। इसी तरह, एक गणित के प्रोफेसर की कल्पना करें जो समान रूप से एक समान विचार के लिए संख्याओं का उपयोग नहीं करता है। यह कहना है कि कुछ बुनियादी तत्व हैं जो कोडिंग को बुनियादी कंप्यूटर विज्ञान सिखाने में सक्षम होने के लिए कुछ महत्व देते हैं। इस प्रकार प्रोफेसर को बुनियादी भाषा के सिंटैक्स को जानना चाहिए और उन पाठ्यक्रमों को कैसे लिखना चाहिए जैसे कि पाठ्यक्रम जो प्रोफेसर पढ़ा रहे हैं। यदि प्रोफेसर कंपाइलर डिज़ाइन के बारे में पढ़ा रहा है और पहले कभी कंपाइलर नहीं लिखा है, तो यह एक बड़ी समस्या होगी। एक केक पकाने वाले शेफ की कल्पना करें जिसने पहले कभी खाना नहीं बनाया या केक नहीं खाया। ऐ कारुम्बा
जबकि मैं इसे जानने के लिए एक एल्गोरिथ्म को लागू करने के कुछ फायदे देख सकता हूं, मुझे संदेह है कि यह एक आवश्यकता है। आखिरकार, कोई भी आश्चर्यचकित हो सकता है कि कार्यान्वयन के खरगोश के छेद को कितनी दूर तक समझने में एक एल्गोरिथ्म लागू किया जाता है? उदाहरण के लिए किसी को कोई एल्गोरिथ्म लेना है और इसे वास्तव में इसे समझने के लिए प्रक्रियात्मक, वस्तु-उन्मुख और कार्यात्मक प्रोग्रामिंग जैसे विभिन्न प्रतिमानों के तहत इसे लागू करना है? क्या उन्हें यह जानना होगा कि कंपाइलर सभी कोड का अनुवाद कैसे करते हैं और बिट्स को इलेक्ट्रॉन-दर-इलेक्ट्रॉन स्तर पर घुमाते हैं, बल्कि इसके बारे में पांडित्यपूर्ण होना चाहिए।
"मैं कभी भी कोड नहीं करता हूं," हालांकि अतीत के साथ-साथ वर्तमान तनाव को एक तरह से समाहित करने का निहितार्थ है। "कोडिंग" की एक निहित धारणा यह भी हो सकती है कि एक नीच चीज़ के रूप में यह कथन देखने के लिए किसी अन्य तरीके से प्रोफेसर के नीचे है जो इसके बजाय नकारात्मक स्वर ले जा सकता है जो कुछ हलकों में अच्छी तरह से नहीं हो सकता है।
एक पेशेवर सॉफ्टवेयर डेवलपर होने के बावजूद, मैंने मैकेनिकल इंजीनियरिंग में डिग्री प्राप्त की।
आप बहुत कम अनुभव के निर्माण और मशीनिंग भागों के साथ एक अच्छा यांत्रिक डिजाइनर हो सकते हैं, जो उस काम को मशीनिस्टों पर छोड़ सकते हैं। लेकिन निर्माण और मशीन भागों के बारे में जानना आपको बेहतर इंजीनियर बना देगा, क्योंकि आप जो भी डिजाइन कर रहे हैं उसे बनाने और असेंबल करने से जुड़ी कठिनाइयों का अनुमान लगा सकते हैं।
वही सॉफ्टवेयर के लिए जाता है। एक "कोडर" एक मशीनिस्ट या तकनीशियन है, जबकि एक सॉफ्टवेयर इंजीनियर, अच्छी तरह से, इंजीनियर है। कई जगहों पर, एक व्यक्ति दोनों काम करता है। यह असंभव नहीं है, और कुछ बहुत ही सार मुद्दों के लिए, "इंजीनियरिंग केवल" स्थिति काम कर सकती है।
लेकिन विशाल बहुमत के लिए, कोड को मना करने से कोई लाभ नहीं है।
जब तक आप विचार नहीं कर रहे हैं और हॉल्टिंग की समस्या का अंत नहीं हो जाता, तब तक कंप्यूटर साइंस के हर पहलू में कोडिंग का उपयोग हमेशा होता है।
एकमात्र सीएस वर्ग जिसे मैंने बिल्कुल प्रोग्रामिंग के साथ लिया वह सिद्धांत था। मुझे लगता है कि वहाँ बहुत सारे भौतिक विज्ञानी हैं जो कहते हैं, "मैं कभी प्रयोग नहीं करता", लेकिन वे शायद वे भी हैं जो कहते हैं, "मुझे कभी भी कुछ भी पता नहीं है"। और मुझे आश्चर्य होगा अगर वे परवाह करते हैं।
एक कंप्यूटर विज्ञान के छात्र के रूप में मुझे लगता है कि सबसे पहले उन अवधारणाओं को समझना बेहतर है, जिनमें सॉफ्टवेयर विकास शामिल है। एक बार जब आप सॉफ़्टवेयर के पीछे का विचार जान लेते हैं और यह कंप्यूटर के साथ कैसे इंटरैक्ट करता है, तो यह समय है कोडिंग शुरू करने और विशिष्ट कार्यान्वयन समस्याओं से निपटने का।
यह "सॉफ़्टवेयर अपवाद" की तरह है, सबसे पहले आप केवल उनके साथ व्यवहार करते हैं क्योंकि आपने कुछ ऐसा किया है जिसे करने की अनुमति नहीं थी। फिर जब आप उन्हें सीखते हैं, तो अपने कोड के साथ ऐसा करना शुरू करें ताकि इसे और अधिक वर्बोज़ बनाया जा सके।
वैसे मुझे लगता है कि जो लोग उन प्रोग्रामर की तरह अवधारणाओं के बारे में परवाह नहीं करते हैं जो अपने अनुप्रयोगों में सामान्य वर्कफ़्लो के रूप में अपवाद का उपयोग करते हैं। वे जानते हैं कि कैसे वास्तव में क्यों नहीं मिलता है।
मुझे आपके प्रोफेसर के लिए एक और मुहावरा मिला है:
जो कर सकते हैं, वे करते हैं, जो नहीं सिखा सकते हैं।
imo, बात सस्ती है। कोई भी व्यक्ति 'थ्योरी' के बारे में बेबुनियाद बात कर सकता है और इसे 'कंप्यूटर साइंस' कह सकता है। लेकिन जब तक इसके वास्तविक व्यवहार में नहीं लाया जाता, तब तक सिद्धांत बहुत उपयोगी नहीं है क्योंकि इसे मान्य करने का कोई तरीका नहीं है। मैं कुछ के बारे में एक प्रोफेसर की राय काफ़ी होगा और अधिक गंभीरता से अगर मुझे पता था कि वह वास्तव में है हल की तुलना में अगर वह सिर्फ 'सिद्धांत' जो या किसी का समर्थन सबूत के लिए नहीं हो सकता है हो सकता है regurgitating है कोड में एक विशेष समस्या का बैकअप लेने के देखने के अपनी बात।