قبل أن أبدأ بالمقدمة أود أن أنوه إلى أنني لا أبالغ في العنوان ... 10 دقائق فقط ...
المقدمة :
كثيراً ما جادلت نفسي في موضوع كثرة لغات البرمجة .. وكونها أشياء منفصلة أم مجرد طرق تفكير متعددة أم أم ...
في الحقيقة أحاول حالياً إثبات فكرة أن لغات البرمجة هي مجرد أساليب متكافئة لإعطاء الأوامر للحاسوب ..
وكمثال على ذلك .. لو كان لدينا لغة برمجة طريقة التفكير بها بسيطة جداً ... مجرد 8 أوامر فقط .. واستطعنا إيجاد المكافئ لها في لغة أخرى ...
ماذا يبقى لدينا؟؟
يبقى أن نفكر بطريقة معينة عن طريق الأوامر الموجودة لدينا ...
مثلا تتيح لنا php إنتاج كود Html ... صحيح أن C++ لم تصمم لهذا الغرض ولكن بمجموعة أكواد مكافئة لأكواد الphp قد نستطيع كتابة كود php كما هو داخل مترجم C++ ..
كما طرح مرة الأخ حمزة عن كتابة كود باسكال ينفذه مترجم الC++ بشكل نظامي....
كود الباسكال :
programbeginwriteln("Iam Hamza\n");endبإضافة الأسطر التالية سيعمل كما لو أنه في بيئته الأصلية :
#include <stdio.h>
#define program main()
#define begin {
#define writeln(x) printf(x)
#define end }حسناً لندخل الآن في صلب موضوعنا :
لو قلت ان لدي مصفوفة:
char array[30000]={0};ولدي مؤشر:
char *ptr=array;
وأضمنت مكتبة واحدة من مكاتب الC وهي :
#include<cstdio>
إذا قلت لك مسموح لك استخدام التعليمات البرمجية التالية فقط :
++ptr;
--ptr;
++*ptr;
--*ptr;
putchar(*ptr);
*ptr=getchar();
while (*ptr) {
}(كل سطر فيه تعليمة .. والقوس الأخير تعليمة مستقلة)
فإذا علمت أن قيمة عناصر المصفوفة جميعا 0.
_____________________________________________انتهى الفرض____________________________________
هل يمكنك كتابة برنامج .. يطبع Welcome باستخدام ما سبق فقط ...
______________________________________________انتهى الطلب___________________________________
إذا تمكنت من التفكير بهذه الطريقة ... تكون قد أنهيت تعلم لغة برمجية اسمها .. Brainf**k
حيث يمكنك بعد الانتهاء من كتابة برنامجك استبدال التعليمات البرمجية كما يلي :
> ++ptr;
< --ptr;
+ ++*ptr;
- --*ptr;
. putchar(*ptr);
, *ptr=getchar();
[ while (*ptr) {
] }ويتم انشاء المصفوفة والمؤشر آلياً عند بدء البرنامج ..
وعندها سيصبح كودك مكتوباً بلغة Brainf**k
لاحظ أن اللغة كائنية التوجّه ...... عفواً .. مجرد مزحة ثقيلة ...
اللغة ليست كما يبدو عليها لا يمكنها إلا الإدخال والإخراج هناك أفكار كثيرة لا تتوقع أنه يمكنها القيام بها ...
قد تتفاجأ من عدم وجود عبارات الشرط مثلا والعمليات الحسابية إلخ إلخ إلخ ...
ولكن ما ستتفاجأ به بالفعل هو أن اللغة قادرة بتعليماتها الثمانية فقط أن تكافئ عمل جميع بنى التحكم والعمليات الحسابية ..
حسناً ... لست هنا لأقول أنها لغة عظيمة .. ولكن لأقول أن
لغة البرمجة مجرد طريقة تفكير &خطوات معينة&أدوات خاصة يمكن من خلالها إعطاء أوامر للآلة لتنفذها..
وأن اختلاف لغات البرمجة هو اختلاف الأيقونات الثلاث السابقة ...
فالمسألة ليست معرفة اللغة أو عدم معرفتها ... بل القدرة على التفكير بأسلوب هذه اللغة أو تلك ...
هل أنت قادر على أن توجه دماغك ليفكر من خلال عناصر محدودة ومعطيات قليلة ... هذه هي البرمجة ...
إن أردت رأيي باسم اللغة ... فيبدو أن مخترعها Urban Müller والذي اخترعها على سبيل التسلية لا أكثر .. كان من التشائم بمكان بحيث نسي كلمة Shine من قاموسه عند تسمية اللغة..
وبرأيي يجب أن يكون اسمها BrainShine أي إشراق العقل ...للمزيد عن اللغةWikipedia وهذه المقالة القصيرة ..
يمكن لعدد قليل من المبرمجين حول العالم .. التفكير عن طريق تعليمات محدودة ... وهذا بسبب عدم قدرة الكثيرين على التحكم بطريقة تفكيرهم وتوجيهها باتجاه معين ... إنها لغة فريدة ..
في النهاية .. ليس المهم أن تتعلم الكثير .. المهم أن تعرف حدود ما تعلّمته... قد يمكّنك من الوصول إلى أبعد مما تتصور بكثير ...
والحمد لله رب العالمين

