ما هي البرمجة ؟

السلام عليكم ورحمة الله وبركاته

وقت القراءة: ≈ 5 دقائق

المقدمة

سنبدأ سلسلة جديدة لكن هذه السلسلة مميزة جدًا
لأنها ستركز عن أساسيات البرمجة والتي تعد بداية دخولك إلى عالم البرمجة الممتع والجميل

أولًا أحتاج لترسيخ بعض النقاط الأساسية التي ستكون معنا طول السلسلة:

ما قبل البرمجة

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

بالتالي عندما يمر تيار كهربائي في سلك معين فنرمز له بالـ 1 وعندما لا يمر تيار كهربائي فنرمز له بالـ 0
هكذا فتحنا باب صغير جدا لتواصل مع هذا الجهاز وهو الـ 1 والـ 0

ملحوظة: الجهاز لا يفهم الـ 1 والـ 0 بحد ذاتهم بمعنى أنه لا يعرف شيء عنهما، هذه مجرد تمثيل للتيار الكهربائي الذي يمر أو لا يمر في الدوائر الكهربائية
نحن الذين قمنا بتحديد أن الـ 1 يعني هناك تيار يمر هنا والـ 0 يعني لا يوجد تيار يمر هنا

ثم بدأنا نصنع انماط معينة او لغة تواصل معينة من الـ 1 والـ 0 لنتواصل بها مع الجهاز مثل أن 01100001 تعني a و 01100010 تعني b وهكذا
حتى الأرقام البشرية التي نعرفها بدأنا تمثيلها بأنماط من 0 و 1 مثل أن 0001 تعني الرقم 1 و 0010 تعني الرقم 2 وهكذا

وهذه لغة تسمى لغة الآلة Machine Language وهي لغة تفهمها الآلة فقط
ونظام العد الذي يحتوي على الـ 1 والـ 0 يسمى نظام العد الثنائي Binary Number
والرقم 0 و 1 يسمى Bit وقمنا بتعريفها على أنها أصغر وحدة تخزين في الحاسوب

ثم بدأنا نتقدم ونصنع لغة اسهل لنتواصل مع الجهاز وهي لغة Assembly Language وهي لغة تستخدم حروف وأوامر بسيطة باللغة الإنجليزية مثل ADD و SUB و MOV كلمات مقروءة ومفهومة ونستطيع حفظها على عكس 0 و 1

ثم يتم ترجمة لغة الـ Assembly إلى لغة الآلة Machine Language فيما بعد والتي تكون في النهاية مجموعة من الـ 0 والـ 1 يفهما الجهاز بطريقة ما

مع مرور الوقت، تطورت لغات البرمجة بشكل كبير، وظهرت لغات البرمجة كثيرة مثل C++ و Java و Python تبسط عملية البرمجة أكثر وتجعلها أسهل ومفهومة أكثر ويسهل التعامل معها وبها مميزات متنوعة

عملية الترجمة من لغة برمجة مثل C++ إلى لغة الآلة Machine Language تتم بواسطة وسيط نسميه الـ Compiler أو الـ Interpreter وهو يقوم بترجمة الأوامر التي كتبتها في لغة البرمجة إلى لغة الآلة التي يفهمها الجهاز

تخيل كيف بدأنا من التواصل مع الجهاز بالـ 1 والـ 0 ثم تطورنا لنصنع لغات برمجة متقدمة ثم وصلنا لعصر الذكاء الاصطناعي والتعلم الآلي والروبوتات والألعاب الإلكترونية والتطبيقات الذكية والمواقع الإلكترونية والبرامج الضخمة و ... والكثير الكثير

نحن هنا سنحول التركيز على أساسيات لغات البرمجة التي نستخدمها دائما في أي لغة
والتي يجب أن تعرفها بغض النظر عن اللغة التي تستخدما او تتعلمها

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

جسر بين الإنسان والآلة

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

بالطبع أنت لست مطالبًا بفهم أو دراسة أو حفظ أي شيء متعلق بالـ Machine Code أو الـ Assembly
أنا فقط سأعرض لك أمثله لإعطائك الفكرة بشكل عام
بالنسبة للذي سنتعلمه فسوف نتعلم الأساسيات التي تجدها في كل لغات البرمجة ابتداءً من المقالات القادمة


لنفترض أننا نريد تخزين عنوان موقع الويب tabarani.tk في ذاكرة الحهاز RAM
كيف نستطيع فعل ذلك على مر الزمن من الـ Machine Code إلى اللغات الحديثة ؟

  1. لغة الآلة (Machine Code - في قديم الزمان) كانت البرمجة تعتمد بالكامل على لغة الآلة، وهي اللغة التي يفهمها الجهاز مباشرة باستخدام Binary Number أو الـ 0 والـ 1 والـ Hexadecimal
48 b8 7461626172616e692e746b00

ما الذي يعنيه هذا ؟ الكود 7461626172616e692e746b00 يمثل الجملة tabarani.tk
وهو مكتوب بصيغة Hexadecimal وهو نظام عد يستخدم الأرقام من 0 إلى 15 والحروف من A إلى F بطريقة معينة ليفهمها الجهاز
و 48 b8 تمثل بعض الأوامر تخبر الجهاز أن يقوم النص في ذاكرة الجهاز

  1. لغة التجميع (Assembly - أيام زمان)

لغة الـ Assembly هي لغة تقوم بتبسيط لغة الآلة وتجعلها أكثر قربًا للإنسان
وتستخدم أوامر بسيطة ومفهومة تسهل عملية التواصل مع الجهاز

website db "tabarani.tk", 0

ما الذي يعنيه هذا؟
السطر website db "tabarani.tk", 0 يعني تخزين النص "tabarani.tk" في مكان معين في ذاكرة الجهاز في متغير من اختيارنا اسميناه website
والرقم الرقم 0 في النهاية للإشارة إلى نهاية النص ليعرف الجهاز أن هذا هو نهاية النص

كما ترى لغة Assembly تستخدم أوامر بسيطة ومفهومة يمكن للبشر قراءتها وفهمها بسهولة
على الأقل أفضل من الـ 0 والـ 1 أو الـ Hexadecimal في الـ Machine Code


  1. لغات البرمجة الحديثة (زماننا هذا)
    لغات البرمجة مثل C++ جاءت لتسهيل البرمجة بشكل كبير
    بدلاً من التركيز على التفاصيل التقنية، أصبح بإمكان المبرمجين التعبير عن منطق البرامج باستخدام أسطر أقرب للغة الإنسان
string website = "tabarani.tk";

ما الذي يعنيه هذا؟
الكود كما ترى أصبح نوعًا ما مفهوم
هنا عرفنا متغير يسمى website من النوع string أي سلسلة نصية وأعطيناه القيمة "tabarani.tk"
لاحظ أننا حتى استخدما = للتعبير عن القيمة التي نريد تخزينها في المتغير website
شيء يفهمه أي شخص كأنك تكتب س = 25 في الرياضيات حيث أن س هو المتغير و 25 هو القيمة التي نريد تخزينها في المتغير


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

الآن في زمننا هذا أصبح لدينا الكثير من اللغات البرمجية التي تسهل عملية البرمجة وتجعلها أكثر فهمًا وسهولة لغات مثل C++ و Python جعلت البرمجة أسرع وأسهل وأكثر إنتاجية، مما فتح المجال لتطوير تطبيقات معقدة بجهود أقل
وبالطبع كل لغة لها مجالاتها وتخصصاتها ومميزاتها وعيوبها واستخداماتها

إذا عندما نسأل ما هي البرمجة ؟

نستطيع أن نقول أن البرمجة هي ببساطة كتابة بعض الأوامر والتعليمات بلغة معينة لينفذها الجهاز
بمعنى أنها الوسيلة التي تستخدمها لتخاطب بها الآلة لتنفيذ مهام محددة

تلك الوسيلة التي ستستخدمها تأتي بشكل لغة برمجة وهذه اللغة مهما كانت فهي مجرد وسيط بينك وبين تلك الحديدة التي لا تفهم شيء
كل ما في الأمر أنك تقوم بكتابة أمر معين في لغة برمجة معينة مثلا اجمع لي 5 و 10 ثم تقوم لغة البرمجة التي تستخدمها بتحويل الأمر التي كتبته إلى لغة الـ 0 و 1 بنمط معين ليفهمها الجهاز

ويوجد لغات كثيرة تستخدمها لتتواصل مع الجهاز
وكل لغة لها مميزاتها وخواصها ولها التخصص التي تمتاز فيه كما ذكرنا

مثلا ستجد لغات برمجة جيدة في مجالات معينة ولغات مخصصة بشكل كامل لمجال معين
وكل مجال وتخصص له اللغات الخاصة بها واختيارك للغة تعتمد على المجال والفكرة وما الذي تريد القيام به

مجالات البرمجة وما الأبعاد التي يمكنك أن تصل إليها

مجالات البرمجة كثيرة جدًا ومتنوعة وتشمل العديد من الأبعاد والتخصصات
وهناك العديد من الفرص المهنية والمجالات التي يمكنك العمل بها بعد تعلم البرمجة، منها:

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

لكن تعرف ما الشيء الجميل في هذا الكلام ؟ أن كل شيء يتغير ما عادا أساسيات أي مجال أو تخصص
وأيضًا أي لغة جديدة أو قديمة بها أساسيات ثابتة ومفاهيم أساسية تجدها في كل لغات البرمجة
وهذ ما سنركز عليها في هذه السلسلة الجديدة من المقالات

فعلى سبيل المثال لو تعلمت لغة C++ وأتقنت الأساسيات من خلالها ستجد أنك تستطيع التنقل بين اللغات أخرى بشكل أسهل وأسرع
لأنها كلها تشترك في الأساسيات والمفاهيم الأساسية
وهذا ما سنركز عليه في هذه السلسلة الجديدة الأمور الأساسية التي تجدها في كل لغات البرمجة