Introduction

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

في البداية انصحك بمشاهدة كورس CS50
وهو كورس مقدم من جامعة هارفارد
مقدمة في علوم الحاسب
سيفيدك جدا في فهم المجال ويهيئك له
الكورس موجود مجانا على اليوتيوب وعلى منصة التعليم edx
لكنه بالانجليزية للأسف

الخوارزميات

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

خرائط التدفق او خرائط سير العمليات

هي تمثيل للخوارزميات باشكال معينة لكل شكل معناه
يعني ترسم الخوارزمية بدلًا من كتابتها لتسهيل قراءة الخوارزمية

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

المسار الذي تسلكه في تعلم اللغة
اوﻻ تعلم اساسيات اللغة
ثم البرمجة الكائنية التوجه OOP
ثم Data Structure في اللغة التي تتعلمها
ثم تعلم الخوارزميات وتطبيقها في هذه اللغة
كل شئ معتمد على ما قبله


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


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

بإختصار
ما تحتاجه البرمجة هو حبك لها
وما تحتاجه الشركات هو خبرتك ومهارتك في المجال


لا يوجد
كل لغة لها مميزاتها واستخداماتها
كل لغة متفوقة في المجال التي صنعت لاجله
افضل لغة برمجة في مجال ما هي اللغة التي تستطيع انت بها ان تفعل ما تريد
هذا يختلف من مبرمج لآخر
ربما انت تستطيع القيام بكل شئ تريده باستخدام السي شارب
غيرك يفعل كل شئ بالسي بلس بلس
ستقول ان افضل لغة هي سي شارب وهو سيقول لا انها السي بلس بلس اذن اي لغة اتعلم ؟

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

كل مجال له مسار تعلمه ذلك اولا حدد المجال الذي تريده ثم سر مع المسار المخصص له

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


لن تعرف ابدا
لا يوجد نهاية للغة البرمجة
التكنولوجيا تتطور كل يوم وتظهر اشياء جديدة
السؤال هنا يجب ان يكون متى اعرف اني صرت محترفا في لغة ما ؟
عندما تستطيع ان تنفذ اي فكرة تأتي ببالك
او على الاقل 90% منها
الطريق للأحتراف طويل لكنه ليس مستحيل
تعلم لغة ما
نفذ مشاريع وافكار عديدة
ستواجهك مشاكل واشياء لن تقدر على حلها
ابحث ثم ابحث ثم ابحث
هكذا تأتي الخبرة في اي مجال
فكر...طبق...ابحث...اكتسب خبرة...مبروك عليك الاحتراف


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


هو المجال الذي تحبه وتريد العمل به
الامر يعتمد عليك
لا يوجد مجال افضل من الاخر
كل مجال له دوره

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

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

Hyper Stage Course

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

ANbilArabi Course

ملحوظة : أنت لست مطالبًا بإتقان الجزئين المذكورين بالأعلى لأن لهم من هم مختصون فيهم

Object Oriented Programming
أو كما يسمونها باللغة العربية البرمجة كائنية التوجه
هو نمط متقدم من أنماط البرمجة وفيه يتم تجزئة البرنامج إلى كائنات لكل منها خصائصه

شرح مفهوم البرمجة كائنية التوجه للأستاذ عبد الله عيد