لماذا تعتبر لغة جافا من أصعب اللغات من ناحية التعلم
و هي في حال كان لي معرفة سابقة بلغة الc# و البرمجة كائنية التوجه سيسهل علي الأمر
الصعوبة ليس في اللغة وإنما بمنطق البرمجة نفسه
فمن تعلم وفهم منطق البرمجة وأصبح لديه ملكة التفكير البرمجي تسهل عليه كل اللغات
أما إن لم يتمكن من هذا النمط من التفكير فسيجد صعوبة حتى في أبسط اللغات
خذ مثال :
من لا يعرف الشعر فسيصعب عليه نسج أبيات أو قصيدة حتى بلغته الأم أي العربية
أما من أصبحت لديه موهبة الشعر أو النثر أو القصة أو الرواية
فيستطيع نسج ما يريد سواء بلغته الأم أو بأي لغة جديدة يتعلمها ويتعلم قواعدها
وحالتك كمن لا يعرف بالشعر ثم جاء لينسج قصيدة باللغة الأجنبية فلم يتمكن فقال أن اللغة الأجنبية صعبة جدا
وهذا غير صحيح
في سؤالك الأخير نعم من كان لديه خبرة بلغة ما فمن السهل عليه الانتقال وتعلم أي لغة أخرى وخصوصا إن كانت بنفس النمط
بمعنى لغة مثل سي شارب هي من النمط OOP فمعرفتك بها تسهل عليك تعلم لغة مثل Java
بينما قد تجد صعوبة في تعلم لغة مثل #F لإنها لغة إجرائية و أشبه بنمط البايثون
في رأيي فإن الـjava صعبة بالنسبة للمبتدئين و ليس للمحترفين، بل إنها بالنسبة للمحترفين تعتبر من اللغات ذات الحجم الجيد و القواعد الوسط (ليست بسهولة الـpython و لكنها ليست بتعقيد الـ++C). و مصدر صعوبة الـjava في حالة المبتدئين بشكل أساسي هو أنها تحاول أن تكون "كائنية التوجه بالكامل pure object oriented"، و هذا يعني أن المبتدئ الذي يقف علي عتبة المعرفة البرمجية (أي لا يعلم ما معني كلمة "كود" من الأصل) سيكون عليه لكتابة سطر واحد علي الشاشة أن يكتب كوداً لتعريف صنف class به دالة method لها الاسم "main"، و تأخذ مُعاملاً parameter من نوع مصفوفة نصية array of string:
public class main_entry {
public static void main(String[] args){
}
}
بينما هو لا يعرف أصلاً ما معني كلمة "أمر برمجي" !. لذلك تجد المعتاد في مثل هذه المواقف أن المعلم يقول للمبتدئ كلام من عينة: "لا تهتم بهذه الأمور الآن و اكتبها كما هي، سنعود لها فيما بعد"!، و هذا لا يزيد الأمور بالنسبة للمبتدئ إلا تخويفاً.
لكن كما قلتُ من قبل، فإنه عند مقارنة الـjava بلغة مثل الـ++C بكل ما فيها من قواعد لا توجد في الأولي (مثل المؤشرات pointers) فإنك ستجد الـjava أبسط بكثير تعليمياً (علي الأقل من وجهة نظري)، كما أنك لو قارنت الـjava من حيث الحجم بلغات مثل visual basic .net لوجدتَ الأولي أصغر بشكل ملاحظ؛ لأن الأخيرة تحمل عبء المكونات القديمة التي تنتمي لعالم VB6 و تم إضافتها إليها لكي تكون (في أعين مبرمجي تلك اللغة الأقدم) خلفاً لها، فينتقلون إليها بصفتها المستقبل و تكسبهم Microsoft كمستخدمين للغتها الجديدة، و لكن ذلك أدي إلي تخمة مبالغ؛ فيها لاحتواء اللغة علي الكثير من المكونات المتشابهة من حيث الشكل و الوظيفة، و لو لم تكن اللغة مرغمة علي هذه الحالة من التوافقية العكسية الجزئية لصارت أخف مما هي عليه بكثير.
الشاهد هنا أن الـjava لغة أبسط من كثير من اللغات الأخري، و أخف وزناً من لغات أخريات، لكنها من الناحية التعليمية ليست بسهولة كثير من اللغات التي أراها تصلح لهذه الجزئية بشكل أفضل (python, ruby و ما شابههن من لغات). إلا أن العامل الوحيد الذي يُغري باستخدام الـjava في العملية التعليمية هي أنها احترافية من الطراز الأول، و أنها تحتل المركز الأول أو الثاني في قائمة المهارات التقنية المطلوبة للعمل، و كذلك فهي تحتل المركز الأول أو الثاني من حيث لغات البرمجة الأكثر استخداماً:
و لو كنتَ أستاذاً جامعياً قادراً علي اختيار لغة برمجة لاستخدامها في تعليم الطلاب، فبما أن الـjava لغة تضمن لطلابك فرصة أكبر في الحياة العملية فستكون لها الأولوية عندك، علي الرغم من تفوق غيرها عليها في الناحية التعليمية.
جافا مبنية على "اتفاقيات" Convension إذا فهتمها ستسهل عليك البرمجة بجافا، فمثلا في مثالك السابق اسم الفئة:
main_entry صحيح ولن يحدث أي خطأ، لكنه مخالف للعرف السائد في لغة جافا، إذ أن الفئات (Classes) تكتب بالأحرف الكبيرة في أول كل كلمة مثل: MainEntry... وهكذا...
فيما يخص السؤال، صعب أو سهل الأمر نسبي، جافا بدأت بفلسفة خاصة معتمدة على الآلة للافتراضية لذلك كانت تبدو مختلفة -أو صعبة في نظر البعض-، أيضا قد يسميها البعض صعبة لأنها لغة "ثرثارة" verbose أي تكتب كثيرا لتنجز قليلا، لذلك ظهرت فوقها لغات تسهل استخدامها وتقلص من عدد الأسطر المطلوبة للبرمجة، مثل ذلك: Groovy وScala...
غريب , اكثر من يدرس علوم الحاسوب يدرس الجافا او السي ++
هل الدرس يحتاج الى الهاسكال ؟ ام خيار الجامعة ؟
الدرس يحتاج الى هاسكل ..
الفصل الاول ندرس Functional programming مع Haskell اسم المادة ALP1
اجد ذلك اختيار مناسب جدا .. لانك تحتاج فهم المنطق ورائها "Lambda calculus"
الفصل الثاني Imperative programming & OOP مع Python و java اسم المادة ALP2
الفصل الثالث خورزميات بشكل معمق مع java اسم المادة ALP3
الفصل الرابع concurrent programming لغة go اسم المادة ALP4
الفصل الخامس networks programming لغة Go, Java, Erlang ,Haskell اسم المادة ALP5
Erlang على الخفيف.
اختصار ALP هو خورميات وبرمجة يعني انك تدرس بجانب كل منطق خورزميات الا عند الفصل الثالث التركيز كلها على الخورميات وايجاد خوزميات وفحص سرعتها واثبات صحتها.
لغات اخرى ايضا نتعلمها مع مواد اخرى مثل سي و اسمبلي نتعلهم مع مواد انظمة الحاسوب.
الجيد بالامر ,, انك بنهاية تعلمت كل شئ اساسي ولك الحرية الاختيار بالمستقبل اي لغة تجعلها لغتك الاساسية.
لذلك من نظرتي اصعب شئ اسمبلي.. اجد Go Lang صعبة نسبيا وسبب كان عدم نضوج اللغة عندما كنت اواجه مشكلة عدد المراجع قليل نسبيا.
حاليا ادرس Ruby لمادة اجدها جدا ممتعة اكثر من python :)
التعليقات