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

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

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

    • Nour Ha

      Osama Damarany لا اعرف إلى أين يريد الكاتب ان يصل ، هل يريد ان يقول أن اي شخص يمكن ان يصبح مبرمجاً مخضرماً ؟ 🙂 طبعاً هذا مستحيل .. البرمجة تحتاج إلى ذهن متفتح مرن يدرس جميع الاحتمالات قادر رياضياً على تحويل كل شيء إلى ارقام ورموز ..

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

    • محمد عبد المعطي

      Osama Damarany عفوا اتمنى منك نشر المزيد من المقالات كهذه لتسهل البرمجة لمن لا يفهمونها

  1. Mohammad Abd Elhamied

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

    • Mohammad Abd Elhamied

      Osama Damarany
      ممممممممم,, ماشي
      أولا احب اشكرك ككاتب للمقال على المجهود و النية و الرغبة في أزالة العوائق عن الابصار,, معلش نسيت اكتب كده في الرد السابق,, انا بنتقد المقال رغبة في تطوير المحتوى و ليس هدما للأراء او الافكار او المشاريع

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

    • Mohammad Abd Elhamied

      Osama Damarany
      من المؤكد اني هلاقي حد يقولي أن المقال بيدور حول نفس النقاط,, بالطبع لأ,, عن نفسي لن اضيع وقت القارئ بتوضح الامور الخاصة ب”حسن”,, أنا هشرحله مباشرة وظائف الاجهزة,, و كيفية ادارتها,, و الحاجة الملحة لوجود ما يضبط أدائها,, و بالتالي معنى وجود برنامج,, في النهاية المتلقي هيكون تعرف على البرمجة مع خلفية صلبة عن اداء الاجهزة في نفس وقت و مساحة النشر دي

  2. Ahmad El-Agawy

    ا. اسامة ، شكرا جزيلا اولا على المقال والمجهود.
    لكن للاسف المقال بالنسبة لي كان به عدة عيوب ارجو ان تتقبلها مني من باب النقد.
    المقال طويل بالنسبة للفكرة البسيطة اللي حضرتك بتشرحها ، ويمكن حضرتك بتركز في جزئية وبتظل تؤكد وتزيد من الامثلة مثل جزئية ال versions اللي هي مرحلة بعيدة عن القارئ
    الوصف بالنسبة لي كان غير دقيق وكان مركز في جزئية ابعد ممايناسب نوع القارئ المستهدف – على حد وصفك – واللي هو لا يرى الا نافذه واحدة ،
    عذرا على الاطالة ، شكرا

  3. Mahmoud Samy

    انا مش عارف الناس اللى بتقول دون المستوى بتحكم بأى مقاييس الحقيقه ؟ انا مبرمج وشايف ان دى مجرد محاوله لأزاله الغموض عن حاجه فى ناس بتفتكرها سحريه .
    البرمجه بتعرف على انها مجموعه من التعليمات اللى بيتم ارسالها للحاسب لتنفيذها . الراجل اختزل الفكره للتبسيط للعامه يعنى فأشطا .
    كنت عاوزه يتكلم فى ايه يعنى فى ال algorithms وال data structure مثلا ؟
    اعتقد ان المقال ممكن يكون سبب ان فى ناس تبدأ تقرا عن الموضوع وتحبه بغض النظر عن اتفاقى او اختلافى مع المحتوى

  4. Samy Gaber

    انت لم تذكر من اين نبدا تعلم البرمجه واي اللغات تبدا بدراستها او مواقع تعينك ع التعلم اعتقد لو تضمنت الامور دي بمقالك كان هيلقى افضل والافضل لو ترد على اسءلتي من اين نبدا ف البرمجه

  5. محمد عبد المعطي

    Osama Damarany عفوا اتمنى منك نشر المزيد من المقالات كهذه لتسهل البرمجة لمن لا يفهمونها

  6. Mohammad Abd Elhamied

    Osama Damarany
    ممممممممم,, ماشي
    أولا احب اشكرك ككاتب للمقال على المجهود و النية و الرغبة في أزالة العوائق عن الابصار,, معلش نسيت اكتب كده في الرد السابق,, انا بنتقد المقال رغبة في تطوير المحتوى و ليس هدما للأراء او الافكار او المشاريع

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

  7. Mohammad Abd Elhamied

    Osama Damarany
    من المؤكد اني هلاقي حد يقولي أن المقال بيدور حول نفس النقاط,, بالطبع لأ,, عن نفسي لن اضيع وقت القارئ بتوضح الامور الخاصة ب”حسن”,, أنا هشرحله مباشرة وظائف الاجهزة,, و كيفية ادارتها,, و الحاجة الملحة لوجود ما يضبط أدائها,, و بالتالي معنى وجود برنامج,, في النهاية المتلقي هيكون تعرف على البرمجة مع خلفية صلبة عن اداء الاجهزة في نفس وقت و مساحة النشر دي

  8. Nour Ha

    Osama Damarany لا اعرف إلى أين يريد الكاتب ان يصل ، هل يريد ان يقول أن اي شخص يمكن ان يصبح مبرمجاً مخضرماً ؟ 🙂 طبعاً هذا مستحيل .. البرمجة تحتاج إلى ذهن متفتح مرن يدرس جميع الاحتمالات قادر رياضياً على تحويل كل شيء إلى ارقام ورموز ..

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

  9. احسان علي

    اشكرك على المقال انا طالب هندسة حاسوب وقد استفدت من المقال لاتهتم للمثبطين استمر

  10. Ameed I. Sayeh

    ههههههههه المبرمجين كائنات فضائية في أعين الناس :p ، جميل توضيح الصورة :]

  11. نجيب عبدالله

    ما شاء الله اطلبوا العلم من المهد الى اللحد وشكرا على المجهود

أضف تعليقًا