لو كنت ممن يقرأون هذه المدونة منذ فترة، لعلمت أنني في طفولتي كنت أتمنى أن أكون مخترعاً. ثم كبرت وصرت مبرمجاً.
وماهي البرمجة؟
- أنت تكتب برنامجاً لتحقيق هدف ما، برنامج حسابات، لعبة، بحث علمي...
- وهذا البرنامج تكتبه بلغة لها قواعد، syntax. هذه القواعد غالباً عبارة عن مكونات بدائية (أقواس، كلمات محجوزة) وطرق مفصّلة محددة لتركيب هذه المكونات.
- هناك قواعد أخرى لطريقة تنفيذ البرنامج، semantics.
- ويأتي في النهاية مفسّر، interpreter، يأخذ البرنامج وينفذه.
وما هو الاختراع؟
- أنت تصنع تركيباً فيزيائياً لتحقيق هدف ما، اختراع يسير بك، ينقل الصورة عبر الأثير، يرش الأطفال به الماء على أصدقائهم...
- وهذا التركيب محكوم بقيود فيزيائية معينة: الوزن والحجم والtopology في ثلاثة أبعاد مكانية. كما أن الاختراع من مكونات بدائية: (سوست، سيور، خراطيم).
- وحين تقوم بتشغيل اختراعك، فإنه هناك قواعد معينة تحكم عمله: المجال المغناطيسي يولّد حركة عند مرور تيار كهربائي؛ البخار يتمدد ويولّد ضغطاً..هذه القواعد نطلق عليها اصطلاحاً قوانين الطبيعة ويدرسها العلماء كل يوم.
- و"الكون" نفسه يقوم بدور المفسر الذي ينفّذ برنامجك - أقصد اختراعك.
(على الأقل أمنية من أماني الطفولة قد تحققت.)
ولو كان الاختراع برمجة، فما هي خصائص لغة البرمجة التي يتم بها الاختراع؟ وما خصائص بيئة التطوير IDE؟
أولاً، هي لغة dynamic تشبه نوعاً ما Smalltalk. انت تقوم بكتابة البرنامج في نفس بيئة تنفيذه، وفي ظروف معينة قد تكون تعدّل فيه بينما هو ينفّذ.
ثانياً، قواعد الـsyntax هي نفسها قواعد الـsemantics، وإن كان هناك شيء من الفصل الفكري بينها: بينما تقوم بتركيب السيارة تفكر في جزء من قوانين الطبيعة مختلف عن الجزء الذي تفكر فيه بينما هي تعمل. أحياناً تكون هناك أجزاء مشتركة.
ثالثاً، هناك شيء يشبه الـtype checking: الصواميل التي لا تتركب إلا مع مسامير من نوع مطابق، الـdimensional analysis في الفيزياء، ...الخ. مثل المبرمجين، يحاول المخترعون تقليل الأخطاء وتسهيل الحياة على أنفسهم.
رابعاً، البرمجة في الاختراع تبدو متوازية أكثر من البرمجة المعتادة.
وهل هذه قضية فلسفية بحتة؟ لا، بل هذه قضية تفكير حوسبي؛ مما يجعلها أمراً عملياً جداً، مرتبط بالتطور التكنولوجي وتطوير التعليم، وبالنهضة، كما وعدناكم دائماً :)
لو أمكننا تكويد بعض أنواع الاختراع في لغات نصية مثل لغات البرمجة، لأمكننا عمل IDEs لها، تقوم بعمل model checking للتأكد من خلو الاختراع من بعض الاخطاء التي يمكن الكشف عنها بسهولة.
ولأمكننا عمل libraries جاهزة بطريقة اوتوماتيكية بدلاً من التفتيش وسط التصميمات السابقة، ولأمكننا التفكير في الاختراعات على مستوى أعلى حين نقدم الـabstractions المعروفة في البرمجة: تخيل أن يكون لديك abstraction مثل "مانع لتسرب الحرارة" ثم يأتي compiler ويقوم بتحويل هذه الفكرة عالية المستوى إلى فلاتر وعوازل وقياسات.
ويمكن تطبيق refactoring واستبدال مكونات ابسط بمكونات معقدة.
ولم اذكر حتى الـsimulation، فهو بديهي.
ولم أذكر الجوانب التعليمية.
و...و...أفكار لا تنتهي، فقط تنتظر المجتمع الذي يمسك بها وينهض.
في الواقع هناك أدوات برمجة من هذا النوع: Labview، برامج CAD/CAM، لكن لا اظن ان الفكرة منتشرة جداً ان هذه الأدوات مثل لغات البرمجة، وتطبيق تكنولوجياً الـcompilers, programming language theory, IDE عليها.
كلما تأملت في التفكير الحوسبي شعرت أكثر وأكثر أن علوم لغات البرمجة لها دور كبير فيه..
ليست هناك تعليقات:
إرسال تعليق