البرمجة و الفلسفة
بسم الله الرحمن الرحيم ،،
كنت فيما مضى كتبت مقالة عن المبرمجين و الشعراء ، و بالرغم من ان الامور كانت تبدو بعيدة في بادئ الامر الا اننا وصلنا الى نتيجة معقولة تفيد اوجه تشابه كثيرة بين الطرفين . و لكن هذه المرة المقارنة بين البرمجة و الفلسفة، و قد لا تبدو غرابة كثيرة هنا فلكل شيء فلسفة نقول مثلا فلسفة الحب و الدين و الفن و لكن العنوان ليس فلسفة البرمجة و لكن البرمجة و الفلسفة فليس هناك اضافة في الجملة بل كيانان مختلفان ، بعبارة اخرى هل تأثرت البرمجة بالفلسفة ؟ سنحاول ان نستعرض بعض المبادئ البرمجية المستوحاة من اصول فلسفية .
لنبدأ بنظرية المثل الخاصة بافلاطون هذه النظرية تقول ان كل شيء موجود هو انعكاس من عالم المثل، و كأنما الاشياء في عالم المثل قوالب تصنع منها الكائنات الموجودة مثلا قالب الحصان يعطينا احصنة. هذه النظرية واضح جدا انها اساس البرمجة الشيئية التي تعتمد على كلاسات (قوالب) من هذه القوالب يتم انشاء كائنات . مثلا لدي كلاس اسمه حصان يمكنني منه ان انشئ حصان 1 و حصان 2 و ربما اسميهم اسماء اجمل مثلا سريع و نسرين!
من هذه النظرية يمكن ان نستفيد مبدأ التجريد و الذي منه نتعلم التجريد في البرمجة فبدلا من ان يكون الشيء كيان واحد معقد يمكن تجريده ليسهل التعامل معه و انشاء كيانات اخرى تبنى على الكيان المجرد بما يناسب خصائصها ، فقالب الحيوان مثلا قالب مجرد ننشئ منه قوالب متعددة مثلا قالب الانسان و قالب الحصان حيث كل قالب هو في حقيقة الامر مستقى من قالب الحيوان و لكن مع اضافات خاصة به و هذا ما يسمى في البرمجة بالتوارث.
لنأتي لارسطو حيث يقول ان كل شيء في الكون مكون من تزاوج و اعادة تشكيل عناصر بدائية سماها الاتوم. فمثلا السيارة اعادة ترتيب لعدة عناصر مثل الحديد و الزجاج و التي بدورها متشكلة بطريقة معينة و تركيب خاص من الاتومات. هذه ايضا نظرية معروفة لدى كل مبرمج فبعض لغات البرمجة توفر عناصر بدائية (اساسية) بتركيبها و تشكيلها ننشئ اصناف جديدة فمثلا من العنصر البدائي حرف نشكل النصوص . و نلاحظ هنا ان هناك تداخل بين الفلسفتين فمبدأ التصنيف و تقسيم الاشياء ايضا موجود حتى عند ارسطو .
الآن نقفز الى البراغماتية و هي كما قال وليم جيمس :”مطابقة الاشياء لمنفعتنا ، لا مطابقة الفكر للاشياء” حيث ان هذه الفلسفة النفعية ترفض المثالية و تقول ان حقائق اليوم قد تكون خاطئة غدا ، فلا منطق و لا ثوابت. اللطيف انه هناك حركة برمجية قوية و معروفة باسم البرمجة البراغماتية، و لكن ماذا يعني مبرمج براغماتي؟ قالوا : ان طريقتنا في البرمجة براغماتية من جهة اننا لسنا منتصرين لاي منهجية ، لغة برمجية ، نظام تشغيل ، نظرية او اي شيء اخر . بل نستخدم خبراتنا مدمجة مع البحث العلمي لاختيار اجدى تشكيلة مناسبة للوصول الى مآربنا. هذا بخلاف مثلا حركات اخرى ظهرت على الساحة تنتصر لنظرية او رؤية معينة مثل حركة البرمجيات الحرة. فالدواعي البراغماتية هي التي جعلت اشخاص ينفصلون عن حركة البرمجيات الحرة و يكونوا ما يسمى بحركة المصادر المفتوحة و لكن المبرمجون البراغماتيون يتجاوزون ذلك و لا يعيرون اي اهمية لنظريات معينة بل ما يهمهم هو ان ينجزوا اعمالهم باي طريقة و اي وسيلة كانت.
الغريب انني مؤخرا سمعت بمسمى جديد “مبرمج لا ديني”، يبدو ان العلمانية وجدت طريقها الى البرمجة و لكن ماذا يعني مبرمج لا ديني ؟ المبرمج اللاديني هو الذي لا يؤمن بلغة برمجة واحدة لكل الاغراض ، على هذا يمكن ان نصنف اللادينيين من المبرمجين على انهم فرقة من فرق البراغماتية.
لنتكلم عن فلسفة ويتجنشتين الذي له فلسفة خاصة حيال الكلمات اذ يرى انها لا تفيد معنى حقيقيا و لكنها طريق للحصول على شيء معين ، يثير ردة فعل معينة. لتقريب المعنى لو فرضنا انك في بلد غريب و لا تعرف لغة اهل البلد ، و تلاحظ الناس يحصلون على وجبة سندويتشات و عصير من خلال قولهم “اريد ساندويش و عصير”، فأنت الآن قادر على الحصول على الوجبة بمحاولة اصدار نفس اصوات الكلمات بغض النظر عن انك جاهل لمعنى كل كلمة. الآن في البرمجة خاصة البرمجة الشيئية و الوظيفية هناك ما يسمى بالبلاك بوكس او الصندوق الاسود و هو معروف لكل من عمل على انشاء اختبارات لبعض البرامج ، فأنت في الصندوق الاسود لا تحتاج الى معرفة معنى الدالة او محتواها كل ما في الامر يجب ان تعرف كيف تستدعيها في الوقت المناسب بالمتغيرات المناسبة كي تتحصل على مرادك.
مثلا لو في لغة البرمجة بيرل تراني استخدم دالة say ملحقة بكلمات و ترى ان النتيجة هي طباعة الكلمات على الشاشة ، الان تستطيع ان تكرر ما فعلته انا كي تطبع كلمات خاصة بك بدون الحاجة لمعرفة ما معنى الدالة و تفاصيلها مثلا انت لا تعلم ان الدالة هذه في الحقيقة تقبل قائمة من المدخلات و ليس فقط النص الذي طبعته و انها تضيف سطرا جديدا افتراضيا و انها لم تدخل في اللغة الا في الاصدار العاشر بعد الخامس و انها مثلا لا تطبع الكلمات في حقيقة الامر بل تمررها الى المخرج ، الى غيرها من التفاصيل و ايضا انت لا تحتاج الى معرفة كيف تم تطبيقها و كيف تمت برمجتها فهي كصندوق اسود!
و لكي لا اطيل اختم بنقطة ربما مكانها الفيزياء النظرية و لكن لانها نظرية فهي ربما داخلة في الفلسفة حيث في الكوانتوم ميكينك و بتصوير كوبنهاجن الجزيء الغير مرئي يصور على انه تصوير ضبابي لكل الحالات المحتملة المرئية الواحدة فوق الاخرى. بعبارة اخرى يمكن له ان يكون في احدى هذه الحالات او في جميعها . و قد تم نقل هذه النظرية الى لغة البرمجة بيرل فاصبح بالامكان كتابة شيء من هذا القبيل:
$result = any(1,2,3) * 2;
اذا هذا المتغير (ريزلت) ممكن ان يكون 2 او 4 او 6 !
بالمقابل ايضا يمكن ان نقول :
all(2,4,6)
الآن النتيجة ليست 2 او 4 او 6 بل جميعها في آن واحد.
الاغرب ان النظرية النسبية هي الاخرى ايضا وجدت طريقها الى لغة البرمجة بيرل !.
و الكلام يطول .. دمتم في الرضا