कंप्यूटर विज्ञान के सिद्धांत का एक सा क्या है जो मुझे पता होना चाहिए? [बन्द है]


27

कंप्यूटर विज्ञान की डिग्री के बजाय इलेक्ट्रॉनिक इंजीनियरिंग के साथ किसी के रूप में बोलते हुए, कंप्यूटर विज्ञान का एक सा क्या है जो मुझे एक बेहतर वास्तविक दुनिया प्रोग्रामर बनाने के लिए पता होना चाहिए ?

(वास्तविक दुनिया से मेरा मतलब है कि मैं एक प्रोग्रामर के रूप में अपने दिन-प्रतिदिन के काम से उपयोग करने और लाभ उठाने जा रहा हूं - उदाहरण के लिए, मैं समझ सकता हूं कि डेटाबेस सामान्यीकरण एक त्वरित प्रकार को समझने की तुलना में अधिक व्यावहारिक उपयोग का है, जिसके लिए बहुत सारे हैं पुस्तकालयों की)।


42
1 (क्षमा करें, मुझे करना था)
हेलेम् डे

5
ओह, या सबसे महत्वपूर्ण एक! (मैं अब जाऊँगा ...)
११

सैद्धांतिक कंप्यूटर विज्ञान स्टैकएक्सचेंज इस बात की पुष्टि करता है कि यहां हर किसी का क्या उल्लेख है: जटिलता, डेटा संरचनाएं और एल्गोरिदम। cstheory.stackexchange.com/tags
chrisaycock

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

1
यदि आपके पास पहले से ही आपका ईंग नहीं था, तो मैंने बूलियन लॉजिक और / या असतत संख्या सिद्धांत कहा होगा। अब तक लिखे गए लगभग हर कथन ifऔर loopकथन में अध्ययन के उन दो क्षेत्रों का सबसेट का उपयोग किया गया है।
स्टीवन एवर्स

जवाबों:


52

अगर मुझे सिर्फ एक बिट चुनना है, जो एक कठिन निर्णय है, तो मैं कहूंगा कि बिग ओ नोटेशन के लिए जाऊंगा । O (n), O (ln n), O (n,), O (2 ^ n), O (n!) के निहितार्थों को समझने से आपको बहुत सी महंगी गलतियों से बचने में मदद मिलती है, जिस तरह का काम अच्छा होता है! परीक्षण वातावरण लेकिन विनाशकारी उत्पादन में विफल।


2
+1 और मैं कहूंगा कि अधिक महत्वपूर्ण यह जानना कि O (n ^ 2) O (lg n) से भी बदतर है (उदाहरण के लिए) यह जानना कि कोड के दिए गए टुकड़े के लिए Big-O को कैसे प्राप्त किया जाए।
डीन हार्डिंग

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

मैग्नस: मेरे अनुभव में, अधिकांश गैर-प्रोग्रामिंग लोग जटिलता के बारे में बिल्कुल नहीं सोचते हैं, वे सहजता से सभी समस्याओं के लिए ओ (एन) मान लेते हैं।
user281377

मुझे अभी औपचारिक रूप से इसकी आवश्यकता है।
कैफीक्यू

1
चाड: बिग ओ-नोटेशन के बारे में कुछ भी नहीं है जो अत्यधिक औपचारिकता है, लेकिन चीजों के नाम के बिना, आप शायद ही उन चीजों के बारे में सोच सकते हैं, अकेले अपने साथियों के साथ इसके बारे में बात करें।
user281377

19

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


मुझे लगता है कि यह जानने में बहुत मदद करता है कि क्या आप एक ऐसी समस्या को हल कर रहे हैं जिसे सरल भाषा में आसानी से सुलझाया जा सकता है।
फिलोसोडैड

जटिलता एक अवधारणा के रूप में महत्वपूर्ण है, लेकिन वास्तव में इसकी गणना अक्सर नहीं होती है। कम जटिल क्या है यह समझना महत्वपूर्ण है।
बिल

@ बिल: बिल्कुल। लेकिन वह हिस्सा वह चीज है जिसे आप अभ्यास के माध्यम से प्राप्त नहीं करते हैं। उस हिस्से पर सिद्धांत बहुत मददगार है।
Mnementh

12

डेटा संरचनाओं, एल्गोरिदम और जटिलता के बारे में जानें।

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

प्रोग्रामिंग में विशेष डिजाइन समस्याओं को हल करने के लिए सामान्य दृष्टिकोणों पर भी एक नज़र डालें। डिजाइन पैटर्न अर्थात्। उनकी पूजा मत करो वे सिर्फ उन विचारों को लें जो वे संवाद करते हैं।

डेटाबेस मॉडलिंग का ज्ञान भी आवश्यक है।

उसके बाद यह सिर्फ अलग-अलग प्रोग्रामिंग लैंग्वेज, फ्रेमवर्क और लाइब्रेरी हैं जो आपको कोर कॉन्सेप्ट्स को लागू करने या लागू करने देती हैं। आपको जो पसंद है उसे उठाएं और उन लोगों के साथ अभ्यास करें।


विशेषण - बहुत सारे एल्गोरिदम और डेटा संरचनाएं हैं।
जॉन हॉपकिंस

चीजों का अंदाजा लगाने के लिए सिर्फ मूल बातें हैं। कुछ नहीं बहुत मोटी किताब उठाओ और इसके माध्यम से काम करते हैं।

1
यही काफ़ी अधिक से अधिक एक बिट।

7

यह थोड़ा मुश्किल सवाल है।

कंप्यूटर विज्ञान के सभी पहलू एक या दूसरे तरीके से महत्वपूर्ण हैं।

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

बिग ओ नोटेशन को समझना महत्वपूर्ण है, और यह भी समझना कि आपके कोड को कैसे निष्पादित किया जा सकता है, वास्तविक दुनिया की स्थितियों में भी बहुत महत्वपूर्ण है।


7

हाँ, इसने मुझे घंटों सोच में उलझा दिया।

इस प्रक्रिया में, मुझे पहले से यहाँ दिए गए कुछ सामान्य उत्तरों को हटाना पड़ा।

कोई सूची नहीं

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

  2. कार्यात्मक भाषाएं नहीं, भाषा का एक एकल परिवार समस्याओं के बारे में सोचने के लिए सिर्फ एक दृष्टिकोण है। केवल यह बिट क्यों मायने रखता है?

  3. समस्या को हल करना कुछ बहुत ही विशिष्ट हैं और लोगों को यह जानने के बिना जीवन जीना है कि वे अस्तित्व में थे।

  4. सुनो अगर तुम नहीं सुन रहे हो तो तुम अपनी खुद की दुनिया में रहते हो। जरूरी नहीं कि हानिकारक हो!

  5. सॉफ्टवेयर डेवलपमेंट साइकिल नाह! हम अभी भी कुछ अविश्वसनीय सॉफ़्टवेयर या एकल वीरतापूर्ण प्रयासों के लिए हमारे रास्ते को बंद कर सकते हैं।

  6. जटिलता सिद्धांत मुझे लगता है कि यह हो सकता है लेकिन सभी औपचारिकताओं के बिना

Comp विज्ञान से यह एक सा विचार है

मैं कहूंगा - " एब्स्ट्रक्शन एब्सट्रैक्ट्स एसेशंस ... "। इसके बारे में जानें। इसके आस-पास के उदाहरण देखें और जानें कि इसका उपयोग कैसे करें। यह हर जगह है। संपूर्ण कंप्यूटर विज्ञान, इंजीनियरिंग और अनुप्रयोग अमूर्तता की परतों पर परतों की तरह दिखते हैं।

एक बार जब आप यह जान लेते हैं, तो आप अच्छी तरह से देखना शुरू कर देते हैं।

आप उपयोग कर कुछ एक को देखने जब list insertionमें pythonऔर not append, आप मुस्कान क्योंकि आप जानते हैं कि अजगर सूचियों सरणी अमूर्त जहां सम्मिलन महंगा और संलग्न सस्ता है का उपयोग कर बनाया जाता है।

यह लेकिन एक उदाहरण है।


+1 के उत्तर के लिए आपने स्पष्ट रूप से बहुत सोचा है।
जॉन हॉपकिंस

हाल्टिंग प्रॉब्लम पर आपकी टिप्पणी पर सिर्फ एक टिप्पणी: "मौजूदा जीवन को जाने बिना जीवन जीना" किसी भी कंप्यूटर विज्ञान विषय के लिए सही है।


3

डेटा संरचनाओं के प्रतिस्पर्धी उपयोग के मामले।

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


3

केवल तीन संख्याएँ हैं जो मायने रखती हैं:

  • शून्य
  • एक
  • अनेक

लेकिन इसका मतलब यह नहीं है कि '3' भी मायने रखता है?
जेवियर

: यह शून्य, एक, और अनंत माना जाता है en.wikipedia.org/wiki/Zero_One_Infinity
थॉमस ओवेन्स

@ जेवियर: 3 कई का एक सबसेट है
स्टीवन ए। लोव

@ थोमस: कौन कहता है?
स्टीवन ए। लोव

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

3

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


क्या आप वास्तव में अस्थिरता से मतलब है?
अमरा

3

हाल्टिंग की समस्या

तथ्य यह है कि कंप्यूटर से संबंधित समस्याएं मौजूद हैं जो केवल एक कंप्यूटर द्वारा हल नहीं की जा सकती हैं।


3

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

औपचारिक भाषाओं के सबसे महत्वपूर्ण स्तर सबसे कमजोर से लेकर सबसे मजबूत हैं:

  1. ऐसी भाषाएँ जिन्हें परिमित ऑटोमेटा, या REGEX द्वारा पाला जा सकता है (बैकरेन्स के साथ REGEX कार्यान्वयन इस श्रेणी की तुलना में अधिक शक्तिशाली हैं, लेकिन वे अभी भी श्रेणी 2 में सब कुछ पार्स नहीं कर सकते हैं)

  2. स्टैक मेमोरी या एक संदर्भ-मुक्त व्याकरण के साथ एक ऑटोमेटा द्वारा पार्स की जा सकने वाली भाषाएं।

  3. ऐसी भाषाएँ जिन्हें ट्यूरिंग मशीन या यादृच्छिक पहुँच स्मृति के साथ एक ऑटोमेटा द्वारा पार्स किया जा सकता है।


उम नहीं। एक नियमित अभिव्यक्ति एक नियमित व्याकरण पार्स करती है। यह बिल्कुल व्याकरण की श्रेणी है जिसे एक परिमित राज्य ऑटोमेटा द्वारा स्वीकार किया जा सकता है। और एक 'चॉम्स्की ग्रामर' विशेष रूप से संदर्भ मुक्त व्याकरणों को संदर्भित नहीं करता है, जो कि स्टैक मशीनों की प्रक्रिया है।
फिलोसोडैड

@philosodad - संदर्भ मुक्त व्याकरण अधिक सटीक है, और मैंने पद का उपयोग करने के लिए पोस्ट अपडेट किया है। मैं आपके मुद्दों को समझ नहीं पाया कि मैंने नियमित अभिव्यक्तियों के बारे में क्या कहा।
दान मोनेगो

@ डान - मेरा मुद्दा यह है कि एक नियमित अभिव्यक्ति एक परिमित राज्य ऑटोमेटा के समान शक्तिशाली है, और यदि आप किसी मशीन के साथ किसी भी निर्धारक संदर्भ-मुक्त व्याकरण को पार्स कर सकते हैं, तो आप सभी निर्धारक संदर्भ-मुक्त व्याकरणों को पार्स कर सकते हैं।
फिलोसोडैड

या, अधिक सटीक होने के लिए: या तो आपको एक स्टैक की आवश्यकता होती है या आप नहीं करते हैं। यदि आपको किसी भाषा को पार्स करने के लिए एक स्टैक की आवश्यकता है, तो आपके पास भाषा को पार्स करने के लिए एक स्टैक होना चाहिए, और इसलिए, यदि किसी भाषा को इसे पार्स करने के लिए स्टैक की आवश्यकता होती है, तो आप उस भाषा को पार्स कर सकते हैं।
फिलोसोडैड

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

2

खैर, मैं आपको एक सुस्त जवाब दे सकता हूं: ऑटोमेटा सिद्धांत, और सूचना सिद्धांत।

या मैं आपको बता सकता हूं कि मैंने बहुत समय पहले हार्डवेयर सलाहकार से क्या सीखा था:

  • "अच्छा पर्याप्त" पर्याप्त अच्छा नहीं है।

1

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


2
मर्फी का नियम: जो कुछ भी गलत हो सकता है, वह गलत होगा
रिचर्ड

यह सीएस सिद्धांत नहीं है, लेकिन यह एक उत्कृष्ट उत्तर है।
justkt

1

प्रोग्रामिंग

गणित और कंप्यूटर विज्ञान के विभाग से होबार्ट और विलियम स्मिथ कॉलेजों में कंप्यूटर साइंस 124 प्रोग्रामिंग का परिचय आता है :

विषयों में नियंत्रण संरचनाएं, वस्तुएं, कक्षाएं, विरासत, सरल डेटा संरचनाएं और सॉफ्टवेयर विकास की बुनियादी अवधारणाएं शामिल हैं।

यदि आप प्रोग्राम नहीं कर सकते हैं, तो आप वास्तविक विश्व कंप्यूटिंग में बहुत दूर नहीं जा रहे हैं।

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

क्या प्रोग्रामिंग कंप्यूटर साइंस जैसा कि हम जानते हैं?

@ थोमस ओवेन्स की टिप्पणी के जवाब में, जिन्होंने बताया (काफी सही ढंग से) कि प्रोग्रामिंग कड़ाई से कंप्यूटर विज्ञान नहीं है, मैं विकिपीडिया के कंप्यूटर विज्ञान लेख से उद्धृत करना चाहूंगा :

... कंप्यूटर विज्ञान का ध्यान गेम और वेब-ब्राउज़र जैसे सॉफ़्टवेयर को लागू करने के लिए उपयोग किए जाने वाले कार्यक्रमों के गुणों को समझने और उस समझ का उपयोग करके नए प्रोग्राम बनाने या मौजूदा लोगों को बेहतर बनाने पर है ...

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


प्रोग्रामिंग सीएस सिद्धांत नहीं है। वास्तव में, मैं आसानी से तर्क दे सकता हूं कि प्रोग्रामिंग कंप्यूटर विज्ञान बिल्कुल नहीं है।
थॉमस ओवेन्स

@ थोमस ओवेन्स मैंने अपना दावा अपडेट करने के लिए अपना उत्तर अपडेट कर दिया है कि यह मान्य है। क्या आप इसकी समीक्षा कर सकते हैं और मुझे अपने विचार बता सकते हैं?
गैरी रोवे

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

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

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

1

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

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

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


3
यह उत्तर सीएस सिद्धांत के साथ सौदा नहीं करता है, जो हॉपकिंस के बारे में पूछा गया है।
17

1

कार्यात्मक भाषाएँ!

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

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


0

कंप्यूटर अनिवार्य रूप से पैटर्न मैचर्स हैं, इससे ज्यादा कुछ नहीं। ट्यूरिंग मशीन के बारे में सब कुछ उबलता है - पैटर्न मचिंग की व्याख्या करने वाला क्लासिक कंप्यूटर साइंसकॉन्सेप्ट।


-2

समस्या को सुलझाने और सीखने को जारी रखने की इच्छा!

वे त्वरित सॉर्ट और डेटाबेस सामान्यीकरण की तुलना में मुझे बेहतर सेवा देते हैं।


6
यह कंप्यूटर विज्ञान सिद्धांत नहीं है, वे इलेक्ट्रॉनिक (या बहुत ज्यादा किसी अन्य रूप) इंजीनियरिंग के लिए समान रूप से लागू होते हैं।
जॉन हॉपकिंस

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

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