मैं सी। नहीं जानता और मुझे इसे क्यों सीखना चाहिए? [बन्द है]


58

मेरी पहली प्रोग्रामिंग लैंग्वेज PHP ( gasp ) थी। उसके बाद मैंने जावास्क्रिप्ट के साथ काम करना शुरू किया। मैंने हाल ही में C # में काम किया है।

मैंने कभी सी की तरह निम्न या मध्य स्तर की भाषाओं को नहीं देखा है।

प्रोग्रामिंग-कम्युनिटी-एट-लार्ज में आम सहमति यह है कि "एक प्रोग्रामर जिसने सी, खुलकर कुछ सीखा नहीं है, बस प्रोग्रामिंग अवधारणाओं जैसे पॉइंटर्स, डेटा प्रकार, संदर्भ द्वारा मानों को पास करना, आदि को संभाल नहीं सकता है।"

मैं इससे सहमत नहीं हूँ। मेरा तर्क है कि:

  1. क्योंकि उच्च स्तर की भाषाएं आसानी से सुलभ हैं, अधिक "गैर-प्रोग्रामर" गोता लगाते हैं और गड़बड़ करते हैं
  2. उच्च स्तर की भाषा में वास्तव में कुछ भी करने के लिए, एक ही समान अवधारणाओं को समझने की आवश्यकता है जो "सीखने-कम-स्तर-पहले" के अधिकांश प्रस्तावकों के बारे में प्रचार करते हैं।

कुछ लोगों को सी जानने की जरूरत है; उन लोगों के पास नौकरियां हैं जिनके लिए उन्हें मध्य-स्तर के कोड में कम लिखने की आवश्यकता होती है। मुझे यकीन है कि सी कमाल है, और मुझे यकीन है कि कुछ बुरे प्रोग्रामर हैं जो सी जानते हैं।

पूर्वाग्रह क्यों? एक अच्छे, ईमानदार, भूखे प्रोग्रामर के रूप में, अगर मुझे C (कुछ अप्रत्याशित कारण के लिए) सीखना था, तो मैं सीखूँगा C. वहाँ की भाषाओं की भीड़ को ध्यान में रखते हुए, अच्छे प्रोग्रामर को सीखने पर ध्यान केंद्रित नहीं करना चाहिए जो हमें आगे बढ़ाता है? क्या हमें यह नहीं सीखना चाहिए कि हमारे हित क्या हैं? क्या हमें आगे बढ़ते हुए अपने परिमित समय का उपयोग नहीं करना चाहिए ? कुछ प्रोग्रामर इससे असहमत क्यों हैं?

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

क्या किसी के पास कोई वास्तविक दुनिया के उदाहरण हैं कि उच्च स्तरीय भाषा में कुछ कैसे लिखा गया है - जैसे जावा, पास्कल, पीएचपी, या जावास्क्रिप्ट - वास्तव में सी के पूर्व ज्ञान से लाभान्वित हैं? उदाहरणों की सबसे अधिक सराहना की जाएगी।


@ स्टीफन ओह, सॉरी ... मुझे गलत समझा गया। (लेकिन यू देखते हैं कि यू को c / c ++ सही सीखने की आवश्यकता क्यों है?)
अपरेंटिसहैकर

1
@burningprodigy हाँ, इस मामले में कि मुझे कुछ करने की ज़रूरत है जहाँ C / C ++ की आवश्यकता है, या सबसे अधिक समझ में आता है, निश्चित रूप से मैं सीखूँगा C. मेरा गोमांस ऐसे लोगों के साथ है जो कहते हैं कि आपको C को प्रभावी ढंग से सीखने में सक्षम होने की आवश्यकता है। उच्च स्तरीय भाषाओं में विकास। और वह बेतुका है।
स्टीफन


क्या आप हमें कुछ संदर्भ (url) दे सकते हैं, जहां "पॉइंटर जैसे प्रोग्रामिंग कॉन्सेप्ट को हैंडल नहीं किया जा सकता ..."?
k3b

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

जवाबों:


113

C को जानने का फायदा यह है कि आपके पास एक अच्छा विचार है कि कंप्यूटर कैसे काम करता है। न केवल यह कि आपका प्रोग्रामिंग मॉडल कैसे काम करता है, बल्कि स्मृति कैसे रखी जाती है, और इस तरह।

सी के नीचे एकमात्र स्तर एक विशेष सीपीयू द्वारा बोली जाने वाली विधानसभा है।

(मैं यह जानना चाहूंगा कि सी जानने से आपको उच्च स्तर की भाषा में कितना कम काम करना पड़ता है, इसकी सराहना करते हैं। और उम्मीद है कि उच्च स्तर की भाषा में काम करने में शामिल लागत की सराहना होगी ।)


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

12
मैं इससे सहमत हूं, हालांकि: सी आपको घास की जड़ों के करीब कुछ ही कदम लाता है, जमीन के सभी रास्ते नहीं। ठीक है, मेमोरी लेआउट नामक एक चीज है। लेकिन इसका शारीरिक रूप से क्या मतलब है? क्या आप समझते हैं कि यदि आप इलेक्ट्रॉनिक्स को नहीं समझते हैं तो कंप्यूटर कैसे काम करता है? क्वांटम यांत्रिकी? और इसी तरह। मुझे यकीन नहीं है कि अगर दुनिया में एक ही दिमाग है जो गहराई से उच्च स्तर की भाषा से सी के माध्यम से क्वांटम यांत्रिकी तक पूरी खाद्य श्रृंखला को समझता है।
जूनास पुलकका

14
मेरा सवाल है कि आप यह जानकर कैसे लाभान्वित हो सकते हैं कि कंप्यूटर आंतरिक रूप से कैसे काम करता है? आप क्या हासिल कर रहे हैं? सी। की तरह बहुत कम स्तर की भाषा सीखने के लिए आपके पास अब जो कुछ भी नहीं है, उसकी सराहना करना। यह कहना कि मुझे फोरट्रान को सीखना चाहिए कि अब मेरे पास क्या है
TheLQ

18
@ TheLQ मैं अवाक हूँ। आप यह जानने से कैसे लाभान्वित हो सकते हैं कि कंप्यूटर आंतरिक रूप से कैसे काम करता है? आप जो कर रहे हैं, उसकी स्पष्ट समझ प्राप्त कर रहे हैं, जो आप प्राप्त कर रहे हैं। बल्कि: आप सीख रहे हैं कि आप वास्तव में पहली जगह में मशीन के लिए क्या कर रहे हैं।
फ्रैंक शियरर

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

72

मुझे नहीं लगता कि यहां कोई भी उत्तर वास्तव में ओपी की तलाश में था, इसलिए मैं अपनी राय देने जा रहा हूं।

देखिए, मैं एक अनपॉलगेटिव सी स्नोब हूं। मेरा दृष्टिकोण यह है कि यदि आप C को नहीं जानते हैं, तो कुछ हद तक आप वास्तव में नहीं जानते कि आप एक प्रोग्रामर के रूप में क्या कर रहे हैं। इसलिए, मुझे लगता है कि आप जिस व्यक्ति के बारे में बात कर रहे हैं वह "पक्षपाती" है।

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

आप C (या C ++, या असेंबली) सीखने का निर्णय लेते हैं या नहीं, इस बात पर निर्भर करता है कि आप किस प्रकार का प्रोग्रामर बनना चाहते हैं। यदि आप सिर्फ शांत वेब ऐप या व्यावसायिक ऐप विकसित करना चाहते हैं, तो यह ठीक है - सी सीखने के लिए कोई वास्तविक आवश्यकता नहीं है। लेकिन यदि आप वास्तव में क्या करना चाहते हैं , तो आप इसे एक्सेल करना चाहते हैं - यदि आप वास्तव में शांत परियोजनाओं पर काम करना चाहते हैं जो राज्य को धक्का देते हैं कला, तो आप वास्तव में अपने आप को एक प्रोग्रामर वास्तव में के रूप में गंभीरता से पर्याप्त लेने की जरूरत को समझते हैं कि कैसे कंप्यूटर काम करते हैं। चूँकि C मूल रूप से OS lingua franca है, साथ ही साथ यह भाषा भी है कि शक्तियाँ (लिनक्स कर्नेल से लेकर अधिकांश Java VMs तक, पायथन और रूबी दुभाषियों, SQL डेटाबेस, वेब सर्वर और हर बस ड्राइवर के बारे में) के बारे में सब कुछ बताती हैं। , भाषा की एक अंतरंग समझ एक लंबा रास्ता तय करती है।

यह उल्लेख नहीं करने के लिए कि C (या C ++) को जानने से बड़ी ओपन-सोर्स परियोजनाओं में योगदान करने का एक बड़ा अवसर मिलता है, जो लाखों लोगों (या लाखों लोगों के सैकड़ों) को प्रभावित करता है। पायथन दुभाषिया, या क्रोमियम वेब ब्राउज़र में सुधार पर काम करना चाहते हैं? खैर, आपको पहले के लिए सी और बाद के लिए सी ++ जानने की जरूरत है।

इसलिए लैटिन और पुरानी तकनीकों जैसे घोड़ा और गाड़ी जैसी मृत प्राकृतिक भाषाओं के लिए सी की तुलना पूरी तरह से गलत है। हमारे 21 वीं सदी के सॉफ्टवेयर इन्फ्रास्ट्रक्चर का एक बड़ा हिस्सा सी कोड द्वारा संचालित है, यही कारण है कि सी आज भी हमेशा की तरह प्रासंगिक है।

इसलिए, आपको सी सीखना चाहिए या नहीं, यह वास्तव में इस बात पर निर्भर करता है कि आप प्रोग्रामर के रूप में अपने करियर से क्या चाहते हैं।


5
तुम उस तड़क-भड़क की आवाज नहीं करते । ठीक है शायद थोड़ा। :)
स्टीफन

7
बहुत बढ़िया जवाब। मैंने C और C ++ सीखे बिना दस साल तक सफलतापूर्वक प्रोग्राम किया, और कभी भी बिना सीखे ही अपने करियर के बाकी हिस्सों को चला सकता था। लेकिन जब से मैंने इसे पिछले साल सीखा, मैंने बेहतर सॉफ्टवेयर लिखा है , न केवल सी ++ में, बल्कि मेरी अन्य भाषाओं में भी।
जॉन एम गैंट

3
यहाँ कुछ चीजें हैं जो SO के दूसरे निर्माता को सी जानने के बारे में कहना है: joelonsoftware.com/articles/ThePerilsofJavaSchools.html joelonsoftware.com/articles/CollegeAdvice.html joelonsoftware.com/articles/fog0000000319.html
आइजैक क्लेनमैन

3
C को लैटिन से तुलना करना "पूरी तरह से गलत" क्यों होगा? मुझे लगता है कि यह एक उत्कृष्ट सादृश्य है। लैटिन हमारे चारों ओर है। 58% अंग्रेजी शब्दावली लैटिन (सीधे या अन्य रोमांस भाषाओं के माध्यम से) से प्रभावित है। लैटिन हमारी संस्कृति को समझने की कुंजी है। कानून, लोकतंत्र, धर्म, बुनियादी ढांचा, शहर-योजना और अन्य क्षेत्रों की एक श्रृंखला को रोमन साम्राज्य में वापस खोजा जा सकता है। आप उसी तरह से सी को नजरअंदाज करना चुन सकते हैं, जिससे आप लैटिन को नजरअंदाज कर सकते हैं, लेकिन आप उन्हें कभी नहीं टाल सकते। "लैटिन और ग्रीक मृत भाषा नहीं हैं। वे केवल नश्वर हो गए हैं।" (JW McKail)
एंडर्स Sjöqvist

2
@ AndersSjöqvist, यह गलत होगा क्योंकि कोई भी लैटिन नहीं बोलता है, भले ही इसने आधुनिक भाषाओं के विकास को गहराई से प्रभावित किया हो। जबकि C सक्रिय रूप से और हर जगह उपयोग में है - बस हर OS, VM, डेटाबेस या दुभाषिया के बारे में। लैटिन अधिक पसंद है, आइए बताते हैं ... सिमाला - एक ज्यादातर मृत भाषा जिसने गहराई से जीवित भाषाओं को प्रभावित किया है, अभी तक अकादमिया के बाहर उपयोग नहीं किया जाता है।
चार्ल्स साल्विया

12

अंगूठे का एक व्यावहारिक नियम यह है कि आपको आमतौर पर काम करने वाले के नीचे कम से कम एक स्तर के अमूर्त को समझने की आवश्यकता है। विचार करें कि आपका PHP या जावास्क्रिप्ट दुभाषिया वास्तव में C या C ++ में लागू हो सकता है। आखिरकार आप दुभाषिया या यहां तक ​​कि सी रनटाइम त्रुटि में एक बग को हिट करने जा रहे हैं। यदि आपको समझ में नहीं आ रहा है कि आप अनुरक्षक को एक बग रिपोर्ट भेजने के लिए सीमित होने जा रहे हैं, तो उम्मीद है कि वे इसे पुन: पेश कर सकते हैं और इसके बारे में परवाह कर सकते हैं, और फिर अपने अंगूठे को दोहरा सकते हैं। यदि आप सी जानते हैं तो आप उन्हें बता सकते हैं कि समस्या कहाँ है और यह क्या है।

इसका अर्थ यह भी है कि यदि आप C / C ++ में काम करते हैं तो आपको कम से कम अपने प्लेटफॉर्म पर असेंबली पढ़ने में सक्षम होना चाहिए।

आवश्यकता पड़ने पर C सीखने के लिए: मेरा अवलोकन यह है कि अधिकांश प्रोग्रामर Perl / Python / Javascript को डिमांड पर सीख सकते हैं, लेकिन कोडांतरक / C / Lisp को अधिक समय की आवश्यकता प्रतीत होती है, इसलिए यह आवश्यकता से पहले कम से कम कुछ मूल बातें सीखने लायक है। उठता है।


9
ठीक है, "C / C ++" मैं (भाषा के वकीलों को धिक्कार है) के साथ रह सकता हूं। और "पर्ल / पायथन / जावास्क्रिप्ट" पूरी तरह से उचित है। लेकिन भगवान के प्यार के लिए, "कोडांतरक / सी / लिस्प" क्यों? यह "सेब / नारंगी / बैरक ओबामा" कहने जैसा है। उन तीन भाषाओं का एक-दूसरे से कोई लेना-देना नहीं है।
जेसन बेकर

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

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

7

मैं इस बात से सहमत नहीं हूँ कि आपको पहले C सीखने की ज़रूरत है , लेकिन मेरा मानना ​​है कि आपको C को अंततः सीखना चाहिए । सभी अमूर्तताएं लीक से हटकर हैं और सी को समझना यह समझना आसान बनाता है कि वास्तव में क्या हो रहा है जब आप कुछ फैंसी उच्च-स्तरीय अमूर्त का उपयोग करते हैं। उस ने कहा, मुझे भी लगता है कि सभी गंभीर प्रोग्रामर्स को आखिरकार कम से कम असेम्बलर को उसी कारण से पढ़ना चाहिए।

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


2
शायद एएन असेंबली भाषा पढ़ना सीखें। समस्या यह है कि मेरे पास 10 अलग-अलग प्रोसेसर परिवार हैं जिनका मैं उपयोग करता हूं और सभी बहुत अलग-अलग वेरिएंट सीखता हूं, यह भ्रम और अराजकता का एक नुस्खा है। Atmel AVR32 और TI MSP430 के साथ AMD SHARC की तुलना करने की कोशिश करें।
u

@ इयान: सही है। आदर्श रूप से आपको जो भी मेहराब विकसित करना है उसकी विधानसभा भाषा सीखनी चाहिए। ज्यादातर लोगों के लिए मुझे लगता है कि यह x86 या ARM होगा।
dsimcha

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

1
@ स्टीफन, आपको कुछ असेंबलर भाषा लिखने की कोशिश करनी चाहिए। 8-बिट सीपीयू मुश्किल नहीं हैं और 6502 (सी 64 की तरह) और सीपी (एम / व्यावसायिक मशीनों की तरह) दोनों में एक ही छोटी चीज को लागू करने की कोशिश कर रहे हैं, वास्तव में एक बहुत ही शिक्षाप्रद है कुछ बहुत ही बुनियादी डिजाइन अंतर (रजिस्टर पेज बनाम रजिस्टर) के कारण अनुभव।

+1 गलत All abstractions are leakyकथन के बावजूद ।
थॉमस एडिंग

7

पूर्वाग्रह यथास्थिति में से एक है। पुराने दिनों में (1980 और उससे पहले), C / C ++ प्रदर्शन अनुप्रयोगों के लिए बहुत आवश्यक था। वह बदल गया है लेकिन वरिष्ठ डेवलपर्स आमतौर पर उस पुरानी-पुरानी पृष्ठभूमि से आते हैं और चीजों को उस संदर्भ में देखते हैं।

वास्तविक विकास के लिए अन्य भाषाओं का उपयोग किया जाता है - सी # एक लोकप्रिय है, जैसा कि जावा है, जबकि पीएचपी और पायथन आंतरिक परियोजनाओं के लिए लोकप्रिय हैं और यह हमेशा उस क्षेत्र में कम से कम बुनियादी ज्ञान के साथ किसी के लिए उपयोगी होता है जब आप एक खुला चुनते हैं। स्रोत PHP प्रोजेक्ट के लिए, मान लें कि आपका बग ट्रैकिंग सिस्टम है। हालांकि, नौकरी के चश्मे अभी भी उस मानक टेम्पलेट से आते हैं जो 25 साल पहले लिखा गया था।


6
"नौकरी के चश्मे अभी भी उस मानक टेम्पलेट से आते हैं जो 25 साल पहले लिखा गया था।" आप अधिक सही नहीं हो सकते।
स्टीफन

बधाई हो, जॉन!
मार्क सी

6

जितना मुझे अनिवार्य जोएल ब्लॉग पोस्ट को पोस्ट करने से नफरत है, मैं उससे यहाँ सहमत हूँ । C प्रोग्रामिंग की भाषा है। मैं किसी भी उच्च-स्तरीय भाषा के बारे में नहीं सोच सकता जो किसी भी तरह से इसके साथ इंटरफेस न कर सके। उसके कारण, C अभी भी सिस्टम प्रोग्रामिंग प्रकार के सामान के लिए एक लोकप्रिय विकल्प है। आप बस सी के बिना कुछ ओएस-स्तरीय चीजों के साथ इंटरफेस नहीं कर सकते।

इसके अलावा, आपकी उच्च-स्तरीय भाषा पर्याप्त तेज़ नहीं होने पर आप क्या करने की योजना बनाते हैं? यह जानना कि सी लिखना कैसे विशेष रूप से महत्वपूर्ण है जब आप उच्च-स्तरीय, गतिशील रूप से टाइप की गई भाषा जैसे रूबी, पायथन या पीएचपी का उपयोग कर रहे हों। लेकिन यहां तक ​​कि जावा और सी # प्रोग्रामर्स को समय-समय पर सी को नीचे गिराने की आवश्यकता होती है।


जबरदस्त हंसी। लिंक किए गए कॉलम में जोल्स की सलाह: "आप यहां जो कह रहे हैं उसे अनदेखा करने से बेहतर होगा कि आप किसी तरह की ऑनलाइन सॉफ़्टवेयर चीज़ का निर्माण करें जिससे दूसरे छात्रों को लोगों के साथ डेट्स पर जाने का मौका मिल सके।"
स्टीफन

3
@ स्टेफेन: यदि आप चाहते हैं कि लोग वास्तव में आपको नोटिस करें, तो उन्हें या तो रखी जाए या भुगतान किया जाए।
फ्रेड नर्क

@ बहुत बढ़िया सलाह, योग्य।
स्टीफन

6

क्या शानदार स्लग-फेस्ट है! (जैसा कि वे स्पष्ट रूप से कहते हैं: क्या यह एक निजी लड़ाई है, या कोई भी इसमें शामिल हो सकता है?)

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

यह नहीं कहना है कि अन्य शिक्षक भी उसी स्थान पर आए थे। उन्होंने उच्च-स्तरीय भाषा (BASIC :-)) में शुरुआत की और बिना किसी स्पष्ट प्रभाव के वहां से आगे बढ़ गए।

इतनी निचली रेखा, स्टीफन, आप सही हो सकते हैं। मैं ऐसा नहीं सोचूंगा, लेकिन मैं पहले भी गलत हूं।


4

मुझे लगता है कि यह प्रगति है।

बीस साल पहले, पारंपरिक ज्ञान यह था कि सी को उच्च स्तर की भाषाओं से जो आप प्राप्त कर रहे थे, उसे समझने के लिए आपको कोडांतरक सीखना होगा (यही कारण है कि मुझे वैक्स मैक्रों का उपयोग करके कॉलेज में एक असेंबलर क्लास लेना पड़ा; अनुमान है कि कितना उपयोगी है ; स्नातक होने पर निकला)।

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

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

अंत में, यह सभी opcodes और एड्रेसिंग मोड में आता है, इसलिए यदि आप वास्तव में रुचि रखते हैं कि चीजें निचले स्तर पर कैसे काम करती हैं, तो आप बेहतर सी पर सीखने वाले असेंबलर की सेवा करेंगे।

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


मुझे लगता है कि "प्रशंसा" इसे लगाने का एक तरीका है। मेरी हाई स्कूल प्रोग्रामिंग क्लास में, "ज्यादातर मुझे इस फ़ंक्शन का उपयोग करने की आवश्यकता थी।" मैं LOLOMGCHAR * को WTFBBQCHAR * में कैसे परिवर्तित करूं? "
कटाना ३१४

मुझे लगता है कि सी सीखना आसान था। कम से कम यह मेरे लिए सिर्फ कार्निगन और रिची पढ़ने से था।
रॉबर्ट ब्रिस्टो-जॉनसन

2

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

मैं अत्यधिक प्रतिबंधित स्मृति संसाधनों के साथ एम्बेडेड सिस्टम के लिए कोड लिखता हूं (सबसे बड़ा जो मैंने हाल ही में किया है वह 16kbyte है और यह बहुत बड़ा था) इस बाजार में तब सी या असेंबलर एकमात्र विकल्प हैं और किसी भी शराबी उच्च स्तर की भाषाएं बस काम नहीं करती हैं।


1
यह बहुत अच्छा है ... लेकिन हर कोई ऐसा नहीं करता है। निहितार्थ यह प्रतीत होता है कि जो लोग एम्बेडेड सिस्टम के लिए नहीं लिख रहे हैं वे केवल खेल रहे हैं और गंभीर विकास नहीं कर रहे हैं - कम से कम, अपने मॉडल को अपने एम्बेडेड सिस्टम बिंदु के संदर्भ में सादृश्य लेते हुए। यह स्पष्ट रूप से मामला नहीं है और बड़े पैमाने पर उत्पादन के अनुप्रयोगों को कभी भी सी को छूने के बिना लिखना संभव है
जॉनएल

बेशक, सी के पास जाने के बिना बड़े पैमाने पर उत्पादन अनुप्रयोगों को लिखना संभव है। मैंने सी का उपयोग करने से पहले 10 साल के लिए कोड लिखा था। मैंने पीएल / एम, पास्कल, एडीए और साथ ही कोडांतरक का उपयोग किया। ये मशीन के अंतर्निहित यांत्रिकी सीखने के लिए सी के रूप में आसानी से अच्छे थे, और अक्सर त्रुटि मुक्त कोड के उत्पादन के लिए बेहतर थे।
u

महान - हालाँकि आपके उत्तर ने मुझे यह आभास नहीं दिया कि आपने ऐसा सोचा था, इसलिए मेरा उत्तर ...
JohnL

क्या आपके पास एम्बेडेड उपयोग को लक्षित करने वाले जावा इंजन के साथ कोई अनुभव है?

2

मेरे अनुभव में, कुछ समय के लिए C / C ++ एक अच्छा बफर था जिसने VB6 कोडर्स से अच्छे प्रोग्रामर को अलग कर दिया था। C / C ++ के पाँच विषम वर्ष करने के बाद, मुझे VB6 में काम करने का मौका मिला। मैं कोडर्स की गुणवत्ता (या उसके अभाव) पर चकित था। डिजाइन या प्रदर्शन के बारे में, भाषा की हिम्मत में उनकी बहुत कम रुचि थी। दुर्भाग्य से, जब कंपनी .Net पर गई, तो C / C ++ कोडर और .Net कोडर एक ही उपकरण का उपयोग कर रहे थे। VB कोडर्स और भी बदतर VB.Net कोडर थे। स्थिति तब बिगड़ी जब सभी विकास ASP.NET के पास गए। अचानक कोई भी जो नियंत्रण को खींच और छोड़ सकता था, वह एक प्रोग्रामर था।

नौकरी बाजार में, हालांकि, हार्ड-कोर कोडर्स (पूर्व C / C ++) और पर्यटकों को अलग करने के लिए बहुत कुछ नहीं था।

जैसे, आपके रिज्यूमे पर C या C ++ होने से आप रिफ़-रफ़ से अलग हो सकते हैं।


2

Procoatively पूछा: क्या आप पुष्टि के लिए पूछ रहे हैं कि आपको C सीखना नहीं है? यदि आप शुद्ध C सीखते हैं (C ++ आवश्यक नहीं) तो आपको कंप्यूटर के निष्पादन मॉडल की पूरी समझ हो जाएगी। विशेष रूप से स्मृति और आवंटन के बारे में। यह सामान उच्च स्तरीय लैंगगेज में प्रोग्रामिंग करने वाले लोगों के लिए भी मायने रखता है।

एक PHP प्रोग्रामर के लिए इसकी बस कम पारदर्शी है कि दिए गए मशीन पर कोड कैसे निष्पादित किया जाता है। यह PHP प्रोग्रामर के लिए मायने नहीं रख सकता क्योंकि नेटवर्क ट्रांसफर एप्लिकेशन में बोतल की गर्दन है, आदि।

सादा PHP / Python / C # में भाषा और CPU के बीच बहुत अधिक अमूर्त परतें होती हैं। ये परतें इतनी मोटी हैं कि वे आपको उनके माध्यम से देखने की अनुमति नहीं देते हैं। जब आप सी सीखते हैं, तो आपके और सीपीयू और ऑपरेटिंग सिस्टम के बीच एक पतली शीट होती है। यह प्रोग्रामिंग को आसान नहीं बनाता (और यह बेहतर भी नहीं हो सकता है)। लेकिन आप वास्तव में यह जानने में सक्षम हैं कि सीपीयू कैसे काम करता है। एक बार जब आप "मध्यवर्ती" सी जानते हैं, तो आप वास्तव में उस ज्ञान को उच्च स्तर की भाषा से जोड़ना शुरू कर सकते हैं। यह तात्कालिक लाभ है जो आपको मिलेगा।

मेरी राय में एक प्रोग्रामर को हमेशा विभिन्न प्रोग्रामिंग अवधारणाओं को सीखने में कुछ समय बिताना चाहिए। यह निश्चित रूप से सी पर एक नज़र रखने के लिए भुगतान करता है, लेकिन क्लोजर, हास्केल, प्रोलोग जैसी उच्च स्तरीय प्रोग्रामिंग भाषाओं पर भी एक नज़र रखना है।

आपको इनमें एक मास्टर बनने की ज़रूरत नहीं है, वे आपको बस यह सबक सिखाएंगे कि प्रोग्रामिंग भाषाओं के "स्तर" बाइनरी नहीं हैं, लेकिन बहुत सारे स्तर हैं। उन्हें जानने के लिए ऊपर से नीचे (असेंबलर) पर जाएं। यह आपको एक बेहतर प्रोग्रामर बना देगा।


2

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

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

PHP में कोडिंग करते समय C का अध्ययन करने में बहुत समय व्यतीत करना बस अवसर लागत के लायक नहीं है। सीखने के लिए अधिक उपयोगी चीजें हैं। सी वास्तव में सिर्फ एक और भाषा है जिसे आप केवल अध्ययन और उपयोग के दौरान अच्छी तरह से सीख सकते हैं, लेकिन जब आपको आवश्यकता हो तब उठा सकते हैं।

कड़ी मेहनत का पसीना।


1

C वह भाषा है जिसका उपयोग अन्य भाषाओं को लिखने के लिए किया जाता है। यह आपको सीपीयू और अन्य हार्डवेयर के साथ अंतरंग रूप में प्राप्त करने की अनुमति देता है।

यदि आप C नहीं जानते हैं, तो आप नहीं जानते कि अन्य भाषाएं उन परिणामों को कैसे प्राप्त करती हैं जो वे करते हैं।

अमूर्तता, एक महत्वपूर्ण अवधारणा है, निश्चित रूप से, और सभी को यह जानने की आवश्यकता नहीं है कि उनकी पसंद का फ्रेमवर्क उन परिणामों को कैसे प्राप्त कर रहा है जो यह वादा करता है। अच्छा कोड लिखने के लिए, आपको कई वर्षों तक C लिखने में, या वास्तव में आपके vtables का क्या होता है, इसके बारे में सोचने की ज़रूरत नहीं है।

अब, आप यह समझे बिना कार चला सकते हैं कि 4-स्ट्रोक इंजन कैसे काम करता है या वास्तव में स्टिक शिफ्ट (मैनुअल गियर बॉक्स) का उपयोग किए बिना किया जा सकता है।

हालांकि, यदि आप समझते हैं कि आप जो हुड के तहत चल रहे हैं, समय-समय पर, असाधारण परिणाम प्राप्त करने में सक्षम होंगे जो कि उस ज्ञान के बिना कोई व्यक्ति दोहराने के लिए संघर्ष करेगा।


1

C (और संभवतः C ++) वह समुद्र है जिसमें आप तैर रहे हैं। आपका कोड चलाने वाला OS शायद C ((+ ++) में कोडित होता है। तो ओएस सेवाओं तक पहुंचने के लिए आपका मूल एपीआई सी में होगा।

यदि आप यह जानने के बिना कर सकते हैं कि नीचे क्या है, तो सी जानने की कोई आवश्यकता नहीं है। हालांकि अधिकांश प्रोग्रामर को अपने जीवन में कभी-कभी निचले स्तरों पर गोता लगाने की आवश्यकता होती है।

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

अपने पेशे के लिए कुछ मौलिक सीखने के लिए कुछ हफ़्ते बिताने के लिए कभी भी दर्द नहीं होता है।


1

सी के कई फायदे हैं:

  1. C निम्न स्तर की भाषा है। आप कर्नेल और ड्राइवर को विकसित करने के लिए c का उपयोग कर सकते हैं।
  2. C सबसे तेज भाषा है। कोई भी सॉफ्टवेयर सॉफ्टवेयर c द्वारा विकसित किया जाएगा। उदाहरण के लिए: मेम्केड, रेडिस, नग्नेक्स, अपाचे, मायस्कल आदि।
  3. C एक क्रॉस-प्लेटफ़ॉर्म भाषा है। सी द्वारा विकसित कार्यक्रम हर मंच पर चल सकता है। अन्य क्रॉस-प्लेटफ़ॉर्म भाषाएं ऐसा नहीं कर सकती हैं। जावा, पायथन, php आदि iOS प्लेटफॉर्म पर नहीं चल सकते हैं।
  4. C ++ कई एम्बेडेड सिस्टम पर नहीं चल सकता है।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.