Wednesday, May 25, 2011

أجمل وأسوأ ما فيك يا كود


غالباً أول نظرة إلى أكواد برمجية بالنسبة لأي شخص لم يسبق إليه الاطلاع على عالم الأكواد حتسيب عنده انطباع بأنها شيء صعب ومعقد وغير مفهوم .. أو يظن أنه منقول أو محفوظ مكرر .. تماما زي ما حتكون نظرته لكاتبها ..


لكن الانطباع اللي اقترح عليه إنه يدركه هو إن خلف كل كود مكتوب أو كاتب للكود فيه كوكتيل كامل من المواقف والمشاعر وشريط من الأحداث مكتوب بين السطور ..

فأنت ككاتب للأكواد (Coder) تمارس دور المفكر والمبدع .. ترجع الكرسي لورا في عصف ذهني (Brainstorm) وتفكر إزاي تحول أفكارك إلى شيء ملموس إلى أن تنتهي من إيجاد الطريقة المثلى وتتضح لك خطة العمل (Work plan) فتنط من على الكرسي في سعادة كأي مخترع وتقول : وجدتها وجدتها.

وبعد مرحلة التنطيط السعيدة، تنتقل إلى الحدث الرئيسي للقصة ............ اللي هو مرحلة التنفيذ (Implementation)، تكتب على الكيبورد فتستمع إلى مقطوعتك لحظياً كما يستمع عازف البيانو لأصابعه وهو يضغط على المفاتيح ليسمع تتابع منتظم يشعر معه بأنه يصنع شيئا ما ليسعد به الآخرين .. أو هكذا يظن.

تعبير العزف مش تعبير مجازي .. دا حقيقي وجربه .. افتح النوت باد (NotePad) جرب تعمل لصق (Paste) لكلمة باستخدام الكيبورد ثم اضغط فراغ (Space) اعمل (Paste) تاني ثم اضغط (Enter) .. كرر العملية دي عدة مرات واستمع إلى صوت الكيبورد

ويصاحب متعة العزف (Typing) متعة أخرى تشبه متعة مشاهدة مبارة لكرة قدم لا تعرف النتيجة النهائية، تحبس أنفاسك مع كل اختبار للكود (Test) واللي كأنه هجمة يإما لك أو عليك .. وتفرح وتزأطط مع كل جون (Build successfully) وتهتم وتغتم مع كل جون يدخل فيك (Build Failed).

وأثناء العزف على الكيبورد أنت تمارس أيضاً دور الباحث الأكاديمي اللي قاعد يقرا ويقرا عشان يحل مشكلة ما موقفة خط انتاج في أحد المصانع.

ولا تنتهي المتع مع كتابة الأكواد بانتهاء حركات أصابعك على المفاتيح بل تبدأ مرحلة أخرى من المتعة .. مرحلة النشر (Publishing) وتحول أفكارك وعزفك وحلولك إلى فيلم مثير تنتظر آخر دقيقة لتعرف كيف تكون النهاية .. اللي ممكن تكون سعيدة لما نتاج الكود (Final Product) يلقى القبول والاستحسان .. أو مفاجئة غير سعيدة برفضه أو طلبات التعديل التي لا تنتهي، لتبدأ من جديد تغيير سيناريو الأحداث أو بالأحرى تصنع سيناريو جديد ولكن بحماس أقل وشعور بالمتعة أقل.

مضمون الأكواد هو حالة مستمرة من المثالية .. والحياة بين أكوادك أنت لا اكواد غيرك هو بالظبط الحياة في المدينة الفاضلة .. حيث كل شيء في مكانه .. منظم .. جميل .. كل شيء يسير حسب ما هو موضوع لأجله في هذا المكان .. وكل شيء يسلم الآخر ما يريده .. دون تكاسل أو خداع أو لف أو دوران.

هذه الحياة المثالية لو أخذها كاتب الأكواد معه في عالمه الإنساني فإنه سيعاني معاناة أكبر من كل المتع اللي ممكن ينالها بسبب الأكواد.

تخيل قاعدة مثل قاعدة (if) البرمجية وهي قاعدة من أوائل قواعد البرمجة التي تدرس ونصها كالتالي:

if (جملة شرطية) then
....
else if (جملة شرطية أخرى)
....
else
....
end if

والجملة الشرطية أي حاجة بتقول آه (True) أو لا (False) .. زي مثلا ..
هل تاريخ انهاردة هو 25/5/2011 ??:

If (Date.Now = 25/5/2011) then
{
.... سكوب 1 فيه شوية اكواد ....
}
else If (Date.Now = 24/5/2011) then
{
.... سكوب 2 فيه شوية أكواد تانية ....
}
else
{
.... سكوب 3 فيه أكواد تالتة خالص....
}
end if

في عالم البرمجة المثالي .. الجملة الشرطية مالهاش اجابة غير آه (True) أو لا (False) .. وبس .. كمان لا يمكن تتحقق جملة شرطية فيتنفذ سكوب غير السكوب بتاعها .. مش ممكن تكون الإجابة على جملة آه ويدخل في السكوب بتاع لأ .. مستحيل .. وطبعا جملة (if) لازم تنتهي عند (enf if) .. مفيش بعدها كلام ولا تعقيب ولا بس ولا لكن ...

تخيل أنك كإنسان تعتاد على ذلك .. كل جملة شرط تنتظر إجابة بنعم أو لا بدون تفاصيل وأسباب وحواديت وحكايات .. وحسب الإجابة تنتظر أفعال السكوب بتاع الإجابة دي .. وتريد أن تتعامل بهذا المنطق في حياتك مع كل الناس اللي هما أصلا مش كودر واللي كتير منهم - مش كلهم - أكيد مش بيتعاملوا بقاعدة (If) ولا يعرفوا عنها حاجة.

لاحظ إنك لو اتعاملت كده فإنت بتعذب الناس اللي حواليك اللي فعلا حيكونوا مش فاهمين أنت بتعمل كده ليه وحتكون بالنسبة لهم شخص فضائي عجيب تماماً وحاد إلى أقصى حد بالنسبة لهم، ناهيك طبعا عن اتهامك بقصور الرؤية والسطحية وإحادية الرأي وتبسيط المشاكل أحياناً وأحيانا تعقيدها ووضع العقدة في المنشار.

مثلاً حتلاقي جملة شرطية بسيطة وواضحة وسهلة زي :

if (هل أنا بحب جوزي وبحترمه ونفسي يكون اسعد إنسان) then
أوفر له سبل السعادة اللي تريحه .. واخليه يشعر بثقتي واحترامي ليه
else
إهمال كامل وكل يوم مشكلتين تلاتة
end if

مع بساطتها فلو إجابة الجملة الشرطة لا فعند التنفيذ (Run) .. حتلاقيه بيدخل في السكوب التاني بتاع لأ .. العجيب بقا إن لو إجابة الجملة الشرطية نعم برضه التنفيذ بيدخل في السكوب التاني .. تحاول تفهم .. مش حتفهم ..

أو مثلا:

if (هل أنا مقتنع إن الإسلام حق وإن الله حكيم عليم وزي ما له الخلق له الأمر ومن لم يحكم بما أنزل الله فأولئك هم الكافرون) then
نطبق الشريعة
else
مش حينفع نطبق الشريعة
end if

برضه سواء كانت الإجابة على جملة الشرط بنعم أو لا برضه التنفيذ دايما بيدخل في السكوب التاني .. وعادي جدا جدا.

أو مثلاُ:

if (هل السجاير دي ملعونة بتهد صحتي ومضيعة فلوسي وضراني مع مراتي ) then
حبطل السجاير واكون انسان جديد
else
مش حبطل
end if


والعجب إن الطبيعي إنه مش حيبطل ولو بطل يبقى حدث غريب وعجيب ويضرب بيه المثل .. دا فيه واحد يا جماعة أجاب الجملة الشرطية بنعم ودخل في سكوبها .. وعجبي

ساعات تضطر إنك تغير في جملة الشرط عشان تخلي الدخول العجيب في السكوب التاني منطقي فتخلي جملة الشرط مثلا

if(هل انا بحب جوزي and بحبه 4 كمان معاه)
أو
if(هل السجاير ملعونة and انا مجنون عقليا)

لكن المشكلة إن الشروط اللي بتزودها عشان التنفيذ يكون مفهوم ومنطقي بتكون مرفوضة من اللي حواليك ودايما أنت غلط ومش مقدر ومش فاهم حاجة.

والنتيجة إنك لو استخدمت هذه القاعدة المثالية السيئة حتقعد تفكر ليل ونهار في كود مناسب يتوافق فيه جملة الشرط مع سكوب التنفيذ الغير منطقي اللي بيحصل .. وآخر ما حتزهق حتروح تعيش مع شوية أكواد في ماتريكس أو إن تتجنن وشعرك يبيض أو يقع كعادة أهل الأكواد.

ديوان المسائل أحمد مطر

No comments: