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

حقوق المؤلف
- الجدير بالذكر ان جميع الشروحات التي سوف نعرضها  في هذه الدورة على مدونة خبير الانترنت هي منقولة من اشهر درس للبرمجة في الغرب , كل ما سوف يطرح هو نقل و ترجمة من الكتاب ندخل عليها اضافات و تعيدل .
المصدر هو : موقع openclassrooms , المؤلف والكاتب هو Mateo21 

مقدمة
- ان كنت ترغب في تعلم البرمج و لا تعرف من اين تبداء لشدة تعقيد بعض الشرحات المتوفرة على الانترنت , فهاذه الدورة و الدروس هي مصنوعة من اجلك .
- لغة C هي لغة برمجة مفتوحة و لا يمكن التحكم بها , تم اختراعها في السبعينيات , ولحد اليوم هي تستعمل في انظمة التشغيل و الروبوتيك الحديثة , لا يخفى عليك انها لغة معقدة لكن حين تتمكن منها سوف تكون لك قاعدة صلبة في المجال و يمكنك الانتقال الى لغات اخرى و انت تمتلك مفاهيم و اسس متينة .
- في هذه الدورة سوف نتطرف الى الذاكرة , المتغيرات , الشروط , الحلقات , بعدها سوف ننتقل الى انشاء واجهات جرافيزم "GUIs" بمكتبة SDL ( العاب فيديو  وغيرها ) , سوف نتعلم طريقة التحكم في هياكل البيانات لتنظيم و تسوية المعلومات المخزنة , lists, stacks, queues, hash tables وغيرها .

تعلم البرمجة بلغة C للمبتدئين : 1 مقدمة و شرح المفاهيم الاولية
بعض الانجازات التي سوف نحققها  في الدورة
- لنبداء حقيقتا من الصفر يجب علينا ان نعلم او نُجيب على اسئلة بسيطة لكنها محورية لكسب المعرفة الصحيحة و الوصول الى لب الموضوع و نحصد نتيجة كل ما نتعلمه في الاخر , ايضا كي لا تختلط الامور على اصدقائنا الذي ليس لهم ادنى فكرة عن المجال .

ما هي البرمجة ؟
- بكل بساطة هي تصميم و انشاء برامج رقمية IT (تكنولوجيا المعلومات) و هذه البرامج تعطي اومر لجهاز الكمبيوتر .
- الكمبيوتر او الحاسوب معبأ بالبرامج 
* الالة الحاسبة هي برنامج 
* معالج النص هو برنامج 
* ادات الدردشة هي برنامج 
* العاب الفيديو هي برنامج 
تعلم البرمجة بلغة C للمبتدئين : 1 مقدمة و شرح المفاهيم الاولية
عمل مبرمج بعد انهاء الدروة
- خلاصة القول ان البرامج هي موجدة في كل مكان و بامكانها القيام باي شئ على جهاز الكمبيوتر , يمكنك تصميم برنامج تشفير البيانات او لعبة 3D ثلاثية الابعاد على الانترنت , لا يهم حاسوبك بامكانه القيام بكل هذا و اكثر .
- طبعا تصميم لعبة من الصفر لا تكون بين ليلة وضحاها , التصميم يتطلب الكثير من الجهد و العمل .
- في البداية لن نحاول تصميم لعبة ثلاثية الابعاد "صعبة " لا , سوف نبداء بعمل برامج بسيطة جدا , و من ضمن اول الاشياء التي سوف نتعلمها هي كيفية اظهار رسالة على شاشة الحاسوب , نعم النتيجة في حد ذاتها لا تبث الحماس , لكن مجرد هذه العملية تتطلب معارف وليست بالسهولة التي تظنها .

- هذه الخطوة الاولى و ان كانت لا تثير اعجاب الاصدقاء , لكن يجب علينا المرور و سلوك هذا الطريق لكي نتعمق اكثر فاكثر في البرمجة و نصمم اشياء اكثر تعقيد , هدف هده الدورة هو انك تتمكن من التحكم في اي برنامج مهما كان بلغة C .

ما معنى لغة C اصلا ؟
للعلم ان الحاسوب هو الة غريبة , لايمكن التعامل و التواصل معه الى من خلال 0 و 1 , من هذا المنطلق اذا ترجمنا له " حساب العملية 3+5 " سوف نجد النتيجة على الشكل التالي :
0010110110010011010011110

- ما تراه في النتيجة هي لغة الحاسوب التي تسمى binary language ( احفظ جيدا هذه العبارة ) , جهازك لا يعرف الا هذا النوع من الكلام و من الواظح ان مثل هذا الكلام غير مفهوم بتاتا لنا .

- هذه اول مشكلة : كيف نتكلم مع الكمبيوتر بلغة اسهل من 0 و 1 ؟ 
- الكمبيوتر لا يتكلم اي لغة من لغات البشر , و من غير المعقول البرمجة باستعمال binary لتصميم برنامج , حتى مجانين البرمجة لا يعملون هذا .
- من هذا المنطلق تم اختراع لغات جديدة التي سوف تحول كلامنا الى binary كلام الكمبيوتر , اصعب شيء هو انشاء برنامج يقوم بالترجمة , اطمئن هذا البرنامج موجود و لن تطر لاختراعه , سوف نستعمله لترجمة كلمات مثل " حساب العملية 3+5 " التي سوف تمر عبر برنامج الترجمة و نحصل على نتجة 0010110110010011010011110 .
رسم تبياني للشرح الذي طرحناه
معجم البرمجة 
- لحد الان لم نستعمل الا عبارات "عامة" , لكي تكون لك فكرة توجد كلمة لكل شيء في البرمجة , و في هذه الدورة سوف نتعلم المعجم المستعمل , ليس فقط لتتظاهر و تتفاخر بانك تفهم ما تقول o_O لا , لكن لتتمكن في المستقبل "و هذا سوف يحص " التواصل مع مُبرمج اخر, ستستطيع ايصال المعلومة بوضوح , لا تكترث لكلام الناس الذين سوف ينظرزن لك مثل كائن فضائي سوف تعتاد .

- نعود الى الرسم التبياني السابق
* الحالة الولى هي ان " برنامجك مكتوب بلغة مُبسطة " هذه اللغة المُبسطة تُسمى لغة عالية المستوى high-level language .
- يوجد العديد من مستويات اللغة , كل ما كانت رفيعة او عالية المستوى كل ما اقتربت من اللغة البشرية , ادا لغة عالية المستوى هي سهلة الاستعمال , لكن في نفس الوقت لها سلبيات سوف نتعرف عليها لاحقا .
- توجد العديد من اللغات من صنف عالية المستوى في البرمجة التي يمكنك استعمالها لتصميم برامجك مثل :
* ++C
* JAVA
* Visual Basic
* Delphi
* C
- ليكن في علمك ان الترتيب كان عشوائيا و لا تجعل في ذهنك ان الاول اسهل و افضل من الاخير او العكس , مجرد امثلة , طبعا توجد لغات عديدة اخرى و لا يمكن وضعها جميع للتيسير عليكم .
- الفرق بينها هو اختلاف عُلُو المستوى , بطبيعة الحال توجد لغات اسهل للاستعمال من اخرى .

- كلمة اخرى للحفظ هي الشفرة المصدرية " source code " ما نسميه الكود سورس هو ببساطة كود برنامجك مكتوب بلغة عالية المستوى , بمعنى انت من يكتب " source code " الذي سوف يترجم الى binary .

- ننتقل الى " برنامج الترجمة " الذي سوف يترجم لغتنا عالية الممستوى (مثل C او C++ ) الى binary , هذا البرنامج في حد داته له اسم , في المعجم اسمه the compiler و الترجمة تسمى the compilation .
- مهم جدا : يوجد compiler لكل نوع من اللغات عالية المستوى , امر بديهي مادامة كلها مختلفة لا يمكن ان يكون المترجم يستعمل لها جميعا .
ملاحظة سوف تعرف لمذا بالذات يوجد عدت برامج "compiler" بالنسبة للغة C , يوجد مترجم من شركة Microsoft و اخر من GNU  و عدد اخر , سوف نتعمق في الامر اكثر في الدرس القادم , هي تقريبا شبيهة ببعضها لكن بها اختلاف طفيف سوف نتعلم ما هي بالتحديد .
- اخيرا و ليس باخر برنامج binary المُتَرجَم على compiler يسمى the executable , لهذا السبب تجد ان اغلب البرامج على الويندوز لها " extension " امتداد « .exe » اصلها من كلمة EXEcutable .

- الان لنعد صياغة الرسم البياني في لغة البرمجة الحقيقية سوف تكون كالتالي 
لمذا اختيار تعلم لغة البرمجة C ؟
- مثل ما شرحناه توجد العديد من اللغات للبرمجة , هل يجب بداء التعلم من احدهن ؟ سؤال وجيه .
* يجب عليك الاختيار للبداية في التعلم و الخيارات متعددة :
very high-level language لغة عالية جدا في المستوى : هي لغة سهلة الاستعمال , من ضمنها نجد Python, Ruby, Visual Basic , و عدد اخر من نفس القبيل , لكن تجد انها مرفوقة بملفات لكي تستطيع الاشتغال .
high-level language لغة من مستوى أقل قليلا : سوف تجد انها اصعب قليلا , لكن بلغة مثل C سوف تتعلم اكثر عن البرمجة و طريقة عمل الكمبيوتر , بعدها سوف يكون بامكانك تعلم لغات مغايرة بسهولة اكبر , سوف تحصل على استقلال و تحرر داتي .

- ايضا لغة C كثيرة الانتشار و الشهرة هي مصدر العديد من البرامج التي تعرفها .
- ايضا لغة C هي من اشهر لغات البرمجة في العالم , من المعروف انه يدرس في المعاهد العليا للبرمجة .
- هذه هي الدوافع التي تجعلنا نعتقد ان لغة C هي الافضل لبداية المشوار في البرمجة و يمكن الحصول على معارف كثيرة قيمة .
- يمكن ايضا اضافة ان بعض اللغات تستعمل اكثر من ناحية WEB مثل PHP  , وليست مُحَبَدَة في انشاء برامج الكمبيوتر .

- في الدورة سوف نتعامل مع الجميع و كانها اول مرة يسمع عن البرمجة و ليس له اي خبرة , حتى و ان كان القارء له معلومات مسبقة لن يضرك الامر في الانطلاق من الصفر . 

سؤال عشوائي 
يوجد شئ لا افهمه ما هو الفرق بين مختلف لغات البرمجة ؟ مثلا ما هو الفرق بين لغة C و ++C  ؟
اللغة C و ++C  متشابهين كثيرا لمعرفة اوجه التقارب علينا الرجوع الى تاريخ اختراعهما :

- في البداية حين كان الكمبيوتر يزن اطنان و حجمه يستلزم غرفة بسعة منزلك , تم اختراع اول لغة و اسمها Algol .
- بعد التطور تم اختراع لغة اسمها CPL , الذي تم تطويره الى BCPL , الذي بعدها اخد اسم " اللغة B " .
- بعدها بفترة تم اختراع لغة جديدة و هي C , هذه الاخيرة حتى و ان تم التعديل عليها تبقى الى اليوم الاكثر استعمال .
- مرة وقت فتم اقتراح اضافة اشياء اخرى على C , على شكل "تحسين" حتى و ان كان المعنى لكلمة تحسين الا مجاز,  سُمية باللغة ++C التي هي تعتبر فقط C مع اضافات تسمح بالبرمجة بطريقة اخرى . 

- لنتفق على هذه النقطة بالذات , ++C ليس افضل من C , هو يسمح بالبرمجة على نحو مغاير و قد يسمح باتساع في اشياء , بعد هذه الدورة سوف تجد سهولة كبيرة مع ++C ان قررت تعلمه .
- ليس لان ++C معاصر على C , يتوجب عليك حتما المرور من C الى ++C , لغة C ليست لغة قديمة  مفقودة الى الان تستعمل كاساس لانظمة التشغيل الاكتر رواج في العالم منها Linux , Mac OS , Windows  "وكانني قلت جميعها ^__^" .

هل البرمجة صعبة ؟
- سؤال يدور في اذهان الجميع وخصوصا الراغبين في قطع اول الاشواط , هل يجب ان تكون متمكن في الرياضيات و حاصل على شهادات عليا لكي تتمكن من بداية البرمجة ؟
- الجواب لا قطعا , طبعا لا , لا يستلزم عليك ان تكون ذو معرفة من مستوى عالي في الرياضيات للبرمجة , كل مايستلزم عليك مرفته هي العمليات الاربعة الاساسية للحساب 
* الجمع
* الطرح
* القسمة
* الضرب

- الامر مبهر اليس كذالك ! في الدروس القادمة نشرح كيف يقوم الحاسوب بتنفيد هذه العمليات الحسابية .
- الامر ليس معق , في الاصل كل شئ مرتبط بالبرنامج الذي تريد تصميمه , لو كنت تريد انشاء برنامج تشفير معقد هنا نعم يجب عليك معرفة بعض الاشياء في الجَبر , اذا كنت تريد تصميم برنامج ثلاثي الابعاد من الطبيعي ان تكون على علم ببعض الاشياء في ما يخص الحسابات الهندسية .
- ليكن في علمك مع البرمجة على اللغة C ليس عليك ان تكون تعرف اي شيء معقد في الرياضيات .

ادا اين الفخ ! اين الصعوبة ؟
- يجب عليك معرفة طريقة عمل الكمبيوتر للبرمجة على لغة C , من هذه الناحية لا تقلق سوف نتطرق اليها بالتفصيل .
- المبرمج يجب ان تتوفر فيه الصفات التالية : 
* الصبر : البرامج لا تعمل دائما في المرة الاولى , يجب عليك المثابرة 
* التحلي بحس المنطق : لا يستلزم عليك ان تكون تكسب معارف كبيرة في الرياضيات , لكن يجب عليك تخديم عقلك .
* الهدوء : لا .. لا نضرب الكمبيوتر بعصى , ... لن يجعل من البرنامج يعمل .

ببساطة لا يستلزم قدرات خارقة في الرياصيات , حتى انسان ضعيف جدا في الجبر يمكنه البرمجة , بالصبر و المثابرة تستطيع فعل ذالك , ومع الوقت تصبح مدمن برمجة و ترى كل شيء ارقام مثل فلم matrix  ^__^ .

خلاصة 
- لتصميم برنامج يجب عليك ان تكتب في لغة يفهمها الكمبيوتر .
- يوجد العديد من لغات البرمجة التي يمكن ترتيبها على حسب المستوى , اللغات التي تسمى " high language " عالية المستوى تكون عادتا اسهل للاستعمال .
- اللغة التي سوف نتعلمها في هذه الدورة "C" تعتبر كلغة برمجة منخفضة المستوى " Low level "
- source code هو عبارة عن تعليمات او اوامر مكتوبة بلغة المعلوماتية .
- compiler هو برنامج يحول source code الى binary , الذي بعدها يمكن للمعالج 'CPU' تنفيده على شكل .exe , التي ما هي الا برامج من binary فيها الكثير من source code في داخلها .
- البرمجة في حد ذاتها لا تتطلب معرفة متقدمة في الريا ضيات , الا فيحالة ما كان برنامجك مبني لفعل حسابات معقدة مثل التشفير , الحس المنطقي مطلوب ويجب ان تكون منهجي .

الى الدرس القادم.... 


By