
البرمجة من أشد المجالات الحاسوبية جذبا لي ، وبحكم أنني مختص بهندسة الحاسبات فإن البرمجة إحدى اختصاصاتي ،وليست كل اختصاصي ، وحينما أتذكر نفسي قبل أن أدخل في بحر البرمجة هذا البحر المثير الذي مهما تعلمت وعملت فأنا سأبقى دائما على الشط ،أشعر بأنني لم أفكر ولم أذق متعة التحدي والإصرار طيلة ما مضى من حياتي ربما تستغرب من كلامي لكنك إن دخلت هذا العالم فستتذكر كلامي جيدا .. عموما أنا متيقن من ان بداية كل مبرمج هي نسخة مطابقة لبداية أي مبرمج آخر .
دائما حينما اسأل شخصا لديه الرغبة في الابتداء في البرمجة لما تريد الدخول في عالم البرمجه؟
فتكون اجاباتهم مشابههة للتالي ..
- “والله انا طول عمري اتمنى اني اصمم نظام منافس للويندوز “
- “والله انا افكر اني اسوي احسن من قوقل بس يبلي دروس وفراغ “
- “انا طموحي بسيط كل اللي ابي اعرف ابي اصمم العاب زي العاب الكترونيكس ارتس”
عموما دائما تجد هذه الرغبات لدى الشخص الذي لا يملك أية فكرة عن هذا البحر الذي لا شط له ، ودائما تجد توقعاتهم أن البرمجة سهلة جدا ومن السهل ايضا بناء كل شيء !
أنا لست ضد طموحك أو رغباتك ولكن أنا اقول هذا لكي لا تصدم بالواقع لأن ما تطمح اليه هو نتاج عمل مكثف لآلاف الاشخاص _المبدعين والخبراء_ ونتاج سنوات مكثفة من العمل والأبحاث والمبالغ الطائلة التي تصرف على الطاقات البشرية والطاقات التقنية ..
![]()
عليك ان تعلم أولا: ماهي لغات البرمجة ؟
لغات البرمجة تنقسم لعدة اقسام وهي :-
- لغات الآلة :- machine languages
وهي اللغات التي تنفذها المعالجات مباشرة .. دون المرور الى مترجمات ولا تحتاج الى انظمة تشغيل ايضا .. ويعبر عنها بقميتين اما 0 او 1 وهذه هي الحالات الرقمية التي يفهمها المعالج فقط ولن اخوض في تفصيلها في غير مقامها ..
مثل :Intel 80×86 ,Motorola 680x،IBM System/360
وهذه اللغات لم ولن يتوقف الناس عن استعمالها لأن اي كمبيوتر يصنّّع فهو لا بد ان يبرمج بهذه الطرق ابتدائيا ومن ثم يوضع متطابقات لهذه السلاسل من ال 0 و 1 الى كلمات واوامر بفهمها البشر سهلة الحفظ وهذه اللغات هي لغات التجميع .
![]()
- لغاة التجميع:- Assembly languages
وهي اللغات التي تترجم الى لغة الآلة مباشرة بواسطة مترجم يسمى Assembler ويميزها عن لغة الآلة انها قابلة للفهم بالنسبة للانسان وأن البرنامج يكون أقصر لأنه يعبر عن العمليات بكلمات وليس قيم .
وعليك أن تعلم أن كل سلسلة معالجات لها لغة تجميع خاصة بها .. لكن شركات التصنيع اعطت الفرصة والامكانية ان تستخدم لغة تجميع لمعالج قديم على معالج جديد ولكن العكس غير صحيح ..
وهذا أحد المترجمات التي استعملتها في برمجة الاسمبلي في معالجات x86
![]()
لغات عالية المستوى :- high level languges
هي لغات صممت لكي يتعامل معها الإنسان بسهولة دون المرور بتفاصيل عمليات الحاسب التي تتطلب مزيدا من الحسابات والجهد وتترجم هذه اللغات إلى لغات الآلة بواسطة مترجمات تسمى compilers او Interpreters ولن اخوض في الحديث عن المترجمات ،ومن أهداف صنع هذه اللغات ان تكون هذه اللغات قريبة من كلام البشر وهذا أيضا من أجل تسهيل عمليات البرمجة ،ولن تكون البشرية قادرة للوصول إلى هذه اللغات دون المرور بالصنفين السابقين لا محالة لأن الصنفين السابقين هما الأساس ..بينما اللغات عالية المستوى فهي متجددة دائما ومتطورة وربما اندثر الكثير من اللغات عالية المستوى ،ولكن يبقى أنه من الصعب جدا ان نقوم ببناء تطبيقات كبيرة دون اللجوء هذا الصنف من اللغات ولكن لا تنقطع الحاجة عن صنف من الاصناف ..
وهي كثير جدا تلك اللغات ومن الصعب حصرها .. وسأسرد لك أشهرها ..
C,C++,C#, Java,Pascal,Scheme,Visual Basic
![]()
اللغات النصية أو Scripting language:-
وتسمى أحيانا لغات البرمجة الموسعَة .. وهي اللغات التي تسمح بالتحكم في في تطبيق او عدة تطبيقات .. ومن هنا يجب ان نعرف الفرق بين لغة لصنع البرامج ولغة للتحكم بالبرامج ..
ومنها لغات الويب مثل PHP , ASP.NET
![]()
وبعد أن تعرف أصناف اللغات وعرفت أمثلة على كل صنف ومدى أهمية كل لغة .. فإنك حتما سيرد بذهنك هذا التساؤل “ما هي افضل لغة في الصنف الواحد ؟” او “ ما هي اسهل لغة في الصنف الواحد ؟” من هنا احب ان اقول لك .. ان ما تستطيع فعله في لغة ما حتما ستستطيع فعله في غيرها من اللغات اذا تعلمتها طبعا ..وليس هناك شي تقدر عليه لغة بينما لا تقدر عليه لغة أخرى ..لكن هناك مميزات في كل لغة وكل شخص يميل الى اللغة التي تمتلك المميزات التي تعجبه .
![]()
مصطلحات ومفردات مترددة في عالم البرمجة .. ساسرد بعضا منها بإختصار :-
الخوارزمية Algorithm :-
وهذا هو اهم مصطلح في هذا العالم .. ونقصد به الخطوات المنطقية الصحيحة لحل مشكلة والخطوات مرتبة بترتيب معين ..وهذا المصطلح هو ألذ جزء في البرنامج وقبل ان تبني برنامجك لا بد ان تكون خوارزمياته قد بنيتها مسبقا وإلا ستواجه كثيرا من المشاكل والعقبات.
سيدوكود او pseudocode :-
وهذه المصطلح يرمز الى احد الطرق المهمة في التعبير عن الخوارزميات ويكون قريبا للغة البشر وايضا قريبا للغات البرمجه بحيث انه يمكن على الفرد المبتدئ بالبرمجة ان يفهمه وايضا بسهولة يتم تحويله الى كود برمجي حقيقي .
الرسم المتتابع flow chart :-
هي رسمات ورموز توضح سير الخوارزمية .. هي وسيلة للتعبير عن الخوارزمية ايضا و حينما نتكلم بصفتنا مهندسين برمجيات فإنها شديدة الاهمية ولا بد ان تكون ضمن مشروعك ، ولكن اذا قمت بكتابة الخوارزمية فإن ذلك سيكون كافيا لتصور البرنامج قبل كتابته ..
العلة bug:-
ويقصد بها المبرمجون هو الخطأ البرمجي الذي يعيق تشغيل البرنامج .
الانهيار crash :-
ويقصد به الخطأ الموجود في البرنامج ولا يعيق عمله اذا لم يصل التنفيذ اليه لكن اذا تم الوصول الى مكانه فإنه يحدث انهيار للبرنامج ويغلق تلقائيا .
برنامج تحكم Consol Application:-
هي البرامج التي التي تصمم للحواسيب ذوات الواجهات النصية ، اي ان البرنامج تكون واجهته نصية بلا ازرار ولا رسوم . غالبا تكون بداية المبرمج من هذه البرامج لأن المطلوب ابتدائيا هو التكوين الصحيح للبرنامج وانشاء وظائفة بغض النظر عن مظهره ، وبعد التمرس والخبره في كتابة البرامج من هذا النوع بإمكانك الانطلاق للبرمجة الرسومية بشتى انواعها.
البرمجة كائنية التوجه OOP Object-oriented programming :-
هي البرمجة التي تعتمد على الكائنات وهذه الكائنات تتضمن البيانات والدوال سويةً وهذا يتيح للغات البرمجة التي تدعم الـ OOP ان توفر كثيرا من الخدمات البرمجية مثل :
data abstraction, encapsulation, modularity, polymorphism, inheritance.
وهذا مجال برمجي واسع جدا ويدرس في الجامعات على عدة كورسات ويبقى المتعلم في بداية الطريق .
التوافقية Portability :-
التوافقية أحد الأمور المهمة لدى المبرمجين ونقصد بها هي امكانية نقل البرنامج من بئية الى اخرى ونقصد بالبيئة هي نظام التشغيل .
اطار عمل دوت نيت NET Framework. :-
اطار عمل دوت نيت هو اطار عمل برمجي يمكنك تثبيته على جهازك اذا كنت تستخدم نظام تشغيل مايكروسوفت ويندوز وهذا الاطار يتضمن عدد ضخم من المكتبات الجاهزة والدوال البرمجية لحل كثيرا من المشاكل البرمجية الشائعة ، وتضمن برامج تدير تنفيذ البرنامج، واطار عمل دوت نيت يخدم عدة لغات برمجة ، ويعطي الامكانية لأستخدام اكواد برمجية مكتوبة بلغة ما ان تستخدم في برامج مكتوبة بلغة اخرى ، وهذا الاطار من انتاج شركة مايكروسوفت وقد تشاهد ان معظم برامجها تعتمد على هذا الاطار .
![]()
كيف تبني برنامجك ؟
لتبني برنامجا جيدا وخاليا من الأخطاء هذا ليس بالامر الصعب جدا طالما كنت تتبع الاجراءات الصحيحة لبناء برامجك وهذه الاجراءات تسهل عملية البناء وتجعل البرنامج واضحا قبل المثول ببناءه وسأحاول ان اوضح لك هذه الاجراءات .
الرسمة السابقة توضح لك الاجراءات المطلوب اتخاذها عند بناء البرامج ..
وسأشرحها لك بإختصار :-
اولا: المتطلبات والخدمات services & requirements :-
نقصد بالمتطلبات الوصف الكامل لوظائف البرنامج اي الخدمات التي سيقدمها البرنامج للمستخدم اي كانت تلك الخدمات ضخمة ام بسيطة بغض النظر عن تنفيذ تلك الخدمات .
ثانيا: كتابة الخوارزميات Algorithms creating :-
وهذه الخطوة يقصد بها تصميم الخدمات والمتطلبات من البرنامج على شكل خوارزميات وكما قلنا ضمن فقرة المصطلحات يمكننا تمثيل الخوارزمية بعدة طرق منها الـ flowchart , psedocude و يمكننا ايضا التعبير عنها بكلامنا اليومي .. ويحتاج في هذه الخطوة كتابة الخوارزمية على ورق وتحليلها عدة مرات والتأكد من سلامة الخوارزمية من الاخطاء والمشاكل قبل ان يتم تنفيذها . بهذا الشكل تقريبا ..
ثالثا: رسم النماذج او forms skitcing :-
بهذه المرحلة يحاول الفريق او المبرمج اذا كان منفردا بعمله ان يرسم نوافذ البرنامج بشكل مبدئي وبسيط جدا والغرض من هذه الخطوة هو تصور البرنامج قبل الابتداء به وان يكون كل شيء واضح قبل البداية بالتنفيذ ، لأنه من دون هذه الخطوات ربما تتفاجئ بعقبات كثيرة لم تكن بالحسبان ..
رابعا: كتابة البرنامج writing the code :-
وهذه هي المرحلة التي يخطأ الكثير بأنهم يبدأوا منها في بناء برامجهم واذا كانت هي البداية فإن المشاكل ستكون في كل سطر تقوم بكتابة ولأن البرنامج سيبنى ارتجاليا فإن الاخطاء ستكون محتملة بشكل كبير جدا وربما تضهر اخطاء لا يمكن ملاحظتها اثناء اختبار البرنامج وقد لا تكتشفها انت ويكتشفها غيرك من المستخدمين بعد عملية النشر وحينها ستصبح في موقف حرج جدا حيث ان ثقة المستخدم ستقل ببرامجك لذا لا تكن كتابة البرنامج هي البداية في بناء البرنامج.
خامسا: اختبار البرنامج Application testing :-
في هذه المرحلة يقوم المبرمج بتجربة جميع وظائف برنامجه مثل المستخدم تماما و تقليل احتمال وجود الاخطاء ومكامن الانهيارات في البرنامج Crash وغالبا يقوم بهذه المهمة او الخطوة عدة مستخدمين وفي حالة وجود اخطاء لابد ان تسجل هذه الاخطاء على اوراق ومن ثم اصلاحها جميعا ولا بد من اعادة هذه الخطوة بعد كل عملية صيانة للبرنامج الى ان يتم التأكد من سلامة البرنامج 100% .
سادسا: تنسيق وتجميل مظهر البرنامج Application decorating :-
بعد ان يكون البرنامج مكتمل التركيب و جيد العمل تبقى المرحلة الاخير قبل تحزيم البرنامج وهي تزيين البرنامج ربما بعض المبرمجين يرى ان هذه الخطوة لا لزوم لها ولكن حينما نرى ان بعض البرامج قد انتشرت وزاد مستخدموها بسبب مظهرها على الرغم من ادائها الضعيف وخدماتها الهشة . وهذا يدل عن ان مظهر البرنامج سبب في جذب المستخدم لأستخدامه .. لذا حاول ان تتعلم مهارات التصميم من اجل تزيين برامجك .
سابعا: نشر البرنامج Application Publishing :-
وتتم هذه النقطة في نشر البرنامج في الويب .. اذا كنت لا تريد ربحا ماديا من خلال برامجك واذا كنت تعتبر نفسك في طور التعلم ولا حاجة للبحث عن الكسب فإن افضل طريقة في النشر هي ان ترفع برنامج في مواقع البرمجة والمبرمجين وهي كثيرة وبإمكانك سؤال قوقل عنها .
ثامنا: طلب الانتقادات ask for feedback :-
بعد عملية النشر اسأل المستخدمين ما رأيك في برنامجي؟ وما ينقصه؟ وما يعجبك به ؟ومالا يعجبك به ؟وفي النسخه القادمة ماذا تقترح علي ان أضيف؟ وعليك ان تعرف ان نقد المستخدم العادي يختلف عن نقد المبرمج لأن المستخدم سينتقد الخدمات وأسلوب عرضها وشكل البرنامج ودائما نقد المستخدم يتضمن الطلبات والتحديات بغض النظر عن افكار التنفيذ لأنه اذا لم يكن مبرمجا فنقده سيكون مبنيا على رغبات رفاهية وذلك سيجعل تحديات امامك في تلبية طلبات المستخدمين وذلك اكثر ما في الموضوع من متعة بينما نقد المبرمجين هو ما يكون مبنيا على خبرته بالبرمجة فيكون اتباعك لتوجيهاته قائدا ليكون برنامج دقيق ومنطقي ودائما توجيهاتهم تكون في صميم بناء البرنامج واقترحاتهم حول تركيب البرنامج واداءه بغض النظر عن ما يقدم او ما هي خدمات البرنامج .
تاسعا: تحديث البرنامج Application Updating :-
بعد ان تتلقى انتقادات وطلبات كلا من المستخدمين والمبرمجين وشعرت ان التعديلات والمقترحات سهلة التنفيذ فإنه من الجيد ان تبادر في عمل التعديلات المطلوبة لأنها تصقل خبراتك وتقوي برنامجك ، وايضا هذا يزيد من انتشارك .
بعد ان تعلمت الخطوات الصحيحة لبناء اي برنامج .. عليك ان تعرف ان القدرات ربما تكون محدودة ولكن البرمجة ليست محدوة ابدا .. واذا علقت في حل مشكلة ما ولم تجد الحل فاعلم ان الخلل في امكانياتك وليست في امكانيات اللغة أو البرمجة .. حينها عليك البحث عن الحل في كل مصدر تجده متاحا .. وقد تجدني استخدمت اللغة الانجليزية في بعض ما قرأت في هذا الدرس .. ولا تستغرب من ذلك لأنك ان كنت تريد ان تكون مبرمجا فإنه من الافضل ان تمتلك لغة انجليزية جيدة لأنك ستستعين كثيرا بالمواقع الاجنبية من اجل تنفيذ برامجك لأنه كما تعلم ان المحتوى العربي في الشبكة العنكبوتية فقيرا جدا جدا بالمجالات العلمية والتقنية البحتة ..
![]()
مصادر وكتب برمجية مهمة .. انصحك بقرائتها :-
C++ how to program






