| المفاضلة بين لغات البرمجة | |
|
|
كاتب الموضوع | رسالة |
---|
وائل حسن مهندس بيشارك كويس
عدد المساهمات : 104 تاريخ التسجيل : 18/05/2010 العمر : 37 الموقع : أرى بخارى بلادي وهي نائية -- وأستريح إلى ذكرى خراسانِ Upload Photos : أهم مواضيعى : مدونتي الشخصية:
مدونة أفكار (مدونةٌ شخصيةٌ عن: السياسة، و المجتمع، و الأدب، و العلم.)
http://afkar-abo-eyas.blogspot.com
| موضوع: المفاضلة بين لغات البرمجة السبت 18 ديسمبر - 15:56 | |
| السلام عليكم ورحمة الله و بركاته رغم أن الموضوع فى أصله كان من طرح البشمهندس يحيى فى الموضوع المسمى (حوار المبرمجين*** شارك برأيك) و هو الموضوع القديم جداً لكنه مغر للغاية بالتحدث فيه، لذلك قمت بطرح الأمر من جديد للمناقشة رجاء الإفادة و الإستفادة فى هذا الموضوع الحيوى، و ذلك لأننى أؤمن أن المفاضلة بين لغات البرمجة موضوع رئيس يجب على كل مبرمج أو حتى مطور الإحاطة به و سماع وجهات النظر المختلفة فيه.. و الحق أن المفاضلة بين لغات البرمجة قديمة قدم اللغات كلها، فمنذ أن تعددت اللغات أصبح من ضمن هموم المبرمجين المقارنة بين لغاتهم و اللغات الأخرى للعديد من الأسباب، و أهمها الإجابة عن السؤال القائل: أى اللغات تصلح لأى الأهداف التجارية المختلفة، و أى اللغات تصلح للتعليم، و هل توجد لغات تجمع بين المحاسن البرمجية كلها؟ أم أنه علينا أن نستخدم لكل مجال لغته ؟ و قد وضع المقارنون السابقون عدة معايير للحكم بها على لغات البرمجة (أوجه مقارنة) منها:
المحمولية Portability
الأمن Safety
الاستقرار Stability
الدعم القوى من المالك
دعم التقنيات الحديثة
إنفتاح المصدر
البساطة و البعد عن التعقيد
الأداء العالى للمنتجات
و غيرها من الأوجه الأخرى، و بالطبع فإن كل جماعة من هؤلاء المبرمجين كانت لهم الأولويات الخاصة بهم و الترتيب الخاص للعناصر السابقة، فمنهم من كان الدعم القوى من المنتج بالنسبة له يعد الأهم بلا منازع (و نرى معظم هؤلاء من أتباع مايكروسوفت) فى حين تلى ذلك باقى الناصر فى الأهمية، و هناك من يضع إنفتاح المصدر و البساطة فى المرتبة الأولى و..و....و غيرها. أما عما أراه أنا معياراً مناسباً للحكم على لغات البرمجة فألخصه فى العناصر التالية:
1) التخصص
3) التهجين
4) البساطة
5) الأمن
6) التجرد
7) الشمول
1- التخصص:
قضية التخصص هنا أحصرها فى المسألة التى تناقش ما يجب على المبرمج البانى للمترجم القيام به و ما يجب أن يترك للمبرمج مستخدم اللغة لكى يفعله، و يمكننى أن أعبر عن رأيى فى هذه القضية بجملة بسيطة و هى "دع الإدارة للمترجم و حل المشاكل الأساسية للمستخدم"، و هو الرأى الذى أظن أنه يمكننى أن أكتفى به فى هذه النقطة كموضح لرأيى كل الوضوح، إلا أننى لن أضن على القارئ ببعض الشرح لعلى أوضح أمراً التبس عليه من مجرد قراءة تلك الجملة المقتضبة.
حينما أقول الإدارة فإننى أقصد مجمل الأنشطة التى تختص بإدارة الذاكرة، و التى أفصلها فى البندين التاليين:
1) تحديد المكان الذى ستوضع به البيانات فى الذاكرة أى عملية حجز الأماكن لها
2) تحديد الوقت المناسب الذى سيتم فيه إرجاع الأماكن التى حجزت لمتغيرات فى الذاكرة ثم لم تعاد هناك حاجة لها إلى حوزة نظام التشغيل مرة أخرى لإعادة استغلالها
فهاتين النقطتين تمثلان التعامل الكامل مع الذاكرة من وجهة النظر البرمجية للمستخدم لنظام التشغيل، أما الإدارة التى يقوم بها نظام التشغيل فهى عملية أكثر تعقيداً و تشعباً من هذه بكثير و إن كانت ترتكز عليها بشكل أساسى.
و نظرتى إلى هاتين النقطتين على أنهما من نصيب المبرمج البانى للمترجم أو المفسر يوضح نظرتى إلى بنية إدارة الذاكرة و توزيع المسئوليات فيها، حيث أقسمها إلى ثلاث مراحل هى:
1) القسم الأدنى: و يختص به نظام التشغيل. و هو الأمور التى تتعلق بكيفية تنظيم العمليات التى يجرى تنفيذها على الحاسوب فى الذاكرة، و كيفية إحلال البرامج الجديدة التى يرغب المستخدم للحاسوب فى العمل عليها محل تلك التى قيد التنفيذ و لكنها متوقفة عن العمل وقتياً. و كذا كيفية التنسيق بين التصور للذاكرة على أنها منطقة متصلة من الأماكن التخزينية مصفوفة فوق بعضها البعض و بين التصور الواقعى لها على أساس البناء العتادى لها أى طريقة بنائها كما صممتها شركة التصنيع لرقاقة الذاكرة.
2) القسم الأوسط: و يختص به المترجم و المفسر. و يختص بحجز مكان فى الذاكرة للمتغيرات و مكونات البرنامج المختلفة، و فى النهاية إرجاع أى مساحة فى الذاكرة لم يعد البرنامج فى حاجة إليها إلى نظام التشغيل مرة أخرى لتقليص الفاقد من إمكانيات جهاز الحاسب إلى أدنى المراتب.
3) القسم الأعلى: و هو مجرد الإستخدام بدون التقييد بكيفية معينة، و يختص به بطبيعة الحال المبرمج العادى للتطبيقات العليا.
و أنا أعتبر أن أى مساس بهذا التقسيم سيحول العملية البرمجية إلى حلبة جودو، حيث تتداخل أقدام و أذرع المتصارعين بشكل لا يدرى معه أحد لمن هذا الذراع و لمن هذه القدم. و بالطبع فإن هذه الحال لا ترضى من يدافع عن الحق الطبعى للمبرمج العادى فى الحصول على الحرية القصوى و الراحة الكاملة فى التركيز على حل مشكلته التى يرغب فى حلها، بدلاً من تفريغ جزء من وقته و جهده لعملية من الواضح أنه لا ناقة له فيها و لا جمل.
ثم إننى أتساءل عن الوظيفة التى ندخرها للمترجم إن كانت إدارة الذاكرة من نصيب المبرمج العادى، فهل ستكون مهمة المترجمات الرئيسة التى تركز عليها أغلب التركيز هى عملية التحويل من النص البرمجى عالى المستوى إلى الأصفار و الوحدان على الشكل الذى يفهمه معالج معين لنظام تشغيل معين؟.
إننى أظن أنه من اللازم حقاً أن يركز مطوروا اللغات البرمجية على النموذج النظيف منها، و أن يضعوا نصب أعينهم تطوير مترجمات كفؤة تعين المبرمج المستخدم على التركيز على عمله الأساسى و فى نفس الوقت تطبق أفضل الخوارزمات التى تعطى البرنامج كفاءة الإستغلال الأفضل لموارد الجهاز.
التهجين:
تتفاخر كثير من اللغات البرمجية (أو على الأحرى يتفاخر مصمموها و المستخدمون المتعصبون لها) اليوم بأنها لغات كائنية صرفة أو لغات وظائفية أو إجرائية صرفة، و ذلك من منطلق أن الخير كل الخير فى ذلك النمط البرمجى الذى تخصصت فيه تلك اللغات و لا خير فيما عاداه، و هو القول الذى أود أن أنوه هنا إلى مدى حمقه و بلاهته.
فنرى من يتعصب للجافا يقول أن البرمجة الكائنية هى الأفضل و هى النوع الأقوى من الأنماط البرمجية التى وصل إليها الفكر البرمجى البشرى و بالتالى كان من الرائع أن تكون الجافا تامة الكائنية، و هناك من يصر حتى اليوم على أن البرمجة الوظائفية هى الأفضل و الأقدر على القيام بكل المهام بسهولة و بالتالى تكون البرمجة بلغات عتيقة مثل الـ(C) منتهى المتعة بالنسبة له.
و الحق أننى لا أرى الحق مع أى منهما، بل أراهما رأيا ما امتلأ من الكوب و لم ينتبها إلى ما فرغ منه، فالمبرمج باللغة الكائنية الصرفة لم ينتبه إلى ما بها من عيوب كان بإمكانه تفاديها عند البرمجة بالنمط الوظائفى أو الإجرائى، و كذا فالمبرمج الوظائفى أو الإجرائى إن صح لى أن أسميه هكذا لم ينتبه إلى أنه كان بإمكانه الإفادة من ميزات البرمجة الكائنية بدلاً من المعاناة التى وضع نفسه فيها حينما استخدم نمط البرمجة الآخر.
و قولى هنا يستند إلى أن كل نمط برمجى له ميزاته و عيوبه التى يعلمها كل دارس لعلم هندسة البرمجيات الذى هو للمبرمج بمثابة أصول الفقه للفقيه و أصول الحديث للمحدث بلا زيادة أو نقصان، و مادام الأمر هكذا فإنه من الأفضل لو استطاع المبرمج أن يستخدم كل نمط من هذه الأنماط فى أفضل النواحى التى يتميز فيها ذلك النمط و يكون من الأكفأ استعماله فيه. و مادامت اللغة البرمجية هى الأداة التى يستعملها المبرمج فى عمله فإن هذه الأداة ستكون هى الفيصل فى تحديد الاختيارات التى سيقوم المبرمج باختيار نمط البرمجة المناسب من بينها، فلو كانت اللغة صرفة النمط (سواء أكانت كائنية أم وظائفية أم إجرائية) فإنها تقوم عندئذ بفرض ذلك النمط على المبرمج و تكبله به و تقيده به تماماً فلا يفارقه، أى أنها تعطيه كل ميزات ذلك النمط و لكنها تحمله كل عيوبه، و فى نفس الوقت تحميه من عيوب الأنماط الأخرى و لكنها تحرمه من المميزات التى تتمتع بها و لا توجد فى نمطها المختار.
و المجادلة بأنه يمكن ببعض الالتفاف بناء نمط باستخدام نمط آخر هو نوع من الاستجارة بالنار من الرمضاء، فمادام هناك الطريق الأسهل و هو إتاحة الفرصة أمام المبرمج ليختار النمط الذى يرتضيه لتطبيقه فلم تكلف العناء و إثقال عاتق المبرمج بمهمة الإلتفاف و الدوران ليحصل على ما يريد، ثم فى النهاية نجد أن لهذا الأمر أضراره التى لا تخفى على أحد و منها:
1- هناك أنماط يكون من الصعب أن تعلمها للمبرمج المبتدئ فى البداية قبل الأنماط الأخرى، مثل البرمجة الكائنية التى لا يمكن لأحد أن يفهمها جيداً قبل أن يفهم اولاً البرمجة الإجرائية و الوظائفية، و ما يحدث عندما يكون أمامه لغة برمجة كائنية صرفة مثل الجافا و يبدأ أول تعليمه بها ببرنامج هو الأبسط فى أى لغة مثل:
ثم يتساءل ببراءة عن معنى (public) و (class) و (static) أن المعلم له يبدأ فى قول كلام كثير من عينة (لن نتحدث عن هذا الآن) و (أكتبها كما هى و سأخبرك بالسبب فى وقت لاحق) و (كلا لا تخلط بينهما فهذه موضوع درس اليوم و تلك موضوع الدرس العاشر فلا تتعجل و اكتب كما أقول لك و ستفهم فيما بعد) و غيرها الكثير و الكثير من الكلام الذى لا يجد فى نفس المستمع إلا دور إثارة الحيرة و الإرتباك بشدة. و يكون بعدها من الجلى أنه لا يمكننا تعليم البرمجة بلغة مثلها لأنه تحتاج إلى المرور على اللغات الأخرى أولاً قبل المجئ إليها و بالتالى يضيع الكثير و الكثير من الوقت على المبرمج المبتدئ متخبطاً بين اللغات المختلفة لمجرد تعلم البرمجة بصورة جيدة و هو الأمر الذى لا أجد له داعياً من أى نوع.و خلاف ذلك الوضع مع اللغات التى لا تدعم البرمجة الكائنية مثل الـ(C) حيث يكون على الراغب فى تعلم البرمجة الكائمية الذهاب إلى لغة أخرى، و لعل ما يخفف من عناء ذلك و مشقته فى حالة مبرمجى الـ(C) أنه سيجد لغة الـ(C++) التى يمكنه أن يغمض عينيه بعض الشئ عن الفروقات التى بينها و بين الـ(C) ليقول (بضمير غير مستريح) أنهما ذات اللغة و أنه لم يضطر إلى ترك اللغة الأولى لتكملة مشوار التعلم البرمجى. و لكن الحقيقة تظل هى الحقيقة من حيث أنه حتى فى هذه الحالة فإن الأمر كان مرهقاً بالنسبة له و لم يكن كما يحاول إيهامنا نزهة ريفية جميلة.و حتى فى تلك الحالة يظل القول بأن المبرمج ما زال تحت سيطرة نوع واحد من الأنماط البرمجية حقيقة لها منتهى القوة و العنفوان، و يظل الحصول على ميزات الأنماط البرمجية الأخرى رهناً بمدى البراعة و الدهاء و الوقت و الجهد الذى بإمكان المبرمج إبداءه و بذله للإلتفاف حول النمط المفرد للغة لبناء النمط المطلوب باستخدامه. و هكذا سنرى إهدار الوقت و الجهد و حيل الحواة و المشعوذين فى أكواد المبرمجين من تلك النوعيات المسكينة المقهورة على أمرها.لذلك و بكل بساطة أستطيع أن أقول أن المبدأ الذى يجب على كل لغة برمجية أن تنتهجه عند التعامل مع أنماط البرمجة المختلفة هو التهجين، و أقصد بالتهجين هنا مزج أقصى قدر ممكن من الأنماط البرمجية فى اللغة بحيث يكون المبرمج قادراً على استخدام أيها حينما يريد ذلك، مدفوعاً بالطبع إلى ذلك بقرارات تصميمية للتطبيق المراد بناءه تخبره أن ذلك هو القرار التصميمى الأفضل فى هذه الحالة.************هذا بعض مما يدور فى رأسى و ربما أضيف إليه فيما بعد..
عدل سابقا من قبل وائل حسن في الأربعاء 22 ديسمبر - 10:08 عدل 1 مرات | |
|
| |
YeHi@$MmZ مراقب عام منتدى أقسام الكليه ومشرف قسمى حاسبات وكورسات هندسيه
عدد المساهمات : 5020 تاريخ التسجيل : 25/06/2007 العمر : 37 الموقع : سرى رقم العضوية : 10 Upload Photos :
| موضوع: رد: المفاضلة بين لغات البرمجة السبت 18 ديسمبر - 18:28 | |
| بسم الله ما شاء الله موضوع أفضل من رائع _ وبداية موفقة جدا يا وائل _ و انا في انتظار انى اكون رايق كدة واقرا كلامك بتروى واكمل معاك الموضوع الجميل دة _ بس فك اللغة العربية الفصحى دى شوية _ واشتغل شوية أمثلة حية من اللغات عشان الناس كلها تشارك معانا __ وع فكرة انا قريت موضوع نقد لغة السوبرنوفا _ بس حاسس إن الناقد دة بينقد ع حاجات غريبة كدة _ وصغيرة يعنى - ماتجيش جانب اللغة / ولا يمكن انا عشان ماعرفش النظام بتاعها ايه __ وربنا يوفقك ان شاء الله في أبحاث ال AI. وحاول تظبط المنتدى بشوية neural كدة انا عارف انك بتموت في الرياضة _ انا كنت قريت شوية في الحوار دة ، وعجبنى بس سيبته بقىىى _ الدنيا تلاهىىىى وانا معاك فعلاً فى حوار التهجين دة _ بيدى قوة في اللغة عالية قوى مع إنى من انصار البرمجة الكائنية وبعشقها وبتخيل أى حاجة حواليا لما أاجى أصممها ب OOP. بس برده احتجت فترة انى اتعامل بنظام ال pointers وتعبت جداً في الجافا _ ولقيت نفسى بدخل في حاجة اسمها المناظق المحظورة حسب مع اتذكر ... بس عن نفسى وعن الواقع البرمجى اللى شايفه _ بدون الخوض في البرامج اللى بتتعامل مع الميمورى والاهتمام بها _ أعتقد ان لغات ال OOP هى اللى بتطغى في 90% من الحالات الا المتخصصين جداً الل لازم يستخدموا ال C عشان لو محتاجين السرعة في التنفيذ ........ وبعدين ال سي++ عشان هى partially OOP language حتلاقيها برده في عقد شوية للمبرمج اللى اشتغل جافا وسي # _ اللى هما completely OOP . بس حقها انها أصلاً لغة اجرائية ودخلوا فيها النظام الكائنى _ دة كان شئ عبقرى أكيد. | |
|
| |
وائل حسن مهندس بيشارك كويس
عدد المساهمات : 104 تاريخ التسجيل : 18/05/2010 العمر : 37 الموقع : أرى بخارى بلادي وهي نائية -- وأستريح إلى ذكرى خراسانِ Upload Photos : أهم مواضيعى : مدونتي الشخصية:
مدونة أفكار (مدونةٌ شخصيةٌ عن: السياسة، و المجتمع، و الأدب، و العلم.)
http://afkar-abo-eyas.blogspot.com
| موضوع: رد: المفاضلة بين لغات البرمجة الأحد 19 ديسمبر - 10:48 | |
| السلام عليكم و رحمة الله و بركاته ألف ألف شكر على الرد الجميل يا بشمهندس يحيى و أكرمك الله على الكلام الجميل الذى لا أستحقه. بالنسبة للغة العربية فياريت تعذرنى فيه لأن لما أتكلم فى موضوع تقنى أو بحثى بتطغى عليا الخلفية اللى أنا اعتمدت عليهافى المذاكرة و التعلم و هى الكتب، و لأنى من يوم ما كنت صغير كنت باعتمد فى قراءاتى فى أى مجال من المجالات على كتب من نوعية (مسابير استكشاف الفضاء الخارجى) و (صبح الأعشى فى صناعة الإنشا) و (ألفية ابن مالك) و (مقامات الحريرى) و (فهرس موضوعات القرآن الكريم) و غيرها من الكتب اللى تعلم العربى أحسن من أى مدرس.... و لم أعتمد على الكتب التقنية الإنجليزية إلا فى الثلاث سنوات الأخيرة من حياتى اللى تخصصت فيها بجد فى الحاسب فتطبعت بالطبع دا مع الزمن و علشان كدا مقدرش آخد راحتىى أعبر عن كل الكلام اللى جوايا إلا بالفصحى (بجد و الله و مش فزلكة). و لما بفتح التليفزيون كمان يا سيدى تصور بفتحه على إيه ... واحدة من اتنين يا إما (العفاسى للقرآن الكريم) و إما ..إحم.. (space toon) و بلاش فضايح أكتر من كدا. دا انا حتى فى كلامى العادى لو حاولت تصنف لهجتى فى الكلام هتلقاها لا هى صعيدية مية فى المية و لا قاهرية و لا فصحى، علشان فيها كل دا مضروب كوكتيل فى بعضه..... على العموم هحاول أخفف من التقعر فى اللغة و أفصل المجمل اللى فيها بأبسط كلمات و عبارات.. المهم ...... ************************* نرجع للمناقشة الأساسية أى (المفاضلة بين لغات البرمجة) و أنا أريد أن أتكلم اليوم عن عنصر آخر من عناصر المقارنة بين لغات البرمجة عندى و أعطيه أهمية كبيرة للغاية عند النظر إلى لغات البرمجة المختلفة و هو عنصر الوراثة: الوراثة:حينما يتحدث الكل عن مفهوم الوراثة فإنهم يقصدون نقطة صنع صنف (class) من الأصناف ثم وراثة محتوياته فى صنف آخر و التغيير فيها بالإضافة و التعديل، أما مفهوم الوراثة عندى فهو أمر يتجاوز ذلك إلى معنى أوسع و أشمل، فيكاد يحتوى على أى طريقة لإعادة استخدام الأكواد فى البرامج بأى شكل من الأشكال يضمن تأثر الكود الوارث بالتغييرات التى تطرأ بعد الوراثة على الكود الموروث، و بالطبع فإن هذا يستثنى طريقة النسخ و اللصق التقليدية لأنه فيها تنقطع العلاقة بين الوارث و الموروث تماماً بمجرد انتهاء العملية.لذلك فمفهوم الوراثة عندى يتضمن الأمور التالية:1- الوراثة العادية لصنف من الأصناف لصنف آخر، و هو التعريف النمطى الذى يعطيه الكل للوراثة فى البرمجة الكائنية المنحى (oop).2- الإعلان عن كائن (object) أو نسخة (instance) من صنف ما، فلو فكرنا فيها جيداً لوجدنا أن الكائنات التى نعلن عنها ما هى إلا إعادة استخدام لكود الصنف بدون الحاجة إلى كتابته مرة أخرى لكل كائن كما يحدث فى منهجيتى البرمجة الوظائفية (functional) و الإجرائية (procedural)، و كذلك فإن أى تغيير يطرأ على كود الصنف سيكون مطبقاً على كافة النسخ المنتجة منه. بذا يتحقق شرطى الوراثة عندى على هذه العملية.3- استخدام المكتبات البرمجية ذاته، و هذا الأمر قد يدفع إلى الظن بأن الوراثة عندى ما هى إلا مسمى آخر لعملية إعادة الإستخدام، و لكننى أؤكد أن هذا الظن خاطئ تماماً، ففى عملية إعادة الإستخدام يكون الشرط الرئيس لكى يمكنك أن تقول أن ما حدث هو إعادة استخدام هو أن يقوم المبرمج باستخدام كود برمجى ما مرة أخرى فقط، أى أنه لا يشترط لكى تكون العملية ضمن نطاق إعادة الاستخدام أن تكون التغييرات الجديدة فى الأصل و التى تمت بعد إعادة الاستخدام ذات أثر على الفروع المستخدمة للأصل البرمجى فى حين أن هذا شرط أساسى عندى لكى أطلق على العملية لقب الوراثة.و لو نظرنا إلى عملية النسخ و اللصق التقليدية لوجدنا أنها خير مثال يوضح الفارق بين الوراثة عندى و إعادة الاستخدام، لأنها يصدق عليها وصف إعادة الاستخدام بكل قوة، فى حين أنه لا ينطبق عليها مفهومى للوراثة و لا يمكننى أن أعدها لوناً من ألوان التوراث لعدم تطبيق التغيرات المحدثة إلا على الأصل المنسوخ فقط.و قد أفضت فى شرح الفارق بين نظرتى للوراثة و بين النظرة الحالية لها لكى أستطيع بعد ذلك أن أتحدث بحرية عن مدى أهمية الوراثة عندى، و ذلك بدون خوف الإلتباس على القارئ لهذه الأسطر. و الحق أن للوراثة عندى أهمية فى الحدود القصوى لها، فأنا أعتقد اعتقاداًً جازماً أن أى كود مهندس جيداً قد يكون قابلاً لإعادة الاستخدام التوارثى بطريقة تمكننا من حل المشاكل الجديدة بطرق أسرع و أفضل بكثير.و جدير بالذكر أن الوراثة تدخل فى أغلب المواضيع الهامة التى تتعلق بالمفاضلة بين لغات البرمجة إن لم يكن فيها كلها، و ذلك لأن لها من الفوائد الكثير و الكثير، و يمكننى أن أعد هنا طرفاً من هذه الفوائد فيما يلى:2- سرعة الإنتاج: و القول المنتشر بين معاشر البرمجين و الذى يصف هذه النقطة جيداً هو "عدم إعادة اختراع العجلة"، حيث لن يكون على المبرمج كتابة الآلاف من الأسطر فى كل مرة يحتاجها فى عمله، بل يكتبها مرة واحدة فقط ثم يقوم باستدعائها كل مرة بمنتهى السرعة، مما يعنى التركيز على المشكلة الحقيقية و عدم هدر الجهد فى أمر فعل من قبل و هو ما يؤدى إلى الإنتاجية الكبيرة فى النهاية.3- الأمن: الأكواد التى ستستخدم فى الوراثة ستكون قد اختبرت جيداً قبل وضعها فى الخدمة التوارثية، مما يعنى أن المبرمج المستخدم لهذه الأكواد الموروثة يستطيع الإطمئنان إلى كون الكود الموروث ذو أمان عال، فلا يحتاج إلى إعادة اختباره مرة أخرى، و ذلك على العكس من الأكواد الجديدة التى يكتبها إن لم يستخدم الوراثة، حيث سيكون عليه التأكد من أمن تلك الأكواد فى كل مرة.4- توفير التكلفة: عند إنتاج البرمجيات بصورة تجارية يكون من أهم الأمور إنتاج التطبيق المراد بأقل التكاليف الممكنة، و قد قام علم هندسة البرمجيات من الأصل ليصل إلى هذا الهدف من ضمن الأهداف الرئيسة التى قام لأجلها. و نحن حينما نعيد استخدام الأكواد التى صنعناها من قبل فإننا نوفر الوقت و الجهد و المال بصورة كبيرة للغاية تظهر أكبر ما تظهر فى المشاريع البرمجية العملاقة.5- توارث الكفاءة: حينما يتم اكتشاف خوارزم جديد أكثر كفاءة للقيام بالعملية التى كان يستخدم فيها خوارزم أقل كفاءة يكون إحلال الجديد محل القديم مكسباً كبيراً، ليس فقط للتطبيقات التى ستستخدم الخوارزم بعد الإحلال بل حتى للتطبيقات التى تستخدم الخوارزم من أيامه الأولى قبل التجديد، أى أن التغييرات الجيدة لن تجد طريقها فقط للمستخدمين الجدد بل سيتم توارثها هى الأخرى.6- التجرد الأقصى و بساطة حل المشاكل: حينما تتوافر تحت يد المبرمج أدوات كثيرة جاهزة للعمل باستخدامها سيكون الأمر الوحيد الذى سيركز عليه جهده و تفكيره هو حل المشكلة التى يريد استخدام البرمجة لحلها، و هو الأمر الذى سيجعل الرمجة أكثر سهولة بكثير بل و أكثر إمتاعاً بكثير. | |
|
| |
وائل حسن مهندس بيشارك كويس
عدد المساهمات : 104 تاريخ التسجيل : 18/05/2010 العمر : 37 الموقع : أرى بخارى بلادي وهي نائية -- وأستريح إلى ذكرى خراسانِ Upload Photos : أهم مواضيعى : مدونتي الشخصية:
مدونة أفكار (مدونةٌ شخصيةٌ عن: السياسة، و المجتمع، و الأدب، و العلم.)
http://afkar-abo-eyas.blogspot.com
| موضوع: رد: المفاضلة بين لغات البرمجة الأحد 19 ديسمبر - 12:27 | |
| السلام عليكم و رحمة الله قال بشمهندس يحيى: ************ وع فكرة انا قريت موضوع نقد لغة السوبرنوفا _ بس حاسس إن الناقد دة بينقد ع حاجات غريبة كدة _ وصغيرة يعنى - ماتجيش جانب اللغة / ولا يمكن انا عشان ماعرفش النظام بتاعها ايه __
*********** على فكرة يا بشمهندس يحيى أنا الناقد الذى كتب النقد المرفوع على الميديافاير، و رفعته هناك ﻷننى لم أستطع وضع صور وسط الكلام كما هو موجود فى المستند النصى المرفوع، و بالنسبة لنقدى الحاد للغة السوبرنوفا فبحق أقول أننى لم أقل كلمة واحدة غير مقتنع بها تماماً و لو أنك قرأت عنها ما قرأت لوجدت العجب العجاب و لوافقتنى على كل ما قلته عنها فى نقدى لها و ربما أكثر، فأنت كما تقول متحمس جداً للبرمجة الكائنية فبالتالى أعدك بصدمة كبيرة لو قرأت كتب مطور اللغة و شرحه لها.. لذلك يمكنك أن تطالع كتب المطور من خلال الرابط الموجود فى موضوع مناقشة السوبرنوفا و الذى أكرره لك هنا (علشان متقولشى حارمك من حاجة): [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]فحاول مطالعة الكتب متى تيسر لك الأمر و سأنتظر ردك فى موضوع السوبرنوفا فى المناقشة الخاصة به حتى لا يطغى على حوارنا فى المفاضلة بين لغات البرمجة و الذى خصصنا له هذا الموضوع. بانتظارك فى أى وقت.... | |
|
| |
الحبار مدير عام المنتدى
عدد المساهمات : 12635 تاريخ التسجيل : 02/05/2007 العمر : 38 الموقع : فى غيابات الهندسة المدنية رقم العضوية : 3 Upload Photos : أهم مواضيعى :
| موضوع: رد: المفاضلة بين لغات البرمجة الإثنين 20 ديسمبر - 23:09 | |
| السلام عليكم ورحمة الله وبركاته
فى البداية أحب أرحب بالأخ العزيز البشمهندس وائل زميل الدفعة الفاضل اللى بتمنى يكون بخير
وإلتحم جيدا بسوق العمل وكمان حضرة الضابط يحيى وطبعا ده غنى التعريف ما شاء الله عليكما
بخصوص حالة الحوار وموضوع النقاش بينكما الذى تم طرحة فهو شىء راقى جدا ما شاء الله
ومفيد جدا لمحبى لغات البرمجة هذا الشق الهام فى سوق العمل أتمنى أن يستفيد الجميع ويشارككم
من درس لغات البرمجة وللآسف أنا لم يحالفنى الحظ فى دراسة أحد اللغات الهامة سوى
الفيجوال بيزك وأعتقد كانت رتوش ولا تسعفنى فى نقاشكم هذا وكل الإحترام والتقدير لكما
وأى مشاكل يا بشمهندس وائل بخصوص إضافة صورة أو ملف او أى حاجة يا ريت تبلغنى
وأنا إن شاء الله هكون متابع معاك دايما وربنا يجعل مجهودك ده فى ميزان حسناتك.
والله الموفق
| |
|
| |
وائل حسن مهندس بيشارك كويس
عدد المساهمات : 104 تاريخ التسجيل : 18/05/2010 العمر : 37 الموقع : أرى بخارى بلادي وهي نائية -- وأستريح إلى ذكرى خراسانِ Upload Photos : أهم مواضيعى : مدونتي الشخصية:
مدونة أفكار (مدونةٌ شخصيةٌ عن: السياسة، و المجتمع، و الأدب، و العلم.)
http://afkar-abo-eyas.blogspot.com
| موضوع: رد: المفاضلة بين لغات البرمجة الثلاثاء 21 ديسمبر - 9:51 | |
| السلام عليكم و رحمة الله عزيزى الحبار: أشكرك جداً على ترحيبك الحار و رأيك الجميل فى الحوار و أتمنى من الله تعالى الفائدة للجميع فى هذا المنتدى الذى لم أكتشف مدى جماله و أهميته إلا بعد أن أنهيت الدراسة بكل أسف.. المهم أننى الآن موجود و مشارك و سأكمل المشاركات إن شاء الله تعالى، لكن المشكلة التى تزعجنى فى المنتدى أننى حينما أحاول أن أضع صورة من عندى بين أسطر الكلام الخاص بى مثل القوسين التاليين () لا يفلح الأمر رغم أنه سيكون مفيد جداً فى النقاشات التى نديرها هنا، فهل هناك طريقة لفعل ذلك أم أنه أمر غير مسموح به فى المنتدى تقنياً؟؟؟ فى انتظار ردك الكريم.. | |
|
| |
الحبار مدير عام المنتدى
عدد المساهمات : 12635 تاريخ التسجيل : 02/05/2007 العمر : 38 الموقع : فى غيابات الهندسة المدنية رقم العضوية : 3 Upload Photos : أهم مواضيعى :
| موضوع: رد: المفاضلة بين لغات البرمجة الثلاثاء 21 ديسمبر - 17:18 | |
| - وائل حسن كتب:
السلام عليكم و رحمة الله عزيزى الحبار: أشكرك جداً على ترحيبك الحار و رأيك الجميل فى الحوار و أتمنى من الله تعالى الفائدة للجميع فى هذا المنتدى الذى لم أكتشف مدى جماله و أهميته إلا بعد أن أنهيت الدراسة بكل أسف.. المهم أننى الآن موجود و مشارك و سأكمل المشاركات إن شاء الله تعالى، لكن المشكلة التى تزعجنى فى المنتدى أننى حينما أحاول أن أضع صورة من عندى بين أسطر الكلام الخاص بى مثل القوسين التاليين () لا يفلح الأمر رغم أنه سيكون مفيد جداً فى النقاشات التى نديرها هنا، فهل هناك طريقة لفعل ذلك أم أنه أمر غير مسموح به فى المنتدى تقنياً؟؟؟ فى انتظار ردك الكريم.. وعليكم السلام
توجد بالطبع طرق عديدة لرفع الصور راجع هذا الموضوع
[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]
وأى مشاكل يرجى ذكرها من فضلك
والله الموفق | |
|
| |
وائل حسن مهندس بيشارك كويس
عدد المساهمات : 104 تاريخ التسجيل : 18/05/2010 العمر : 37 الموقع : أرى بخارى بلادي وهي نائية -- وأستريح إلى ذكرى خراسانِ Upload Photos : أهم مواضيعى : مدونتي الشخصية:
مدونة أفكار (مدونةٌ شخصيةٌ عن: السياسة، و المجتمع، و الأدب، و العلم.)
http://afkar-abo-eyas.blogspot.com
| موضوع: رد: المفاضلة بين لغات البرمجة الأربعاء 22 ديسمبر - 10:11 | |
| السلام عليكم و رحمة الله ألف شكر للحبار على تعليقه و تعليمه و بالأعلى رفعت صورة بالفعل بطريقة من ضمن التى تعلمتها من موضوعه السابق، فشكراً مرة ثانية للإهتمام الجميل. | |
|
| |
وائل حسن مهندس بيشارك كويس
عدد المساهمات : 104 تاريخ التسجيل : 18/05/2010 العمر : 37 الموقع : أرى بخارى بلادي وهي نائية -- وأستريح إلى ذكرى خراسانِ Upload Photos : أهم مواضيعى : مدونتي الشخصية:
مدونة أفكار (مدونةٌ شخصيةٌ عن: السياسة، و المجتمع، و الأدب، و العلم.)
http://afkar-abo-eyas.blogspot.com
| موضوع: رد: المفاضلة بين لغات البرمجة السبت 25 ديسمبر - 10:27 | |
| السلام عليكم و رحمة الله نكمل اليوم المناقشة، و عنصر اليوم هو (الشمول).. *********** الشمول:حينما تريد برمجة تطبيق نظامى يحتاج إلى الأداء الأفضل فعليك بالبرمجة بلغة الـ(C)، و حينما تريد برنامجاً يتعامل مع النوافذ و الواجهات المرئية فعليك بالجافا أو الـ(visual basic) أو الـ(C#)، أما التعامل مع قواعد البيانات فأمر هو أسهل مع الجافا و الـ(C#).. أما الدلفى فسلتجأ إليها حينما تريد أن... حيث أن لغة.... ليست قوية فى هذا المجال و كذا فإن لغتى ....و.... معقدتان بما يكفى لتحيلا حياتك إلى جحيم فى هذه المنطقة من المجال البرمجى. و.... حيث أن....ما فات هو كلام أثق أن الكثيرين (إن لم يكن الأغلبية) قد سمعوه مراراً و تكراراً فى المنتديات المختلفة و الكتب المتنوعة التى تناقش موضوع الترجيح و المفاضلة بين لغات البرمجة المختلفة، و لا تكون الفائدة التى يخرج بها القارئ بعد ذلك إلا الإحساس أن كل تلك اللغات لا يغنى أحدها عن الآخر و لا يمثل واحداً منها دور الخادم الجيد فى كل مجال، و هو الإحساس الذى لا يسعد أحداً بحال من الأحوال.و أنا أجد أنه من حقى كمبرمج بائس أن أقف لأتساءل عن السبب فى هذا، فهل السبب أن كل مجال من مجالات الحاسوب البرمجية يختلف عن المجالات الأخرى بدرجة تجعل اللغة التى تناسبه برمجياً لا تناسب الآخرين بنفس القدر؟، أم أن السبب أن كل لغة كان لها مجتمعها التقنى الذى ركز على جانب من الجوانب البرمجية و تراخى عن تغطية المناطق الأخرى فلم يغطها بذات القوة، و من ثم اشتهرت اللغة بمجال التركيز الأكبر و أهملت فى الجوانب الأخرى؟، أم قد يكون السبب أن كل مجال من المجالات كان له أهله ممن قام على أكتافهم معظم بنائه و كانوا قدراً يستخدمون لغة موحدة أو لغات قليلة العدد فى ذلك البناء و بالتالى كانت تلك اللغة أو تلك اللغات هى الوحيدة أو الأكثر ظهوراً عند أى حديث برمجى عن ذلك الجانب و رويداً رويداً أصبحت كأنها اللغة أو اللغات الممثلة له فعلياً؟ً. أم قد يكون السبب الرئيس هو كل تلك الأسباب مجتمعة؟.الحق الذى أراه أن كل تلك الأسباب لها واقع يحققها و تنطبق عليه فى تاريخ لغات البرمجة بدرجات قوة تختلف من سبب لآخر، فالسبب الأول الذى يقول أن هناك مجالات برمجية تختلف كثيراً عن باقى المجالات و بالتالى فإن لغات البرمجة ذات النوعيات التى تناسب تلك المجالات لا تناسب المجالات البرمجية الأخرى يتحقق فى أحوال عديدة منها ما يلى: <LI style="TEXT-JUSTIFY: kashida; TEXT-ALIGN: justify; TEXT-KASHIDA: 0%; MARGIN: 0cm 0cm 0pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt" dir=rtl class=MsoNormal>أنظمة الذكاء الاصطناعى التى تحتاج إلى استخدام القواعد المنطقية فى عملها، فمثل هذه الأنظمة لها مستوى عال للغاية من التجريد و البعد عن الآلات و طرق عملها، و بالتالى فإن لغة البرمجة التى تستخدم فيها لابد أن تكون بعيدة كل البعد عن التعقيد بل يجب أن تكون سهلة متدفقة غزيرة الإنتاجية و تستخدم المنطق، مثل لغات الـ(prolog) و الـ(logo) و غيرها من نوعية تلك اللغات المنطقية العالية للغاية فى المستوى. و لا يمكن مع مجالات كهذه أن نستخدم لغات منخفضة المستوى مثل الـ(C)، فكل ما سنجنيه حينها هو الإحباط و اليأس فى يقظة و الكوابيس و بلل الفراش مناماً.
- أنظمة قواعد البيانات و التعامل معها، حيث نجد أنه يتم استخدام نوع خاص من اللغات البرمجية مهما اختلف شكله فهو متشابه و يسمى لغات (الاستعلام) للتعامل معها، مثل لغات الـ(SQL) التى من بينها الـ(SQL) القياسى و (oracle SQL) و (MS SQL)و غيرها، و التقنية الجديدة التى ابتكروها فى (microsoft) و هى تقنية الـ(LINQ) التى يستهدف أن تستخدم للتعامل مع كل أنواع مصادر البيانات و ليس مجرد قواعد البيانات فقط، أى أنه لم يتم استخدام لغات البرمجة العامة العادية مثل الـ(java) و الـ(C#) على الرغم من أنه يمكننا صنع مكتبات لتلك اللغات تقوم بعمل الصياغات المختلفة للغات الاستعلام و إن كان ذلك صعباً بعض الشئ، لكن الأمر ليس فى إمكانية فعل ذلك من عدمه إنما يكمن سر الموضوع فى طبيعة التعامل مع قواعد البيانات عامة. و لذلك نجد أنهم لم يقوموا بدمج إمكانيات تلك اللغات فى اللغات البرمجية العامة مباشرة بل قاموا بإعطائها القدرة على استخدام أوامر لغات الاستعلام الصريحة و إن كان هناك بعض التغليف اللازم لقبول تلك العبارات فى بيئة لغة البرمجة العادية، و المثال التالى بلغة الـ(C#) يرينا مثل ذلك التغليف عملياً:
على الرغم من أنه كان من الممكن الاستغناء عن كل ذلك بصنع دالة تأخذ كمعاملات لها اسماء الحقول التى سيتم اختيارها للتعامل معها و اسم الجدول الذى يحويها و الشرط الذى يجب أن ينطبق على القيم المختارة، و هذا كما قلنا صعب للغاية و لكن الأمر ليس فى الصعوبة فقط إنما فى الاختلاف الشديد عن البرمجة العادية و هو الأمر الذى تعزى إليه هذه الصعوبة نفسها و تعد جانباً من جوانب تجلياته.
<LI style="TEXT-JUSTIFY: kashida; TEXT-ALIGN: justify; TEXT-KASHIDA: 0%; MARGIN: 0cm 0cm 0pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt" dir=rtl class=MsoNormal>تطبيقات الواجهات المرئية التى هى من أسهل ما يمكن عند التعامل معها باستخدام لغات البرمجة الكائنية و ألعن ما يمكن لو تم التعامل معها بلغات البرمجة الوظائفية، حيث فى اللغات الكائنية يمكننى ببساطة أن أقول (بمفردات اللغة البرمجية طبعاً) أننى أريد كائناً من نوع النافذة، و هذا الكائن يحوى زر له القيم الفلانية و صندوق نص له القيم العلانية و...و... إلى آخره، أى أن الأمر يسير جداً و منطقى للغاية، فماذا عن اللغات الوظائفية أو الإجرائية و تعاملها (بطريقة وظائفية أو إجرائية صرفة) مع هذا الأمر؟، أنا شخصياً قد تعاملت مع مكتبة الـ(openCV) من خلال عملى فى مجال معالجة الصور أى الـ(image processing) و بالطبع كنت أتعامل معها باستخدام لغة الـ(C++) للحصول على أفضل أداء ممكن (و لأسباب أخرى ليس هذا محلها) و يسعدنى أن أقول أن الأمر كان مسخرة بالنسبة لى أنا المبرمج المغلوب على أمره، حيث كان على أن أستدعى دالة (cvNamedWindow) لها الشكل التالى: <LI style="TEXT-JUSTIFY: kashida; TEXT-ALIGN: justify; TEXT-KASHIDA: 0%; MARGIN: 0cm 0cm 0pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt" dir=rtl class=MsoNormal> <LI style="TEXT-JUSTIFY: kashida; TEXT-ALIGN: justify; TEXT-KASHIDA: 0%; MARGIN: 0cm 0cm 0pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt" dir=rtl class=MsoNormal>[b] لكى تقوم بإنشاء نافذة مرئية ثم كان على أن أستدعى دالة أخرى لكى أقوم مثلاً بضم عمود تعقب (track bar) إلى تلك النافذة التى صنعتها تواً و هى دالة (cvCreateTrackbar) التى لها الشكل التالى: <LI style="TEXT-JUSTIFY: kashida; TEXT-ALIGN: justify; TEXT-KASHIDA: 0%; MARGIN: 0cm 0cm 0pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt" dir=rtl class=MsoNormal> <LI style="TEXT-JUSTIFY: kashida; TEXT-ALIGN: justify; TEXT-KASHIDA: 0%; MARGIN: 0cm 0cm 0pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt" dir=rtl class=MsoNormal>
[b]و لكى أقوم بتكرار الأمر أى إنشاء أكثر من نافذة و ضم عمود تعقب لكل نافذة يكون على أن أقوم بتكرار الأوامر ذاتها مراراً، لأن خاصية كتابة صنف يفعل ذلك ثم الاشتقاق منه فى كل مرة غير موجودة بالطبع فى البرمجة الوظائفية بل هى (و ياللعجب) الفكرة الرئيسة فى البرمجة الكائنية.
- بناء أنظمة البنية التحتية البرمجية للحاسوب مثل أنظمة التشغيل و أدوات البرمجة المختلفة من مترجمات و مفسرات و مجمعات و غيرها، ففى هذا المجال نجد أن لغة الـ(C) هى اللغة الأشهر و الأكثر تغلغلاً و لا ينافسها إلا نسختها الكائنية الـ(C++) بسبب أنها حينما صنعت منذ البداية على يد دينس ريتشي و بريان كيرنيجان كانت قد صممت لتكون لغة بناء بنى تحتية فى الأصل، وبذلك وضعوا فيها كل المواصفات اللازمة لذلك فأصبحت انعكاساً قوياً للغاية للفكر البرمجى فى الناحية البنيوية التحتية (و الانعكاس هنا كان بالطبع حسب طريقة تفكير مصممى اللغة و ليس هو بالانعكاس الوحيد الممكن).
و قد استسلم كل المبرمجين لتلك الحقيقة و لم يحاول أحد منهم بحال من الأحوال تغييرها بالاستغناء عن لغة الـ(C) التى كرهها الكثيرون، و بالتالى كان من الطبعى أن اللغات الجديدة التى يتم تصميمها سوف يتم إهمال تحقيق المواصفات اللازمة للتعامل مع البنى التحتية للحاسب فيها، لأنه لا حاجة لهذا مع الرضا باحتلال الـ(C) لعرش ذلك المجال و الأكثر طبعية هو الاهتمام بإعطاء اللغة الجديدة الميزات التى تؤهلها للتخصص فى مجال آخر يمكنها أن تنافس فيه بقوة.
الأمثلة السابقة كلها كانت لتوضيح أن هناك بالفعل مجالات برمجية تختلف عن المجالات الأخرى بصورة تجعل اللغة البرمجية التى تناسب التعامل معها بقوة لا تناسب العمل فى المجالات الأخرى إلا بتعسف لا يؤدى إلا إلى بطء العمل و عدم كفاءته هذا إن نجح من الأصل.
هذا عن السبب الأول، أما عن السبب الثانى و هو (أن أن كل مجال من المجالات كان له أهله ممن قام على أكتافهم معظم بنائه و كانوا قدراً يستخدمون لغة موحدة أو لغات قليلة العدد فى ذلك البناء و بالتالى كانت تلك اللغة أو تلك اللغات هى الوحيدة أو الأكثر ظهوراً عند أى حديث برمجى عن ذلك الجانب و رويداً رويداً أصبحت كأنها اللغة أو اللغات الممثلة له فعلياً) فهو بدوره له من الحقيقة نصيبه و الواقع يدل على ذلك.
حيث لو أخذنا على سبيل المثال بناء بيئات سطح المكتب فى أنظمة التشغيل المختلفة مثل (KDE) و (GNOME) و (LXDE) فى الأنظمة شبيهة اليونيكس و غيرها من البيئات المشهورة الأخرى لوجدنا أنها قد بنيت باستخدام لغة الـ(C++) التى يتحقق فيها شرط اللغات التى تصلح لهذا المجال، و لكن على الرغم من ذلك فقد كان من الممكن أن يتم بناؤها بلغات أخرى غير الـ(C++) مثل الـ(java) مثلاُ التى تم باستخدامها فعلاً بناء سطح مكتب الـ(java) أو الـ(java descktop) لنظام التشغيل الجميل (open solaris)، إلا أن ذلك لم يتم لأن المبرمجين الذين قاموا بذلك العمل كانوا ممن يستخدمون لغة الـ(C++) بحكم كونهم من المهتمين بتطوير و بناء النظم الأساسية أو البنية التحتية فى عالم الحاسوب، و بالتالى أصبح استخدام الـ(C++) فى هذا المجال أمراً طبعياً بل و أصبح مع الزمن من التابوهات المحرمة فى عالم البرمجة، مثله كمثل عدم صنع لغة أخرى تحل محل لغة الـ(C) فى بناء البنى التحتية بدون تعقيد تلك الأخيرة الذى يعرفه الكل.
و على الرغم من كون استخدام لغات أخرى فى هذه المجالات قد يكون أكثر نفعاً من حيث السهولة فى البناء و الكبر فى الإنتاجية و البساطة فى المتابعة و التطوير (و هى الأمور التى تسعى خلفها كل دراسات هندسة البرمجيات) إلا أن الأمر قد صار تابو بالفعل عند المبرمجين القدامى و المحدثين و صار المساس به و لو من بعيد مثيراً لعواصف من النقد الهدام لصاحب التعليق و لأفكاره، و لو كان مجتمع المبرمجين النظاميين وثنياً لعبدوا إلهاً يخصصونه للـ(C) و لقدموا له قرابين بشرية ممن يكفرون بها.
و هذه هى خطورة كون المهتمين بمجال معين من المجالات الحاسوبية من مستخدمى لغة برمجة مفردة، فرويداً رويداً سوف تسيطر تلك اللغة على ذلك المجال حتى و إن لم تكن خصائصها الذاتية مناسبة له تماماً، و سيكون أمراً منطقياً أن تصير تلك اللغة البرمجية هى الممثل الرسمى الوحيد لذلك المجال و أن تصير باقى اللغات كالأيتام على موائد اللئام عند ولوج مطوريها إلى عالمه، فلا كرامة لها على الرغم من كون بعضها أنسب للمجال من تلك اللغة التى تقرن به.
و السبب الأخير و هو أن (كل لغة كان لها مجتمعها التقنى الذى ركز على جانب من الجوانب البرمجية و تراخى عن تغطية المناطق الأخرى فلم يغطها بذات القوة، و من ثم اشتهرت اللغة بمجال التركيز الأكبر و أهملت فى الجوانب الأخرى) هو بدوره له نصيبه من الصحة.
و على سبيل المثال لا الحصر يمكننا أن نرى أن حال لغة الـ(visual basic) فى مجال التكامل مع نظام الويندوز (windows) و حزمة برامج مكتب (microsoft) (Microsoft office) جعلها هى اللغة الأشهر فى هذا على الرغم من ضعف اللغة النحوى و عدم تعاملها مع المشاريع الكبيرة بكفاءة مناسبة، و لكن لأن (microsoft) ركزت على هذا الموضوع بقوة فقد كان من المعتاد أن نسمع فى فترة عنفوان الـ(visual basic) عبارات على شاكلة (الإنتاجية العالية = visual basic) و (تطبيق به نوافذ مرئية = تطبيق مكتوب بـ visual basic) على الرغم من أن هناك مجالات أخرى تصلح لها الـ(visual basic) برمجياً مثل كل اللغات عالية المستوى العامة الاستخدام إلا أنها اشتهرت بهذا و اشتهرت أكثر بأنها خلاف سهولتها فى ذلك المجال فإنها متعبة جداً فى باقى المجالات.
و لعل هناك سبب آخر يندرج تحت القول بالتركيز على مجال معين هو الإهمال المتعمد، ففى بعض الأحيان يكون هناك إهمال متعمد من منتج اللغة البرمجية لمجال من المجالات لغرض ما هو فى الغالب تجارى أو يصب فى خانة هدف تجارى، و لغة الـ(visual basic) و لغات الـ(.NET) عموماً دليل على ذلك كل الدلالة، فالمبرمج الذى يستخدم اللغات السابقة حكم على نفسه بالبقاء تحت مظلة أنظمة تشغيل (microsoft) للأبد، لأن المحمولية لم تكن أبداً فى أى يوم من الأيام هدف من أهدافها و هو الأمر الذى يعيه الجميع من المبرمجين.
و لعل الشئ الذى يخفف ذلك على مبرمجى الـ(.NET) هو وجود المشاريع مفتوحة المصدر التى تغنى عن بديلها المنتج من قبل (microsoft) و هو مشروع الـ(mono) من شركة (novell) الذى يتكون من بيئة برمجية متكاملة للغة الـ(C#) و بيئة عمل تحل محل بيئة الـ(.NET) الخاصة بزمن التشغيل على نظام الويندوز و تعمل على باقة أنظمى التشغيل المشهورة مثل اللينوكس و السولاريز و ماك و التى تم إهمالها بالطبع فى بيئة الـ(.NET) الخاصة بـ(microsoft).
و لكن حتى فى هذه الحالة فإن هناك عوائق ستظهر فى طريق من يرغب فى الاستفادة القصوى من اللغة نظراً لأنه سيضطر إلى الحصول على التطويرات الجديدة فى بيئة العمل و اللغة متأخراً عن المبرمجين الذين يتعاملون مع (microsoft) نفسها، لأن اعتماد التغييرات الجديدة فى (mono) لن يحدث بين يوم و ليلة بل سيأخذ وقتاً بعد التصريح عن تلك التغييرات رسمياً (و بالطبع سيكون قد تم اعتمادها فى برمجيات microsoft لتحصل على السبق فى التسويق كما هى العادة).
و قد أدى مثل هذا الأمر (و أمور أخرى ليس هذا محلها) إلى تحذير السيد ريتشارد ماثيو ستولمان من استخدام بيئة الـ(mono) فى عمل البرمجيات مقتوحة المصدر، و أنا عن نفسى أقبل اعتراضه هذا تماماً رغم أننى من محترفى البرمجة بالـ(C#) إلا أن الحق أحق أن يتبع، و إسناد الظهر إلى (microsoft) سيكون أكثر قرارات عمرى حماقة إن اتخذته، لذا فأنا أسأل الله تعالى ألا أضطر إليه فى يوم من الأيام.
كل ما فات كان توضيحاً لأسباب عدم شمولية لغات البرمجة و تخصصها فى مناطق معينة من مجالات الإبداع البرمجى و ضعف أو غياب وجودها فى باقى المجالات، إلا أننى لم أوضح حتى الآن موقفى من كل ذلك الذى ذكرناه، و موقفى واضح و بسيط للغاية و يمكن تلخيصه بدون أى إخلال فى جملة واحدة هى (لغة البرمجة أداة المبرمج، و الأداة لا تكون أداة جيدة إلا إذا أغنت عن مثيلاتها فى معظم العمل إن لم يكن كله، فإن لم تكن كذلك فإنها لا تستحق الاستعمال و ينبغى طرحها جانباً).
أى أن اللغات التى تشترط على المبرمج التضحية بكثير من المجالات ليمكنه التركيز على مجال معين هى أداة سيئة يجب على المبرمج نبذها حتى لا تكبله و تحدد من قدراته و أنشطته، أما لغة البرمجة الحقيقية التى تستحق الإهتمام فهى التى تعطى المبرمج القدرة على الإبحار باستخدامها فى أى مجال برمجى يعن له أن يضع قدمه فيه أو على الأقل معظم المجالات البرمجية.
و بالتطبيق على اللغات البرمجية الحالية فسنرى أن اللغات التى تحقق هذا الشرط قليلة للغاية مقارنة بما هو مستخدم منها بالفعل، و أشهر الأمثلة التى ستضرب لهذا النوع من اللغات هى لغات الـ(java, C++, visual basic .NET, C#) لذا ففى قابل كلماتى سوف أناقش موقفى من كل لغة موضحاً حقيقة هذا الزعم من كذبه.
و أول تلك اللغات هى الجافا و هى أحب اللغات البرمجية الحالية إلى قلبى لكونها يتحقق فيها من ميزات لغات البرمجة الجيدة عندى ما هو أكثر من غيرها، و على الرغم من هذا فإن عندى انتقادات حادة للجافا فى بعض المسائل التصميمية ربما أصرح بها فى أماكن أخرى من هذه المناقش، لكن الأكثر أهمية من هذا هو كون الجافا قد حققت ميزة الشمولية هذه إلى حدود كبيرة للغاية بما يجعلها بحق أشمل اللغات البرمجية التى أعرفها فى حياتى كلها.
فالجافا تعطى المبرمج بها القدرة على البرمجة لمجالات واسعة المدى مثل:
<LI style="TEXT-JUSTIFY: kashida; TEXT-ALIGN: justify; TEXT-KASHIDA: 0%; MARGIN: 0cm 0cm 0pt; mso-list: l0 level1 lfo2; tab-stops: list 36.0pt" dir=rtl class=MsoNormal>برامج سطح المكتب ذات الواجهات المرئية. <LI style="TEXT-JUSTIFY: kashida; TEXT-ALIGN: justify; TEXT-KASHIDA: 0%; MARGIN: 0cm 0cm 0pt; mso-list: l0 level1 lfo2; tab-stops: list 36.0pt" dir=rtl class=MsoNormal>برامج سطح المكتب النصية. <LI style="TEXT-JUSTIFY: kashida; TEXT-ALIGN: justify; TEXT-KASHIDA: 0%; MARGIN: 0cm 0cm 0pt; mso-list: l0 level1 lfo2; tab-stops: list 36.0pt" dir=rtl class=MsoNormal>برامج العملاء على الشبكة. <LI style="TEXT-JUSTIFY: kashida; TEXT-ALIGN: justify; TEXT-KASHIDA: 0%; MARGIN: 0cm 0cm 0pt; mso-list: l0 level1 lfo2; tab-stops: list 36.0pt" dir=rtl class=MsoNormal>برامج الخادمات. <LI style="TEXT-JUSTIFY: kashida; TEXT-ALIGN: justify; TEXT-KASHIDA: 0%; MARGIN: 0cm 0cm 0pt; mso-list: l0 level1 lfo2; tab-stops: list 36.0pt" dir=rtl class=MsoNormal>مواقع الشبكة. <LI style="TEXT-JUSTIFY: kashida; TEXT-ALIGN: justify; TEXT-KASHIDA: 0%; MARGIN: 0cm 0cm 0pt; mso-list: l0 level1 lfo2; tab-stops: list 36.0pt" dir=rtl class=MsoNormal>برمجة الأجهزة الذكية مثل الهواتف المحمولة و الثلاجات المعدلة و غيرها من تلك النوعية من الأجهزة. <LI style="TEXT-JUSTIFY: kashida; TEXT-ALIGN: justify; TEXT-KASHIDA: 0%; MARGIN: 0cm 0cm 0pt; mso-list: l0 level1 lfo2; tab-stops: list 36.0pt" dir=rtl class=MsoNormal>برمجة الألعاب.
- التعامل مع قواعد البيانات.
و بالتالى فليس هناك مجال يمكن أن يفكر فيه المبرمج إلا و وجد الجافا واقفة فى انتظاره مادة إليه يد المساعدة، و أهم من ذلك كون الجافا تعمل على أنظمة التشغيل المختلفة بمنتهى المساواة و بنفس الكود البرمجى، و كما يعبر صناع الجافا عن هذا المبدأ بقولهم (أكتب مرة واحدة و شغل فى أى مكان) و يستحق هذا المبدأ بحق كل ما بذل من جهد للوصول إلى تحقيقه بالصورة الرائعة التى نراها و التى أعطت الجافا لقب ملكة المحمولية بلا جدال.
أما الـ(C#) فهى لغة قوية بالفعل، و دليل اقتناعى بذلك أنها أكثر اللغات التى أنا ملم بها (أكثر حتى من الجافا) على الرغم من أننى أعز الجافا أكثر منها بكثير، و لكن و رغم كل هذا فإن الـ(C#) لا تصمد أمام الجافا إذا ما قارناهما من منطلق الشمولية، و ذلك على الرغم من أنها تصلح لنفس المجالات التى ذكرناها للجافا و هى:
<LI style="TEXT-JUSTIFY: kashida; TEXT-ALIGN: justify; TEXT-KASHIDA: 0%; MARGIN: 0cm 0cm 0pt; mso-list: l2 level1 lfo3; tab-stops: list 36.0pt" dir=rtl class=MsoNormal>برامج سطح المكتب ذات الواجهات المرئية. <LI style="TEXT-JUSTIFY: kashida; TEXT-ALIGN: justify; TEXT-KASHIDA: 0%; MARGIN: 0cm 0cm 0pt; mso-list: l2 level1 lfo3; tab-stops: list 36.0pt" dir=rtl class=MsoNormal>برامج سطح المكتب النصية. <LI style="TEXT-JUSTIFY: kashida; TEXT-ALIGN: justify; TEXT-KASHIDA: 0%; MARGIN: 0cm 0cm 0pt; mso-list: l2 level1 lfo3; tab-stops: list 36.0pt" dir=rtl class=MsoNormal>برامج العملاء على الشبكة. <LI style="TEXT-JUSTIFY: kashida; TEXT-ALIGN: justify; TEXT-KASHIDA: 0%; MARGIN: 0cm 0cm 0pt; mso-list: l2 level1 lfo3; tab-stops: list 36.0pt" dir=rtl class=MsoNormal>برامج الخادمات. <LI style="TEXT-JUSTIFY: kashida; TEXT-ALIGN: justify; TEXT-KASHIDA: 0%; MARGIN: 0cm 0cm 0pt; mso-list: l2 level1 lfo3; tab-stops: list 36.0pt" dir=rtl class=MsoNormal>مواقع الشبكة. <LI style="TEXT-JUSTIFY: kashida; TEXT-ALIGN: justify; TEXT-KASHIDA: 0%; MARGIN: 0cm 0cm 0pt; mso-list: l2 level1 lfo3; tab-stops: list 36.0pt" dir=rtl class=MsoNormal>برمجة الأجهزة الذكية مثل الهواتف المحمولة و الثلاجات المعدلة و غيرها من تلك النوعية من الأجهزة.
- برمجة الألعاب.
- التعامل مع قواعد البيانات.
و لكن بالطبع مع وضع جملة (مع أنظمة تشغيل microsoft فقط) أمام اسم كل مجال مما ذكر بالقائمة فى الأعلى، و هذا الأمر ليس بالهين أبداً إذا ما علمنا أن نسبة الخوادم التى تستخدم نظام تشغيل اللينوكس تبلغ ما يزيد على السبعين فى المائة من مجموع الخوادم العاملة فعلاً و أن أشهر المواقع العالمية تستخدمه بدلاً من الـwindows الذى أذاقهم الأمرين بضعفه الشديد و تكلفته الأشد.
و كذا حينما نعلم أن هناك الكثيرين و الكثيرين ممن يتحولون سنوياً إلى أنظمة التشغيل الأخرى (و على الأخص اللينوكس) بسبب ضعف الـwindows الأمنى الشديد و تكلفته و تكلفة برامجه المبالغ فيها، بالتالى فإن القول بأن كل البرامج التى سيكتبها المبرمج لن تعمل إلا على أنظمة microsoft فقط هو ضربة فى الصميم لكل ما حازته الـ(C#) من شمولية بل و ضربة قاضية تماماً لأن المحمولية هى واحدة من أهم أركان الشمولية إن لم تكن بالفعل هى الركن الأهم و الأشد خطراً.
فشمولية محصورة فى ركن معين من عالم الحوسبة مقارنة بالشمولية المنفتحة على العالم الحوسبى كله تشبه بالضبط موقف الجارية من الزوجة رغم الغرابة فى التشبيه، فالزوجة و الجارية متساويتان فى الحق فى المعاملة الحسنة من الزوج أو المالك، و للزوج عليهما حقوق مشتركة كثيرة، و لكن هل هناك أى مجال للمقارنة بين وضع الزوجة و وضع الجارية؟ أى صاحب عقل سيرفض المقارنة من الأصل، و بالمثل المقارنة بين شمولية الجافا و شمولية الـ(C#) فهما اسمياً تكادان تتساويان تماماً من ناحية أنواع التطبيقات و المجالات التى يمكن أن تستخدم فيها، و لكن ذلك لا يكفى أبداً للمساواة بين الزوجة (الجافا) و الجارية (الـC#).
و ما قيل عن الـ(C#) يقال بالضبط عن الـ(visual basic .NET) نظراً للتوءمة التى صنعتها Microsoft بين اللغتين حينما ضمتمهما إلى إطار عمل الـ(.NET)، و بالتالى هى تأخذ نفس حكم الـ(C#) بلا زيادة أو نقصان.
و نعود إلى اللغة الثالثة الشهيرة فى عالم الشمولية و هى الـ(C++)، و التى حازت على مكانتها فى عالم الشمولية بلى الذراع إن كان لى أن أستخدم هذا التعبير، فعلى الرغم من أن الـ(C++) بالفعل لغة تتميز بالشمولية و يمكن لمبرمجها الاعتماد عليها فى كل المجالات البرمجية التى تخطر على باله أو لا تخطر لأى نظام تشغيل حى، إلا أن تلك الشمولية فى رأيى شمولية خداعة لا يمكن الاطمئنان إليها بحال من الأحوال على الأقل بالنسبة لى، نظراً لتعقيد اللغة الذى يضيع أى ميزة أخرى تمتلكها و على الأخص فى المجالات التى تتعقد فيها الخوارزمات و الأفكار فلا ينقص الطين بلة تعقيد اللغة البرمجية نفسها. و لكن لأننا فى هذا المقام نناقش الشمولية فقط فيمكننى أن أقول أن الـ(C++) تتربع على عرش الشمولية بجانب الجافا تماماً (و شتان ما بينهما فى التعقيد).
[/b][/b] | |
|
| |
وائل حسن مهندس بيشارك كويس
عدد المساهمات : 104 تاريخ التسجيل : 18/05/2010 العمر : 37 الموقع : أرى بخارى بلادي وهي نائية -- وأستريح إلى ذكرى خراسانِ Upload Photos : أهم مواضيعى : مدونتي الشخصية:
مدونة أفكار (مدونةٌ شخصيةٌ عن: السياسة، و المجتمع، و الأدب، و العلم.)
http://afkar-abo-eyas.blogspot.com
| موضوع: رد: المفاضلة بين لغات البرمجة السبت 1 يناير - 14:44 | |
| السلام عليكم و رحمة الله بصراحة تضايقنى قلة المشاركات على الرغم من كثرة المشاهدات، فحتى الآن لم يرد أحد على ما أكتب إلا البشمهندس يحيى و قد حدث هذا منذ فترة، فالتواصل بالنسبة لى أمر مهم للغاية لأنه يعطينى الإحساس بأن ما أكتب له صدى عند من يقرؤه، لذا أرجو كل من له القدرة على الدخول فى هذه "المناقشة" أن يدخل سريعاً لأن الحوار يثرى الموضوع و يكشف عن كل نقاطه، فأنا عن نفسى لم أكتب ما كتبت لغرض التعليم فقط بل لغرض تعلم وجهات نظر الآخرين التى ربما تكون صحيحة فأستفيد منها و لهذا وضعت الموضوع تحت فئة المناقشة و ليس إعلان أو خلافه. فإذا كان الكل مشغولاً فى "مواويل" الامتحانات فسوف أنتظر تفاعلهم بعد مرور هذه الفترة العصيبة (و ربنا يكرم الجميع)... المهم سوف أطرح اليوم مناقشة العنصر التالى و هو البساطة و الاستقرار... ***************
البساطة و الاستقرار:
من أكثر الأمور التى تثير غيظى فى لغة الـ(C#) أننى بعد أن قضيت فترة لا بأس بها أتعلمها فيها و أتشرب طريقة التفكير التى تتميز بها كسابقتها فى العمر الـ(java) أصبحت أحس بأننى لا أعرف البرمجة بها على الإطلاق، و يراودنى الإحساس بهذا كلما رأيت مقالاً أو كتيباً يتحدث عن الإصدارات الجديدة التى تصدرها (microsoft) من اللغة كل فترة. فهذه الإصدارات أصبحت رويداً رويداً تنفخ فى قربة كمية قواعد اللغة حتى انفجرت فى وجه المستخدمين البرءاء و لى الفخر فى أن أكون واحداً منهم.
و بعد أن كنت أتفاخر بأننى أفهم الـ(C#) جيداً أصبحت أخاف من التصريح بأننى أستخدمها فى البرمجة حتى لا يقوم أحدهم بإحراجى حينما يسألنى عن القاعدة الفلانية أو القاعدة العلانية التى ضمت إلى اللغة فى الإصدارة ذات الرقم الفلانى فيبدو جهلى واضحاً له. و الأمر أصبح مدعاة للرثاء و تقليب الأكف حيرة عند التفكير فى السبب الذى يقف وراء تلك "التطويرات" و النفخات الجديدة التى تعطى للغة على فترات منتظمة حتى أن نحو اللغة الآن لا يكفيه بمفرده لشرحه شرحاً محترفاًً مختصراً كتاب ضخم الحجم لا يقوى على استيعابه المبرمج العادى إلا فى شهور طويلة ينقطع فيها لدراسة اللغة تماماً، و فى النهاية لا يكون أمامه إلا ترك جانب كبير من اللغة لدراسه فى وقت لاحق نظراً لأنه لا يستطيع ترك باقى العلوم و التفرغ لدراسة لغة البرمجة كل الوقت و هى التى لا تمثل إلا جزءاً صغيراً من العمل البرمجى، و الجدير بالذكر أن الوقت اللاحق الذى يؤجل الدارس إليه دراسة أغلب اللغة مما تبقى له لا يأتى أبداً و ذلك عن تجربة واقعية.
و هكذا لا يكون أمام المبرمج إلا خيار من اثنين، أولهما أن ينقطع للغة فترة كافية تمكنه من التمكن الجيد منها ثم متابعة التطورات و الإضافات الجديدة التى تحدث و تضاف للغة كل فترة حتى يصبح مواكباً لأحدث تقنياتها على الدوام، أو الاكتفاء بمعرفة الجزء الأكبر و الأهم من اللغة و التمكن منه جيداً ثم الانطلاق إلى العلوم البرمجية الأخرى التى لابد من التمكن منها بجانب لغة البرمجة العملية.
أما الخيار الأول فيناسب من بدأ مشواره فى تعلم البرمجة منذ أن كان صغيراً و بالتالى كان أمامه الفترة الكافية للتعلم قبل مواجه سوق العمل الذى يضغط الأوقات و الأعصاب إلى أقصى الحدود، و لا يمكن أن يتناسب مع ظروف شخص مثل كاتب هذه الأسطر على سبيل المثال، فالعمل يدفع من هم مثله على القراءة و التعلم و الاحتراف فى مجالات أخرى غير لغة البرمجة المعنية، بل وربما يدفع سوق العمل على اتقان لغة أخرى غير اللغة التى يهتم بها المبرمج و يجد أنها تناسب نمط تفكيره، و أنا خير مثال على ذلك فأنا أستخدم فى البرمجة لغة الـ(C++) التى أمقتها بعنف شديد و أنا مطالب باحترافها و التمكن منها حتى أستطيع العمل بها بحرفية فى مجال معالجة الصور الرقمية، و لأننى أحب الـ(java) و الـ(C#) إلا أننى لا أستطيع بالطبع مجاراة آخر التحديثات و التغييرات التى تتم لهما لأننى لا أستطيع أن أقضى وقتى كله فى تعلم الـ(C++) من ناحية و تعلم الجديد فى الـ(C#) من ناحية أخرى على حين أن هناك علوم أخرى يجب أن أحصلها حتى أكون مبرمجاً بحق مثل هندسة البرمجيات و الخوارزمات و غيرها و التى لم أتعلمها من قبل لأننى احترفت مجال البرمجة و الحوسبة عموماً منذ فترة لا تزيد على الثلاث سنوات بحال من الأحوال.
و هناك من يناسبه خيار المتابعة المستمرة للغة غير البادئ فى التعلم منذ الصغر و هو من بدأ مع اللغة منذ بداياتها الأولى و أول إصداراتها، و بالتالى كانت لديه الفرصة الرائعة للمتابعة المستمرة كأفضل ما يكون، و هؤلاء ليسوا بالقليلين بل هم فى كل مكان حولنا و يمكن أن نراهم كثيراً حينما يأتى الأمر على لغة مثل الـ(C#) التى أصبحت البرمجة بها موضة من موضات المبرمجين اليوم و بالتالى انهمك الجميع فى دراستها و هى بعد فى المهد و بالمتابعة تعلموا الجديد أولاً بأول.
أما الخيار الثانى القائل بالتمكن من الجزء الأكبر و الأهم من اللغة فقط لكى يتبقى الوقت اللازم لتعلم باقى العلوم البرمجية فهو أمر فيه جدال يطول، و ذلك لأنه و إن كان مع أصحابه الحق فى القول بأهمية تعلم باقى العلوم البرمجية غير لغة البرمجة ذاتها فإنهم لا ينتبهون إلى نقطة أخرى فى غاية الأهمية و هى أنهم بتطبيقهم خيار التجزيئ للغة لن يتمكنوا من فهم الأكواد البرمجية التى يكتبها غيرهم ممن يبرمجون بنفس اللغة البرمجية و لكنهم يستخدمون مكونات لم يتعلموها هم. ولن يكون مثل هذا الموقف قليل الحوث بل سيحدث كثيراً جداً كلما زادت كمية الأكواد التى يطلع عليها المبرمجون، و هى كثيرة العدد جداً فى هذه الأيام بفضل عالم المصادر المفتوحة الذى كشر عن أنيابه بقوة و أصبحت قوته الضاربة غير قابلة للجدال فى كل مجال من مجالات البرمجة.
و هذا يعنى أن أمثال هؤلاء المبرمجين سيجبرون إن عاجلاً أو آجلاً على التعرف على معظم المكونات التى تركوها خلفهم فى اللغة إن لم تكن كلها، و بالتالى يكون من الأفضل لهم أن يفعلوا ذلك من البداية فى ذروة تعلم اللغة ما دام الأمر لا مفر منه فى النهاية و من ثم يكون ما نخافه من الإهمال لباقى عناصر العلم البرمجى أو حتى عدم التنبه الكامل لها حتى الانتهاء من تعلم لغة البرمجة التى هى الأداة التى يستخدمها المبرمج فى عمله ليس إلا.
و هكذا نرى بأم أعيننا الوقت الكبير يضيع فى تعلم ما كان يجب أن يكون هو الأمر الأبسط فى العملية التعليمية كلها بينما الأمور الأهم تترك لما بعد، و بعد كل ذلك تأتى مرحلة التطبيق على المجالات التى سوف تستخدم فيها كل تلك الخبرات البرمجية مثل برمجة الشبكات أو برمجة تطبيقات معالجة الصور الرقمية. و ليس لنا بعد كل ذلك الوقت المهدر التعجب من كره الكثيرين من التعمق فى دراسات البرمجيات النظرية مثل هندسة البرمجيات و الخوارزمات و رؤيتهم لها على أنها غير ذات جدوى بينما ينظرون إلى تعلم لغة برمجة على أنه هو كل شئ فى عالم البرمجة مادام يأخذ وقتاً كبيراً و يأتى دائماً فى المقدمة لكل شئ و يركز عليه الجميع أغلب اهتمامهم.
و هكذا نرى أيضاً كل عام أكواماً من الكتب التعليمية التى لم تعد لها أى فائدة رغم الجهد الذى بذله مؤلفوها فيها لأنها أصبحت تتحدث عن ماضى اللغة لا عن حاضرها، و رغم المال الذى دفعه فيها مشتروها الراغبين فى تعلم اللغة، و بالتدريج سيكون على المتعلم التفرقة بين الكتب القديمة و الحديثة بمنتهى الحرص حتى لا يقع فى معلومات مغلوطة عن اللغة. و مثل هذا الموقف نراه فى الـ(C#) التى كنا منذ فترة ليست بالبعيدة نقول عنها أنها لغة ذات أنواع ثابتة أو (statically typed) و من ثم فاجأتنا الإصدارات الجديدة أنها صارت أيضاً ذات أنواع متغيرة أو (dynamically typed).
و هذا الحال بالطبع لا يرضينى ولا أقتنع بجدواه على الإطلاق، بل أقول أن كل هذا عبث سخيف ليس له أن يستمر و لا يحق لأحد أن يفرضه على الآخرين بأى داع من الدواعى، فمنتجوا لغات البرمجة الشهيرة الذين يزيدون فى قواعدها يوماً بعد يوم مثل (microsoft) و لغتها الـ(C#) يجب عليهم أن يتوقفوا حالاً عن هذا و إلا كان لزاماً على معاشر المبرمجين مقاطعة أمثال تلك اللغات تماماً فيصير أمثال أولئك المنتجين مثالاً لكل من يتحدى إرادة مجتمع المبرمجين و يجبرهم على اللهاث وراءه فى عملية تعليمية تعذيبية الطابع لا نهاية لها.
الأسباب التى تجعل المنتجين للغات البرمجة يفعلون هذا:
إذا ما فكرنا فى هذه المسألة بعمق لوجدنا أن الأسباب التى تجعل منتجوا لغات البرمجة يزيدون من قواعد لغاتهم أو "يطورونها" تختلف حسب المنهجية التى ينظر بها ذلك المنتج إلى المجتمع البرمجى نفسه، و لنا فى لغة الـ(C#) خير مثال على ذلك، فمنتج لغة الـ(C#) هو (microsoft) التى لا تسعى (مثلها مثل كل الشركات التجارية) إلا وراء الكسب المادى مهما روجت دعايتها إلى كونها تسعى خلف التقدم العلمى (و من لا يصدق هذا فلأ أظنه إلا خاسراً لعقله و أدعوا له بأن يمن الله تعالى عليه بالعقل). المهم أن (microsoft) يهمها للحصول على المكسب المادى من وراء لغة الـ(C#) أن يكون لها أكبر عدد من المستخدمين من المبرمجين مختلفى الطباع و الأهواء، لذا نرى أن الـ(C#) تحوى داخلها من الصفات ما يجعلها تجميعة من مختلف أنواع التفكير البرمجية و يزداد هذا الأمر وضوحاً يوماً بعد يوم بالزيادات التى تضعها (microsoft) فيها بدعوى التطوير و التحديث.
و قد ضربنا لذلك مثالاً بالـ(statically typed) و الـ(dynamically typed)، و نضرب له مثالاً آخر هو البرمجة الآمنة و البرمجة غير الآمنة أو الـ(safe programming) و الـ(unsafe programming)، و التى تمكن مبرمجى الـ(C#) من استخدام المؤشرات التى تعودوا عليها فى الـ(C++) إذا ما أرادوا استخدامها فى اللغة الجديدة. وهو الأمر الذى قد يسعد بعض من مبرمجى الـ(C++) و يقنعهم بالفعل بالانتقال إلى البرمجة بالـ(C#) و لكنه فى نفس الوقت يجعل الـ(C#) بالنسبة لمن هم مثلى أرضاً مشكوك فى كونها حقل ألغام.
عدم الخلط بين الاستقرار و الجمود:
على أن كل الكلام السابق الذى نستنتج فيه ضرورة الاستقرار كعامل أساسى يجب توافره فى لغات البرمجة القوية لا يدفعنا إلى الظن بأن الجمود سيكون هو مصير اللغة التى تطبقه على المدى البعيد و تصر على هذا التطبيق، فالواقع أن الأمر غير ذلك نهائياً لأن الاستقرار ليس معناه الثبات التام للغة عند نحو معين كما قد يكون قد فهم الكثيرين من سابق الأقوال، بل المقصود بالاستقرار هو عدم التغيير إلا عند الضرورة الملحة التى لا يمكننا الاستجابة لها إلا بالتغيير الطفيف للغة، و أقول التغيير الطفيف لأن التغييرات الكبيرة يجب أن تدفعنا دفعاً إلى التفكير فى تصميم لغة برمجية أخرى منفصلة تماماً عن اللغة التى صارت من طراز أقدم، و تحتوى داخلها المكونات الجديدة التى نرغب فى ضمها إلى اللغة الأقدم.
و هذا هو الاستقرار الذى أرغب فى الوصول إليه فى لغات البرمجة القوية و أرى أنه من أول الصفات التى يجب أن تتوفر فى أى لغة، فلغة البرمجة القوية جيدة التصميم هى فى حقيقة الأمر لغة البرمجة التى لا تحتاج إلى أى تعديلات على تحوها إلا على فترات متباعدة و كما قلنا قبلاً فستكون تلك التغييرات قليلة العدد حتى لا يزداد نحو اللغة ضخامة، و الأهم أنها ستكون طفيفة لا تمس هيكل اللغة أو نموذجها البنائى بأى حال. أما لغة البرمجة التى ستحتاج إلى تعديلات كثيرة أو جوهرية على فترات متقاربة فهى لغة سيئة التصميم من البداية و كان يجب ألا يتم التعجل فى تصميمها أو كان يجب ألا يتم الإعلان عنها من الأصل، و لو طبق هذا المبدأ البسيط على لغات البرمجة من البداية لأراحنا من كثير من أوجاع الرأس و لكن ما باليد حيلة و ليس بيدنا تغيير الماضى لكن بالتأكيد يمكننا التحكم فى ما يتعلق بإرادتنا من المستقبل.
و فى النهاية فإننى ألخص موقفى فى تلك النقطة الجوهرية من مبحث تصميم لغات البرمجة فى البنود التالية:
1. يجب أن تكون اللغة مصممة على نار هادئة حتى لا نحتاج إلى التغيير الكثير فيها فيما بعد.
2. يجب أن تضم اللغة المكونات التى لا يمكن الاستغناء عنها و لا يمكن أن تحل محلها مكونات أخرى تم ضمها بالفعل للغة، أى أن الأولوية فى الضم للغة ستكون للمكونات التى لا غناء عنها و التى تغنى عن غيرها بينما يتم رفض ذلك الغير.
3. إذا ما كانت هناك تطورات فى البرمجة تجعل مكوناً جديداً جديراً بالضم إلى اللغة يجب أن يتم حسم مسألة كون هذا المكون الجديد لا يهدم مكونات أخرى أم لا، فإن كان لا يفعل و كان سهل التأقلم مع المكونات الموجودة بالفعل فيمكن ضمه إلى اللغة بعد فترة استقرار جيدة لا تقل فى رأيى عن سنة كاملة عن التغيير الضرورى السابق مباشرة.
4. على مدى حياة اللغة يجب أن يكون هناك حد يتم بعده رفض ضم أى مكون للغة مهما كانت أهميته و هو ما يمكن أن نسميه حد التخمة، و أقدر أنا هذا الحد بحجم الكتاب الذى يشرح نحو اللغة على نحو محترف مختصر، فلو زاد حجم الكتاب على الخمسين صفحة من ورق الـ(A4) المكتوب بخط وسط لا صغير و لا كبير يمكننى أن اعتبر هذه اللغة قد بلغت حد التخمة و يجب التقليل من كل ذلك الكم من القواعد التى لا داعى لها. و رغم أن الأمر يخضع للتقدير الشخصى بالفعل إلى حد كبير إلا أنه بالحس الشخصى يمكن التوصل إلى نتائج شديدة الشبه عند النظر إلى لغات البرمجة المختلفة من عينى أشخاص مختلفين استناداً إلى المعيار السابق للتخمة، أى أنه رغم كون المعيار غير فائق التحديد إلا أنه عملياً سيكون ذا قوة توحيد قياسية كبيرة بين المبرمجين و الناقدين للغات البرمجة.
5. عندما تبلغ الغة حد التخمة و يكون هناك مكونات لابد من وجودها فى لغة البرمجة الجيدة لتلائم الأفكار الجديدة فى العمل البرمجى، أو عندما نحتاج إلى تغيير أحد الأفكار الرئيسة فى لغة البرمجة أو حتى تكون هناك مكونات عفى عليها الزمن و يجب التخلص منها، فيجب علينا أن نفكر فى إنتاج لغة برمجة جديدة تستلهم الجيد الذى فى اللغة القديمة و تضع الجديد المرغوب فى ضمه محل القديم المرغوب فى تركه، و هذا يجعل تصميم اللغات أسهل و تطورها أكثر قابلية للفهم كما أنه يعطى للراغبين فى البرمجة باللغة على نفس الشكل القديم لها الفرصة لفعل ذلك و لا يجبرهم على التغيير للشكل الجديد مادام الشكل الجديد قد صيغ على شكل لغة برمجية أخرى مختلفة لهم كل الحق فى التقرير لأنفسهم إن كانوا سيتعلمونها و يستخدمونها أم لا.
| |
|
| |
وائل حسن مهندس بيشارك كويس
عدد المساهمات : 104 تاريخ التسجيل : 18/05/2010 العمر : 37 الموقع : أرى بخارى بلادي وهي نائية -- وأستريح إلى ذكرى خراسانِ Upload Photos : أهم مواضيعى : مدونتي الشخصية:
مدونة أفكار (مدونةٌ شخصيةٌ عن: السياسة، و المجتمع، و الأدب، و العلم.)
http://afkar-abo-eyas.blogspot.com
| موضوع: رد: المفاضلة بين لغات البرمجة الخميس 13 يناير - 12:56 | |
| السلام عليكم و رحمة الله أكمل اليوم شرح عناصر المفاضلة بين لغات البرمجة من وجهة نظرى، و عنصر اليوم هو عنصر الأمن... *************************** الأمن: و ليس المقصود بالأمن هنا الحماية ضد البرمجيات الضارة باختلاف أنواعها من فيروسات و برمجيات تجسس و أحصنة طروادة، بل المقصود به وجود رقابة من مصمم اللغة على المكونات التى تضم للغة بحيث يضمن كونها غير قابلة لأن تكون مصدراً للأخطاء أو القلاقل فى البرامج التى تستخدم فيها، و كذا ضم المكونات التى تساعد المبرمج على التغلب على الأخطاء التى تظهر أثناء عمل البرنامج مثل معالجة الاستثناءات. أى أن الناحية الأمنية فى اللغة تتكون على الأقل من عنصرى تلافى المكونات السيئة و ضم المكونات المفيدة، و على هذا فيمكننا أن نرى أن عنصر الأمن يصب فى ناحية عنصر البساطة و الاستقرار، حيث يضع معايير تحد من الأعداد التى يتم قبول ضمها إلى اللغة من المكونات البرمجية فيحافظ على كون اللغة فى الحد الأقصى المقبول لها من الحجم النحوى على الأقل، كما يضمن أن القواعد التى ضمت إليها هى بالفعل أجدر القواعد بالضم. و يمكننا أن نضع الأمن اللغوى بتوسع و شمول فى ثلاث عناصر هى:
1. وجود مكونات تسهل العمليات كثيرة الاستخدام و التى قد يخطئ فيها المستخدم إذا ما كانت تتطلب كثيراً من الجهد نظراً لكثرة تكرارها، و بالتالى فإن تسهيل العملية على المبرمج بتوفير المكونات الجاهزة فى لغة البرمجة التى تقوم بالعملية كاملة بالنيابة عنه لا يخدم فقط الناحية الإنتاجية فى العملية البرمجية بل يخدم بشكل أساسى عملية تفادى الأخطاء البرمجية. 2. استبعاد المكونات أو التعبيرات البرمجية التى تسبب البلبة و الارتباك و من ثم الأخطاء البرمجية بكل أنواعها من أخطاء نحوية و أخطاء زمن تشغيل و أغلاط منطقية، و مهما جادل المجادلون فى فائدة مثل تلك المكونات أو التعبيرات فيجب أن يوقنوا أنه يمكن الاستغناء عنها، لأنها نتاج فكر بشرى وجدها حلاً لما واجهه من مشاكل و ليست تنزيلاً من السماء يجب قبوله كما هو، و يمكن بالقليل من التفكير أو حتى بالكثير منه إبتكار مكونات أو أساليب جديدة تغنى عن تلك المكونات و التعبيرات المربكة. 3. وجود المكونات التى مهمتها الأساسية معالجة الأخطاء الناتجة مثل معالجات الاستثناءات فى الـ(java) و الـ(C#) و كثير من اللغات الأخرى، و هذه المكونات تجعل عملية البرمجة متعة حقيقية لأنها تقرب الأمر من التفكير العالى للبشر إلى أقصى الحدود، فبدلاً من البحث اليدوى عن كل الاستثناءات المتوقع حدوثها و كتابة الأحداث اللازمة لمعالجتها أصبح لدينا تلك الصياغة التى يمكننا بها ببساطة تحديد الإجراء المناسب لكل نوع من أنواع الاستثناءات.[/size] | |
|
| |
وائل حسن مهندس بيشارك كويس
عدد المساهمات : 104 تاريخ التسجيل : 18/05/2010 العمر : 37 الموقع : أرى بخارى بلادي وهي نائية -- وأستريح إلى ذكرى خراسانِ Upload Photos : أهم مواضيعى : مدونتي الشخصية:
مدونة أفكار (مدونةٌ شخصيةٌ عن: السياسة، و المجتمع، و الأدب، و العلم.)
http://afkar-abo-eyas.blogspot.com
| |
| |
Ahmed_M مهندس جديد
عدد المساهمات : 15 تاريخ التسجيل : 14/02/2011 العمر : 34 Upload Photos :
| موضوع: رد: المفاضلة بين لغات البرمجة الخميس 24 فبراير - 14:32 | |
| بسم الله الرحمن الرحيم أولا : معلش بالنسبة لقلة الردود ثانيا انا لما قريت الموضوع بتأنى و تعمق لقيت ان فيه حاجات كتير فعلا بتنقصنى لما باحكم على لغة البرمجة , و كمان جميل انك بتقول ما للغة و ما عليها حتى للسى ( مع انك مبتحبهاش ) ثالثا : فيه عنصر مش عارف اذا كان مهم و لا لأ لكن انا حقوله و خلاص وهو ( قدرة اللغة على التعامل مع اللغات الاخرى ) , يعنى لما اعمل برنامج بالسى و عاوز اضيف له جزء معمول بالجافا .أو الفرق اللى بتشتغل فى مشروع معين ممكن يكونوا مش بيشتغلوا بلغة واحدة لكن فى الاخر حنحتاج اننا نجمع البرنامج فى وحدة واحدة .رابعا : بالنسبة لمسالة التخمة دى فانا متفق معاك 100% - لكن بحبحها شويتين فى عدد الورق - لان ال Syntax الكتير و -المعقد - بيتعب المبتدىء و المحترف مع التفاوت طبعا .خامسا : اما بالنسبة لحكاية التوسط و استخدام الرموز المتعارف عليها فليها ميزتين من وجهة نظرى الاولى فى ان المستخدم يقدر يتحول للغة جديدة بسهولة من غير ما يضطر انه يتعلم نحو اللغة من جديد الثانية فى انه مش حيضطر يستخدم اللغة القديمة - واللى فيها عيوب - لانه بس يعرف النحو بتاعها و أسف على الاطالة ........................... | |
|
| |
Ahmed_M مهندس جديد
عدد المساهمات : 15 تاريخ التسجيل : 14/02/2011 العمر : 34 Upload Photos :
| موضوع: رد: المفاضلة بين لغات البرمجة الخميس 24 فبراير - 14:53 | |
| معلش النص طالع متلخبط عشان فيه معايا مشكلة فى تنسيق النصوص برضه | |
|
| |
وائل حسن مهندس بيشارك كويس
عدد المساهمات : 104 تاريخ التسجيل : 18/05/2010 العمر : 37 الموقع : أرى بخارى بلادي وهي نائية -- وأستريح إلى ذكرى خراسانِ Upload Photos : أهم مواضيعى : مدونتي الشخصية:
مدونة أفكار (مدونةٌ شخصيةٌ عن: السياسة، و المجتمع، و الأدب، و العلم.)
http://afkar-abo-eyas.blogspot.com
| موضوع: رد: المفاضلة بين لغات البرمجة السبت 26 فبراير - 11:00 | |
| | |
|
| |
Ahmed_M مهندس جديد
عدد المساهمات : 15 تاريخ التسجيل : 14/02/2011 العمر : 34 Upload Photos :
| موضوع: رد: المفاضلة بين لغات البرمجة الإثنين 28 فبراير - 6:07 | |
| السلام عليكم ...............بالنسبة لبرنامج البيرل ايه رأيك (نعمله حجاب و نكتبه فى ورقة خضرا ونلفه بشريطة خضرا و نيجى على باب قسم البرمجة وندقه بمسمار ..............................................................................................................................اكيد اخضر | |
|
| |
وائل حسن مهندس بيشارك كويس
عدد المساهمات : 104 تاريخ التسجيل : 18/05/2010 العمر : 37 الموقع : أرى بخارى بلادي وهي نائية -- وأستريح إلى ذكرى خراسانِ Upload Photos : أهم مواضيعى : مدونتي الشخصية:
مدونة أفكار (مدونةٌ شخصيةٌ عن: السياسة، و المجتمع، و الأدب، و العلم.)
http://afkar-abo-eyas.blogspot.com
| موضوع: رد: المفاضلة بين لغات البرمجة الإثنين 28 فبراير - 13:59 | |
| | |
|
| |
| المفاضلة بين لغات البرمجة | |
|