دليلك لدخول عالم البرمجة
السلام عليكم،
يتضمن هذا المقال معلومات ونصائح ستساعدك على الدخول إلى عالم البرمجة
والبدء في تعلمها. اضغط على الكلمات باللون الأزرق لقراءة المزيد عن
الموضوع.
فهرس الموضوعات:
1- ماهي البرمجة ولماذا نتعلمها؟
2- من أين أبدأ؟
§ ماهي اللغات وكيف تختلف؟
§ شرح مجالات البرمجة مع ذكر اللغات الأنسب لكل مجال
§ اخترت لغة كيف أتعلمها وما هي الأدوات التي
أحتاجها؟
§ نصائح شخصية وشرح بعض المفاهيم المهمة
3- روابط (شروحات ومصادر تعلم)
ملاحظة: إن كنت لا تجيد اللغة الإنجليزية تعلمها قبل أن تبدأ البرمجة لأن لغات البرمجة والتقنيات المستخدمة جميعها مكتوبة باللغة الإنجليزية والمصطلحات المستخدمة في تعلم البرمجة جميعها انجليزية كما أن المصادر الإنجليزية عديدة ولن تجد صعوبات فيما يخص البحث عن المعلومات في حال كنت قادرعلى فهم اللغة الإنجليزية.
ماهي البرمجة ولماذا نتعلمها:
البرمجة هي عملية كتابة أوامر معينة للحاسوب لإنجاز عمل ما. ولتحقيق هذه
الغاية نستعمل لغات برمجة تختلف في استخداماتها وخصائصها. ثمة العديد من الأسباب
التي قد تدفعك لتعلم البرمجة أو لتعليمها لأطفالك:
o
لأنك
تملك فكرة ما تريد إيصالها للناس عن طريق موقع ويب أو تطبيق ما
o
للحصول
على وظيفة في مجال البرمجة
o
لأن
البرمجة مهارة قد تفيدك في المستقبل وربما تكون مهارة احتياطية في حال عدم إيجادك
لعمل ضمن اختصاصك الأساسي
o
لأنك
تريد تطوير قدرتك على حل المسائل المنطقية
o
لأنك
تريد امتلاك قدر من المعرفة بالمجال قبل بدء دراستك في اختصاص البرمجة أو علم
الحاسوب
من أين أبدأ؟
ماهي اللغات وكيف تختلف؟
أول خطوة في مشوارك لتعلم البرمجة هي اختيار لغة ما ثم تعلمها.
لغات البرمجة هي طريقة نتواصل بها مع الحاسوب لأمره بإنجاز أمر معين. للّغات خصائص معينة تختلف من لغة لأخرى وهذه بعض الأمثلة: (عدلت هذه الجزئية في الرابع من ديسمبر من عام 2020)
-dynamically or statically typed: وتعني إرفاق نوع المتغير (رقم، نص، إلخ) أو عدم إرفاقه أثناء الكتابة. الفرق بالنسبة لك أنك قد تجد اللغات من صنف dynamically typed مثل بايثون أسهل أثناء التعلم وأسرع أثناء الكتابة بينما تجد العمل مع لغة statically typed مثل جافا أعقد وممل (ربما؛ هذا فقط مثال)
-compiled or interpreted: اللغات من صنف compiled تترجم إلى نص بلغة الآلة (machine code) ثم يتواصل هذا النص مع الحاسوب. على النقيض اللغات من صنف interpreted تتعامل تتواصل مع interpreter الذي يؤدي المهام المكتوبة في النص البرمجي. قد لا يبدو الفرق مهمًا أو واضحًا لكن المهم أن تعرف أن اللغات التي تترجم لنص بلغة الآلة أسرع أثناء التشغيل من تلك التي تتعامل مع interpreter لعدة أسباب. ولن يظهر الفرق في السرعة إلا في الحالات التي تتطلب من الحاسوب القيام بالكثير من العمل المعقد -معقد جدًا- في آن واحد والذي لن تقوم به في غالب الأمر، في بداية مشوارك على الأقل.
ولكل مجال لغات (وأدوات أخرى) مناسبة له. المعلومات المذكورة أعلاه مهمة في
اختيارك للغة فهي تبين مدى صعوبة اللغة وسرعتها. (إذا بحثت عن اللغة في محرك بحث
غوغل ستظهر لك خصائصها)
شرح مجالات
البرمجة مع ذكر اللغات الأنسب لكل مجال:
من المهم جدًا بعد أن تتعلم أساسيات لغة معينة (تختارها حسب المجال الذي
تريده وخصائصها) أن تختص في مجالٍ معين حتى تستطيع التركيز وتطوير مهاراتك ولا
تتشتت جهودك. سأشرح الآن المجالات الأشهر:
-تطوير صفحات الويب - web dev.:
هو كل ما يخص برمجة الأشياء التي تتواصل مع الشبكة العنكبوتية وينقسم
إلى عمليتين اثنتين؛ الأولى هي برمجة
الـواجهة الخلفية(backend)
وهي العمليات التي لا تظهر لعين الرائي مثل: تطوير واجهة
برمجة التطبيقات (API) والعمل
على قواعد
البيانات الخاصة بصفحة الويب
والعملية الثانية هي برمجة
الواجهة الأمامية (frontend)
وهي برمجة الأشياء الظاهرة على الشاشة مثل واجهة المستخدم(UI) وأشياء أخرى. مصطلح "full stack developer" يطلق على الشخص الذي يجيد العمل على
كلا المجالين ومهمته هي برمجة صفحة الويب من الألف إلى الياء.
اللغات الأنسب للمجال:
I.
JavaScript: لغة عالية المستوى، interpreted وأعتبرها الأنسب لك لو كنت مهتمًا في مجال الويب فهي لغة يمكنك
استخدامها (مع بعض الأدوات الأخرى) لتطوير صفحة ويب بالكامل بدون الحاجة للغات
أخرى.
II.
C#: لغة عالية المستوى وواعدة في المجال يمكنك استخدامها وحدها (مع
بعض الأدوات الأخرى) لتطوير صفحة ويب بالكامل دون الحاجة للغات أخرى تمامًا كـ JavaScript
III.
Kotlin: نفس الكلام المذكور بخصوص C#
IV. java/python/Rust/php/C++/Golang: لغات عالية المستوى يمكنك استخدامها في تطوير الواجهة الخلفية. لو كنت تجيد أحدها بالفعل، لا حاجة لتعلم جافاسكريبت (إلا في حال أردت تعلم برمجة الواجهة الأمامية)
ملاحظة: ستحتاج html و CSS في كل الأحوال (أداتان رئيسيتان في تطوير الويب)
-علم البيانات والتعلم الآلي والذكاء الاصطناعي: جمعت هذه المجالات معًا لعلاقتها الوطيدة ببعضها البعض. علم البيانات)(Data science هو علم يقوم على استخدام الأساليب العلمية، المعالجات، الخوارزميات، والنظم لاستخراج المعرفة والأفكار من البيانات. أما التعلم الآلي (Machine Learning) فهي الخوارزميات التي تتعلم وتطور من نفسها كلما طُبقت واٌستخدمت أكثر ويُرى هذا المجال على أنه جزء من مجال الذكاء الاصطناعي(Artificial intelligence) وهو مصطلح يطلق على قدرة النظام (أو البرنامج) على امتلاك ذكاء خاص به واتخاذ قرارات والقدرة على الاستنتاج دون تدخل بشري.
اللغات
الأنسب لهذا المجال:
I.
Python: لغة عالية المستوى، interpreted سهلة التعلم تستخدم في مجال علم البيانات والذكاء
الاصطناعي ومدعومة بكثير من المكتبات ووسائط العمل الخاصة بالمجال مذكور آنفًا.
II.
R: لغة عالية المستوى، interpreted، مبرمجة بالأساس لمجال علم البيانات. فضلتPython عليها لأن Python استخداماته عديدة جدًا وإن انتقلت لتعلم مجالاتٍ أخرى ستستفيد منها.
لكلا اللغتين مميزاتهما في المجال لذا اقرأ عنهما أكثر لو ما زلت محتارًا.
III. Java: ليست الخيار الأفضل لكن لو كنت تجيدها فلا حاجة لتعلم لغة جديدة.
-تطوير التطبيقات: عملية برمجة وتصميم وصيانة تطبيق معين. (قد تندرج بعض التطبيقات تحت صنف الويب أو تضطر في بعض الحالات للعمل على backend في حال أردت ولوج قاعدة بيانات أو أشياء من هذا القبيل)
اللغات الأنسب لهذا المجال:
I.
JavaScript,
Java, C#, Python, Dart, Kotlin : جميع هذه اللغات تستخدم في تطوير
التطبيقات لجميع أنظمة التشغيل (على
الهواتف والحواسيب). لجميعها مميزات وعيوب لذا اختَر اللغة حسب مميزاتها والمكتبات
ووسائط العمل الخاصة بها.
II.
Swift: لغة مخصصة لبرمجة التطبيقات والبرامج والأنظمة الخاصة بأجهزة أبل.
لو كنت تصبح مطور على نظام mac أو iOS هذه
اللغة التي يجب عليك تعلمها.
-تطوير
الألعاب - video game dev.: كما يوحي الاسم، هي عملية إنشاء لعبة معينة من
الألف للياء وتتضمن تصميم الرسوميات وبرمجة الذكاء الاصطناعي وأشياء أخرى. بالنسبة
للألعاب، يختلف الأمر قليلًا إذ يفضل أن تستخدم محرك
تطوير بدل استخدام اللغات فقط. (ملاحظة: يفضل أن تبحث
وتقرأ عن مجال تطوير الألعاب أكثر قبل اختيار محرك التطوير لأن معلوماتي شحيحة عن
تطوير الألعاب ولم أجرب الأمر من قبل).
بعض محركات
التطوير الشهيرة واللغات المناسبة لها:
I.
Unity: محرك تطوير مجاني مستخدم في بعض الألعاب الشهيرة. وقد يكون
مناسبًا للبدء في تعلم تطوير الألعاب إذ ستجد العديد والعديد من الشروحات عنه. يمكنك
استخدام JavaScript أو C#
للتطوير باستخدام محرك Unity
II.
4 Unreal Engine: محرك
شهير آخر، أكثر تعقيدًا ويحتوي على العديد من الأدوات والمزايا التي قد تساعدك على
تطوير لعبتك. اُستخدم في تطوير العديد والعديد من الألعاب المشهورة. عليك تعلم C++ لو أردت أن تستخدمه.
-برمجة
الروبوتات أو الآلات – Robotics: تطوير برنامج لتسيير روبوت أو آلة معينة بطريقة
ما.
اللغات الأكثر استخدامًا في المجال: C++ وPython
-تطوير الأنظمة:
ويشمل تطوير أنظمة تشغيل
الحواسيب والسيرفرات الضخمة وما إلى ذلك.
اللغات الأنسب:
I.
C,
C++: لهاتين اللغتين قدرٌ كبير من التأثير على
أنظمة التشغيل التي نستخدمها في عصرنا الحالي. وهما اللغتان الأكثر شيوعًا في
المجال.
II. Golang: هي لغة طوّرت من قبل شركة Google الشهيرة لتعويض لغتي C وc++ في مجال تطوير الأنظمة. تتميز اللغة بكونها أسهل وأبسط من اللغتين المذكورة آنفًا مع المحافظة على قوتها في مجال تطوير الأنظمة.
جدير بالذكر: Rust، Nim، D
-تطوير
الأنظمة المدمجة – embedded
Systems: النظام المدمج هو نظام مصغر(حاسوب) داخل
نظام أكبر ويستخدم لأغراضٍ معينة كالتحكم وما إلى ذلك.
لغات المناسبة للمجال: C, C++, Python, Java, Rust
اخترت لغة
كيف أتعلمها وما هي الأدوات التي أحتاجها؟
ببساطة ستتعلم في البداية الـ syntax (شكلها وطريقة كتابتها) الخاص باللغة وكيف تكتب وتستعمل أشياء مثل الـ loops, variables وما إلى ذلك وتسمى بالإنجليزية (basic fundamentals). وبعد ذلك تتعمق في تعلم اللغة ويمكنك اعتماد المواقع الرسمية للغات أو بعض المقاطع كخطة تساعدك على معرفة ما تتعلمه تاليًا.
قد يساعدك العمل على المسائل المنطقية على تطوير قدرتك في التعامل مع اللغة وتفكيرك "البرمجي". مثال: دراسة الـ data structures والخوارزميات المعروفة وطريقة التعامل معها.
بعد ذلك، ستبدأ في تعلم أساسيات المجال الذي تريد أن تعمله فيه.
ستحتاج محرر نصي (text editor) لكي تكتب النص البرمجي وتستهل التعلم.
(مثال: Visual Studio Code, Sublime text) وإن بدأت العمل على مشروع ما قد تفضل استخدام IDE ما؛
ففيه ميزات عديدة مثل تنقيح
النص الذي كتبته والتحكم
بالإصدار والكثير من الميزات. وبعض اللغات يجب عليك تثبيتها
على جهازك قبل البدء في استخدامها كما هو الأمر مع python
مثلًا.
شرح بعض
المفاهيم المهمة:
البرمجة
التركيبية – Modular Programming: هي
تقنية تستخدم في عديد من مجالات البرمجة وتكمن فائدتها في قدرتك على استخدام module (هو نص برمجي يحتوي على خوارزميات أو دوال
معينة يمكنك إعادة استخدامها في برامج أخرى بدون إعادة كتابتها بالكامل بل يكفي
تضمين النص (import) ومن ثم استخدام الخوارزمية) أو مكتبة معينة
(مجموعة من الـ modules)
وسط
العمل – Framework:
هي نوع من البرامج يسهل عليك استخدام لغة ما لإنشاء برنامج ما من خلال توفير
تقنيات جاهزة يسهل استخدامها من قبل المطور.
خوارزمية
– Algorithm: هي
مجموعة من الخطوات المنطقية لحل مسألة معينة. قد تبدو كلمة مرعبة لكنها تحمل معنىً
بسيطًا في الواقع. أمثلة على خوارزميات: خوارزميات البحث التي تستخدم في البحث عن
شيءٍ ما في مجموعة من البيانات. يحمل هذا النوع من الخوارزميات بعض الخدع المنطقية
لتسريع البحث وجعله أكثر كفاءة.
Data
structures: هو اسم يطلق على الطرق التي نهيكل بها
المعلومات بطريقة معينة. مثال: لديك خريطة من خلالها تستطيع أن تعرف اتجاهات الطرق
والأماكن التي يمكنك الذهاب إليها من المنزل والأماكن التي يمكنك الذهاب إليها من
المدرسة وهكذا دواليك. يمكنك استقراء هذه المعلومات وترتيبها بطريقة معينة أو أخرى
في جدول (مجرد مثال، ثمة العديد من الطرق لهيكلة البيانات) نسمي هذا الجدول في هذه
الحالة Data structure.
Competitive programmer: هو اسم يطلق على الشخص
الذي يستخدم البرمجة لحل مسائل منطقية ويتنافس ضد مبرمجين آخرين. يمكنك استخدام أي
لغة من اللغات الشهيرة.
بعض
النصائح:
لا تتعلم لغتين أو أداة ولغة أو أداتين في نفس الوقت لأن ذلك صعب ومشتت.
أدرس اللغة ثم الأداة التي تريد خطوة بخطوة ولا تدرس كل شيء في آن واحد.
هل يجب أن أكون جيدًا في مادة الرياضيات؟ نعم ولا. يختلف مستوى الرياضيات
الذي تحتاجه من مجالٍ إلى آخر. فمثلًا علم البيانات يعتمد بشكل أساسي على
الرياضيات بينما تطوير البرامج والويب لا يعتمد على الرياضيات ولا تحتاجه. لكن لا
تقلق يمكنك استدراك أي نقص في أي وقت.
حاول البحث قدر المستطاع عن الدروس والشروحات المجانية قبل أن تشترك في
دورة ما أو تصرف المال. الانترنت مليء بالمصادر المجانية استغلها.
روابط الدروس التي قدمتها لك ليست كافية وعليك البحث والقراءة بنفسك
والإبحار في المجال. لذا لا تعتمد عليها بشكل كلي.
لو لم تكن تدري ما المجال الذي تريد التخصص فيه أو لست مهتمًا بمجال ما
وتريد أن تبرمج ببساطة؛ أقترح عليك لغة python فهي سهلة للغاية ومتعددة المجالات ولغة مدعومة بشكل كبير من مجتمع
المطورين.
على النقيض، لغة C++ صعبة
نوعًا ما ولو لم تكن تريد أن تطور نظام أو برنامج ضخم لا أنصحك بتعلمها. ملاحظة:
بعضٌ ممن تعلمها يقول إنك ستجد تعلم أي لغة أخرى سهلًا للغاية بعد تعلم C++. ومن
مميزاتها أنها لغة جيدة جدًا لتطوير تطبيقات سطح المكتب.
تعلم استخدام command
prompt لتشغيل البرنامج الذي طورته
لأنها أداة مفيدة وستعلمك الكثير
يمكنك العودة للوثائق (documentations) لو نسيت شيئًا ما أو أردت أن تبحث عن معلومة ما
بخصوص شيءٍ ما يخص اللغة التي تتعلمها.
لو حاولت تشغيل البرنامج الخاص بك وظهرت لك رسالة خطأ ولم تفهم معنى
الرسالة يمكنك نسخه والبحث عن المقصد وكيفية إصلاح الخلل. يمكنك أيضًا البحث عن أي
تساؤل لك بواسطة محرك غوغل
لا تقلق من رسائل الأخطاء هي شيء طبيعي
لو علِق البرنامج الخاص بك في حلقة
لا متناهية (infinite loop)
استخدم Ctrl + c
لإيقافه ثم قم بإصلاح الخلل (هذا الاختصار يعمل على ويندوز ابحث عن الاختصار الخاص
بنظام التشغيل الخاص بك)
عليك أن تمارس البرمجة بشكل مستمر لتحافظ على مهارتك ولا تنسى اللغة التي تستخدمها.
ختامًا، أرجو أن تخبرني في حال وجود ملاحظات أو أخطاء في هذه التدوينة ولا مانع من السؤال في حال لم تفهم شيئًا ما. شكرًا على القراءة وأرجو كل التوفيق
الروابط:
بعض القنوات التي قد تكون مفيدة على يوتيوب
كل
ما يجب أن تعرفه عن تطوير واجهة المستخدم(frontend)
كل
ما يجب أن تعرفه عن تطوير الواجهة الخلفية(backend)
كيف
يبدو القسم التطبيقي من مقابلات العمل في غوغل
تطوير
برنامج من الألف للياء(ترجمة سيئة للعنوان، أعتذر)
(وجهة
نظر) لماذا python اللغة الأنسب للمستجدين
مواقع
للتمرن على مهارات حل المسائل المنطقية واستخدام الخوارزميات
مواقع
جيدة قد فيها دروس ودورات مجانية
تعلم البرمجة التنافسية
(competitive programming)
عذرا كيف يمكنني استخدام الخطوط ؟
ردحذف