لغير المبرمجين.. البرمجة كما لم تعتقدها من قبل ! – تبسيط فكرة البرمجة

5

من منا لا يعتقد أن المبرمجين هم كائنات تشبهنا في المظهر فقط؟!، و أنهم يحملون أدمغة خارقة الذكاء و يجب أن تكون شعورهم منسدلة أو هائجة، كما أن ثيابهم غير مرتبة أو غير متناسقة، وحياتهم غير منظمة… أليس هذا هو الوصف الذي تحمله أدمغتنا جميعا لإخوتنا من المبرمجين؟ 😀

حسناً!، هذا المقال يثبت لك –على عكس ما تعتقد- ان البرمجة شئ سهل و يسير على معظم البشر، و أنك تقوم بصور مختلفة من عمليات البرمجة في كل يوم عدة مرات!. دعني أشرح لك الأمر على هيئة مثال، أنا أحب الأمثلة كثيراً، فهي تبسط أصعب الأشياء التي يكون على المرء شرحها.

كيف تبرمج ولدك؟!

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

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

لم ﻻ نعطى الرسالة التى بها السلع و التى بعثتها لولدك اسماً رمزياً، و ليكن m v1.0 مثلاً، و التى تعنى نسخة الرسالة الأولى، حيث m ترمز إلى كلمة message و التى تعنى رسالة، أما حرف v فهو يرمز إلى version و التى تعنى نسخة أو إصدار.

Message v1.0

تعديل برمجة حسن!

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

الآن يمكن إعادة تسمية الرسالة هكذا m v1.1، حيث رقم الواحد الصحيح يرمز إلى الرسالة الأصلية التى لم تتبدل، أما الواحد بعد العلامة العشرية فهو يرمز إلى أن الرسالة الأصلية حدث فيها تعديل أو تغيير أو إضافة على مرة واحدة فقط.

Message v1.1

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

Message v2.0

الإسقاط على برمجة الحواسيب

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

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

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

إصدارات البرامج

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

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

#الإستنتاج الأول أن البرنامج الجديد الذى أصبح حسن يتبعه أو يسير وفقاً له، تغيرت صفته بدرجة كبيرة، فلم يعد ذلك البرنامج الذى إن نفذه حسن سيأتى بأغراضك أنت وحدك، بل إن البرنامج الجديد سوف يلبى أغراضك و أغراض أمه أيضاً..

لذا يمكن القول أن البرنامج الجديد قد تطور إلى إصدار جديد و لنعطيه اسماً رمزياً جديداً هو   m v2.0. أما الإستنتاج الثانى فهو أن حسن لن يعود قبل منتصف الليل!، كما أنه سيغلق هاتفه لكى لا تحاول إخباره بأغراض جديده!!.

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

ولنفرض أن كل مجموعة قامت بالعمل المنوط بها، إذاً سيكون الترقيم الخاص بالمجموعة س هو 1.1.1، حيث الواحد الأول من اليسار هو مشروع الوحدات ككل، و الواحد الأوسط هو رمز المجموعة س، و الثالث إلى اليمين هو العمل الذى قامت به س. و يمكنك فعل المثل بالنسبة لمجموعة ص، فما سيتغيرهو رمز المجموعة ص و الذى سنفرض أنه سيكون رقم 2، إذاً سيكون الترقيم الخاص بمشروعهم هو 1.2.1.

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

الخلاصة

آمل أنك الآن تعرف أن البرمجة ليست شيئاً صعباً، و أنها الله لم يخلق لها كائنات خاصة لكي تعمل بمجالها، و أنها بالمناسبة مجال عمل مربح لمن أراد. أما مسألة الإصدارات فهي تحمل قواعد خفيفة في المجمل، لكن الأمر يعود للمبرمج في أغلب الأحيان، فاﻷمر ليس بتلك الصعوبة!

5

شاركنا رأيك حول "لغير المبرمجين.. البرمجة كما لم تعتقدها من قبل ! – تبسيط فكرة البرمجة"