لماذا معظم الجامعات العربية والاجنبيه تقوم بتدريس لغة الجافا في مقررات البرمجة؟ لماذا لا يتم تدريس لغات اخرى مثلا لغة C# والتي تتميز بوجود IDE رائع الا وهو الفيجوال ستوديو؟
لماذا تدرس الجافا بالجامعات؟
المفترض أن الجامعة لا تريد من طلبة هندسة البرمجيات أو اي فروع علوم الحاسب ان يتعلموا على استخدام IDE بل المحرر العادي، لأن من يستطيع البرمجة على المحرر، يستطيع بستخدام IDE والعكس غير صحيح. والجامعات، لاتركّز على Java فحسب بل كل لغة برمجة مصدر مترجمها مفتوح ومسنّده بشكل جيّد كـ C++ و JAVA و Python وقابلة للعمل على أنظمة التشغيل المشهورة. أما لغة C# أحياناً على حسب معرفتي في التكاليف التي تقدمها الجامعة للطلاب يحق للطالب ان يختارها في عمله، ولم احضر محاضرة يتم تدريس C# بها أو يعتمد عليها المنهج.
ببساطة لأن الجامعات لا تدرّس لغة برمجة. نادراً مايكون هناك مادة اسمها (مادة الجافا مثلاً) خصوصاً في المنهجية الحديثة. المواد اسمائها مثلا (اساسيات البرمجة) أو (البرمجة الكائنية التوجه) ، (التحليل والتصميم) وما الى ذلك. فالمقصد شرح (المنطق) وليس شرح الشفرة البرمجية (الكود). الكود شرحه سهل وسريع، ولا يأخذ من وقت أي محاضرة ويُعتمد غالباً على الطالب في كتابته الشفرة البرمجية أو Syntax لغة البرمجة ليس علما يحتاج الى فصل دراسي كامل، يومان كحد اقصى حتى يتعوّد المبرمج أو مهندس البرمجيات على اسلوب او Syntax لغة غير المعتاد عليها. الأساس هو المنطق. والمنطق لايحتاج C# أو Objective-C ولا يحتاج ايضاً IDE، وهذا ما تركّز عليه الجامعات.
ففرضاً لو كان المُحاضر يشرح C# على Visual Studio سوف يصعب على الطالب الذي لديه نظام تشغيل لينكس تطبيق مايتعلمه. بينما لغات مثل Java و C و Python تستطيع تطبيق ماتتعلمه حتى من أنظمة الهواتف المحمولة.
وسبب اخر C# هي أمتداد للغات C فيتعلم الطالب الأساس ليفهم على أي اساس بُني الفرع. في تخصصي، هندسة برمجيات ليس هناك مناهج لغات برمجة نهائياً نتعلم المنطّق ومن خلال المنطّق، لايبقى على تعلم أي لغة برمجة الا Syntax وأمور بسيطة نستطيع معرفتها فورا عن طريق التسنيد (Documentation).
توجد استثناءات . مثلاً في جامعة البحرين يستخدم IDE مثل Visual Studio و JCreator ، و يوجد مقرر اسمه Java Concepts .
في تخصصي، هندسة برمجيات ليس هناك مناهج لغات برمجة نهائياً نتعلم المنطّق ومن خلال المنطّق،
هل ممكن التوضيح أكثر ؟
نعم في بعض التخصصات تدرس لغة البرمجة كتخصص إدارة الاعمال يُعْطَون دورة احياناً في لغة Basic او C++ حتى تكون لديهم معلومات عامة. كذلك في تخصص IT (تقنية المعلومات) في جامعتي كانوا سابقاً يدرسون مادة لغة برمجة، كنظرة عامة حتى يكون لديهم احاطة علمية بها. وحالياً بالنسبة لتقنية المعلومات غيروا اسم المادة من C programming إلى Programming fundamentals (أساسيات البرمجة) بحيث يتعلمون المنطق من خلال لغة البرمجة ليس تعلم لغة البرمجة فقط.
أما مسألة توضيح الجملة، أقصد أنه لاتهتم الجامعة في تخصصنا في تعليمنا لغة برمجة. ليس كما تتعلّم من كتاب لغة الجافا. في مادة اساسيات البرمجة، طبّق المُحاضر شرح منطق البرمجة على لغة C++ بينما تُحل الواجبات باللغة التي يختارها الطالب. حيث تتشابه لغات البرمجة بنفس المنطّق وتختلف بالنسق وبعض القواعد.
مادتين احتاج المحاضر أن يكتب شفرة برمجية ويعرضها على البروجكتر فقط بين كل المواد التعليمية. وهاتين المادتين الوحيدتين اللتان يحتويان على شفرة برمجية في شرائح المنهج. باقي المواد خوارزميات وتصميم ومنطق.
وحتى الشفرات البرمجية كانت تطبيق لخوارزمية معينة، ليست لشرح لغة البرمجة ذاتها. مع ذلك تقريباً في كل مواد التخصص يجب أن نسلّم مشروعانِ برمجيان، أعتاد الطلبة على أن فهم نسُق وقواعد لغة البرمجة لا يحتاج أكثر من يومان، بينما تطبيق الخوارزميات حسب المنطق البرمجي بإسلوب موحّد تقريباً في كل اللغات.
فمثلاً عندما اريد كتابة دالة تطبق خوارزمية The tower of hanoi
هذا هو السودو كود للدالة:
PROSEDURE MoveTower(diskSize, source, dest, spare):
IF diskSize == 0, THEN:
Output: move disk from source to dest
ELSE:
MoveTower(diskSize - 1, source, spare, dest) // Step 1 above
Output: move disk from source to dest // Step 2 above
MoveTower(diskSize - 1, spare, dest, source) // Step 3 above
END IF
لو فهمنا المنطق نستطيع ترجمته الى لغات البرمجة العدة.
مثلاً C++
void MoveTower(int diskSize, int source, int dest, int spare)
{
if(diskSize == 0)
std::cout << "Move disk from " << source << " to " << dest << endl;
else
{
MoveTower(diskSize - 1, source, spare, dest);
std::cout << "Move disk from " << source << " to " << dest << endl;
MoveTower(diskSize - 1, spare, dest, source);
}
}
نفس الترجمة مع Java
public void MoveTower(int diskSize, int source, int dest, int spare) {
if (diskSize == 0) {
System.out.println("Move disk from " + source + " to " + dest);
} else {
MoveTower(diskSize - 1, source, spare, dest);
System.out.println("Move disk from " + source + " to " + dest);
MoveTower(diskSize - 1, spare, dest, source);
}
}
كذلك في لغة Python
def moveTower(diskSize,source, dest, spare):
if diskSize == 0:
print("Move disk from ", source, " to ", dest)
else:
moveTower(diskSize-1, source, spare, dest)
print("Move disk from ", source, " to ", dest)
moveTower(diskSize-1, spare, dest, source)
لو تلاحظ، الاختلاف في الاكواد جداً بسيط. نُسق وقواعد بسيطة، انما المنطق موحّد ونفس التصميم والتسلسل الهرمي بالضبط، فما تُعلمه الجامعات، المنطق الذي يجعلك تستطيع التفكير وهندسة هذه الخوارزمية، أما تطبيقها في كود برمجي، الأمر سهل للغاية.
ربما لانهامجانية ولانها مصنفة كأول لغة بالاضافة انها تعمل على كل المنصات كما انها ربما اول لغة برمجة كائنية التوجه بمواصفات قوية
والله اعلم
ليست أول لغة برمجة، وليست ايضا أول لغة برمجة كائنية التوجة. لغة Assembly قبلها وكذلك لغة SIMULA هي أول لغة برمجة كائنية التوج.
لكن لغة التجميع معقدة فإحدى عشر سطر يعادل سطر واحد من بايثون والسطر هو كتابة جملة "أهلًا بالعالم" !
لكن لغة التجميع معقدة فإحدى عشر سطر يعادل سطر واحد من بايثون والسطر هو كتابة جملة "أهلًا بالعالم" !
ليست لغة التجميع بهذا التعقيد، وإنما كل ما في الأمر أنها تتعامل مع المعالج مباشرة (وإن كان بوسيط لغوي سيحول في النهاية إلى لغة الآلة).
أما ما يتعلق بكون سطر واحد ببايثون يعادل إحدى عشر سطرًا بالتجميع، فهذا صحيح إذا كان برنامجك لن يقوم إلا بكتبة كلمة "أهلًا بالعالم!"، أما في الغالب فكثير من أوامر بايثون تعادل سطرين (أو بالأصح أمرين)، أو ثلاثة بغلة التجميع.
والله أعلم.
في إعتقادي أن تدريس الجافا في الجامعات مُرتبط أولاً بأنها لغة كائنية المنحى (OOP) و لكن بضربك مثالاً بلغة C# , و التي تعتبر أيضاً كائنية المنحى فإني شخصياً أعتبر أن منتجات شركة مايكروسوفت غير مناسبة لتعليم الطلاب لعدة أسباب:
1- ليست كل المؤسسات التعليمية بإستطاعتها توفير إشتراكات رسمية أو شراء برامج رسمية من مايكروسوفت. و بذلك ستجد أن الجامعات تعتمد على لغات برمجة مختلفة كثيراً و تفقد المعيارية في التدريس.
2-ليس كل الطلاب بإستطاعتهم بعد تخرجهم و رغبتهم في العمل الخاص مثلاً شراء رخصة من مايكروسوفت، و بذلك يظلم كثير من الطلاب الراغبين في العمل.
3-السهولة النسبية - و ليست التامة - أو لنقل الصعوبة النسبية لإستخدام محررات الجافا تجبر الطالب على التعلم و الحفظ بدلاً عن (السحب و الإفلات) و بذلك يصبح خبيراً فعلاً و يصنع فارقاً بين من تخرج من الجامعة و بين من تعلم البرمجة بالسحب و الإفلات من منزله.
أكتب حالياً عن لغة البرمجة جافا هنا
و تسعدني متابتعتك
التعليقات