क्या कंप्यूटर विज्ञान का विज्ञान मृत है? [बन्द है]


18

प्रश्न: क्या सीएस का विज्ञान और कला मृत है? इससे मेरा मतलब है कि इन दिनों सोचने, योजना बनाने और कुशलता से समस्याओं को हल करने की वास्तविक आवश्यकताएं सीएस से दूर होती जा रही हैं। यह क्षेत्र प्रवेश-अवरोध को कम करता हुआ प्रतीत होता है इसलिए अधिक लोग 'कार्यक्रम' को सीखे बिना यह जान सकते हैं कि वास्तव में कैसे कार्यक्रम है।

पृष्ठभूमि: मैं हाल ही में कंप्यूटर विज्ञान में बी एस के साथ स्नातक हूँ। मैं आईटी विभाग में एक सभ्य आकार की कंपनी में एक शुरुआती स्थिति में काम कर रहा हूं। मैं अपनी नौकरी में ज्यादातर .NET और अन्य Microsoft तकनीकों को करता हूं, लेकिन इससे पहले मैंने जावा सामान इंटर्नशिप और इस तरह से किया है। मैं व्यक्तिगत रूप से अपने स्वयं के लिए मजेदार परियोजनाओं के लिए C ++ प्रोग्रामर हूं।

गहराई में: मैं जो काम कर रहा हूं, उससे मुझे लगता है कि एक वास्तविक विज्ञान के गहन विषय सीएस में मौजूद नहीं हैं। अतीत में, सिस्टम को मजबूत और त्वरित बनाने के लिए प्रोग्रामर को समस्याओं को कुशलतापूर्वक हल करना पड़ता था। लेकिन अब, .NET, Java और स्क्रिप्टिंग भाषाओं जैसी प्रचलित तकनीकों के साथ, ऐसा लगता है जैसे विकास में आसानी के लिए दक्षता और मजबूती का व्यापार किया गया है।

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

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

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

यह वही है जो मैं अपने जीवन के बाकी हिस्सों में देख रहा हूं? क्या अभी भी वहां ऐसे लोग हैं जो केवल तनख्वाह के बजाय सीएस के विज्ञान और कला से प्यार करते हैं?

और उसी नोट पर, यहाँ एक अच्छा पढ़ा है अगर आपने इसे द पेरिल्स ऑफ़ जावा स्कूल्स से पहले नहीं देखा है


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

48
मुझे लगता है कि प्रोग्रामिंग के साथ आपके भ्रमित सीएस, ये संबंधित हैं लेकिन दो अलग-अलग चीजें हैं।
अंधेरी

1
@chris मैं पूरी तरह से सहमत हूँ। मैं चौखटे और पुस्तकालयों का व्यापक उपयोग करता हूं, लेकिन मैं उन्हें समझने की कोशिश करता हूं कि बिना समस्या को समझे और पुस्तकालय इसे हल कैसे करता है। एक बार मुझे पता है, तो मैं यह चुन सकता हूं कि कौन सी लाइब्रेरी इसे सबसे बेहतर तरीके से हल करती है, बजाय इसके कि हर समस्या पर एक जेनेरिक लाइब्रेरी को फेंक दिया जाए और यह उम्मीद की जाए
वीविटीकस

8
इस प्रश्न को हल करने के लिए आप किस समस्या का समाधान कर रहे हैं?
जेरेमी

15
@Veaviticus, वास्तव में आप अपने प्लंबर से फ्लूड डायनेमिक्स (ताकि वे अपना काम बेहतर तरीके से कर सकें?) जानने की उम्मीद करते हैं । अधिकांश व्यावसायिक अनुप्रयोगों की लाइन (डेस्कटॉप / वेब) को अत्यधिक जटिल समस्याओं को हल करने की आवश्यकता नहीं है (बहुत कम ही)। सीएस में एक पृष्ठभूमि होने से मदद मिलती है! सबसे निश्चित रूप से। क्या यह LOB के लिए आवश्यक है -> वास्तव में नहीं।
डार्क नाइट

जवाबों:


25

हां और ना

अच्छा सवाल है, लेकिन बुरी धारणा है।

शिक्षा के विज्ञान भाग में कमी प्रतीत होती है, लेकिन विज्ञान को कुशल बनाने के लिए वहां जो धारणा थी, वह धारणा मात्र है।

विज्ञान को लोगों को सिखाने और समस्याओं को हल करने के लिए आवश्यक था

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

निराशाजनक; कई जावा स्कूल के स्नातकों को छोटा कर दिया गया था, कभी नहीं सिखाया गया कि किसी समस्या का समाधान कैसे किया जाए, एक एल्गोरिथ्म डिज़ाइन किया जाए, एक परीक्षण निर्दिष्ट करें या यहां तक ​​कि प्रभावी रूप से डिबग करें।


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

@Veaviticus: यह भाग्यशाली छात्रों के लिए होगा। मेरे विश्वविद्यालय में, प्रोफेसरों के पास अमूर्तता का एक स्किज़ोफ्रेनिक स्तर है और उनकी परीक्षा का विचार "औपचारिक परीक्षाओं का पाठ" है।
डेडएमजी

भाषा का किसी समस्या के विघटन के उपदेशों से कोई लेना-देना नहीं है। एक समस्या एक समस्या है चाहे वह C, Java, या रूबी हो।
रिग

29

क्या कंप्यूटर विज्ञान का विज्ञान मर चुका है? "..." मैं हाल ही में कंप्यूटर विज्ञान में बी एस के साथ स्नातक हूँ। मैं आईटी विभाग में एक सभ्य आकार की कंपनी में एक शुरुआती स्थिति में काम कर रहा हूं ।

ईमानदारी से कहूं तो मेरे अपने दो सेंट: आपको आईटी विभाग में एक सभ्य आकार की कंपनी में काम करने वाले कंप्यूटर विज्ञान के "विज्ञान" नहीं मिलेंगे, क्योंकि यह आईटी विभाग है, सीएस विभाग नहीं। पीएचडी के लिए वापस स्कूल जाने की कोशिश करें, या किसी कंपनी के इंजीनियरिंग विभागों में काम करें, जिसका फोकस कंप्यूटर साइंस हो (जैसे, इमेज-प्रोसेसिंग, हाई-परफॉर्मेंस नेटवर्क, कंप्यूटर अलजेब्रा सिस्टम, एयरोस्पेस, आदि ...)। यह वह जगह है जहां आपको कठिन, दिलचस्प समस्याएं मिलेंगी जहां मैला डिजाइन [आमतौर पर] बर्दाश्त नहीं किया जाएगा।

"क्या अभी भी ऐसे लोग हैं जो केवल तनख्वाह के बजाय सीएस के विज्ञान और कला से प्यार करते हैं?"

हां, बिल्कुल, लेकिन शायद मध्यम आकार की कंपनियों के आईटी विभागों में नहीं।


16

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

यह आईएमओ है, जहां व्यापार सिद्धांत से मिलता है। इस प्रकार के मामलों में, पुरानी कहावत "बेहतर का दुश्मन काफी अच्छा है" को आसानी से पढ़ने के लिए चारों ओर घुमाया जा सकता है "अच्छा पर्याप्त का दुश्मन बेहतर है"। अपने आप को एक "वैज्ञानिक" के बजाय "इंजीनियर" मानना ​​और जो आप अन्य इंजीनियरिंग विषयों के साथ समानांतर में करते हैं, वह मतभेदों को राहत देता है।

मान लीजिए कि एक ग्राहक आपके पास आता है, एक सिविल / स्ट्रक्चरल इंजीनियर, और आपको एक पुल बनाने के लिए कहता है। पुल को 20 फीट तक फैलने की जरूरत है, खुद को और एक टन कैरी लोड का समर्थन करना चाहिए, यह नियमित रखरखाव के साथ 10 साल तक चलना चाहिए, और वे इसे $ 20,000 के लिए एक महीने में चाहते हैं। वे तुम्हारी अड़चन हैं; अधिकतम से अधिक न होते हुए भी न्यूनतम से मिलें। ऐसा करना "काफी अच्छा" है, और आपको तनख्वाह मिलती है। यह गोल्डन गेट ब्रिज का निर्माण करने के लिए आपके लिए खराब इंजीनियरिंग होगी, जो परिमाण के कई आदेशों द्वारा डिज़ाइन स्पेक्स और बजट दोनों को पार कर जाएगा। आप आमतौर पर लागत overruns खाने और समय overages के लिए दंड का भुगतान। यह आपके लिए खराब इंजीनियरिंग भी होगा कि 5 बड़े पुरुषों के वजन के लिए रोप ब्रिज का निर्माण किया जाए, भले ही इसकी लागत समय और सामग्री में केवल 1000 डॉलर हो; आपको अच्छी ग्राहक समीक्षा और प्रशंसापत्र नहीं मिलते हैं,

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

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

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

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

इसलिए, आधुनिक प्लेटफ़ॉर्म की कई विशेषताएं और आधुनिक डिज़ाइन के तरीकों के सिद्धांतों को ध्यान में रखते हुए बनाया गया है:

  • OOP - किसी ऑब्जेक्ट में संबंधित डेटा और लॉजिक का निर्माण, और जहाँ भी उस ऑब्जेक्ट का कॉन्सेप्ट मान्य है, तो वह ऑब्जेक्ट है, या एक अधिक महत्वपूर्ण व्युत्पत्ति है।
  • पूर्व-निर्मित टेम्प्लेट - एक अच्छा 60% या अधिक कोड वाक्य-निर्माण संबंधी क्रॉफ़्ट है और कुछ स्क्रीन को दिखाने के लिए प्रोग्राम प्राप्त करने की मूल बातें। इस कोड को मानकीकृत और ऑटो-जेनरेट करके, आप उत्पादकता में वृद्धि की अनुमति देते हुए डेवलपर के कार्यभार को आधा कर देते हैं।
  • एल्गोरिदम और डेटा संरचनाओं के पुस्तकालय - ऊपर के रूप में, आप जानते होंगे कि कैसे एक स्टैक, क्यू, क्विकसॉर्ट, आदि लिखना है, लेकिन आपको क्यों करना है, जब कोड का एक पुस्तकालय होता है जिसमें यह सब बनाया गया है? आप IIS या Apache को फिर से नहीं लिखेंगे क्योंकि आपको एक वेबसाइट की आवश्यकता है, इसलिए कई शानदार कार्यान्वयन उपलब्ध होने पर क्विकॉर्ट एल्गोरिथ्म या लाल-काले पेड़ की वस्तु क्यों लागू करें?
  • धाराप्रवाह इंटरफेस - समान लाइनों के साथ, आपके पास एक एल्गोरिथ्म हो सकता है जो रिकॉर्ड को फ़िल्टर और सॉर्ट करता है। यह तेज़ है, लेकिन यह बहुत पठनीय नहीं है; यह आपके जूनियर डेवलपर को इसे समझने में एक दिन लगेगा, अकेले ही रिकॉर्ड ऑब्जेक्ट में एक अतिरिक्त फ़ील्ड पर सॉर्ट करने के लिए आवश्यक सर्जिकल परिवर्तन करने दें। इसके बजाय, लाइनेक जैसी लाइब्रेरी बहुत बदसूरत की जगह लेती हैं, अक्सर फ़िल्टर या सॉर्ट किए गए ऑब्जेक्ट्स में ऑब्जेक्ट्स की एक सूची को चालू करने के लिए कॉन्फ़िगर करने योग्य विधि कॉल की एक या दो पंक्तियों के साथ भंगुर कोड।

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

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

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

8

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

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

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


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

1
@ पिलमंचर, हां मैं सहमत हूं, मेरे लिए, एक सुंदर कोड सरल (लेकिन सरल नहीं है) लेकिन दुर्भाग्य से वह आधार एक व्यक्तिपरक / रिश्तेदार है। "सरल डिजाइन सुंदर डिजाइन के बराबर है" एक जोर नहीं है, लेकिन एक राय (एक बहुत लोकप्रिय राय है कि मैं 100% सहमत हूं, लेकिन अभी भी एक राय है)। एक राय नहीं है, अनुसूची, आवश्यकताओं और लागत है। उन बाधाओं को दिए गए अवरोधों के लिए एक अच्छा-पर्याप्त-डिज़ाइन का नेतृत्व करना होगा।
आर्मंडो

"[1] आईटी मुझे लगता है कि आप आईटी कर रहे हैं और सीएस नहीं है और इसका मतलब यह नहीं है कि सीएस मर चुका है। [२] सीएस मरा नहीं है, बस इतना है कि ज्यादातर नौकरियां सॉफ्टवेयर डेवलपमेंट में हैं।" आपका पहला कथन सही है - ओपी आईटी में है और सीएस नहीं। मैं आपके दूसरे बयान के साथ समस्या लेता हूं, हालांकि, कई तथाकथित "कंप्यूटर वैज्ञानिक" भी सॉफ्टवेयर देव करते हैं। इसे "अनुसंधान और विकास" कहा जाता है, और एक उदाहरण कंप्यूटर वैज्ञानिकों का हो सकता है, जो निश्चित नेटवर्किंग टोपोलॉजी पर एक रूटिंग एल्गोरिदम को परिभाषित करने, हल करने, और साबित करने, फिर "आधिकारिक" या प्रोटोटाइप कार्यान्वयन
बिल वीबी

8

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

नहीं, आप जो वर्णन कर रहे हैं, वह यह है कि सॉफ्टवेयर विकास के लिए कम गहराई से ज्ञान आवश्यक है। यह सच हो सकता है, अगर आवश्यकताएं समान होंगी। लेकिन आजकल, सॉफ्टवेयर इंजीनियर से यह जानने की अपेक्षा की जाती है कि मल्टी-थ्रेडिंग, वितरित कंप्यूटिंग, स्केलिंग आदि से कैसे निपटा जाए। इसमें से अधिकांश कुछ दशक पहले पाठ्यक्रम में नहीं था।


यह अभी भी नहीं है, मैं यहाँ क्या पढ़ रहा हूँ। कई स्कूल इंजीनियरिंग नहीं सिखाते, वे भाषा सिखाते हैं। एक सिविल इंजीनियरिंग छात्र को केवल ऑटोकैड पढ़ाने के लिए यह समान है।
माइकल के

@ माइकल: किसी भी सभ्य विश्वविद्यालय को ऐसा करते नहीं देखा ।
vartec

1
मैं RIT जाता हूं। यह उच्च रैंक पर है, और अभी भी बल्कि भद्दा है। कोई भी स्कूल सही तरीके से प्रोग्रामिंग नहीं सिखाता है, क्योंकि यह केवल अन्य शोध के संदर्भ में केवल चार या पांच वर्षों में नहीं किया जा सकता है
जॉन पूर्डी

4

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

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

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

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

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

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


1

सॉफ्टवेयर विकास और कंप्यूटर विज्ञान एक ही बात नहीं है, और मैंने पाया कि मेरे अधिकांश सहपाठी बी.एससी। कंप विज्ञान कार्यक्रम इससे निराश थे।

मैं सॉफ्टवेयर को कंप्यूटर विज्ञान के उत्पाद के रूप में सोचता हूं ... जैसे पेंटिंग दृश्य कला का एक उत्पाद है।

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

मुझे लगता है कि जब नई समस्याएं या प्रतिमान दिखाई देते हैं या जब "इसे एक साथ थप्पड़ मारना होता है" तो यह अंतर दिखाई देने लगता है। नए ढांचे या भाषाओं का निर्माण कौन करता है? कौन बैठता है और एक नए भौतिकी इंजन के विवरण को समाप्त करता है? एक एल्गोरिथ्म से प्रदर्शन के पुनरावृत्ति प्रति कुछ चक्रों को बाहर निकालने के लिए ग्राफ सिद्धांत / ग्राफ परिवर्तनों का उपयोग कौन करता है?

मैं समाप्त करूँगा जहाँ मैंने शुरू किया था, यह मानते हुए कि सॉफ्टवेयर विकास / इंजीनियरिंग भूमिकाओं में बहुत सारे कंप्यूटर वैज्ञानिक हैं, शायद अपनी क्षमता तक नहीं रह रहे हैं।


1

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


0

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

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

यह कर्मचारी के साथ एक समस्या की तरह लगता है और निश्चित रूप से हर प्रोग्रामर के लिए सच नहीं है।

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


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

0

आपने अभी समस्या को हाथ से नहीं समझा है। समस्या को अधिकतम प्रदर्शन नहीं मिल रहा है- यह आपके ऐप के लिए पर्याप्त प्रदर्शन करने के लिए उत्तरदायी और तेज़ पर्याप्त है। कार्यक्रम को सीखना सबसे छोटी राशि के लिए, समस्या को हल करने के बारे में है।

मैं इसे इस तरह से वाक्यांश से नफरत करता हूं, लेकिन सीएस की मृत्यु के बारे में आप जिस किसी भी धारणा के तहत हैं, वह सिर्फ एक "वास्तविक" प्रोग्रामर की अपनी पूर्व अवधारणाएं हैं।


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

@ वीवीटिकस: एक फ्रेमवर्क का उपयोग करना ग्राउंड-ब्रेकिंग एकेडमिक सिद्धांत नहीं हो सकता है, लेकिन यह निश्चित रूप से अभी भी सीएस है।
डेडएमजी

0

खैर, मृत या नहीं बहस करने योग्य है!

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

तनाव कम समय में अधिक उत्पादन पर है। (फसलों / भोजन के व्यावसायीकरण पर विचार करें; कम लागत के साथ तेजी से और अधिक विकास)। टेक वर्ल्ड (अगले नए विचार) में भी यही हो रहा है।

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

लालित्य और दक्षता Google जैसी तकनीकी कंपनियों के लिए मायने रखती है, जबकि वे स्थान भी सही नहीं हैं, लेकिन आप आने वाले वर्षों में उन कंपनियों में से एक पर काम करके इसके करीब आ सकते हैं।

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


0

मेरे दिमाग में कुछ सबसे दिलचस्प चीजें जो भविष्य में हो सकती हैं, वह निश्चित रूप से कंप्यूटर विज्ञान के विज्ञान के भाग पर आधारित होंगी, विशेष रूप से बेहतर कंप्यूटर विज़न / मशीन लर्निंग और अन्य सेमैटाइजिंग एल्गोरिदम। इन्हें संभवत: उद्योग में आगे बढ़ाया जाएगा (उदाहरण के लिए Microsoft Kinect) लेकिन ऐसी बेहद कठिन समस्याएं हैं जो निश्चित रूप से शिक्षाविदों में किए गए अनुसंधान और प्रगति के बड़े शरीर पर आधारित होंगी (फिर से, Microsoft Kinect को लें)।


0

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

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

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