ما هي أفضل طريقة للذهاب على المدى الطويل:C أم الهدف C أم C++؟[مغلق]

StackOverflow https://stackoverflow.com/questions/109937

  •  02-07-2019
  •  | 
  •  

سؤال

الشيء الوحيد الذي كنت أقصد العودة إليه حقًا هو برمجة C++ ولكني لست متأكدًا مما إذا كان يجب علي العودة إلى C++ (التي لدي بعض المعرفة الأساسية ببرمجة وحدة التحكم) أو هل يجب أن أبحث في لغة C أو Objective C؟إنني أتطلع إلى المدى الطويل بالإضافة إلى سهولة البرمجة مثل المحررين الجيدين والمجمعين وما إلى ذلك، بالإضافة إلى ما هو الأسرع في الإعداد والتشغيل.

لمواكبة ذلك، ما البرنامج الذي تقترحه للعمل مع اللغة المقترحة؟

[يحرر]

ذكر بعض الأشخاص أنه من الصعب اقتراح شيء ما عندما لا يكون معروفًا ما أفعله.ليس لدي أي برنامج محدد في ذهني في الوقت الحالي، أنا فقط أتطلع إلى البدء بإحدى هذه اللغات الثلاث إما للاستثمار والعمل على المدى الطويل أو كنقطة انطلاق لشيء آخر.

هل كانت مفيدة؟

المحلول

لا أستطيع حقًا التحدث إلا عن C و C++.لن يضر التعلم أيضًا، إذا كان السبب الوحيد هو وجود الكثير من التعليمات البرمجية القديمة في C وC++.

غالبًا ما يكون Pure C هو الخيار الوحيد لأنظمة التشغيل أو تطوير برامج التشغيل أو بيئات التطوير المضمنة.تتضمن الاستخدامات الأخرى الأوقات التي يكون فيها الأداء بالغ الأهمية - حيث تريد أن تكون "قريبًا" من الأجزاء الداخلية للجهاز قدر الإمكان.ليس من المؤلم حقًا معرفة لغة C لأنه لا يبدو أن هذه التطبيقات الخاصة بها ستختفي في أي وقت قريب.تعد لغة C أيضًا "لغة مشتركة" للعديد من تطبيقات *nix.لذا، إذا كنت ترغب في المساهمة في الكثير من المشاريع مفتوحة المصدر (Apache/svn/cvs/etc)، فإن معرفة لغة C ستكون أمرًا ضروريًا.

في تجربتي، يتم استخدام لغة C++ عندما ترغب في أن تكون "قريبًا من الجهاز" كما هو الحال عند البرمجة للغة C، ولكنك ترغب في خيار تضمين مستويات أعلى من التجريد عبر بعض OOP.تكمن القوة الرئيسية لـ C++ (وأكبر نقاط ضعفها) في تعدد نماذجها.فهو يوفر لك تقريبًا جميع الأشياء التي يمكنك القيام بها في لغة C بالإضافة إلى الكثير من الميزات الموجهة للكائنات.على سبيل المثال، يمكنك إعادة استخدام الكثير من أكواد C فائقة التحسين حسب الحاجة أثناء إنشاء الفئات، والقيام بالوراثة/تعدد الأشكال - بقدر ما تريد من "التركيز على الكائنات".حتى أن هناك طرقًا لدمج بعض البرمجة الوظيفية في هذا المزيج...

غالبًا ما يتم انتقاد لغة C++ لأنها تحاول أن تكون أشياء كثيرة جدًا لعدد كبير جدًا من الأشخاص.يقول النقاد إن المحاولة لفعل كل شيء ليست جيدة جدًا في أي شيء واحد.كانت لغة C++ هي "اللغة المشتركة" لتطبيقات سطح المكتب، ولكن Java و.Net قد أبعدا الكثير من مستخدمي Enterprise.ومع ذلك، فإن العديد من التطبيقات التي تهتم بالأداء واستخدام الكم الهائل من الميزات الإضافية والمفيدة، والتي عادةً ما تكون جيدة بما يكفي لأغراضك والمتوفرة فقط في لغة C++، ستختار لغة C++.

نصائح أخرى

إذا كنت تعمل بشكل أساسي على نظام التشغيل Windows، فإنني أقترح استخدام لغة C++.تبذل Microsoft الكثير من العمل خلف C++/CLI الجديد والمترجم الأصلي لـ C++.مع إضافات TR1 وC++0X الجديدة، تمت معالجة الكثير من المشكلات التي كانت موجودة في الماضي.

أود أن أقول - اختر أي لغة تريدها والتزم بها لفترة من الوقت.وفي الوقت نفسه التركيز على الخوارزميات.هذه هي اللبنات الأساسية للبرامج.اللغة هي مجرد لغة.

إذا كنت قد تعلمت/أتقنت إحدى اللغات، فستستغرق بضعة أسابيع فقط للتحول إلى شيء مختلف، خاصة إذا كنت تعيش في نفس عائلة اللغات (على سبيل المثال، لغة أجنبية).C، C++، الهدف C، Java، C# الخ.)

إذا كنت تعتقد أن شركة Apple ستحكم العالم يومًا ما، فالهدف ج.

الآن أعتقد أن تطوير iPhone Cocoa هو في مكانه الحالي.لذلك، Obj-C، شخصيا.

يمكنك تجاهل أي إجابة لم تسأل أولاً عما ستفعله بالفعل.وبدون هذه المعلومات، تكون الإجابة إما خاطئة أو مضللة أو ببساطة غير ذات صلة.

رأيي:

من بين الخيارات الثلاثة التي عرضتها، من المحتمل أن يكون أفضل رهان أولي هو C.بمجرد أن تعرف لغة C، وتتمكن من التعامل مع مراوغاتها وتتقنها، فمن المرجح أن يكون تعلم لغة C++ أو Objective-C أمرًا تافهًا إلى حد ما.(أصعب نقاطك ستكون في الجانب الموجه للكائن من العالم.)

في الوقت الحالي، يتم استخدام Objective-C في أغلب الأحيان على أجهزة Mac، ولكن هناك من ينسى أن أدوات GNU موجودة لـ Objective-C، وهي مدعومة في GNStep أيضًا.(يعتمد نظام التشغيل Mac OS X الحالي بشكل كبير على NextSTEP القديم، والذي يعد GNStep نسخة منه بشكل أو بآخر.) ومع ذلك، فإن الشيء المتعلق بـ Objective-C هو أنه لا يستخدم على نطاق واسع خارج هاتين البيئتين - مما يجعله شيئًا من بيئة ضيقة.(وباستخدام Obj-C، مثل أي لغة OO حديثة أخرى، ستقضي وقتًا أطول بكثير في تعلم فئات إطار العمل مقارنة بالقواعد النحوية/المعجمية الأساسية الفعلية.)

أنا في المقام الأول مطور C#.هذا يدفع فواتيري، ويفعل ذلك بشكل جيد.لم تكن لغة C# مدرجة في قائمتك، وأظن أنني أعرف السبب:يبدو أنك تتطلع إلى أن تكون أقرب إلى المعدن، وأقل تجريدًا.لقد فهمت ذلك - وأعتقد أن هذا هو الخيار الصحيح للنمو الوظيفي على المدى الطويل.لقد بدأت بعدد لا يحصى من التجريدات بين الكود الخاص بي والمربع (أولاً بشكل احترافي باستخدام Java، ثم VB6، ثم .NET)، ونتيجة لذلك، أعمل الآن بجد في وقت فراغي للعب "اللحاق" ببقية البرامج. العالم - أنا حاليا تمر عبر كتاب كيه آند آر.من المسلم به أنه ليست لدي حاجة مهنية للاقتراب من المعدن إلى هذا الحد - ولكني أشعر بالحاجة الشخصية لفهم الآلة بأفضل ما أستطيع.

(بالإضافة إلى ذلك، ومن المفارقات، أنني أتطلع إلى العودة إلى تطوير Cocoa عبر Objective-C.لقد كنت أتجول فيه منذ سنوات مضت، وأعتقد أنني في وضع أفضل "للحصول عليه" الآن...أنا شخصياً أشعر أن المعرفة المسبقة بلغة C ستجعل الانتقال إلى Objective-C أسهل بكثير وأكثر سلاسة، وتجعلني أقل احتمالاً لإدخال أخطاء كارثية متعلقة بالذاكرة في الكود الخاص بي!)

في نهاية اليوم، أعتقد أن امتلاك المعرفة الموجودة مسبقًا بلغة C (على الرغم من أنها لم تكن ضرورية بالنسبة لي!) هو أمر جيد جدًا، وربما يجعل الانتقال إلى لغات أخرى بمرور الوقت (وهو ما ستفعله) سوف افعل ذلك، إلا إذا كنت تقوم بنظام التشغيل أو برنامج التشغيل أو العمل المضمن) بشكل أسهل وأكثر سلاسة.أنا لا أقول "لا يمكنك العيش بدونها"، بل أقول ذلك بناءً على الطريقة التي تمت بها صياغة سؤالك...أعتقد أن هذه هي الإجابة الصحيحة لهذا السيناريو.

أنا أنظر إلى سؤالك بشكل مختلف قليلاً وأقترح عليك في النهاية أن تتعلم لغة Objective-C.لدي عدة أسباب لذلك.

أولاً، لدى Obj-C طريقة مختلفة تمامًا للنظر إلى نموذج OO حيث يتم تنفيذه بشكل عام بلغات مثل C++.يعتمد Obj-C على Smalltalk وبالتالي يتم تنفيذ جميع "استدعاءات الطريقة" كرسائل مرسلة إلى الكائن المناسب.وبسبب هذا المبرمجين تمكنوا من توسيع هذا إلى بعض التقنيات المثيرة للاهتمام والقوية جدًا.يجب أن يكون دائمًا جزء من سبب تعلم لغة جديدة هو توسيع وجهة نظرك حول كيفية عمل الأشياء - يتمتع Obj-C بإمكانيات أكبر بكثير من C أو C++ في هذا الصدد.

ثانيًا، يمتلك Obj-C، على نظام Mac على الأقل، إطارًا قويًا للغاية خلفه مع سلسلة أدوات ممتازة.لا تمتلك C وC++ حقًا نفس إطار العمل المتماسك على أي نظام أساسي، على الرغم من أن Microsoft ربما تقترب من تنفيذها.مجرد العمل مع Cocoa كان كافياً لإقناعي بأن Obj-C هي لغة رائعة.المكتبة مدروسة جيدًا حقًا وتجعلني أشعر بالغيرة من أولئك الذين يعملون معها على أساس يومي.

ثالثًا، Obj-C هي مجموعة شاملة من لغة C، لذلك من خلال تعلمها ستكون على دراية ببناء جملة لغة C.كما أن مكتبة C Standard تعاني من فقر الدم ويمكن تعلمها بسرعة كبيرة.تعد لغة C++ أفضل قليلاً، مع توفر التعزيز، ولكن التعزيز ليس قريبًا من التماسك مثل الكاكاو.

في النهاية عليك أن تقرر ما هي أولوياتك.إذا كنت تتطلع فقط إلى تعلم شيء جديد، فاستخدم Obj-C.

يعتمد على ما تفعله.إذا اضطررت إلى اختيار واحد، أود أن أقول C++.إنها منصة مشتركة أكثر من Obj-C وأقل ألمًا من C.ولكن إذا كنت تقوم ببرمجة نظام Mac، فقد ترغب في معرفة لغة Objective-C.إذا كنت تقوم بأي برمجة مضمنة أو أي اختراق لـ kernel، فمن المحتمل أنك تريد استخدام لغة C.

هل هناك سبب لعدم استخدام C++ واستخدام C أو Objective C بدلاً من ذلك؟تمتلك لغة C++‎ في الوقت الحاضر أكبر مجتمع على الإطلاق، وأكبر قاعدة تعليمات برمجية موجودة، وهي الأفضل بين الثلاثة.إذا كنت لا تعتقد أن هذا صحيح، يرجى التوضيح (بجدية، أنا مهتم حقًا).

علاوة على ذلك، فإن C++ هو الوحيد الذي يدعمه MS فيما يتعلق بـ .NET (إذا كنت تخطط للانتقال إلى .NET يومًا ما، بالطبع).

ابدأ بـ C، ثم ربما توسع معرفتك إلى C++ إذا كنت بحاجة إلى توجيه الكائن.Objective C هو شيء غامض مثل Apple Script لم يسمع به سوى مطوري Apple (إن وجد)، فلن تتقدم كثيرًا بهذه اللغة (لا يوجد أي إهانة لمحبي تلك اللغة).

من السهل جدًا تعلم لغة C (مقارنة بـ C++) ولديك معرفة أساسية جيدة بأي لغة أخرى قد ترغب في تعلمها لاحقًا (خاصة C++).

فيما يتعلق بإجابة Loren Segal، ما تريد القيام به لا يهم عندما تريد الاختيار بين C وC++.إنها مجرد مسألة تفضيل.كلاهما يحتوي على مكتبات لكل شيء (نظرًا لأن مكتبات C++ غالبًا ما تكون مجرد أغلفة موجهة للكائنات حول مكتبات C)، وكلاهما لديه مجتمع ضخم وبيئات تطوير متكاملة ومترجمات مستقرة.

تستثمر Intel كثيرًا في مكتبات C++ لتشغيلها ضد معالجاتها.نظرًا لأن Intel يبدو أنها تهيمن على عالم معالجات الكمبيوتر الشخصي مؤخرًا، فإنه يبدو اختيارًا لائقًا.

يعد Pure C أساسيًا جيدًا بغض النظر عن لغة البرمجة الأخرى التي تركز عليها بعد ذلك.يعد Objective-C على وجه الخصوص مجرد كود C أساسي مع أفكار نقاش صغيرة متناثرة في الأعلى.على الرغم من أن لغة C++ بعيدة كل البعد عن لغة C، إلا أنه من وجهة نظري، من الواضح أن لغة C هي أكثر اللغات المفيدة التي يجب معرفتها.في Objective-C غالبًا ما تنتقل إلى C.في Ruby وPython وErlang وعدد لا يحصى من اللغات الأخرى، غالبًا ما تنتقل أيضًا إلى وضع C.إنها أيضًا لغة يمكنك دائمًا الاعتماد على قدرتك على استخدامها على كل جهاز كمبيوتر تلمسه.

لذا فإن وجهة نظري الشخصية هي أن كل مبرمج يجب أن يعرف لغة C.على الأقل قليلا.

لقد تعلمت مؤخرًا لغة الهدف-C (لأنني بدأت اللعب باستخدام Cocoa) بعد أن عملت كمطور لـ C++ لمدة 10 سنوات أو نحو ذلك.

لقد وجدت أن تجربة تعلم لغة الهدف-C بالإضافة إلى لغة C++ مفيدة للغاية، على الرغم من أنني ربما لن أستخدم لغة الهدف-C في أي مشروع حقيقي.

يضيف كل من Object-C وC++ طبقة من البرمجة الموجهة للكائنات أعلى لغة C.لكنهم يفعلون ذلك بطرق معاكسة تمامًا تقريبًا.يبدو أنه في كل مرة تتخذ فيها C++ قرارًا تصميميًا واحدًا، تتخذ Object-C الخيار المعاكس.على سبيل المثال، يستخدم C++ الكتابة الثابتة، بينما يستخدم Object-C الكتابة الديناميكية.أو يستخدم الهدف-C (الأخير) مجموعة البيانات المهملة وهو ما لا يستخدمه C++.

لقد جعلني هذا حقًا أفهم مفاهيم البرمجة الشيئية وخيارات التصميم المرتبطة بها بطريقة أفضل بكثير.

إذا كنت تريد التركيز فقط على نظام التشغيل Windows، فأنا أقترح أن تبدأ مباشرة به C# (.Net Framework)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top