ما هو نموذج لغة البرمجة الذي يناسب أي وظيفة؟

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

  •  06-07-2019
  •  | 
  •  

سؤال

بقدر ما أعرف (ليس كثيرًا سأعترف به)، نماذج البرمجة الشائعة حاليًا هي كائنية التوجه (Java، C#، Ruby) مقابل وظيفية (F#).باعتباري شخصًا مطلعًا على النموذج الأول، لدي عدة أسئلة:

  • هل يمكن للمبرمج أن يلتزم بنموذج واحد طوال حياته؟أو بمعنى آخر هل يمكن اختزال كل المشاكل في مسامير لمطرقة واحدة؟
  • إذا لم يكن الأمر كذلك، ما هي الأداة المناسبة لأي نوع من المهام؟على سبيل المثال:المستندة إلى الويب مقابل سطح المكتب، مما يؤدي إلى إنشاء واجهات جميلة وسريعة الاستجابة، وقادرة على معالجة البيانات بسرعة، وما إلى ذلك.
  • هل احتاج الناس يومًا إلى تعلم نموذج جديد؟بالنسبة لوظيفتي السابقتين، كانت أماكن العمل تتطلب Java وC#.هل هناك أماكن عمل تستخدم لغات غير OO على وجه التحديد؟

من الواضح أنه لا توجد لغات "أفضل"، لكنني أتساءل عما إذا كان الأمر يستحق استثمار الوقت والطاقة لتعلم نموذج جديد.شكرا لك مقدما!

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

المحلول

"أو بعبارة أخرى ، هل يمكن تقليل جميع المشكلات إلى أظافر لمطرقة واحدة؟" نعم.فترة.أي لغة برمجة من المحتمل أن تصادفك ستكون كاملة مثل كل اللغات الأخرى.يوجد في الواقع تعريف رسمي لـ "الاكتمال" للغة البرمجة.

"هل احتاج الناس من أي وقت مضى لتعلم نموذج جديد؟" دائماً.

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

لقد لاحظت ما يلي...

جزء من القوة الدافعة هو مجتمع الذكاء الاصطناعي.بدأت العديد من هذه "النماذج الجديدة" كمخططات لتمثيل المعرفة بالذكاء الاصطناعي.لقد حصلوا على قوة جذب هناك، ثم انتقلوا إلى المزيد من التطبيقات السائدة.

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

وهنا استنتاجي.

البرنامج هو تمثيل المعرفة.

يعتمد اختيارك للنموذج أو النموذج أو النهج أو الأسلوب على إجابة السؤال التالي:

"كيف يمكنني تمثيل هذه المشكلة بشكل أفضل؟"

إذا كانت المشكلة لها كائنات وعلاقات، OO.إذا كانت المشكلة تحتوي على خوارزميات وتحويلات وخرائط ومرشحات وتقليل وظيفية.إذا كانت المشكلة ديناميكية ومتغيرة ومرنة، فهي ديناميكية.إذا كانت المشكلة ثابتة وستتسع نطاقها بسرعة، فستكون ثابتة.

نصائح أخرى

من المفيد تعلم نماذج بديلة (OO، وظيفية، إجرائية، ديناميكية، إلخ) لأنها ستساعدك على التفكير في المشكلات بطرق مختلفة.

على سبيل المثال، فكر في الفرق بين حل اجتياز الشجرة بطريقة خطية (الطريقة الأولى التي قمت بها على الإطلاق) مقابل استخدام التكرار.أو مزيج Google من Map وReduce لمساعدتهم على فهرسة الإنترنت.

يمكن أن تساعد طرق التفكير الجديدة المطبقة على المشكلات القديمة في حل بعض أصعب المشكلات.

النموذج مستقل عن اللغة.يمكنك التطوير بأسلوب OO في لغة C (ألق نظرة على GTK).عندما أبرمج بلغة Java، أستخدم الأسلوب الوظيفي بشكل أساسي.

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

كمثال (تافه)، قارن تطبيقات الفرز السريع في Java وOcaml، أو الأفضل من ذلك، Haskell، في هذه الصفحة: http://www.rosettacode.org/rosettacode/w/index.php?title=Quicksort

(وهذا لا يعني أن الوظيفة أفضل.هناك مشاكل يتم حلها بشكل أفضل باستخدام OO).

هل يمكن اختزال كل المشاكل في مسامير لمطرقة واحدة؟

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

هل احتاج الناس يومًا إلى تعلم نموذج جديد؟بالنسبة لوظيفتي السابقتين، كانت أماكن العمل تتطلب Java وC#.هل هناك أماكن عمل تستخدم لغات غير OO على وجه التحديد؟

يتعين على المطورين القيام بذلك كل 15 إلى 20 عامًا أو نحو ذلك.

هناك بالتأكيد صناعة كاملة من الشركات الصغيرة التي لديها أنظمة قائمة على Access مكتوبة باستخدام VBA الإجرائي.(وأعتقد أنني عملت مع معظمهم).يتعين على مطوري ASP الكلاسيكيين تعلم ASP.NET.مطورو بيرل يتعلمون بايثون.لقد أفسح التطوير المدفوع بالدفعة المجال للتطوير المدفوع بالحدث.

أعتقد أنك ستجد الإجابات في جميع المجالات.كلما عملت أكثر، وجدت أنه من "المفيد" معرفة بعض الآخرين.باعتباري مطور C#/VB/SQL Server، أجد أنه من المفيد بالنسبة لي أن أتعلم القليل عن F# وبعض اللغات الأخرى المتاحة للحصول على عرض واسع النطاق، ومعرفة الأداة المناسبة حقًا...

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

من الجيد أيضًا معرفة البرمجة الديناميكية/البرمجية لمسؤولي النظام وأي شخص يقوم بتشغيل نظام Linux.إن كتابة برنامج نصي سريع في BASH أو Ruby يتفوق على HELL في محاولة تنفيذ نفس الوظيفة في Java أو C++.

OO يجعل من السهل فهم كميات كبيرة من التعليمات البرمجية.إذا كان لديك فريق كبير أو عدة فرق كبيرة وتحتاج إلى تقديم نظرة عامة بسرعة، فإن OO يجعل من السهل جدًا وصف وعزل جزء معين من الوظيفة.يجب أن أقول أنه تم ترميزه بشكل صحيح OO!

أفهم أن الوظيفة مفيدة للبرمجة متعددة الخيوط لأن كل شيء يميل إلى أن يكون غير قابل للتغيير.

يعد تطوير مهارات التصميم والهندسة المعمارية مع وضع OOP في الاعتبار من أكثر المهارات المرغوبة لمهنة رائعة لا تعتمد على اللغة.

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

كما قال معظم الآخرين، يمكنك عمومًا استخدام أي لغة لحل أي مشكلة ويمكنك عادةً الكتابة بأسلوب نموذج واحد في نموذج آخر.

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

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

  • هل يحتاج إلى التشغيل على منصات سطح مكتب متعددة؟
  • إذا كان تطبيقًا لسطح المكتب، فهل يحتاج إلى أن يكون له شكل ومظهر أصلي؟
  • هل التكرار السريع للتصميمات مهم؟
  • كيف يتم الحفاظ عليها؟
  • ما هي أنظمة الطرف الثالث التي تحتاج إلى العمل معها؟
  • المعرفة / المهارات / التفضيلات الحالية للمبرمج.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top