1
منتدى علوم الحاسب / لغات البرمجة
« في: سبتمبر 02, 2003, 03:23:46 صباحاً »
لغات البرمجة ..... إنجاز سبرنتيكي أم تعقيد لا معنى له
عندما صمم بابيج في القرن التاسع عشر آلة الفروق الميكانيكية ، التي يعتبرها معظم البريطانيين وبعض الأمريكيين الأب الروحي للحواسيب الحديثة ، لم يكن يخطر على بال أحد أن هذا الإبتكار الذي أعتبر وقتها ترفاً فكرياً وتبذيراً لا معنى له ، حيث مولته الجمعية الملكية البريطانية بأكثر من أربعين ألف جنيه ذهبي حينها ، سيغدو بعد أقل من مائة عام الملهم الرئيس لأحد أهم إبتكارات ونتاجات النصف الثاني من القرن العشرين ، وتبلورت هذه النظرة عملياً عندما أبصر الحاسوب Mark – 1 النور في شهر آب عام 1944 ، حيث إعتبره البعض أعظم نتاج فكري للبشرية منذ نشوء الحضارة ، بينما إعتبره الآخرون نموذجاً كهربائياً رديئاً لحاسوب السيد بابيج الميكانيكي ، خصوصاً وأن السيدMARK – 1 كان يوازي في حجمه تقريباً ملعب كرة قدم نموذجي ، ويحتاج إلى طاقة كهربائية تكفي لإنارة مدينة متوسطة الحجم ، ويعتمد نظام التبريد بالماء ، حيث يستهلك يومياً حوالي 60 ألف ليتر فقط .
أجيال الحواسيب :
كان الحاسوب Mark – 1 وإخوته مثل INAK II وباقي أفراد العائلة الكريمة ، تدعى الجيل الأول من الحواسيب ، وكانت تعتمد في بنيتها أساساً على الصمامات الكهربائية ، بينما تعتمد كلياً في برمجتها على لغة الآلة وفق نظام العد البينري والثماني والست عشري ، بل إن بعضها إعتمد نظام العد العشري الذي خلق مشاكل برمجية هائلة دفعت القائمين على تطوير نظام التشغيل إلى إلغاء المشروع برمته .
وبظهور الحاسوب IBM 7070 الذي أبصر النور عام 1958 ظهر الجيل الثاني من الحواسيب ، وهو يعتمد كلياً على الترانزيستورات ، ويعتمد نظم تشغيل تستوعب لغات برمجية قريبة من لغة الإنسان " كوبول ، فورتران .. إلخ ... " مع إمكانية تنفيذ أكثر من برنامج في الوقت نفسه .
وشهدت صناعة الحواسيب قفزة ممتازة أخرى من خلال الحاسوب IBM 360 عام 1963 ، الذي إعتمد كلياً على الدارات التكاملية التي أدت إلى صغر حجم الحاسب إلى حد كبير ، مع إرتفاع سرعة الأداء إلى أكثر من 100000 عملية / ثا مع إمكانية وصل الحاسوب بحواسيب ومعدات أخرى خارجية ، مما يجعلنا نعتبر السيد IBM 360 الجد الشرعي والمباشر لحواسيبنا العلوج التي نعمل عليها هذه الأيام ، صحيح أن العلج الذي أكتب عليه هذا المقال مختلف كلية عن جده سواء بالشكل أو الحجم أو الأداء أو نظم التشغيل ، إلا أن المكونات الرئيسة لكل من الجد والحفيد لا تختلف كثيراً من وجهة نظر علم الإلكترونيات المعاصر " دعونا من النقاش البيزنطي حول التركيبات البنيوية والتردادت مفرطة السرعة و .. و .. إلخ ... " ولنناقش الموضوع من وجهة سيبرنتيكية بحتة ، حيث يمكن إعتبار الحاسوب صندوقاً أسود لذاكرة خرافية ، وعليه يمكن تقسيم الذواكر إلى نوعين ، داخلية " كالذواكر النشطة القابلة للمحي فور قطع التغذية الكهربية عنها ، والذواكر الميتة التي يتم فيها تخزين قواعد وبيانات التعريف الأصلية لكل قطعة على حدة والذواكر شبه الميته أو المقفولة إلى حين ، كالإيبرومات والفلاش " ، وذواكر خارجية كأقراص السي دي ، والأقراص المرنة والطابعات والكروت المثقبة والكاميرات الرقمية وأشرطة التسجيل وغيرها من وسائط حفظ المعلومات وإسترجاعها ، ومن المؤكد أن IBM 360 خالٍ تماماً من Flash Memory ، لكنه يحوي العديد من الدوائر التكاملية شبه المقفلة ، والشبيهة إلى حد كبير بالفلاش ، كما أنه لم يكن يحوي أقراصاً صلبة أو مرنة ، لكنه كان يحوي الكثير من بدائل التخزين التي قد لا تروق لنا كثيراً في هذه الأيام ، لكنها كانت أكثر من مقبولة قبل أربعين عاماً .
لغات البرمجة :
رأينا كيف أن الجيل الأول من الحواسيب كان يعتمد كلياً على اللغة الوحيدة التي يفهمها الكومبيوتر حتي اليوم ، وهى لغة الآلة التي تعتمد ثنائية (0 , 1 ) أو ما نسميه كهربائياً بـ ( ON , OFF ) ، ونتيجة الصعوبة الهائلة التي يواجهها المبرمجون في كتابة البرامج ، وتتبع الأخطاء البشرية الناجمة عن هذه الثنائية الجافة ، ظهرت الحاجة إلى تطوير لغة أكثر سهولة ، وأقرب إلى الإنسان من تلك الثنائيات المضجرة التي لا تنتهي ، فظهرت لغة " اسمبلي " التي تعتمد الحروف بدل الأرقام ، حيث تكتب الأوامر بها ثم تترجم إلى لغة الآلة بواسطة Assembler " مجمِّع " موجود مسبقاً بذاكرة ميته في بعض أنواع الجيل الأول ، ومعظم أنواع الجيل الثاني والثالث .
الإ أن الرمزية المفرطة للغة إسمبلي ، جعل منها لغة مقتصرة على المبرمجين المحترفين ، مما جعل الحاجة إلى إبداع لغات أخرى أكثر سلاسة وسهولة لقطاعات أوسع من هواة الكومبيوتر ، فظهرت اللغات الراقية أو العالية تمييزاً لها عن اللغات الدنيا المتمثلة بالأسمبلي ولغة الثنائيات ، وكانت باكورة تلك اللغات وأهمها تقريباً ، لغة فورتران " FORmula TRANslator " التي أبدعتها شركة IBM عام 1956 و فتحت المجال لظهور اللغات الأخرى المعروفة، وهى خاصة بالتطيبقات الرياضية والعلمية كما هو واضح من إسمها ، ثم لغة COBOL و BASIC وC وPASCAL و LOGO ، وبحلول عام 1970 كان هناك أكثر من خمسة الآف لغة برمجة عالية ، لا أعرف أسماء معظمها ، ثم ظهرت في السنوات الأخيرة اللغات المرئية ( Visual Languages مثلVB و VC ) والنصية ( Scripting Languages مثل Java script ) و النصية المرئية مثل VBS ، كنتاج مباشر لتطور الكومبيوتر و الأنترنت ، لكن السمة الغالبة لكل تلك اللغات هى حاجتها للمصنفات " Compilers " التي تعمل كمترجمات أو مفسرات للكومبيوتر كي يستوعب مغزى تلك اللغات الراقية من خلال ثنائياته الأزلية .
وتقوم حالياً معظم شركات نظم التشغيل بإدراج تلك المفسرات في بنية النظام نفسه وخصوصاً بالنسبة للغات النصية المستعملة عادة لبرمجة وتصميم ويب ، حيث يُدرج المفسر في بنية نظام الإتصال والتفاعل عبر الأنترنيت ، بحيث يكون النظام فاهماً للأوامر المكتوبة بهذه اللغة أو تلك ، حتى دون الحاجة لتحميل المفسر مع برنامج اللغة العليا الذي ننوي إستخدامه ، بينما تقوم شركات البرمجة بإدراج المفسر مع البرنامج البرمجي ، لتحميله بشكل تلقائي على النظام .
ومنذ لغة فورتران بل منذ اسمبلي والمحارف التي يتم حجزها في نظم التشغيل هى محارف إنجليزية بحتة ، أو محارف لاتينية بشكل أكثر دقة ، بعضها لرموز شائعة وبعضها الآخر لكلمات فصيحة أو عامية ، وتقوم المفسرات التي هى أساساً جداول تحويل رقمية ، بترجمة تلك الكلمات والرموز إلى نظام العد الثنائي ، وهكذا يعمل الحاسوب المحترم بكل سلاسة ودونما أدنى مشاكل .
إبتكار لغة البرمجة :
يعتمد إبتكار اللغة البرمجية أساساً على المحاكاة والبناء المنطقي الرياضي ، وهما مفهومان أساسيان في السيبرنتيكا ، كما يعتمد بناء المفسر على المنطق الجبري الرياضي وجداول التحويلات الرمزية وفق قواعد سيبرنتيكية صارمة جنباً إلى جنب مع البناء اللغوي المنطقي ، وكلما كان البناء الرياضي محكماً أكثر كلما كانت اللغة أقوى ، مما يعني بناء برنامج متكامل بعدد أقل من السطور ، وبغض النظر عن الفروق السيبرنتيكية بين لغة وأخرى مثل الفرق الجوهري بين لغة C ولغة Basic حيث تعتمد الأولى على الإجراءات ( Procedurals ) أساساً بينما تعتمد الثانية إلى حد كبير على الروتين الجزئي ( Subroutines ) فإن الفرق الرئيس يكمن في البناء الرياضي الفضفاض و الهش للغة Basic مما يعني سطور أكثر عند كتابة البرنامج نفسه ، المكتوب بلغة C ، وسوف نشرح في هذه العجالة الشكل الرئيس للبناء الرياضي للغة Basic الذي لا يختلف كثيراً عن البناء الرياضي لـVB ، وقد إخترناها بالذات لأنها اللغة الأكثر شعبية في العالم من جهة ، وكون معظم برامج ويندوز مبنية أساساً عليها من جهة أخرى .
وقبل الخوض بالبنية الرياضية للغة Basic دعونا نأخذ فكرة عن كيفية بناء لغة برمجة ، فاللغة البرمجية لم تأت من فراغ ، ومنذ عام 1950 وعلماء السيبرنتيكا الرياضية يبحثون عن محارف موحدة تتحدث بها جميع الآلات ، وكان من الضروري وضع قاموس موحد لتلك المحارف وهذا ماحصل عام 1958 في مدينة زيوريخ ، عندما إجتمع المعنيون ذوو الصلة وطوروا اللغة البدائية الأولى المعروفة بإسم ALGOL – 60 حيث وضعوا القاموس المحرفي المعتمد حالياً لدى جميع شركات ابتكار وتطوير لغات البرمجة ، والذي يبدأ بعبارة (( مايمكن قوله ينبغي قوله بوضوح ، وما لايمكن قوله فيجب السكوت عنه )) ولهذا لا تحوي اللغة السيبرنتيكية الدولية أكثر من 600 كلمة ، جميعها أوامر للتحكم والبناء البرمجي بدءاً بكلمة Begin وإنتهاءاً بكلمة End ، وقد تم مؤخراً بعد ظهور اللغات النصية إضافة 96 كلمة لهذا القاموس العتيد ، فيا لها من لغة شاعرية غنية .
ويعتمد البناء المنطقي لإبتكار لغة برمجة على جبر بول الذي يمتاز عن الجبر العادي بأن الرموز فيه تعبر عن مقولات وليس أرقام وكميات ، بينما يعتمد البناء الرياضي على العلاقات بين تلك المقولات وفق الخوارزميات المعتمدة في الجبر الخطي وجبر المصفوفات ، تلك العلاقات قد تكون صحيحة منطقياً ( True ) أو غير صحيحة ( False ) ، ولنأخذ مثالاً عملياً وفق جبر بول على هذا البناء ، ولنقم بتحويل المقولة التالية إلى رموز جبرية :
" سأذهب بالتأكيد إلى مباراة كرة القدم إذا حصلت على بطاقة مجانية أو إذا دعاني صديقي ، وإذا لم يسقط المطر " ، لقد كانت الإشتراطات هى كما يلي :
1. مباراة كرة القدم ، ولنرمز لها بالحرف ( ك )
2. إذا حصلت على بطاقة مجانية ، ولنرمز لها بالرمز ( ب )
3. إذا دعاني صديقي ، ولنرمز لها بالرمز ( ص )
4. إذا لم يسقط المطر، ولنرمز لسقوط المطر بالرمز م ولعدم سقوط المطر بالرمز (م¯ )
وبسبب هذه الإشتراطات نلاحظ أن هناك عوامل مشتركة تحت الصيغة إذا ( if ) المحجوزة سلفاً في قاموسنا السيبرنتيكي ، كما أن هناك علاقات شبيهة بالعلاقات الرياضية تكمن في عبارات : و ( and ) التي تعني في قاموس السيبرنتيكا العتيد ( X ) ، وكلمة أو ( or ) التي تعني ( + ) ، بينما عملية الذهاب المقرونة بتلك الإشتراطات فتعبر عن إشارة المساواة ( = ) ، وهكذا يمكن صياغة المقولة كما يلي :
ك = ب X م¯+ ص X م¯ ←
ك = ( ب + ص ) . م¯
إن جميع لغات البرمجة سواء كانت تعتمد الإجراءات والقوائم أم الروتينات الجزئية أم كليهما معاً ، تعتمد في بنائها المنطقي على أشباه المثال أعلاه ، وبالطبع فإنك من خلال مباراة كرة قدم واحدة لن تستطيع أن تبني لغة برمجية غنية كلغة C ، لكن المثال يعطي صورة شبه دقيقة عن البناء المنطقي الرياضي للغات البرمجة بشكل عام خصوصاً وأن مكتبات الربط الديناميكية المستخدمة بوفرة في البرامج الحديثة هى محاكاة سيبرنتيكية رمزية شمولية لعمليات يتطلبها البرنامج ولا داعي لتكرارها، حيث تستدعيها التطبيقات المختلفة التي تعتمد نفس الإجراءات كلما دعت الحاجة .
ويلعب البناء الرياضي دوراً هاماً في تحديد قوة اللغة أو محدوديتها ، ولكن يجب الإنتباه إلى إن البناء الرياضي الهش للغة بيسيك مثلاً لا يمنع من تصميم برامج أكثر من رائعة على أساسها ، ولذا يقول الإحترافيون دائماً أن أفضل وأقوى لغة برمجة هى اللغة التي تتقنها ، ولكل لغة برمجة خصوصياتها ومكامن ضعف وقوة فيها ، فليست هناك حتى الآن لغة خالية من العيوب ، وما تحدثنا عنه من ضعف يهم المطورين والساعين " مشكورين " لتعريب لغات البرمجة أكثر مما يهم المبرمجين والمستثمرين ، ولكن أخذ فكرة عن نقاط ضعف لغة بيسيك لا يخلو من فائدة للجميع ، فعلى سبيل المثال يمكن حساب sin أي زاوية في Classic Basic من خلال الدالة sin بشكل مباشر لكن معرفة زاوية نعرف مسبقاً جيبها أو تجيبها ، متعذر بشكل مباشر في بنية Classic Basic لعدم وجود دالة مستقلة لهذا الأمر حيث يتوجب القيام بهذا الموضوع من خلال الدالة ATN بإستخدام القانون :
sin² θ + cos² θ = 1
ونحن نعلم أن : tan θ = sin θ / cos θ
وهكذا عند معرفة ظل الزاوية يمكن إستخدام الدالة ATN للحصول على زاوية معروف جيبها أو تجيبها ، وهذا طريق ممل وطويل ، و هناك عشرات العقد النفسية الأخرى الأدهى ، التي لم يجد المطورون لها حلولاً حتى مع أحدث إصدارات VB وخصوصاً فيما يتعلق بالجذور ، ومشاكل الدالة DIM التي تبقى ثابتة طيلة عمل البرنامج وتتطلب التجانس ، مما يعني عدم إمكانية الحصول على مصفوفة واحدة من مصفوفتين غير متجانستين إلا بشق الأنفس وطلوع الروح ، و بعد عشرات رسائل الخطأ، بعكس اللغات التي تعتمد القوائم كلغة LOGO مثلاً .
ولكن وفي جميع الأحوال ، لكي تكون مبرمجاً جيداً عليك أن تكون رياضياً ماهراً ، إلا إذا أردت الإكتفاء بالصيغ والقوالب الجاهزة ، حيث ينحصر عملك حينها بالقص واللصق ، وإدراج بعض المحارف التي تضفي حيوية على برنامجك ، وهذا يمكن وصفه بكل ما تشاء من عبارات المديح والثناء وتحت كافة المسميات التي تتيحها لغتنا الصحَّافية إلا البرمجة .
ـ منقول ـ
عندما صمم بابيج في القرن التاسع عشر آلة الفروق الميكانيكية ، التي يعتبرها معظم البريطانيين وبعض الأمريكيين الأب الروحي للحواسيب الحديثة ، لم يكن يخطر على بال أحد أن هذا الإبتكار الذي أعتبر وقتها ترفاً فكرياً وتبذيراً لا معنى له ، حيث مولته الجمعية الملكية البريطانية بأكثر من أربعين ألف جنيه ذهبي حينها ، سيغدو بعد أقل من مائة عام الملهم الرئيس لأحد أهم إبتكارات ونتاجات النصف الثاني من القرن العشرين ، وتبلورت هذه النظرة عملياً عندما أبصر الحاسوب Mark – 1 النور في شهر آب عام 1944 ، حيث إعتبره البعض أعظم نتاج فكري للبشرية منذ نشوء الحضارة ، بينما إعتبره الآخرون نموذجاً كهربائياً رديئاً لحاسوب السيد بابيج الميكانيكي ، خصوصاً وأن السيدMARK – 1 كان يوازي في حجمه تقريباً ملعب كرة قدم نموذجي ، ويحتاج إلى طاقة كهربائية تكفي لإنارة مدينة متوسطة الحجم ، ويعتمد نظام التبريد بالماء ، حيث يستهلك يومياً حوالي 60 ألف ليتر فقط .
أجيال الحواسيب :
كان الحاسوب Mark – 1 وإخوته مثل INAK II وباقي أفراد العائلة الكريمة ، تدعى الجيل الأول من الحواسيب ، وكانت تعتمد في بنيتها أساساً على الصمامات الكهربائية ، بينما تعتمد كلياً في برمجتها على لغة الآلة وفق نظام العد البينري والثماني والست عشري ، بل إن بعضها إعتمد نظام العد العشري الذي خلق مشاكل برمجية هائلة دفعت القائمين على تطوير نظام التشغيل إلى إلغاء المشروع برمته .
وبظهور الحاسوب IBM 7070 الذي أبصر النور عام 1958 ظهر الجيل الثاني من الحواسيب ، وهو يعتمد كلياً على الترانزيستورات ، ويعتمد نظم تشغيل تستوعب لغات برمجية قريبة من لغة الإنسان " كوبول ، فورتران .. إلخ ... " مع إمكانية تنفيذ أكثر من برنامج في الوقت نفسه .
وشهدت صناعة الحواسيب قفزة ممتازة أخرى من خلال الحاسوب IBM 360 عام 1963 ، الذي إعتمد كلياً على الدارات التكاملية التي أدت إلى صغر حجم الحاسب إلى حد كبير ، مع إرتفاع سرعة الأداء إلى أكثر من 100000 عملية / ثا مع إمكانية وصل الحاسوب بحواسيب ومعدات أخرى خارجية ، مما يجعلنا نعتبر السيد IBM 360 الجد الشرعي والمباشر لحواسيبنا العلوج التي نعمل عليها هذه الأيام ، صحيح أن العلج الذي أكتب عليه هذا المقال مختلف كلية عن جده سواء بالشكل أو الحجم أو الأداء أو نظم التشغيل ، إلا أن المكونات الرئيسة لكل من الجد والحفيد لا تختلف كثيراً من وجهة نظر علم الإلكترونيات المعاصر " دعونا من النقاش البيزنطي حول التركيبات البنيوية والتردادت مفرطة السرعة و .. و .. إلخ ... " ولنناقش الموضوع من وجهة سيبرنتيكية بحتة ، حيث يمكن إعتبار الحاسوب صندوقاً أسود لذاكرة خرافية ، وعليه يمكن تقسيم الذواكر إلى نوعين ، داخلية " كالذواكر النشطة القابلة للمحي فور قطع التغذية الكهربية عنها ، والذواكر الميتة التي يتم فيها تخزين قواعد وبيانات التعريف الأصلية لكل قطعة على حدة والذواكر شبه الميته أو المقفولة إلى حين ، كالإيبرومات والفلاش " ، وذواكر خارجية كأقراص السي دي ، والأقراص المرنة والطابعات والكروت المثقبة والكاميرات الرقمية وأشرطة التسجيل وغيرها من وسائط حفظ المعلومات وإسترجاعها ، ومن المؤكد أن IBM 360 خالٍ تماماً من Flash Memory ، لكنه يحوي العديد من الدوائر التكاملية شبه المقفلة ، والشبيهة إلى حد كبير بالفلاش ، كما أنه لم يكن يحوي أقراصاً صلبة أو مرنة ، لكنه كان يحوي الكثير من بدائل التخزين التي قد لا تروق لنا كثيراً في هذه الأيام ، لكنها كانت أكثر من مقبولة قبل أربعين عاماً .
لغات البرمجة :
رأينا كيف أن الجيل الأول من الحواسيب كان يعتمد كلياً على اللغة الوحيدة التي يفهمها الكومبيوتر حتي اليوم ، وهى لغة الآلة التي تعتمد ثنائية (0 , 1 ) أو ما نسميه كهربائياً بـ ( ON , OFF ) ، ونتيجة الصعوبة الهائلة التي يواجهها المبرمجون في كتابة البرامج ، وتتبع الأخطاء البشرية الناجمة عن هذه الثنائية الجافة ، ظهرت الحاجة إلى تطوير لغة أكثر سهولة ، وأقرب إلى الإنسان من تلك الثنائيات المضجرة التي لا تنتهي ، فظهرت لغة " اسمبلي " التي تعتمد الحروف بدل الأرقام ، حيث تكتب الأوامر بها ثم تترجم إلى لغة الآلة بواسطة Assembler " مجمِّع " موجود مسبقاً بذاكرة ميته في بعض أنواع الجيل الأول ، ومعظم أنواع الجيل الثاني والثالث .
الإ أن الرمزية المفرطة للغة إسمبلي ، جعل منها لغة مقتصرة على المبرمجين المحترفين ، مما جعل الحاجة إلى إبداع لغات أخرى أكثر سلاسة وسهولة لقطاعات أوسع من هواة الكومبيوتر ، فظهرت اللغات الراقية أو العالية تمييزاً لها عن اللغات الدنيا المتمثلة بالأسمبلي ولغة الثنائيات ، وكانت باكورة تلك اللغات وأهمها تقريباً ، لغة فورتران " FORmula TRANslator " التي أبدعتها شركة IBM عام 1956 و فتحت المجال لظهور اللغات الأخرى المعروفة، وهى خاصة بالتطيبقات الرياضية والعلمية كما هو واضح من إسمها ، ثم لغة COBOL و BASIC وC وPASCAL و LOGO ، وبحلول عام 1970 كان هناك أكثر من خمسة الآف لغة برمجة عالية ، لا أعرف أسماء معظمها ، ثم ظهرت في السنوات الأخيرة اللغات المرئية ( Visual Languages مثلVB و VC ) والنصية ( Scripting Languages مثل Java script ) و النصية المرئية مثل VBS ، كنتاج مباشر لتطور الكومبيوتر و الأنترنت ، لكن السمة الغالبة لكل تلك اللغات هى حاجتها للمصنفات " Compilers " التي تعمل كمترجمات أو مفسرات للكومبيوتر كي يستوعب مغزى تلك اللغات الراقية من خلال ثنائياته الأزلية .
وتقوم حالياً معظم شركات نظم التشغيل بإدراج تلك المفسرات في بنية النظام نفسه وخصوصاً بالنسبة للغات النصية المستعملة عادة لبرمجة وتصميم ويب ، حيث يُدرج المفسر في بنية نظام الإتصال والتفاعل عبر الأنترنيت ، بحيث يكون النظام فاهماً للأوامر المكتوبة بهذه اللغة أو تلك ، حتى دون الحاجة لتحميل المفسر مع برنامج اللغة العليا الذي ننوي إستخدامه ، بينما تقوم شركات البرمجة بإدراج المفسر مع البرنامج البرمجي ، لتحميله بشكل تلقائي على النظام .
ومنذ لغة فورتران بل منذ اسمبلي والمحارف التي يتم حجزها في نظم التشغيل هى محارف إنجليزية بحتة ، أو محارف لاتينية بشكل أكثر دقة ، بعضها لرموز شائعة وبعضها الآخر لكلمات فصيحة أو عامية ، وتقوم المفسرات التي هى أساساً جداول تحويل رقمية ، بترجمة تلك الكلمات والرموز إلى نظام العد الثنائي ، وهكذا يعمل الحاسوب المحترم بكل سلاسة ودونما أدنى مشاكل .
إبتكار لغة البرمجة :
يعتمد إبتكار اللغة البرمجية أساساً على المحاكاة والبناء المنطقي الرياضي ، وهما مفهومان أساسيان في السيبرنتيكا ، كما يعتمد بناء المفسر على المنطق الجبري الرياضي وجداول التحويلات الرمزية وفق قواعد سيبرنتيكية صارمة جنباً إلى جنب مع البناء اللغوي المنطقي ، وكلما كان البناء الرياضي محكماً أكثر كلما كانت اللغة أقوى ، مما يعني بناء برنامج متكامل بعدد أقل من السطور ، وبغض النظر عن الفروق السيبرنتيكية بين لغة وأخرى مثل الفرق الجوهري بين لغة C ولغة Basic حيث تعتمد الأولى على الإجراءات ( Procedurals ) أساساً بينما تعتمد الثانية إلى حد كبير على الروتين الجزئي ( Subroutines ) فإن الفرق الرئيس يكمن في البناء الرياضي الفضفاض و الهش للغة Basic مما يعني سطور أكثر عند كتابة البرنامج نفسه ، المكتوب بلغة C ، وسوف نشرح في هذه العجالة الشكل الرئيس للبناء الرياضي للغة Basic الذي لا يختلف كثيراً عن البناء الرياضي لـVB ، وقد إخترناها بالذات لأنها اللغة الأكثر شعبية في العالم من جهة ، وكون معظم برامج ويندوز مبنية أساساً عليها من جهة أخرى .
وقبل الخوض بالبنية الرياضية للغة Basic دعونا نأخذ فكرة عن كيفية بناء لغة برمجة ، فاللغة البرمجية لم تأت من فراغ ، ومنذ عام 1950 وعلماء السيبرنتيكا الرياضية يبحثون عن محارف موحدة تتحدث بها جميع الآلات ، وكان من الضروري وضع قاموس موحد لتلك المحارف وهذا ماحصل عام 1958 في مدينة زيوريخ ، عندما إجتمع المعنيون ذوو الصلة وطوروا اللغة البدائية الأولى المعروفة بإسم ALGOL – 60 حيث وضعوا القاموس المحرفي المعتمد حالياً لدى جميع شركات ابتكار وتطوير لغات البرمجة ، والذي يبدأ بعبارة (( مايمكن قوله ينبغي قوله بوضوح ، وما لايمكن قوله فيجب السكوت عنه )) ولهذا لا تحوي اللغة السيبرنتيكية الدولية أكثر من 600 كلمة ، جميعها أوامر للتحكم والبناء البرمجي بدءاً بكلمة Begin وإنتهاءاً بكلمة End ، وقد تم مؤخراً بعد ظهور اللغات النصية إضافة 96 كلمة لهذا القاموس العتيد ، فيا لها من لغة شاعرية غنية .
ويعتمد البناء المنطقي لإبتكار لغة برمجة على جبر بول الذي يمتاز عن الجبر العادي بأن الرموز فيه تعبر عن مقولات وليس أرقام وكميات ، بينما يعتمد البناء الرياضي على العلاقات بين تلك المقولات وفق الخوارزميات المعتمدة في الجبر الخطي وجبر المصفوفات ، تلك العلاقات قد تكون صحيحة منطقياً ( True ) أو غير صحيحة ( False ) ، ولنأخذ مثالاً عملياً وفق جبر بول على هذا البناء ، ولنقم بتحويل المقولة التالية إلى رموز جبرية :
" سأذهب بالتأكيد إلى مباراة كرة القدم إذا حصلت على بطاقة مجانية أو إذا دعاني صديقي ، وإذا لم يسقط المطر " ، لقد كانت الإشتراطات هى كما يلي :
1. مباراة كرة القدم ، ولنرمز لها بالحرف ( ك )
2. إذا حصلت على بطاقة مجانية ، ولنرمز لها بالرمز ( ب )
3. إذا دعاني صديقي ، ولنرمز لها بالرمز ( ص )
4. إذا لم يسقط المطر، ولنرمز لسقوط المطر بالرمز م ولعدم سقوط المطر بالرمز (م¯ )
وبسبب هذه الإشتراطات نلاحظ أن هناك عوامل مشتركة تحت الصيغة إذا ( if ) المحجوزة سلفاً في قاموسنا السيبرنتيكي ، كما أن هناك علاقات شبيهة بالعلاقات الرياضية تكمن في عبارات : و ( and ) التي تعني في قاموس السيبرنتيكا العتيد ( X ) ، وكلمة أو ( or ) التي تعني ( + ) ، بينما عملية الذهاب المقرونة بتلك الإشتراطات فتعبر عن إشارة المساواة ( = ) ، وهكذا يمكن صياغة المقولة كما يلي :
ك = ب X م¯+ ص X م¯ ←
ك = ( ب + ص ) . م¯
إن جميع لغات البرمجة سواء كانت تعتمد الإجراءات والقوائم أم الروتينات الجزئية أم كليهما معاً ، تعتمد في بنائها المنطقي على أشباه المثال أعلاه ، وبالطبع فإنك من خلال مباراة كرة قدم واحدة لن تستطيع أن تبني لغة برمجية غنية كلغة C ، لكن المثال يعطي صورة شبه دقيقة عن البناء المنطقي الرياضي للغات البرمجة بشكل عام خصوصاً وأن مكتبات الربط الديناميكية المستخدمة بوفرة في البرامج الحديثة هى محاكاة سيبرنتيكية رمزية شمولية لعمليات يتطلبها البرنامج ولا داعي لتكرارها، حيث تستدعيها التطبيقات المختلفة التي تعتمد نفس الإجراءات كلما دعت الحاجة .
ويلعب البناء الرياضي دوراً هاماً في تحديد قوة اللغة أو محدوديتها ، ولكن يجب الإنتباه إلى إن البناء الرياضي الهش للغة بيسيك مثلاً لا يمنع من تصميم برامج أكثر من رائعة على أساسها ، ولذا يقول الإحترافيون دائماً أن أفضل وأقوى لغة برمجة هى اللغة التي تتقنها ، ولكل لغة برمجة خصوصياتها ومكامن ضعف وقوة فيها ، فليست هناك حتى الآن لغة خالية من العيوب ، وما تحدثنا عنه من ضعف يهم المطورين والساعين " مشكورين " لتعريب لغات البرمجة أكثر مما يهم المبرمجين والمستثمرين ، ولكن أخذ فكرة عن نقاط ضعف لغة بيسيك لا يخلو من فائدة للجميع ، فعلى سبيل المثال يمكن حساب sin أي زاوية في Classic Basic من خلال الدالة sin بشكل مباشر لكن معرفة زاوية نعرف مسبقاً جيبها أو تجيبها ، متعذر بشكل مباشر في بنية Classic Basic لعدم وجود دالة مستقلة لهذا الأمر حيث يتوجب القيام بهذا الموضوع من خلال الدالة ATN بإستخدام القانون :
sin² θ + cos² θ = 1
ونحن نعلم أن : tan θ = sin θ / cos θ
وهكذا عند معرفة ظل الزاوية يمكن إستخدام الدالة ATN للحصول على زاوية معروف جيبها أو تجيبها ، وهذا طريق ممل وطويل ، و هناك عشرات العقد النفسية الأخرى الأدهى ، التي لم يجد المطورون لها حلولاً حتى مع أحدث إصدارات VB وخصوصاً فيما يتعلق بالجذور ، ومشاكل الدالة DIM التي تبقى ثابتة طيلة عمل البرنامج وتتطلب التجانس ، مما يعني عدم إمكانية الحصول على مصفوفة واحدة من مصفوفتين غير متجانستين إلا بشق الأنفس وطلوع الروح ، و بعد عشرات رسائل الخطأ، بعكس اللغات التي تعتمد القوائم كلغة LOGO مثلاً .
ولكن وفي جميع الأحوال ، لكي تكون مبرمجاً جيداً عليك أن تكون رياضياً ماهراً ، إلا إذا أردت الإكتفاء بالصيغ والقوالب الجاهزة ، حيث ينحصر عملك حينها بالقص واللصق ، وإدراج بعض المحارف التي تضفي حيوية على برنامجك ، وهذا يمكن وصفه بكل ما تشاء من عبارات المديح والثناء وتحت كافة المسميات التي تتيحها لغتنا الصحَّافية إلا البرمجة .
ـ منقول ـ