لنفترض أنّه تمّ توجيهُ بعض الأسئلة  لشخص غير تخصصي، مثلاً: هل ستستخدمُ الفأس أمّ المنشار؟ أيّهما تريدُ أن تختار؟ 

من البديهي أنَّ أوّل سؤال سيفكرُ به هذا الشّخصُ هو من أجل ماذا؟

فإذا كان الجوابُ من أجل درز الملابس… سيقولُ لا يمكن استخدام أيّ من الأداتين، لكن إذا كانَ الجوابُ من أجل تقطيع الخشب سيكونُ جوابه (نعم) يمكن الاستعانة بإحداهما.

وهنا، تمّ توجيه بعض الأسئلة لشخصٍ تقنيّ أو يعملُ في مجالِ تطويرِ البرامجِ، وهي:

  • كيف تختارُ لغةً لجهاز آيفون، إذا وجد لغتين فقط؟
  • كيف تختارُ لغةً لنظام أندرويد، إذا كان هناك “واحدة منها فقط”؟  

بشكلٍ عام في مجال تطوير البرمجيات، إذا كان هناك حاجة لاختيارِ لغة لمشروع ما؛ لا بدّ من  طرح بعض الأسئلة حول:

نوعُ المشروع، قابليّة تطوير التّطبيق، تعقيد التّطبيق، ميزانية التّطوير، الجدوى الزّمنيّة للتطوير، وكذلك أمن التّطبيق، وأيضاً الموارد المتاحة

 من المؤكد أنّ فريقَ المشروع يريدُ للتطبيق أن يبقى لفترة طويلة، ويلبي احتياجات العميل حتى لو طرأ عليها تغييرات في مجرى العمل لاحقاً. 

وفيما يخص ذلك، سنوردُ فيما يلي بعض النّصائح السّريعة:

  • يعدُّ اختيار لغة لمشروع ما في قطاع تكنولوجيا المعلومات للشركات الكبرى أحد أكبر المشكلات الّتي يواجهها مديرو التّكنولوجيا، وبالتّالي فإنّ أهمّ شيء يجبُ أن نفكرَ فيه أثناء اختيار لغات البرمجة هو النّظام البيئيّ والمجتمع، وكذلك توفرُ المبرمجين.
  • يخطئُ الكثير من المطوّرين ويختارون لغات برمجة لمجرد كونها رائعة وأكثر شيوعاً وعصريّة، أو يختاروا لغة غير متمكنين منها لمجرد أنّها خالية من العوائق وتعتبرُ لغة وظيفيّة رائعة، هذا قد يتحولُ لاحقاً إلى قرار خاطئ.. لذلك من الجيد تجنبُ هذا الخطأ.
  • يجبُ أن تستندَ لغة البرمجة لمشروع ما على احتياجات العمل الّتي يتطلبها، وقد يشعرُ المطوّر بأن الأمر متروكاً له تماماً كونه يشغلُ هذا المنصب، وبإمكانه اختيار أيّ لغة للتطبيق. نعم.. قد يكونُ له كل الحرية في اختيار التّكنولوجيا الّتي يريدها، ولكن هذا لا يعملُ في مؤسسة تكنولوجيا المعلومات وقد يأتي بنتائجَ عكسيّة.
  • ينبغي على المبرمج أوّلاً الانتباه إلى جميع الأجزاء المؤثرة في المشروع، والتّعرف على جميع عناصره للحصول على فكرة أوضح عنه وسيساعده ذلك في اختيار لغة برمجة معينة، حيث أنّ الرّؤيةَ الجيدة في بداية المشروع تؤدي إلى اختيار لغة مناسبة، مما يساهمُ في قضاء وقت أقلّ في صيانة المشروع وتوسيع نطاقه وتأمينه لاحقاً.
  • في البرمجة، إذا كان بإمكان المستخدم كتابة برامج جيدة بلغة C# أو Python أو Java أو  PHPأو أيّ لغات أخرى، فيمكنه أيضاً كتابة برامج سيئة باستخدام هذه اللّغات.. فلا وجود للغة واحدة تمثلُ الخيار الأفضل لأيّ برنامج.

 قد تكون بعض اللّغات مناسبة لبعض المشاريع أكثر من غيرها..

فعلى سبيل المثال، لم تكن Java لغة جيدة في بداية إنشائها، إلّا أنّها كانت أكثر ملاءمة من اللّغات المنافسة الأخرى..

وبناءً على ما سبق من الضّروريّ التّفكير بهذه الطّريقة أثناء اختيار اللّغة.

وفي ضوء ذلك، سيتمّ مناقشة بعض الأسئلة الّتي يجبُ طرحها أثناء اختيار لغة برمجة لمشروع ما :

أسئلةٌ يجبُ طرحها عند اختيار لغة برمجة لمشروع ما:

  • هل لدى اللّغة دعم ملائم لبيئة النّظام؟ هل ستعملُ على المدى الطّويل؟ وهل يتوفرُ دعم لهذه اللّغة من قبل البائع؟ وأيضاً ماهي بيئة عمل المشروع (الويب، الجوال… ،الخ)؟
  • هل نحتاجُ إلى النّظر في بعض البنية الأساسيّة مثل المعدات الجديدة؟ وما هو نوعُ المهمة الّتي نحتاجها؟
  • ماذا يفضلُ الزّبون؟
  • ما هي متطلبات لغة البرمجة من المكتبات والميزات والأدوات؟
  • هل المطوّر جاهز لكتابة الكود البرمجيّ بهذه اللّغة؟ أمّ سنحتاجُ إلى توظيف مبرمجين جدّد؟ وهل هم من ذوي الخبرة في التّعامل مع هذه اللّغة؟
  • ماهي بعضُ القيود الهامة لهذا المشروع.. الوقت والميزانية والموارد؟
  • ما هو الاعتبارُ المتعلق بالأداء وهل اللّغات مناسبة لاستيعاب هذا الأداء؟
  • ما هو الاعتبارُ الأمنيّ وهل نحتاجُ إلى استخدام أيّ أداة تابعة لجهة خارجيّة؟

إنّ الأسئلةَ الواردة أعلاه تزيل الكثير من الالتباس في اختيار لغة برمجة لأيّ مشروع يريده المستخدم.

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

لذلك فإنّ اختيارَ المستخدم  للغة البرمجة المناسبة لمشروعه؛ تحتاجُ إلى مراعاة عوامل مختلفة مثل الأداء ونوع التّطبيق والأمان وما إلى ذلك..

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

نوعُ التّطبيق:

يجبُ أن يكونَ لدى المستخدم هدف واضح في ذهنه قبل اختياره لغة برمجة تناسبُ مشروعه.

يعتمدُ اختيار اللّغة بشكل كبير على نوع التّطبيق، فما هو نوع التّطبيق الّذي سينشئه المستخدم؟

هل هو تطبيق ويب أو تطبيق جوال أمّ برنامج ثابت أو مُدمج وما إلى ذلك.

يعتبرُ نوعُ التّطبيق أوّل وأهمّ العوامل الّتي يجبُ مراعاتها قبلَ اختيار أيّ لغة برمجة لمشروع ما، وكذلك نحتاجُ إلى مراعاة مدى تعقيد / حجم التّطبيق.

وبالتّالي يمكن إنشاء المشاريع الصّغيرة مثل نموذج تطبيق الويب أو عرض الملفات أو موقع التّسويق البسيط أو مدونة شخصية بسيطة باستخدام بعض أنظمة CMS مثل  WordPress(يتطلبُ معرفة لغة PHP) أو Umbraco (تتطلبُ معرفة لغة C#).

 ويمكن استخدام C# أو Java للمشاريع متوسطة الحجم، مثل: مواقع التّجارة الإلكترونيّة وتطبيقات المؤسسات الدّاخليّة وحلول انترنت الأشياء.

فعلى سبيل المثال، تعتبرُ اللّغات كائنيّة التّوجه هي الأنسب بالنسبة لتطبيقات الويب

ومن أجل تطبيقات الأندرويد فإنّ Java أو Kotlin تعتبرُ جيدة لذلك. ويمكن استخدام لغات المستوى المتوسط مثل C لبرمجة النظام.

  • تطويرُ الواجهة الأماميّة: JavaScript و HTML و CSS
  • تطويرُ الخلفيّة: Python أو C# أو JavaScript
  • تطويرُ لعبة ثنائيّة الأبعاد: JavaScript أو C#
  • تطويرُ لعبة ثلاثيّة الأبعاد: C# أوC++
  • علمُ البيانات/ تعلم الألة/ التّحليلات : Python و R وClojure و Julia
  • الرّياضياتُ والحوسبة العلميّة: Matlab FORTRAN ، ALGOL، APL، Julia، R، C++
  • البياناتُ الكبيرة: Java، Python، R، Scala، Clojure
  • أنظمةُ التّشغيل : C، C++
  • نظامُ التّوزيع: C، Go، Rust

المنصةُ المستهدفة:

إنّ النّظامَ الأساسيّ المستهدف الّذي يريدُ المستخدم تشغيلَ برنامجه هو عاملٌ آخر يجبُ مراعاته.

لنفترض مثلاً أنّ لدى المستخدم لغتين Java و C، وكتبَ برنامجاً بلغة C ويريدُ تشغيل برنامجه هذا على نظاميّ التّشغيل Linux و Windows.

في هذه الحالة، سيحتاجُ إلى برامجَ التّحويل البرمجيّ للنظام الأساسيّ (المترجم إلى لغة الآلة) وملفين تنفيذيين مختلفين.

أمّا في حالة لغةJava، فسيتمّ إنشاء ملف التّعليمات البرمجيّة المسمى (ByteCode)، ولتشغيل هذا الملف على أيّ جهاز يجبُ تثبيت Java Virtual Machine.

والأمر نفسه ينطبقُ على مواقع الويب، حيث يجبُ أن يعملَ بنفس الطّريقة عبر جميع المتصفحات

أمّا إذا تمّ استخدام استعلامات  CSS3و HTML5، فقد يظهرُ موقع الويب ويتصرفُ بشكلٍ مختلف عبر المتصفحات المختلفة.

قابليّةُ التّعديل:

مهما كانت التّكنولوجيا واللّغة الّتي سيختارها المستخدم، فإنه سيحصلُ على بيئة نظام للمكتبات ودعم من قبل البائع، لكن من الضّروري الانتباه إلى إمكانية تعديل التّطبيق.

ولذلك يتوجبُ على المستخدم أن ينظرَ دائماً إلى أحدث إصدار من مجموعة اللّغة أو التّكنولوجيا

وكذلك عليه التّأكد من اختياره لكلّ ما هو محدّث ويواكبُ التّطورات لفترة طويلة.

وأثناء إنشاء تطبيق ما، سيحتاجُ المستخدمُ إلى التّفكير في التّعامل مع عملائه على المدى الطّويل..

وفي مرحلة ما، قد يتعينُ عليه نقل قاعدة التّعليمات البرمجيّة الخاصة به إلى فريق آخر

كما قد يتوجبُ عليه تعيين مطوّرين داخليين في مجال عمله اعتماداً على التّكنولوجيا الّتي سيعملُ عليها، وعليه دفع تكلفة التّعديل لذلك أيضاً.

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

ففي الغرب الأوسط، يكون من السّهل توظيف مطوريّ Java و C# أكثر من مطوريّ Python و PHP و Ruby.

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

قابليّة التّوسع والأداء:

يعتمدُ أداءُ التّطبيق بشكل كبير على اختيار لغة البرمجة.

وإنّه لمشكلة مهمة جداً إذا لم توفرْ بيئةُ التّطوير مجالاً كبيراً للتوسع في حجم التّطبيق.

وبالتالي كي يحققَ المستخدمُ أداء فعّال لتطبيقه؛ عليه أن يختارَ لغة البرمجة الصّحيحة.

وفي ضوء ذلك، لابدّ لنا من طرح بعض الأسئلة المهمة حول ذلك، ومنها:

كم عدد المستخدمين الّذين يمكن لتطبيقك التّعامل معهم وماذا سيحدثُ في المستقبل إذا زاد عدد المستخدمين؟

هل سيؤدي العددُ المتزايد من المستخدمين إلى إبطاء أداء تطبيقك أمّ أنه سيعطله؟

فكّر في قابلية تطبيقك للتوسع.. هل تطبيقك مرنٌ بدرجة كافية لقبول المزيد من الوظائف الإضافيّة دون إعاقة أدائه؟

لقد تمّ إجراء الكثير من الدّراسات لقياس أداء التّطبيق.

ومع ذلك، لم تعطِ النّتائج تقييمات ملموسة لأداء لغات البرمجة، ومن أحد الأمثلة على هذا النّوع من البيئة هو الأجهزة المحمولة، ومن بعض مكدسات التّكنولوجيا المشهورة والّتي تتمتعُ بإمكانية تطوير جيدة هي Ruby on Rails (ROR) و NET و Java Spring و LAMP و MEAN.

الأمان:

يحتاجُ التّقني إلى التّفكير في أمان تطبيقه أثناء اختياره لغة برمجة، إذ أنّ  لكلّ تطبيق أنواع مختلفة من متطلبات الأمان..

على سبيل المثال، تحتاجُ التّطبيقاتُ المتعلقة بالرّعاية الصّحية إلى الامتثال لقانون HIPAA، ويحتاجُ التّطبيق الماليّ إلى توافق PCI.

وكلما راقبَ التّقني أمانَ تطبيقه؛ سيصبحُ هذا التّطبيق أكثر قوة.

وقبل اختياره أيّ لغة برمجة لتطبيقه، يحتاجُ إلى حمايته من التّهديدات الإلكترونيّة والقرصنة، كما يحتاجُ إلى اتباع إرشادات الأمان.

دعمُ المجتمع:

أثناء تطوير أيّ تطبيق، سيواجه التّقنيّ العديدَ من المشكلات ويمكن أن تحدثَ مشكلة كبيرة إذا لم يتوفرْ دعم مجتمعيّ كافٍ.

فقد يتعطلُ التّطبيق في أيّ لحظة أثناء إنشائه، مما يجعل التّقني يستعينُ ببعض الموارد أو بعض المطوّرين الآخرين

وهذا هو السّبب الّذي يجعلُ من  هذا العامل ضروريّ.

فإذا اختارَ التّقني لغة لا يتوافر عنها برامج تّعليميّة أو مقالات؛ سيكون من الصّعب عليه تكييف اللّغة والعمل معها.

وبالتّالي قبل اختيار أيّ لغة برمجة، من المهم التّحقق من دروس الفيديو والمقالات والمنتديات وبعض دعم المجتمع مثل Github أو Reddit أو StackOverflow.

وقتُ التّطوير:

تريدُ كلّ منظمة أو أصحاب مصلحة إصدار التّطبيق في أقرب وقت ممكن، وهذا هو السّبب في أنه يتوجبُ على التّقنيّ أن ينتبهَ لهذا العامل الّذي هو “وقت التّطوير”.

بالتّالي عليه أن يختارَ لغة يمكن أن تساعده في بناء التّطبيق بأسرع ما يمكن، فإذا كان دعمُ المكتبة أو سلسلة الإجراءات أو النّماذج كافية للغة ما

فلن يضطر المبرمج إلى إنشاء كلّ شيء من البداية وسيوفر وقت التّطوير لتطبيقه.

وهنا يحتاجُ إلى الخبرة في اللّغة الّتي اختارها، فكلما زادتْ معرفته باللّغة؛ قلّ الوقت الّذي سيستغرقه في التّطوير..

وبعبارة أخرى، إذا كانت اللّغة سهلة التّعلّم؛ لن يستغرقَ الكثير من الوقت لتعلمها وإنتاج الكود البرمجيّ، وسيضعُ تطبيقَه مباشرة على الخادم.

الأفكارُ النّهائيّة:

وأخيراً، ومن خلال قائمة الأسئلة الّتي يجبُ طرحها وقائمة لغات البرمجة المتاحة، وبعد النّظر في العوامل المختلفة

أصبح بإمكان التّقنيّ اتخاذ قرار معقول بشأن لغة البرمجة الّتي سيستخدمها

ومن الجيد مقارنة اللّغات بناء على العوامل المذكورة أعلاه لاختيار اللّغة المناسبة للمشروع.

مصدر المقال : اضغط هنا

  • إعداد : المهندسة سهى عبدو
  • متابعة : المهندسة رهف النداف
  • تدقيق : المهندسة اسماء حمود
  • تحرير : المهندس بشار الحجي