2008-09-21 12 views
7

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

इसके साथ जाने के लिए, सुझाए गए भाषा के साथ काम करने के लिए आप किस सॉफ्टवेयर का सुझाव देंगे?

[संपादित करें]

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

उत्तर

6

मैं वास्तव में केवल सी और सी ++ के बारे में बात कर सकता हूं। सीखना या तो चोट नहीं पहुंचाएगा, अगर एकमात्र कारण है कि इतना विरासत कोड सी और सी ++ में है।

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

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

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

4

आपको लगता है एप्पल किसी दिन दुनिया पर राज करने के लिए जा रहा है, तो उद्देश्य सी

अभी मुझे लगता है कि iPhone कोको विकास है, जहां इस पर है। तो, ओब्जे-सी, व्यक्तिगत रूप से।

8

यदि आप मुख्य रूप से विंडोज पर काम कर रहे हैं, तो मैं सी ++ का सुझाव दूंगा। माइक्रोसॉफ्ट नए सी ++/सीएलआई और देशी सी ++ कंपाइलर के पीछे बहुत काम कर रहा है। नए टीआर 1 और सी ++ 0 एक्स जोड़ों के साथ, अतीत में मौजूद कई मुद्दों को संबोधित किया जा रहा है।

8

मैं कहूंगा - अपनी पसंद की कोई भी भाषा चुनें और थोड़ी देर के लिए इसके साथ रहें। इस बीच एल्गोरिदम पर ध्यान केंद्रित करें। ये कार्यक्रमों के निर्माण खंड हैं। भाषा सिर्फ एक भाषा है।

यदि आपने किसी को कुछ सीखने/महारत हासिल करने के लिए कुछ हफ्तों का सवाल पूछा है, खासकर यदि आप भाषाओं के समान परिवार (जैसे सी, सी ++, उद्देश्य सी, जावा, सी # आदि में रहते हैं।)

-3

आप केवल विंडोज ऑपरेटिंग सिस्टम पर ध्यान केंद्रित करना चाहते हैं, तो मेरा सुझाव है कि सीधे साथ सी # (नेट फ्रेमवर्क)

+1

हालांकि मोनो माइक्रोसॉफ्ट के पीछे एक संस्करण संख्या है, लेकिन वे वास्तव में बहुत अच्छी नौकरी कर रहे हैं। यह कहना है: सी # गैर-विंडोज प्लेटफार्मों पर भी बहुत अच्छा काम करता है! – Thomas

+1

निर्भर करता है कि आप विंडोज ऑपरेटिंग सिस्टम पर क्या कर रहे हैं। अभी भी ऐसे अनुप्रयोग हैं जहां सी # उपयुक्त नहीं होगा। –

+0

यह सुनिश्चित नहीं है कि इसे इतनी मेहनत क्यों दी गई है .. कचरा संग्रह के साथ एक वीएम आधारित भाषा के लिए बहुत कुछ कहना है। – pjc50

1

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

4

का उपयोग करना चाहेंगे, आप किसी भी उत्तर को नजरअंदाज कर सकते हैं जो पहले पूछता नहीं था कि आप वास्तव में क्या करेंगे। उस जानकारी के बिना, जवाब या तो गलत, भ्रामक या बस अप्रासंगिक है।

1

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

इसके अलावा, सी ++ केवल .NET के संदर्भ में एमएस द्वारा समर्थित है (यदि आप निश्चित रूप से .NET एक दिन माइग्रेट करने की योजना बना रहे हैं)।

0

सी के साथ प्रारंभ करें, तो यदि आपको ऑब्जेक्ट ओरिएंटेशन की आवश्यकता हो तो शायद आपका ज्ञान सी ++ पर बढ़ाएं। उद्देश्य सी ऐप्पल स्क्रिप्ट की तरह एक अस्पष्ट चीज है कि केवल ऐप्पल डेवलपर्स ने कभी सुना है (यदि कोई है), तो आप उस भाषा से दूर नहीं होंगे (उस भाषा के प्रशंसकों के लिए कोई अपराध नहीं)।

सी सीखना बहुत आसान है (सी ++ की तुलना में) और आपके पास बाद में सीखने के लिए किसी अन्य भाषा के लिए एक अच्छा आधार ज्ञान है (विशेष रूप से सी ++)।

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

1

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

4

मेरे ले:

तीन विकल्प आप प्रदर्शित किया है के

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

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

मैं मुख्य रूप से एक सी # डेवलपर हूं। यह मेरे बिल चुकाता है, और बहुत अच्छी तरह से करता है। सी # आपकी सूची में नहीं था, और मुझे संदेह है कि मुझे पता है क्यों: ऐसा लगता है जैसे आप धातु के करीब होना चाहते हैं, कम अमूर्त दूर। मुझे लगता है - और मुझे लगता है कि यह लंबी अवधि के कैरियर के विकास के लिए सही विकल्प है। मैंने अपने कोड और बॉक्स (पहले जावा के साथ पेशेवर, फिर वीबी 6, फिर .NET) के बीच सशक्त अबास्ट्रक्शन के साथ शुरुआत की, और नतीजतन, मैं अब अपने खाली समय में "पकड़ो" खेलने के लिए कड़ी मेहनत कर रहा हूं। दुनिया - मैं वर्तमान में K&R book के माध्यम से जा रहा हूं।माना जाता है कि, मुझे धातु के करीब आने की कोई पेशेवर आवश्यकता नहीं है - लेकिन मुझे मशीन को समझने की व्यक्तिगत आवश्यकता महसूस होती है जितनी मैं कर सकता हूं।

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

दिन के अंत में, मुझे लगता है सी के पूर्व-मौजूदा ज्ञान (जबकि यह स्पष्ट रूप से मेरे लिए जरूरी नहीं था!) ​​एक बहुत अच्छी चीज है, और शायद समय के साथ अन्य भाषाओं में आगे बढ़ती है (जो आप करेंगे, जब तक आप ओएस नहीं करते हैं, चालक या एम्बेडेड काम) आसान और आसान। मैं यह नहीं कह रहा हूं "आप इसके बिना नहीं प्राप्त कर सकते हैं," मैं कह रहा हूं कि जिस तरह से आपका प्रश्न phrased था ... मुझे लगता है कि यह उस परिदृश्य का सही जवाब है।

0

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

तो यह मेरा व्यक्तिगत विचार है कि प्रत्येक प्रोग्रामर को वास्तव में सी जानना चाहिए। कम से कम थोड़ा सा।

3

मैं आपके प्रश्न को थोड़ा अलग तरीके से देखता हूं और आखिरकार सुझाव देता हूं कि आप उद्देश्य-सी सीखें। मेरे पास इसके कुछ कारण हैं।

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

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

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

आखिरकार आपको यह तय करने की आवश्यकता है कि आपकी प्राथमिकताओं क्या हैं। यदि आप ओब्जे-सी के साथ कुछ नया जाना सीख रहे हैं।

0

मैंने हाल ही में उद्देश्य-सी (क्योंकि मैंने कोको के साथ खेलना शुरू किया) 10 साल या उससे भी अधिक समय के लिए सी ++ डेवलपर होने के बाद सीखा।

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

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

यह वास्तव में मुझे ऑब्जेक्ट उन्मुख प्रोग्रामिंग की अवधारणाओं और इसके साथ जुड़े डिज़ाइन विकल्पों को बेहतर तरीके से समझता है।