मैं कंप्यूटर विज्ञान का पूरी तरह से स्व-अध्ययन कैसे कर सकता हूं? [बन्द है]


46

पूरी तरह से स्वयं सिखाया प्रोग्रामर होने के नाते, मुझे यह पसंद आएगा अगर मैं एक सामान्य सीएस ग्रेड में पढ़ाए गए कंप्यूटर विज्ञान पाठ्यक्रम को आत्म-अध्ययन करके खुद को बेहतर बना सकता हूं।

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

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

विकिपीडिया के साथ समस्या यह है कि आप यह नहीं बता सकते हैं कि क्या आवश्यक है लेकिन एक संपूर्ण संदर्भ होने पर जोर देता है।

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

मुझे क्या पसंद आएगा एक सूची बनाना है जिसका मैं अनुसरण कर सकता हूं, जैसे कि यह डमी

SUBJECTS                                                        DONE

Introduction to Computer Science                                  *
Introduction to Algorithms                                        *
Discrete Mathematics                   
Adv. Discrete Mathematics
Data structures                                                   *
Adv. Algorithms
...

जैसा कि आप स्पष्ट रूप से देख सकते हैं, मुझे इस बात का बहुत कम पता है कि कंप्यूटर विज्ञान में कौन से विशिष्ट विषय हैं।

यह बहुत मददगार होगा, भले ही किसी ने एमआईटी कोर्स वेयर (+ आवश्यक विषय एमआईटी ओसीडब्ल्यू में मौजूद नहीं) से आवश्यक पाठ्यक्रमों को अध्ययन के अनुशंसित क्रम में इंगित किया हो।

मैं उन पोस्टों की सूची दूंगा जिन्हें मैं पहले ही देख चुका था (और मुझे वह नहीं मिला जो मैं वहां खोज रहा था)

https://softwareengineering.stackexchange.com/questions/49557/computer-science-curriculum-for-non-cs-major - शीर्ष उत्तर कहता है कि यह cse का अध्ययन करने लायक नहीं है।

https://softwareengineering.stackexchange.com/questions/110345/how-can-a-self-taught-programmer-learn-more-about-computer-science - MIT OCW को इंगित करता है

https://softwareengineering.stackexchange.com/questions/49167/studying-computer-science-what-am-i-getting-myself-into

https://softwareengineering.stackexchange.com/questions/19912/overview-of-computer-science-programming


पूरी तरह से? सभी मज़ेदार सैद्धांतिक सामान भी?

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

2
ध्यान दें कि पाठ्यक्रम में "द्वीप" के कुछ प्रकार हैं जहां चीजें एक साथ लटकी हुई हैं। आप उदाहरण के लिए ग्राफ सिद्धांत में लैम्ब्डा कैलकुलस की शायद ही कभी आवश्यकता होती है। यह भी विचार करें कि आसपास के संरक्षक होना अच्छा हो सकता है - क्या आप एक उपयुक्त शैक्षणिक संस्थान के करीब रहते हैं?

तथ्य की बात के रूप में, और मैं प्रोफेसरों के साथ दोस्ताना हूं, लेकिन मैं उन्हें हर समय बग नहीं कर सकता। मैंने पहले स्थान पर बहुत सारे खंडित ज्ञान में योगदान दिया है।
ऑप्टिमस

3
उस मामले में आप एक चयनित पाठ्यक्रम या दो लेने में सक्षम हो सकते हैं - जो आपको हर समय प्रोफेसर को बग करने की अनुमति देता है।

जवाबों:


24

मैंने एमआईटी से कुछ पाठ्यक्रम सामग्री देखी है, और यह बहुत बुरा था । उनके पास शिक्षण सामग्री थी, जिसमें VC5 की आवश्यकता थी, निहित वैश्विक वैरिएबल के गुच्छे, रंगों को 32bit ARGB के बजाय "ब्लू" के रूप में, अकेले 4x [0,1] तैरते हुए, उस तरह की चीज। मुझे किसी पाठ्यक्रम या कोड पर भरोसा नहीं होगा क्योंकि यह एक बड़े नाम वाले विश्वविद्यालय से आता है।

मेरी सीएस डिग्री (एक विश्वविद्यालय से जो सीएस के लिए यूके में शीर्ष 10 में है) में शामिल है:

पहला साल:

  1. OOP- सुपर बेसिक्स
  2. कंप्यूटर सिस्टम- सामान जैसे, बाइनरी पूर्णांक अभ्यावेदन।
  3. बुनियादी संबंधपरक डेटाबेस सिद्धांत
  4. सीएस के लिए गणित- सरल 2 डी और 3 डी ज्यामिति।
  5. थोड़ा सा HTML / JS- पूर्ण शुरुआत का सामान
  6. PHP का एक समान रूप से छोटा सा।
  7. कार्यात्मक प्रोग्रामिंग की एक बालक

द्वितीय वर्ष:

  1. कंप्यूटिंग में कानूनी मुद्दे- जैसे सामान, उपयोगकर्ता डेटा के संरक्षण के आसपास घूमने वाले कानून
  2. प्रोग्रामिंग भाषाओं- चॉम्स्की पदानुक्रम और लेक्सिंग को कवर किया गया था
  3. ऑपरेटिंग सिस्टम, नेटवर्क और इंटरनेट- ज्यादातर वर्चुअल मेमोरी और पेजिंग, आईपी स्टैक जैसे सामान
  4. 2 डी कंप्यूटर ग्राफिक्स- ज्यादातर सिर्फ अंतर्निहित गणित के प्रमेयों को साबित करते हैं
  5. तंत्रिका नेटवर्क, बायेसियन विश्वास प्रणाली, आदि का मूल विवरण
  6. आवश्यकताएँ विश्लेषण- UML का संक्षिप्त अवलोकन, कार्यात्मक / गैर-संवैधानिक आवश्यकताएं।
  7. टीम परियोजना

तीसरा वर्ष:

  1. एल्गोरिथम विश्लेषण- जटिलता सिद्धांत, ज्यादातर
  2. प्रोग्रामिंग भाषाओं का कार्यान्वयन- एलएल / एलआर पार्सिंग तकनीक, सीएफजी और ऐसी चीजें।
  3. सॉफ्टवेयर प्रोजेक्ट मैनेजमेंट- वाटरफॉल / एजाइल मॉडल पर एक नजर
  4. अंतर्राष्ट्रीय कम्प्यूटिंग- यूनिकोड और अन्य स्थानीयकरण मज़ा
  5. उन्नत AI- पता नहीं, ईमानदारी से, और मुझे जल्द ही इस पर एक परीक्षा मिली है
  6. 3 डी कंप्यूटर ग्राफिक्स- ज्यादातर, फिर से, केवल रोटेशन मैट्रिसेस और ऐसे के लिए प्रमेय साबित करना
  7. एजेंट-आधारित सिस्टम- ज्यादातर अतुल्यकालिक एजेंटों के बारे में संवाद करना, समूह के निर्णयों तक पहुंचना, आदि।
  8. माइक्रोप्रोसेसर अनुप्रयोग- डिजिटल सिग्नल प्रोसेसिंग
  9. रोबोटिक्स- उच्च स्तर पर कंप्यूटर विज़न और रोबोट निर्णय लेने जैसे सामान को कवर करता है

जैसा कि आप देखेंगे, बहुत कुछ सब कुछ की "मूल बातें" है और लगभग कुछ भी नहीं एक उपयोगी गहराई तक कवर किया गया है।

सामान जो वास्तव में करने लायक था, आवश्यक:

  1. OOP- और फिर कुछ और, और फिर कुछ और
  2. कार्यात्मक प्रोग्रामिंग- कुछ और भी। C ++ या C # जैसी भाषा चुनने की कोशिश करें, जहां आपको दोनों शैलियों को कवर करने के लिए सिंटैक्स और टूल्स आदि को फिर से सीखना न पड़े।
  3. OS भाग- वर्चुअल मेमोरी के बारे में जानने के लिए अच्छा है, जैसा कि कर्नेल मोड बनाम उपयोगकर्ता मोड। विभाजन और IP स्टैक को छोड़ दें।
  4. आवश्यकताएँ विश्लेषण- किसी भी परियोजना के लिए उपयोगी होगा
  5. एल्गोरिदम विश्लेषण- यह जानना कि एल्गोरिथम की जटिलता क्या है, इसे कैसे कम किया जाए, और जटिलता क्या आम ऑपरेशन है।
  6. सॉफ्टवेयर परियोजना प्रबंधन मॉडल- कई दुकानें फुर्तीली हैं और कई पुराने अभी भी वाटरफॉल शैली के मॉडल हैं।
  7. अंतर्राष्ट्रीय कंप्यूटिंग- यूनिकोड आवश्यक है

सामान जो करने योग्य था, वैकल्पिक रूप से:

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

सामान है कि आवश्यक है, लेकिन मैं इसे कवर नहीं किया वैसे भी:

  1. कंज्यूरेबिलिटी- 2012 में किसी के लिए भी कम से कम बेसिक्स जानना जरूरी है।

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


3
@ ThorbjørnRavnAndersen: सिद्धांत कोड लिखने का एक उपकरण है, इससे अधिक कुछ नहीं। एक सिद्धांत के लायक कुछ भी नहीं है अगर आप बेहतर कोड बनाने के लिए इसका उपयोग नहीं कर सकते हैं।
डेडएमजी

3
@ ऑप्टिमस: सभी सिद्धांत के विशाल बहुमत आपको बेहतर कोड बनाने में मदद नहीं कर सकते।
डेडएमजी

3
थ्योरी यह जानने का आधार है कि किस कोड को लिखा जा सकता है, और क्या नहीं।

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

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

5

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


मैं इसे देख रहा हूं, लेकिन मुझे उनकी आवश्यकताएं बहुत अच्छी लगीं। और पाठ्यक्रमों की लंबी सूची कहां है?
ऑप्टिमस

1
web.mit.edu/catalog/degre.engin.ch6.html बड़ी सूची है। CS को 6.3
स्टोनमेनल

धन्यवाद, यह भी मददगार होगा, यह जानना अच्छा है कि कौन से पाठ्यक्रम बड़े यूनीवर्स अनुसरण कर रहे हैं
ऑप्टिमस

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

@TikhonJelvis यह जानना आसान है कि आप क्या सीखना चाहते हैं और आप क्या नहीं करना चाहते हैं, एक बार आपको इस बात का अंदाजा हो जाएगा कि क्षेत्र का दायरा क्या है और किस दायरे को कम से कम कवर किया जाना चाहिए। मैं, एक सिविल इंजीनियरिंग ग्रैड होने के नाते, कंप्यूटर विज्ञान और इंजीनियरिंग में आगे बढ़ने के बारे में बहुत कम जानकारी रखता हूं। फ़ील्ड
ऑप्टिमस

5

ACM / IEEE से 2001 कंप्यूटर विज्ञान पाठ्यक्रम की सिफारिशों की कोशिश करें, यहाँ से जुड़े: http://www.acm.org/education/curricula-commendations

2008 सीएस अपडेट के साथ।

2001 की रिपोर्ट के पृष्ठ 17 में एक आसान चार्ट है जो सभी "मूल" ज्ञान को रेखांकित करता है और अभी भी ऐच्छिक को सूचीबद्ध करता है।

एक स्नातक कार्यक्रम में इन सिफारिशों द्वारा कोर माने जाने वाले पाठ्यक्रमों को भी कवर करने का समय नहीं होगा, इसलिए वे कुछ श्रेणियों को एक साथ जोड़ देंगे और छात्रों को उनके बीच चयन करने देंगे (जैसे, ऑपरेटिंग सिस्टम, प्रोग्रामिंग लैंग्वेज और सॉफ्टवेयर इंजीनियरिंग। सॉफ्टवेयर, और छात्र एक ट्रैक चुनते हैं)।

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


अच्छा है, थोड़ा पुराना है, लेकिन फिर भी एक सामान्य पाठ्यक्रम में चयन करने के लिए बहुत सारे विषयों को मुख्य माना जाता है, यहाँ अध्ययन का एक व्यापक विकल्प उपलब्ध होना अच्छा है यदि आप उन चीजों से बाहर निकलते हैं जिन्हें आपने कतारबद्ध किया है। +1।
ऑप्टिमस

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

-4

यदि मैं कर सकता हूं, तो मैं आपके सीखने की प्रक्रिया के हिस्से के रूप में github.com से जुड़ने का सुझाव देना चाहूंगा ।

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

और, ज़ाहिर है, आप git से परिचित होंगे, जो कि सभी बेहतर है।


5
-1: मूल्यवान होते हुए भी, वह उसे कंप्यूटर विज्ञान में सैद्धांतिक पहलुओं को उजागर नहीं करता है जिसे उसे जानना आवश्यक है।
केन ब्लूम

वहाँ किया गया है कि, हम भी एक व्यक्तिगत git रेपो है, Github के चारों ओर घूमना आपको एक बेहतर प्रोग्रामर बनाता है
ऑप्टिमस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.