प्रोग्रामर के लिए सैद्धांतिक कंप्यूटर विज्ञान स्व-अध्ययन संसाधन


14

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

आत्म-अध्ययन के माध्यम से अधिक सिद्धांत सीखने की इच्छा रखने वाले व्यक्ति को आप किन संसाधनों की सलाह देंगे? क्या सॉफ्टवेयर इंजीनियरों के लिए कोई सैद्धांतिक कंप्यूटर विज्ञान स्व-अध्ययन गाइड है?


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

4
क्या आपने कॉलेज / विश्वविद्यालय में डेटा संरचना, एल्गोरिदम, आदि जैसे सिद्धांत पाठ्यक्रम ले लिए हैं? यदि आपने आमतौर पर आवश्यक स्नातक सिद्धांत पाठ्यक्रमों को नहीं लिया है, तो उन पाठ्यक्रमों के लिए पाठ्यपुस्तकें एक अच्छी शुरुआत होगी। के बाद आप विकिपीडिया लेख पर एक नज़र हो सकता है, हमारे पुस्तकों की सूची और वीडियो की सूची , Coursera / Udacity / EDX पर ऑनलाइन पाठ्यक्रम / ... Coursera बहुत अच्छा सिद्धांत पाठ्यक्रम है।
केवह

आपने कॉलेज में क्या अध्ययन किया?
उमर शहाब

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

एक व्यापक / सुलभ इंट्रो रेफरी / सर्वेक्षण / क्रॉस सेक्शन के रूप में डिडनी द्वारा न्यू ट्यूरिंग ओम्निबस की कोशिश करें । पॉप विज्ञान की किताबें
vzn

जवाबों:


7

यह कुछ अलग क्षेत्रों के साथ एक विस्तृत क्षेत्र है।

मैं कंप्यूटर के बारे में सबसे बुनियादी विचारों में से कुछ के साथ शुरू करूँगा: होपक्रॉफ्ट और ओलमैन, "ऑटोमेटा थ्योरी, भाषा और अभिकलन का परिचय।"

कारण यह है कि मैं विशेष रूप से सबूत पर उनका जोर है की सिफारिश करेंगे। वे आपको सोचने के कठोर तरीके से मार्गदर्शन करते हैं। कार्यक्रम लिखने और वैज्ञानिक होने के बीच यही अंतर है।


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

फिर आप इसके माध्यम से बहुत तेज़ी से काम कर पाएंगे :)
केट एफ

इसकी एक अंतर नहीं बल्कि अंतर। CS कई अन्य सिद्धांतों आदि पर जोर देता है
vzn

मुझे नहीं लगता कि कठोरता की आवश्यकता वास्तव में प्रोग्रामिंग और गणित के बीच का अंतर है। प्रोग्रामिंग और प्रमेय सिद्ध करना बहुत ही संबंधित कार्य हैं (cf. Curry-Howard Isomorphism), और शायद ही किसी गैर-गणितीय कार्य में प्रोग्रामिंग की तुलना में अधिक कठोरता की आवश्यकता होती है। कम्पाइलर मनुष्यों की तुलना में त्रुटियों के बारे में बहुत कम क्षमा करते हैं जो प्रमाण पढ़ते हैं।
जान जोहान्सन

2
@JanJohannsen मैं काफी असहमत हूँ - उदाहरण के लिए, C. के लिए अपरिभाषित व्यवहार देखें
Kate F

9

प्रकार सिद्धांत के बारे में जानने के कई तरीके हैं। एक कामकाजी प्रोग्रामर के लिए, बी पियर्स द्वारा टाइप और प्रोग्रामिंग लैंग्वेज एक अच्छी शुरुआत है। आर। हार्पर द्वारा प्रोग्रामिंग भाषाओं के लिए व्यावहारिक नींव भी अच्छा हो सकता है। यदि आप ऑपरेशनल शब्दार्थों पर पृष्ठभूमि को पढ़ना थोड़ा आसान चाहते हैं, तो मैं जी। विन्सेनेल की सलाह देता हूं, द फॉर्मल सेमेंटिक्स ऑफ प्रोग्रामिंग लैंग्वेजेस: एन इंट्रोडक्शन । टी। निपको, जी। क्लेन के साथ, ठोस शब्दार्थ, इसाबेल / HOL इंटरैक्टिव प्रूफ सहायक के लिए विंसेल की पुस्तक के एक संस्करण को औपचारिक रूप दिया गया है। मुझे संदेह है कि यह (या किसी भी) पुस्तक से एक कहावत के साथ पकड़ना वास्तव में मुश्किल है, आप प्रश्न पूछने के लिए पास के विशेषज्ञ चाहते हैं। यदि आप टाइप-थ्योरी के लिए अधिक गणितीय दृष्टिकोण चाहते हैं, तो आप JR Hindley, JP Seldin, Lambda- पथरी और युग्मकों को देख सकते हैं : एक परिचय , या H. Barendregt's, प्रकार के साथ लैम्ब्डा कैल्कुली । हालांकि मैं Barendregt से शुरू करने की सलाह नहीं दूंगा।

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


2

मैं मार्टिन डेविस, रॉन सिगल और ऐलेन वीयुकर द्वारा कम्प्यूटेबिलिटी, जटिलता और भाषाएं सुझाता हूं।


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

1

मैं थ्योरी और एल्गोरिदम का बहुत बड़ा प्रशंसक हूं। मुझे एक बार भारतीय प्रौद्योगिकी संस्थान, मद्रास (IIT-M), भारत में सैद्धांतिक कंप्यूटर विज्ञान की यात्रा करने का अवसर मिला। मुझे आईआईटी-एम में वहां के बहुत से सिद्धांतकारों के बारे में जानकारी मिली है। जब मैं वहां गया तो मुझे इस बात का कोई अंदाजा नहीं था कि थ्योरी क्या है, लेकिन आज मुझे इससे पूरा प्यार है।

सूचक के लिए @ केट एफ के लिए धन्यवाद, हां हॉपक्रॉफ्ट और उल्मन शुरू करने के लिए एक उत्कृष्ट स्थान है।

हालांकि यहाँ है कि मैं कैसे शुरू किया है,

  1. कॉर्मेन द्वारा एल्गोरिदम का परिचय पढ़ें। <\ br> यह शुरू करने के लिए एक उत्कृष्ट स्थान है। जब आप अध्ययन करते हैं तो प्रत्येक प्रमाण को यथासंभव लंबाई में समझने की कोशिश करते हैं। यदि आप प्रमाण को अच्छी तरह से समझते हैं, तो अपनी पसंद की किसी भी भाषा में उसी तर्क को कोड करने का प्रयास करें। (इसमें थोड़ा अधिक समय लगता है, लेकिन यह एक कोशिश के लायक है)

  2. जैसे सिद्धांत में शीर्ष सम्मेलनों का पालन करें
    FOCS
    सोडा
    STOC
    एल्गोरिथम गेम थ्योरी - चुनाव आयोग (इलेक्ट्रॉनिक कॉमर्स)
    बछेड़ा (लर्निंग थ्योरी पर सम्मेलन) - लर्निंग थ्योरी
    क्रिप्टो - क्रिप्टोग्राफी
    कम्प्यूटेशनल ज्यामिति - SOCG (कम्प्यूटेशनल ज्यामिति पर संगोष्ठी)
    (सम्मेलन पर सीसीसी कम्प्यूटेशनल जटिलता) - जटिलता सिद्धांत

भले ही आपको पढ़ने की ज्यादा समझ न हो और जितना संभव हो सके सोचो । आपको जितना संभव हो सके उतने प्रमाण करने होंगे ।।

  1. यह देखने के लिए एक आश्चर्य की जगह है कि क्या आप विशेष रूप से कम्प्यूटेशनल जटिलता के बारे में सोच रहे हैं ( यह स्टैनफोर्ड से है )।
  2. प्रो। संजीव अरोड़ा, बोअज़ बराक, जेलानी नेल्सन, मधु सूदन का अनुसरण करें
  3. यहाँ कम्प्यूटेशनल जटिलता के क्षेत्र में संश्लेषित जानकारी का एक सेट है
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.