الدليل الشامل لتعلم البرمجة باستخدام المصادر العربية

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

لأجل هذا تقدم الآلاف من الشباب العربي للدخول في المجال طالبين زيادة خبرتهم في لغات البرمجة المختلفة. لكن غالبًا أول ما يُصدمون به هو ضعف المصادر العربية المتعلقة بالبرمجة أو كونها خفية عصية على الإيجاد في أحد غياهب الإنترنت الحالكة.

سنُبحر اليوم في هذا المقال الطويل المفصّل حول تعلم البرمجة، لكننا سنفعل ذلك باستخدام المصادر العربية المتوفرة على الشبكة فقط. أي أننا لن نشير لأي دورة أو كتاب أو مقال باللغة الأجنبية.

ماذا سنتعلم في هذا المقال؟

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

إليك فهرس هذا المقال الشامل لتعلَمَ ما ينتظرك عند إكماله، سنعرج على جميع المواضيع التالية بالتفصيل:

  1. لماذا نتعلم البرمجة؟
  2. لماذا نتعلم البرمجة باللغة العربية؟
  3. قاموس المفاهيم والمصطلحات
  4. كيف سنستفيد من المراجع والمصادر في هذا المقال؟
  5. أساسيات علوم الحاسوب التي تحتاجها قبل تعلم البرمجة
  6. تعلم البرمجة مع بايثون
    1. لماذا نتعلم البرمجة مع بايثون؟
    2. تعلم أساسيات لغة البرمجة بايثون بالعربية
    3. تعلم الخوارزميات وهياكل البيانات
    4. تعلم تطوير الويب مع بايثون بالعربية
    5. تعلم علم البيانات مع بايثون بالعربية
  7. تعلم برمجة تطبيقات الهواتف
  8. تعلم تطوير تطبيقات سطح المكتب
  9. مجالات أخرى للبرمجة
  10. ما لا تغطيه المكتبة العربية عن تعلم البرمجة
  11. المهارات التقنية الإضافية لتعلم البرمجة
  12. ماذا بعد تعلم البرمجة؟
  13. خاتمة

لأي استفسار أو تعليق إضافي أرحّب بكل تعليقاتكم على المقال من مربع التعليقات في نهاية المقال. أنا أتحقق من التعليقات بصورة دورية لذلك في أي وقت أحببتم ترك تعليق أنا جاهز للرد على استفساراتكم إن شاء الله.

لماذا نتعلم البرمجة؟

هذا أوّل سؤالٍ علينا التأصيل له في بداية هذا المقال؛ لماذا نتعلم البرمجة؟ وما الدافع لتعلم البرمجة من بين كل المهارات الأخرى كالتصميم أو التدوين أو الكتابة؟

هناك الكثير من الدوافع العملية لتعلم البرمجة التي سنراها:

بناء التطبيقات والأنظمة والمشاريع

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

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

لا تحتاج أن تنظر بعيدًا، فغالبًا أنت لن تبرمج الفيسبوك أو التويتر القادم، لكن يمكنك أن ترى كيف يمكن للبرمجة – كمهارة – أن تساعدك على بناء أشياء رائعة سواءٌ كان لنفسك أو للآخرين.

تسمح لك البرمجة بـ:

  1. بناء مواقع الويب مختلفة، سواءٌ لك أو لمدرستك أو جامعتك أو شركتك أو أقاربك ومعارفك أو نشاطك التجاري. بل يمكنك أن تبني مواقع هي تبني مواقع ويب للآخرين.
  2. بناء تطبيقات الهواتف الذكية للأندرويد وiOS، وهذه إما تكون تطبيقات مجانية تضع بها إعلانات لتربح منها أو قد تكون تطبيقات مدفوعة. بعض هذه التطبيقات قد لا يستهدف الاستفادة المادية أصلًا مثل تطبيقات القرآن الكريم أو السنة النبوية وما شابه ذلك.
  3. بناء تطبيقات سطح المكتب لأنظمة ويندوز وماك ولينكس، وهذه قد تكون برامج محاسبة، برامج هندسية، برامج خدمية، برامج للشركات والمؤسسات، برامج للأنظمة الحساسة، برامج بسيطة لأتمتة بعض المهام… إلخ.
  4. برامج مبنية على الذكاء الاصطناعي، فإن كان لديك يوميًا مثلًا مجموعة من القرارات التي عليك اتخاذها حول أمرٍ ما، فيمكنك تسليم المهمة لنظام ذكاء اصطناعي متطور تبنيه ليقوم بالمهمة نيابةً عنك.
  5. برامج وأنظمة مؤتمتة لأداء المهام الروتينية الطويلة التي كنت تعملها يدويًا؛ مثل إدارة حسابات التواصل الاجتماعي لأحد الشركات أو المؤسسات، أو تصحيح أوراق آلاف الطلاب أوتوماتيكيًا.
  6. برامج وسكربتات تحليل البيانات، حيث يكون لديك الآلاف من مُدخلات البيانات المختلفة وتريد تحليلها واستخراج معلومات قيّمة منها لتُلهمك أنت أو صنّاع القرار الآخرين في موضوعٍ معيّن.
  7. حل المشاكل اليومية للشركات والمؤسسات المختلفة؛ مثلًا يمكنك أن تبرمج برنامج وظيفته أن يري ساعي البريد أقصر دورة كاملة ليسلكها بدلًا من الذهاب عشوائيًا إلى الزبائن لتسليمهم طرود البريد الخاصة بهم.
  8. غيرها الكثير جدًا من التصنيفات المختلفة للبرامج؛ يمكنك عمل برامج لكل شيء.

وأبسط استفادة من تعلم البرمجة هو أنها تسمح لك ببناء برامج وتطبيقات تساعدك أنت في حياتك اليومية؛ برامج أو سكربتات تسهّل عليك المهام الروتينية التي تفعلها أو تتيح لك بياناتٍ أو خدمات لم تكن قادرًا على بنائها من قبل.

والأهم من ذلك هو أنّ البرمجة عملية منطقية تعتمد على المنطق في الكثير من أجزائها، وتعلّمها يفتّق الذهن ويبقيه متقدًا قادرًا على تعلّم أي مهارة جديدة، وينمّي من مهارات التفكير لدى من يتعلّمها.

أي أنك حتى لو لم تنجح في استخدام البرمجة للعمل لدى شركات أخرى أو بناء مشاريعك العملاقة، فأنت مستفيد منها في كل الأحوال.

رواتب أعلى من المهن الأخرى

لن أشير لإحصائيات أمريكا وأوروبا حول البرمجة، فأنت كمواطن عربي لن يفيدك معرفة أن رواتب المبرمجين في أمريكا تبلغ كذا وكذا، لكنني سأشير إلى واقعنا العربي نحن.

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

المبالغ المادية التي يتقاضاها المبرمجون لا تتوقف عند الوظائف فقط، بل حتّى في مجال العمل الحر (Freelancing) فإنّ المبرمجين يتقاضون أرباحًا أكثر بكثير من مشاريع الكتابة أو التصميم أو التدوين وما شابه ذلك، وهذا جليٌ جدًا من مراجعة آخر المشاريع المتوفرة على منصة مستقل مثلًا. (وهي المنصة الأشهر للعمل الحر عربيًا).

فإمّا أن يعمل المبرمجون كموظفين في الشركات ويتقاضون رواتب ثابتة لقاء عملهم، أو يعملوا كمستقلين في مواقع العمل الحر ويتاقضون الأرباح بناءً على المشاريع التي يكملونها لكل عميل.

فرص أكبر للعمل عن بعد

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

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

ولهذا تجد الكثير من المبرمجين يلجؤون إلى العمل مع الشركات الأمريكية لكن عن بعد؛ حيث يتقاضون مبالغ أعلى من الأعمال المحلية كما يُدفع لهم بالدولار الأمريكي.

متعة في العمل

رواتب جيّدة وعمل من داخل منزلك، ما الذي قد يكون أفضل من ذلك؟

في الواقع هناك شيءٌ أفضل من ذلك وهو متعة البرمجة. جميع المبرمجين تقريبًا سيخبرونك أنهم يستمتعون جدًا بالبرمجة، ببساطة لأنهم يبنون أشياء ومشاريع حقيقية تمس أرض الواقع من داخل حواسيبهم الرقمية التي يعملون عليها بكل أريحية. إنهم يغيرون العالم من داخل غرفهم التي لا يخرجون منها سوى لأداء احتياجاتهم 🙂

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

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

لماذا نتعلم البرمجة باللغة العربية؟

السؤال الثاني الذي نحتاج أن نجيب عنه في المقال: لماذا نتعلم باستخدام المصادر العربية فقط دونًا عن الأجنبية؟

في الواقع هذا السؤال له شقّ تأصيلي فلسفي متعلق بعلم اللغويات وعلم الاجتماع. اللغة جزء من الهوية. أن يتعلم المرء شيئًا بلغةٍ غير لغته الأم ليس هو الوضع الطبيعي ولا الأصل الذي ينبغي أن يكون. تعلّم اللغات الأجنبية مفيد للتواصل مع الآخرين ونقل العلوم منهم أو إليهم، لكنه يجب ألا يكون وسيلة التواصل الأساسي في الحياة اليومية، والتعلّم جزء من ذلك.

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

يجب ألا نسأل أنفسنا لماذا نريد أن نتعلم باللغة العربية؟ التعلم باللغة العربية هو الأصل، فنحن عرب ولغتنا عربية وكل من نتحدث معه عربي، فلماذا نتعلم باللغة الأجنبية؟ ذاك ينبغي أن يكون السؤال.

تُعلّم الجامعات الغربية جميع طلابها بلغاتها الأم، ومن النادر أن تجد جامعاتٍ تعلم بلغاتٍ غير لغاتها الأم سوى في بلدان العالم المُتراجع. تعليم الطلاب أي شيء بلغتهم الأصلية هو مطلب فكري وأممي وديني وقومي ووطني، ببساطة لأن اللغة هي جزء من كل هؤلاء.

الأمة التي تتعلم بلغة الآخرين لن تصل يومًا ما إلى مكانتهم.

قاموس المفاهيم والمصطلحات

أثناء قراءتك لهذا المقال بل وأثناء رحلتك في تعلّم البرمجة عمومًا ستمر عليك الكثير من المصطلحات والمفاهيم الجديدة التي لم تكن تعرفها من قبل.

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

سنذكر هنا الآن في هذا القسم بعض المصطلحات والمفاهيم الضرورية أثناء تعلم البرمجة، وإننا نذكرها هنا لأنه لن يكون من المناسب الإشارة مباشرةً إلى مصادر تعلّم برمجة الواجهات الخلفية وأنت لا تعرف ما هي الواجهة الخلفية للتطبيقات أساسًا.

لغة البرمجة (Programming Language) هي اللغة الخاصّة التي يكتب بها المبرمجون البرامج؛ فالحواسيب لا تفهم اللغة العادية التي نتحدث بها بل تفهم لغة الأصفار والواحدات فقط (Binary Language أو اللغة الثنائية) مثل 010101010، وبما أننا كبشر لا يمكننا أن نفهم هذه اللغة كذلك فنحن بحاجة إلى لغة وسيطة نكتب البرمجيات بها، ثمّ تُنقل هذه اللغة إلى اللغة الثنائية التي تفهمها الحواسيب.

أي أن المبرمج يستعمل جُمَل وكلمات اللغة البرمجية لكتابة البرامج التي يريدها كشفرة مصدرية (Source Code)، ثم يحوّلها برنامج متخصص بهذه اللغة إلى لغة الآلة لتتمكن من القيام بالمطلوب.

تبرز هنا عائلتان من لغات البرمجة؛ لغات البرمجة المفسَّرة (Interpreted Programming Languages) ولغات البرمجة المصرَّفة (Compiled Programming Languages). والفرق بينهما هو أن الأولى لا تتطلب عملية البناء من المصدر، بل يمكن للمبرمج إعطاء البرنامج مباشرةً للمستخدمين كملف نصي عادي وسيتمكنون من تنفيذه على أجهزتهم، بينما الثانية تحتاج استخدام برنامج مصرّف للبناء من المصدر أولًا لكل نظام تشغيل من المطلوب أن يعمل عليه البرنامج. الأولى غالبًا ما تكون أسهل للتعامل والتعلّم والاستعمال ولكن الثانية أسرع من ناحية الأداء وأكثر تحكمّا بموارد نظام التشغيل المطلوبة. بايثون وروبي وPHP هي لغات تفسيرية بينما سي وC++‎ وC#‎ هي لغات برمجة تجميعية.

الخوارزميات (Algorithms) هي مجموعة من الإجراءات المنطقية المتسلسلة التي تهدف لتغيير مجموع من المُدخلات (Input) إلى مخرجات معيّنة (Output) مطلوب العثور عليها.

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

هناك خوارزميات مختلفة لكل شيء؛ لترتيب المصفوفات أو البحث عن المحتوى أو حل المشكلات الرياضية أو العثور على أقصر مسار ممكن لموظف البريد …إلخ كل المهام المختلفة لها خوارزميات مختلفة لتحل المشاكل المرتبطة بها.

تختلف الخوارزميات المتعددة في:

  • سرعتها وقدرتها على إيجاد الخرج المطلوب.
  • استهلاكها للموارد من مساحة تخزين وقوّة معالجة أثناء عملها.
  • سهولتها أو تعقيدها على المبرمج من أجل تضمينها.

ولهذا بعض الخوارزميات أفضل من الأخرى في بعض النواحي.

هياكل البيانات (Data Structures) هي أساليب التخزين والتعامل مع البيانات داخل الحواسيب. فالبيانات يمكنك أن تحفظها مثلًا على شكل قائمة (List) أو جدول أو شجرة (Tree) أو بأشكال أخرى مختلفة، وتفيدك هذه الهياكل المختلفة في العديد من الحالات، فقد تسهل عليك حل مشكلة معينة أو تجعل الخوارزميات المرتبطة بالمشكلة تعمل أسرع مما كانت تعمل عليه من قبل.

الخوارزميات وهياكل البيانات مهمة جدًا في البرمجة وعليك أن تتأكد من فهمك الكافي لهما قبل المضي قدمًا. فائدة تعليمك هياكل البيانات والخوارزميات هي إعطاؤك ما يمكنك من خلاله برمجة ما تحتاجه منها في برامجك ومشاريعك. أي أنك ستتعلم أساسيات هذه العلوم وتبرمج مثالًا أو مثالين منها، ثمّ ببساطة تنتقل للعلوم الأخرى التي بعدها.

مثلًا في مجال الخوارزميات، لدينا خوارزميات معروفة للبحث مثل البحث الثنائي (Binary Search) والعشرات غيرها. لدينا كذلك خوارزميات متكررة للبحث (Recursive Search Algorithms). الآن هل عليك تعلم جميع هذه الخوارزميات؟ لا، يكفيك تعلم اثنتين من كل تصنيف وبرمجتها بنفسك لتفهم المبدأ العام لتلك التصانيف من الخوارزميات، فقط.

بعد أن صرت تفهم الآن ما هي الخوارزميات العادية للبحث وما هي الخوارزميات المتكررة للبحث وكيف تعمل فمستقبلًا سيكون من السهل عليك نسبيًا برمجتها مرة أخرى (أو حتى برمجة خوارزميات أخرى من نفس العائلة) متى طُلب منك ذلك في سوق العمل.

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

السكربتات (Scripts) هي برمجيات صغيرة جدًا وظيفتها أداء مهمة معينة، تكون غالبًا في ملف واحد فقط. لا نسمي السكربتات برامج لأنه وإن كانت السكربتات عملاقة أو تقوم بعدة أعمال إلا أن الفرق بينها وبين البرامج هو أنها مصممة على عجالة وبطريقة مباشرة لأداء مهام محدودة فقط وليست متكاملة كالبرامج العادية، بل شيء سريع ليقوم بالمهمة المحددة فقط بأسهل وأسرع طريقة (Quick and dirty). أي أن السكربتات هي برامج سطر أوامر سريعة لأداء المطلوب فقط.

الواجهة الأمامية (Frontend) هي ببساطة كل ما يتفاعل معه المستخدم الروتيني للبرمجيات من عناصر ورسوم وصور وأي محتوى بصري في الطرف المواجه للمستخدم.

الواجهة الخلفية (Backend) هي البنية التحتية المصممة لأخذ مُدخلات المستخدم وتحركاته وطلباته وإنتاج المخرجات المطلوبة ومعالجتها، ببساطة هي النظام الحقيقي الذي يحسب العمليات ويقوم بالمهام المطلوبة.

لنفرض أنك تتعامل مع موقع جوجل على Google.com، حينها الواجهة الأمامية هي ببساطة ما تراه أنت كمستخدم أمامك من مربع البحث وشعار جوجل والألوان المختلفة للترويسة وتصميم الصفحة عمومًا، بينما الواجهة الخلفية هي النظام الداخلي لموقع جوجل المصمم لعرض نتائج البحث لك بسرعة وسهولة من مختلف مواقع الويب عندما تبحث عن شيء معين. يمكن أن تشبه الواجهة الأمامية كذلك بواجهة ومنظر السيّارات التي تراها حولك، بينما الواجهة الخلفية ستكون شيئًا مثل محرّك السيارة الذي يقودها ويوجهها.

تطوير الويب يشتمل على المبدأين، ونسمّي المطورين الذين يعملون على المجالين معًا بمطوري المكدّس الكامل (Full-Stack Developers).

إطار العمل (Framework) هو مجموعة من الأدوات والمكتبات المحزّمة مع بعضها البعض لتسهيل تطوير البرمجيات بدلًا من إعادة اختراع العجلة في كل مرة. فمثلًا إذا كنت تبرمج العديد من البرمجيات فستلاحظ أنّك تكرر كتابة الكثير من الأجزاء في العديد من البرامج المختلفة، وأُطُر العمل هي ببساطة تجميعٌ لهذه الشِفرات البرمجية والأدوات والمكتبات والأساليب المستعملة في أكثر المشاريع لتسهيل بناء المشاريع المستقبلية. هناك أُطُر عمل مختلفة بمعظم لغات البرمجة المتوفرة.

كيف سنستفيد من المراجع والمصادر في هذا المقال؟

حسنًا، بعد أن انتهينا الآن من التأصيل الفكري لهذا المقال يمكننا أن ندخل في الموضوع.

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

قد نشير في بعض الأحيان إلى سلاسل كاملة على اليوتيوب أو فيديوهات مطوّلة جدًا، وهذه لا تحتاج أن تشاهدها بالكامل بل تشاهد منها ما يتعلق بالقسم المحدد فقط، ويكفيك فهم معظم محتوى المادة والفكرة الأساسية لها قبل الانتقال إلى ما يليها.

اعتمدنا منهجية صارمة في اختيار المواد التي سنرشّحها لك؛ مثل أن تكون:

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

بعض المحتوى قد يكون إثرائيًا؛ أي أنّك غير مطالب بمشاهدته بالكامل لكننا نستحسن مشاهدته للحصول على المزيد من المعلومات أو التوسع في المجال.

بعض هذه المواد قد يكون مجانيًا وبعضها قد يكون مدفوعًا، فنحن هدفنا الإشارة لأهم المواد العربية المتعلقة بالبرمجة وليس فقط المجاني منها.

أساسيات علوم الحاسوب التي تحتاجها قبل تعلم البرمجة

لتعلم البرمجة أنت بحاجة إلى بعض العلوم الأساسية التي عليك تعلّمها قبل الشروع بتعلم البرمجة. لا يمكنك تعلم البرمجة مثلًا وأنت لا تفهم كيف تعمل الحواسيب أو ما هي الشفرة الثنائية (Binary Code). وهناك عددٌ من العلوم الأخرى التي ستحتاجها قبل تعلم البرمجة.

يمكننا أن نقسم هذه الأساسيات إلى:

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

للبدء في ذلك هناك هذه الدورة الكاملة من طرف الإخوة في قناة “نقش” على يوتيوب، وهي ستعلّمك ما يتعلق بأساسيات علوم الحاسوب والمنطق والبوابات المنطقية والأنظمة العددية:

كمحتوى إثرائي إن لم تكن المادة كافية لك فيمكنك مراجعة هذه السلسلة على يوتيوب من 26 فيديو حول تصميم المنطق الرقمي.

مقالات للقراءة:

يمكنك كذلك الانضمام إلى دورة علوم الحاسوب المقدمة من طرف أكاديمية حسوب، وهي تكلّف 160$ مع شهادة، لكن حاليًا مدتها 35 ساعة وهي شاملة جدًا لكل ما قد تحتاجه وأكثر. ميّزتها أنها تضمن لك استرداد المال خلال 6 أشهر من خلال العمل الحر كما أنه هناك متابعة وتحديث مستمر للدورة أثناء رحلة تعلمك.

تعلم البرمجة مع بايثون

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

لماذا سنتعلم البرمجة مع بايثون من بين كل اللغات؟

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

  • لغة بايثون هي الثالثة من ناحية عدد المستودعات البرمجية المفتوحة على موقع GitHub المتخصص بإدارة المشاريع البرمجية [3]، كما تُدرّس لغة بايثون في معظم جامعات العالم التي تعلّم تخصص علوم الحاسوب، وبالتالي هي لغة رائدة ومشهورة.
  • إمكانية استخدام بايثون في مجالات واسعة على عكس اللغات الأخرى، مثلًا يمكنك استخدام بايثون لتحليل البيانات وتطوير برامج الويب وسطح المكتب وفي اختبارات الأمان (كسكربتات) والحوسبة العلمية وتطوير الألعاب والذكاء الاصطناعي وتعلّم الآلة… والكثير من الأشياء الأخرى، على عكس لغات مثل جافاسكربت أو جافا.
  • لغة سهلة التعلم جدًا، فالتعابير اللغوية الخاصّة بها واضحة ومرنة وليست صعبة على المبتدئين، أشبه بكتابة اللغة الإنجليزية.
  • وجود مجتمع هائل حولها من مستخدمين ومطورين وشركات ومؤسسات ومكتبات ومشاريع برمجية يمكنك الاستفادة منهم.
  • ببساطة بايثون هي اللغة البرمجية العصرية حاليًا ولذلك تعلّمها هو أفضل من تعلّم غيرها.

يمكنك مع بايثون:

  • الدخول في مجال الذكاء الاصطناعي وفهمه، وتعلّم بعض أُطر العمل الشهيرة التي تعمل في هذا المجال مثل PyTorch.
  • الدخول في مجال تحليل البيانات وفهمها. ستُعطى غالبًا حجمًا كبيرًا من البيانات ووظيفتك أن تستخرج تقارير ومعلومات مهمة ومفيدة منها. ستتعامل هنا مع أشياء مثل Pandas, Numpy, DataBricks, Spark وغيرها.
  • الدخول في مجال تطوير الويب (مواقع الويب)، وهنا ستحتاج تعلم أحد إطاريّ العمل الشهيرين Django أو Flask. سيمكنك هذا من برمجة تطبيقات الويب كيفما تحب وتريد.
  • يمكنك كذلك تعلّم تطوير تطبيقات سطح المكتب إن كان هذا ما تحب (ويندوز، ماك أو لينكس) وستحتاج تعلم أحد المكتبات الرسومية مثل Qt أو GTK أو TK.
  • كتابة سكربتات صغيرة تساعدك في عمليات الأتمتة أو اختبار الاختراق.
  • عمل الكثير من الاستخدامات الأخرى.

تعلم أساسيات لغة البرمجة بايثون بالعربية

المكتبة العربية غنية بالمصادر التعليمية حول لغة بايثون (كأساسيات ومرحلة متوسطة على الأقل).

إننا ننصح أولًا بقراءة كتاب “البرمجة بلغة بايثون” الصادر عن أكاديمية حسوب في 400 صفحة، وهو يغطي جميع الأساسيات المطلوبة – وأكثر – لتعلم البرمجة بلغة بايثون. الكتاب مجاني تمامًا ويمكنك تحميله من الرابط السابق. الكتاب يستعمل بايثون 3 بالفعل ولذلك لا حاجة لأن تقلق من موضوع إصدارات بايثون المختلفة.

إن كنت تفضّل المقالات العملية فيمكنك أن تراجع قسم بايثون على موقع هرمش والذي يحتوي العشرات من المقالات المختلفة مع أمثلة عملية تطبيقية.

كمصدر إثرائي يمكنك الرجوع إلى موسوعة حسوب وتوثيقها الكامل عن بايثون، حيث أنه مترجم إلى العربية عن التوثيق الرسمي للغة بايثون.

لا تصرف الكثير من الوقت على الأساسيات، شهران أو 3 أشهر من التعلم المستمر بالكثير ستكون كافية.

تعلم الخوارزميات وهياكل البيانات

لفهم الخوارزميات وهياكل البيانات فإننا نرشح الدورة التالية بلا منازع، وهي دورة من قناة “TheNewBaghdad” على يوتيوب تشرح بشكل تفصيلي كل ما تحتاجه (مجانية تمامًا). لكن لاحظ أنّ اللغة البرمجية المستعملة للأمثلة هي جافا، يمكنك تخطي الأمثلة العملية لتضمين تلك الخوارزميات بجافا والتركيز على الفيديوهات المتعلقة بالخوارزميات وهياكل البيانات تحديدًا.

حاول برمجة ما تعلمته من الخوارزميات وهياكل البيانات باستخدام بايثون.

كمحتوى إثرائي، هناك العديد من المقالات النصية على موقع “هرمش” حول الخوارزميات وهياكل البيانات. ننصح بقراءتها والاستفادة منها: الخوارزميات، تمارين عملية مختلفة.

كمصادر إثرائية، يمكنك الرجوع إلى موسوعة حسوب فيما يتعلق بالخوارزميات وأنماط التصميم (Design Patterns)، وهي مصدر ثري موسوعي عن كل ما يتعلق بهما بشكل عالي الجودة: الخوارزميات، أنماط التصميم (لكن لاحظ أن المحتوى قد يستخدم لغات برمجة غير بايثون، فما يهمك أنت هو فهم الفكرة الأساسية بعيدًا عن لغة البرمجة بالتحديد).

تعلم تطوير الويب مع بايثون

لتطوير الواجهة الأمامية فأنت تحتاج إلى معرفة بلغات الويب؛ وهي جافاسكربت وHTML وCSS. لتطوير الواجهة الخلفية يمكنك استخدام لغة بايثون مع أي إطار عمل شهير مثل بايثون وDjango.

فلاسك (Flask) وجانغو (Django) هما أشهر إطارين لتطوير أنظمة ومواقع الويب بلغة بايثون، وهما مجانيان ومفتوحا المصدر ويمكنك تثبيتهما بسهولة من مواقعهم الرسمية. لا تحتاج تعلم جانغو وفلاسك معًا فهذا سيكون كثيرًا عليك وأكثر مما تحتاجه، الأفضل هو أن تتعلم واحدًا منهما فقط ثمّ تنتقل إلى الآخر (وننصح شخصيًا بتعلم فلاسك أولًا فهو أسهل وأسلس للتعامل وأبسط).

بخصوص الواجهة الأمامية فعليك تعلم عدة أشياء:

  • HTML: عليك أن تفهم 5 HTML بصورة جيدة فهي أساس بناء مواقع وأنظمة الويب الجيدة، ولن تتمكن من بناء ما تريده إن لم تكن تفهمها. لكن لحسن حظّك أنّ تعلمها سهل ولن تحتاج لأكثر من بضع أساسيات فيها. ننصح بهذه القائمة من الفيديوهات على أكاديمية الزيرو حول HTML ففهي كل ما تحتاجه. كمحتوى إثرائي يمكنك قراءة كتاب “نحو فهم أعمق لتقنيات HTML5” الصادر عن أكاديمية حسوب، وهو كتابٌ مفصل للغاية من عدة مئات من الصفحات.
  • CSS: عليك طبعًا أن تمتلك معرفة جيدة في CSS كذلك من أجل تصميم صفحات جميلة للمستخدمين. لا تحتاج أن تفهم مبادئ التصميم الأخيرة فيها ولا آخر صيحات تصميم المواقع لكنك بحاجة إلى القدرة على تصميم صفحات ويب لا تبدو كموقع قادم من 1998م. هذه القائمة الطويلة من الفيديوهات على أكاديمية الزيرو عن CSS هي ما ننصح به. كمحتوى إثرائي يمكنك قراءة كتاب “التحريك عبر CSS” وهو كتاب مُترجم.
  • جافاسكربت: لا تحتاج الكثير من المعرفة في جافاسكربت، بل في الواقع يمكنك بناء الكثير من مواقع وأنظمة الويب دون استخدام سطرٍ واحد من جافاسكربت. لكنك ستحتاج استخدامها في الكثير من الأحيان، ولا تحتاج في ذلك إلى تعلم شيءٍ أكثر من الأساسيات فيها. أكاديمية الزيرو لديها سلسلة فيديوهات كاملة عن جافاسكربت وتعلّمها.

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

مواد إثرائية للقراءة والاطلاع:

جافاسكربت يمكن استخدامها لبناء الواجهة الأمامية والواجهة الخلفية كذلك، حيث أنه توجد لغات وأُطُر عمل وأدوات لاستخدام جافاسكربت لبناء تطبيقات الويب والهواتف، مثل Node.js وReact وReact Native. إن كنت مهتمًا بالمجال فيمكنك العروج على دورة أكاديمية حسوب حول جافاسكربت.

تعلم تحليل البيانات مع بايثون

تحليل البيانات (Data Analysis) هي من أكثر الوظائف الرائجة حاليًا، ومن أكثرها درًا للمدخول المادي كذلك. علم تحليل البيانات يشمل:

  • إنشاء وتوليد البيانات من مصادر مختلفة متوفرة حول موضوعٍ معين.
  • معالجة وتنظيم وتنظيف البيانات قبل إدخالها في مرحلة التحليل.
  • تحليل البيانات واستخراج أي معلومات أو تقارير أو معطيات مفيدة منها.
  • عرض البيانات على شكل تقارير تفاعلية مفيدة لصنّاع القرار.
  • تخزين البيانات ومشاركتها بهيئة مناسبة تتيح الاستفادة منها أو البناء فوقها مستقبلًا.

كل ما سبق يمكن إنجازه ببايثون بالطبع، ولدينا مجموعة من الأدوات المناسبة لذلك:

  1. Jupyter: منصة إنشاء مستندات تفاعلية تحوي الشفرة البرمجية الكاملة بطريقة منظمة وجميلة وقابلة للتحرير والمشاركة تشبه مستندات جوجل. جوبيتر – على حد علمي – هو من أكثر الوسائط شيوعًا في الحوسبة العلمية.
  2. Pandas: مكتبة شهيرة لتحليل البيانات ببايثون، حيث يمكن استخدامها لأداء جميع الخطوات السابقة التي ذكرناها.
  3. Numpy: مكتبة شهيرة أخرى متخصصة بالحوسبة العلمية والعمليات الرياضية البسيطة والمعقّدة. قد تحتاج استخدامها بشكلٍ محدود من فينةٍ لأخرى في مشاريعك.
  4. Matplotlib: مكتبة معروفة للرسم البياني ببايثون، ستحتاجها لإنشاء رسوم بيانية من نتائجك بمجرد أن تنتهي من توليدها.
  5. Scikit-Learn: مكتبة للذكاء الاصطناعي وتعلم الآلة ببايثون.
  6. Apache Spark: نظام معالجة متوازي للبيانات الضخمة (Big data) والمعالجة التشاركية، ليس مجرد مكتبة بايثون بل هو مشروعٌ منفصل، لكن يمكن استخدامه مع بايثون كذلك.
  7. هناك مكتبات متعددة عديدة أخرى، سواءٌ لتعدين البيانات (Data Mining) أو لمعالجة البيانات أو توزيعها أو عرضها… إلخ، وستكتشفها بنفسك مع الوقت. (تعدين البيانات عملية متقدمة تنضوي على جمع البيانات وتنظيفها وتصنيفها وتحليلها ثم الخروج بمعلومات جديدة يمكن الاستفادة منها).

أنصحك بمشاهدة هذا الفيديو السريع لترى ما يمكن لمكتبات بايثون أن تفعله:

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

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

مواد إثرائية أخرى للقراءة والاطلاع:

بخصوص تعلم الآلة (Machine Learning) فلن نغطّيه في هذا المقال لأن تعلم الآلة يحتاج أكثر من مجرد فيديوهات أو كتاب لتعليمه؛ فأنت بحاجة إلى أخذ مساقات كاملة عن الجبر الخطّي (Linear Algebra) وعلم الإحصاء (Statistics) ونظرية الاحتمالية (Probability Theory) وفهم جيد للرياضيات (التفاضل والتكامل) قبل أن تفكر في ولوج مجال تعلّم الآلة، وحتى بعد أن تمتلك هذه الأساسيات فإن تعلم الآلة مع بايثون (أو غيرها) ليس بالأمر السهل والمصادر العربية حوله شحيحة حاليًا. لذلك فتعلم الآلة أمرٌ خارجٌ عن قدرة معظم قرّاء هذا المقال ولهذا لم نشمله. معظم من يمارسون هذا العلم يدرسونه أكاديميًا حصرًا.

يمكنك عمومًا الاطلاع على كتاب الذكاء الاصطناعي من أكاديمية حسوب للحصول على فهم عام للمجال، وهو كتاب مجاني.

تعلم برمجة تطبيقات الهواتف

سنخرج الآن من عباءة بايثون ونلبس عباءاتٍ أخرى.

ذلك أنّ بايثون ليست لغةً جيدة لبرمجة تطبيقات الهواتف الذكية (أندرويد وiOS)، فهي غير مصممة لهذا الهدف والأدوات التي تسمح بذلك غير عملية بنفس اللغات الأخرى مثل سويفت أو جافا أو لغات الويب. لا يوجد أي مصادر عربية متعلقة بهذا الموضوع حتّى.

أشهر أنظمة الهواتف الذكية حاليًا هي أندرويد من جوجل وiOS من شركة آبل، وبالتالي أنت غير مضطر للتفكير حيال الأنظمة الأخرى فهي لا تشكل أكثر من 1% من حجم الاستخدام. لكن هناك معضلة فيما يتعلق ببناء التطبيقات على هذه الأنظمة وهي أنها أنظمة مختلفة من شركات مختلفة؛ وبالتالي نفس البرنامج لن يعمل على ذاك النظام إلا باستخدام لغات وأدوات معيّنة.

لبرمجة تطبيقات الهواتف المحمولة هناك أسلوبان رئيسيان لذلك: التطبيقات الأصيلة والتطبيقات الهجينة.

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

برمجة التطبيقات الهجينة أو ما يعرف بـHybird Applications، وهي تطبيقات مكتوبة بنفس الشفرة البرمجية لكن تعمل على جميع الأنظمة، ذلك أنها تستعمل لغات الويب (جافاسكربت وHTML وCSS) ولذلك من الأسهل فعليًا تشغيلها على مختلف أنظمة التشغيل فهي مجرد تطبيقات تعمل ضمن نافذة متصفح مضمّنة. لكن أداؤها أضعف كما أنها محدودة أكثر من التطبيقات المبرمجة خصيصًا لكل نظام تشغيل. تستعمل هذه التطبيقات طبقة وسيطة لتجعلها قابلة للعمل على أنظمة التشغيل المختلفة.

يمكنك معرفة المزيد عن أنواع تطبيقات الهواتف والفروقات بينها من الفيديو التالي:

ما هي التقنيات المتوفرة لتطوير تطبيقات الهواتف؟

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

  1. Flutter: هي في الواقع أداة تطوير برمجيات (Development Kit) لتطوير الواجهات الأمامية للتطبيقات، وصدر الإصدار 2.0 منها البارحة فقط (من تاريخ نشر هذا المقال) والذي صار يسمح باستخدامها على ويندوز وماك ولينكس والويب وأندرويد وiOS، وبالتالي فعليًا يمكنك استخدامها لبرمجة نفس واجهة التطبيق على مختلف هذه المنصات. فلاتُر ليست لغة برمجة بل هي أداة تطوير للواجهات الأمامية (Frontend) للتطبيقات، أي أنها تسمح لك ببرمجة جانب العميل (Client-side) بسهولة على مختلف أنظمة التشغيل، لكن لغة برمجة الواجهة الخلفية تكون بلغة برمجية أخرى تختارها أنت. ميزة فلاتُر هي أنها لا تستعمل طبقة وسيطة مع نظام التشغيل الذي تعمل عليه؛ وبالتالي الأداء متطابق جدًا مع التطبيقات الأصيلة التي بُرمجت خصيصًا لتعمل على نظام التشغيل ذاك، كما أن عملها على مختلف أنظمة التشغيل يسمح لك كمبرمج بكتابة شفرة برمجية واحدة بدلًا من التعامل مع أدوات عمل مختلفة.
  2. Cordova: بيئة تطوير تطبيقات هجينة مكتوبة بلغات الويب (HTML وجافاسكربت وCSS)، فإذا كنت متضلعًا بلغات الويب هذه فيمكنك بسهولة تعلم كوردوفا لبرمجة تطبيقات هواتف تعمل على أندرويد وiOS. يمكنك برمجة نفس التطبيق مرة واحدة فقط عبر كوردوفا وستجده يعمل على كافة أنظمة التشغيل، فهي مجرد تطبيقات ويب تعمل ضمن نافذة متصفح.
  3. Ionic: بيئة تطوير تطبيقات هجينة أخرى لتطوير تطبيقات تعمل على مختلف أنظمة التشغيل بلغات الويب، لكنها تركز أكثر على جافاسكربت وأُطُر العمل الخاصّة بها مثل Vue و React و Angular. فإذا كنت من محبي جافاسكربت وأدواتها فيمكنك استعمال Ionic لتطوير تطبيقات الهواتف الذكية. آيونيك مبني على node.js على شكل وحدة (Module) يمكنك تثبيتها.
  4. React Native: منصة تطوير تطبيقات بلغة جافاسكربت، لكن ميّزتها عن البقية هي أنّ التطبيقات التي تبرمجها بإطار العمل React مُترجمة إلى الواجهات البرمجية الأصيلة الخاصة بنظام التشغيل (Native APIs)، أي أنه لا يوجد هناك نافذة عرض ويب مضمّنة لتشغيل التطبيق أو طبقة وسيطة، بل مكتبات نظام التشغيل نفسها مباشرةً تعمل مع التطبيق، وهذه ميزة له فوق الخيارات الهجينة الأخرى. يعمل بسلاسة مع إطار React لبناء الواجهة الأمامية للتطبيقات.
  5. اللغات البرمجية الأصيلة: جافا على أنظمة أندرويد وسويفت (Swift) هما اللغتان الأكثر شيوعًا لتطوير التطبيقات الأصيلة (Native Apps). ستحتاج إلى تطوير إصدارين من تطبيقك لهذين النظامين وأن تتعلم اللغتين معًا إن أردت استهدافهما سويةً. لكن يمكنك إن أردت البدء بتعلم برمجة جافا مع الأندرويد فهو يسيطر على نحو 85% من سوق الهواتف الذكية وبالتالي أنت تتعلم الخيار الأكثر شيوعًا هنا. لكن هذه الموضة آخذة بالتلاشي تدريجيًا والبرمجة تنتقل للأدوات واللغات والبيئات متعددة المنصات (Cross-platform) بدلًا من برمجة التطبيقات الأصيلة لكل نظام تشغيل على حدى.
  6. أدوات أخرى: سوق الهواتف الذكية مربح جدًا لهذا تجد من هب ودب يدخل فيه ويعرض أداته البرمجية الجديدة للناس. هناك أدوات قادرة على استخدام حتى PHP لتطوير تطبيقات الهواتف، وهناك أدوات أخرى للبرمجة ببايثون وغيرها، لكن هذه الأدوات غير شائعة وليس مستحسنة بسبب الكم الكبير من الطبقات الوسيطة التي تضعها بين تطبيقك وبين نظام التشغيل، وبسبب أن مجتمعها صغير جدًا مقارنةً بّالأدوات الأخرى التي استعرضناها سابقًا. لا تنسى أن معظم الهواتف محدودة الموارد من معالج وذاكرة عشوائية ومساحة تخزين وليست كأجهزة الحواسيب أو سطح المكتب.

كيف أختار بين هذه الأدوات والبيئات وما هو الأفضل؟

لعل هذا هو السؤال الأهم، لكن الإجابة هي أنّ الأمر يعتمد عليك بالكامل، فلا يوجد أفضل مطلقًا. إذا كنت بالأساس مبرمج جافاسكربت وتستعمل React مثلًا على تطبيق الويب الخاص بك فحينها من المناسب جدًا أن تذهب إلى React Native، بينما إن كنت جديدًا على الساحة وتريد فقط تطوير تطبيق للأندرويد وiOS بسرعة بعيدًا عن جافاسكربت فحينها Flutter خيار مناسب لك لدخول المجال.

المنصات الهجينة قد تكون مناسبة لك كذلك إن كانت فكرة تطبيقك بسيطة أو هي مكتوبة بالأساس بلغات الويب، حينها ستكون كوردوفا وآينويك مناسبتين لك.

المقصود هو أنه عليك تحديد مسارك وما ترغب بفعله أنت في المستقبل؛ هل تريد فقط أن تنتج تطبيقات هاتف محمول مثلًا (دون أي نوع آخر من التطبيقات)؟ أم هل تريد أن تتعلم لغة واحدة تنتج بها تطبيقات خادوم وتطبيقات سطح مكتب وتطبيقات هواتف…؟ أم هل تبحث عن أقصر طريق لبرمجة تطبيق هاتف محمول يدر عليك ربحًا سريعًا؟ كل ذلك عائدٌ لك.

المصادر العربية لتعلم برمجة تطبيقات الهواتف

الآن وصولًا إلى المصادر العربية المتعلقة بتطوير تطبيقات الجوال، لدينا:

  1. سلسلة تطوير تطبيقات الهواتف مع Flutter من الأخ محمد سعودي على يوتيوب؛ وهي فيديوهات قيّمة مشروحة بصورة جيدة، لكن خذ بعين الاعتبار أنها مبنية على الإصدار 1.x من فلاتُر ولهذا قد يكون هناك اختلاف بينها وبين الإصدار 2.x الذي صدر هذا الأسبوع، لكنها مفيدة في كل حال فهي ستعلمك نفس الأساسيات وطريقة العمل. هناك فيديو آخر مدته 3 ساعات أنشأه الأخ أحمد أبو الذهب على يوتيوب ليشرح فيه فلاتُر كذلك.
  2. لأجل Ionic، هناك سلسلة على اليوتيوب من المهندس محمد عيسى تشرح تطوير تطبيقيّ أندرويد وiOS باستخدام المنصة من الألف إلى الياء، بالإضافة إلى استخدام Firebase كواجهة خلفية (Backend). هناك دورة أخرى من W3Coders بالعربية على يوتيوب يمكن الاطلاع عليها.
  3. لأجل كوردوفا، للأسف المصادر العربية شحيحة فيها والدورات المتوفرة قديمة جدًا. المادة الوحيدة التي يمكن الاعتماد عليها هي التوثيق كامل المترجم للعربية على موسوعة حسوب، لكنك لن تجد محتوى مرئي جيد بالعربية باستثناء دورة مدفوعة من أكاديمية حسوب عن تطوير تطبيقات الجوال باستخدام تقنيات الويب.
  4. لأجل React Native، للأسف كذلك ليس هناك دورة عربية مكتملة حولها، لكن هذه الدورة تغطي أساسياتها إلى حدٍ ما. أما React نفسه كإطار عمل فهناك العديد من الدورات له مثل دورة GoArabGo ودورة Unique Coderz Academy. هناك توثيق إثرائي بالعربية حول React على موسوعة حسوب.
  5. لأجل البرمجة الأصيلة على أندرويد، هناك دورة حديثة من محمد عيسى على يوتيوب حول استخدام جافا لتطوير تطبيقات أندرويد. كمحتوى إثرائي نصّي عن جافا هناك هذه المقالات على موقع هرمش.
  6. لأجل البرمجة الأصيلة على iOS، هناك دورة حديثة من أنس موماني على يوتيوب تشرح أساسيات استخدام سويفت لبناء تطبيقات iOS. وقد قدّم المهندس محمد عيسى كذلك دورة عن Swift وبرمجة تطبيقات iOS السنة الماضية.

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

تطوير تطبيقات سطح المكتب

تعلم البرمجة

وصلنا الآن إلى واحدٍ من أكثر المجالات أهميةً ألا وهو مجال تطبيقات سطح المكتب (Desktop Applications).

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

فمثلًا بايثون تعمل على جميع أنظمة سطح المكتب، لكنك ستحتاج مكتبة تطوير رسومية (Graphical Development Kit) لتتمكن من تطوير الواجهات الرسومية التفاعلية (كالنوافذ والأزرار وغيرها من العناصر الرسومية) وهذا مهم لأن بايثون – كلغة برمجة – لا تحتوي هذه المكتبات ضمنها، بل هي أمور خارجية. وهذه المكتبات مختلفة فيما بينها فمنها المجاني والمدفوع، ومنها السلس المُعاصر ومنها القديم العتيق.

كذلك فيما يتعلق ببناء البرامج من المصدر لتصبح قابلة للتثبيت على أنظمة المستخدمين، الأمور تختلف باختلاف نظام التشغيل فصيغة ‎.exe مثلًا لا تعمل على لينكس وماك، وصيغة ‎DEB وصيغة RPM من لينكس لا تعملان على الأنظمة المختلفة، فعليك أن تتعلم طريقة تحزيم وبناء برنامجك لمختلف أنظمة التشغيل.

هناك لغات وأدوات برمجية مختلفة لبناء تطبيقات سطح المكتب:

  • بايثون ويمكن استخدام مكتبات GTK وQt وTK معها، حيث أنه بمجرد تثبيتك لهذه المكتبات واستيرادها على مشروعك تصبح قادرًا على تطوير تطبيقات سطح مكتب رسومية متكاملة.
  • جافا مع مكتبة JavaFX، وهي مكتبة برمجية مضمّنة في جافا لبناء الواجهات الرسومية.
  • #C، وهذا حلٌ مناسب جدًا لتطوير تطبيقات سطح مكتب تعمل على أنظمة ويندوز بل هو الاختيار الأساسي، لكن هذه التطبيقات قد لا تعمل على الأنظمة الأخرى (أو على الأقل ستحتاج مجهودًا أكبر لجعلها تعمل من بقية اللغات والطرق).
  • يمكن استخدام لغة الـC كذلك لبناء تطبيقات رسومية باستخدام GTK أو Qt تعمل على مختلف الأنظمة (بعد البناء من المصدر لكل منصة)، لكن هذا صعبٌ قليلًا إن كان حجم البرنامج سيزداد مع مرور الوقت وتزداد المميزات، فالسي صعبة كلغة مقارنةً بالبقية على المبتدئين.
  • هناك لغات أخرى تدعم نفس المكتبات الرسومية التي ذكرناها مثل Perl و Rust و ++C.
  • يمكنك استخدام لغات الويب كذلك لتطوير تطبيقات سطح المكتب عن طريق إطار إلكترون (Electron)، وهو يسمح لك ببناء تطبيقات سطح مكتب تعمل على مختلف الأنظمة باستخدام جافاسكربت و HTML و CSS.

الآن دعنا نعرج على المصادر العربية المتوفرة لتطوير تطبيقات سطح المكتب:

مجالات أخرى للبرمجة

البرمجة بحرٌ لا ساحل له.

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

  • برمجة الواجهات البرمجية (APIs): وهذه تتم بلغات مختلفة مثل جافاسكربت وبايثون وPHP وRuby وأُطُر العمل الشهيرة بهذه اللغات مثل Ruby on Rails وLaraval. هذه الواجهات البرمجية غالبًا ما تكون مرتبطة بأنظمة قاعدة بيانات على منصات السحاب (Cloud) المختلفة، أو على الأقل مرتبطة بأنظمة أخرى.
  • أدوات إدارة العمليات (DevOps Tools): مثلًا المواقع العملاقة لديها ما يعرف بالعناقيد (Clusters) وهي مجموعة ضخمة من الخواديم (Servers) المرتبطة ببعضها البعض وبكامل الشبكة. هذه الخواديم والعناقيد بحاجة إلى أنظمة مختلفة للمراقبة والمعالجة والإدارة والنسخ الاحتياطي والتأمين وغيره الكثير… أشياء أخرى كثيرة. برمجة هذه الأدوات واختبارها وبيعها للمشتركين مجالٌ عملاق لوحده.
  • تطوير مواقع الويب: صحيحٌ أننا تعلمنا تطوير تطبيقات الويب باستخدام بايثون وأُطُر العمل مثل فلاسك وجانغو، لكن معظم الويب يعمل حاليًا بـPHP، كما أنه هناك العديد من أنظمة إدارة المحتوى (Content Management Systems) التي تشكّل نسبة لا بأس بها من مواقع الإنترنت. مثلًا نظام ووردبريس المكتوب بـPHP يسيطر لوحده على 33% من كامل مواقع الإنترنت، وبالتالي تعلم برمجة إضافات وقوالب ووردبريس يعتبر مجالًا برمجيًا عملاقًا لوحده. هناك أنظمة مختلفة لإنشاء مواقع الويكي أو مواقع التجارة الإلكترونية أو مواقع التسوق… إلخ.
  • برمجة السكربتات: وهذه تختلف باختلاف المجال، فمثلًا هناك سكربتات مصممة لاختبار وجود بعض الثغرات الأمنية على مواقع الويب، وهناك سكربتات لأتمتة بعض المهام وتسهيل عملها، وهناك سكربتات لأداء مهام تقطيع الفيديوهات ودمج الترجمات، وهناك سكربتات لاستخراج البيانات من الويب (Web Scraping) وهو المجال الأكثر شيوعًا.
  • البرمجة العلمية: هناك الكثير من البرامج المتخصصة بحل مسائل خاصة مثل Gurobi من أجل حل المشكلات الرياضية، والخوارزميات التطورية (Evolutionary Computing) لحل مشاكل متعددة في مختلف مجالات الحوسبة، والتعرف على الوجوه والأنماط (Face & Pattern Recognition) وبرامج محاكاة الشبكات (OMNeT++‎) ومحاكاة شبكات السيارات (Venis) وما شابه ذلك. كل هذه البرامج هي بدورها لها نظام إضافات ونظام برمجة فرعي يمكن تعلمها والتطوير فوقها.
  • المعالجة اللغوية: تدعى باللغة الإنجليزية Natural Language Processing، مجال مهم جدًا وتتوسع الحاجة له في محركات البحث واستخراج البيانات وتحليل النصوص والذكاء الاصطناعي وغير ذلك.
  • أنظمة الصوت والفيديو: أشياء مثل برنامج زووم (Zoom) وسكايب، تحتاج لمعرفة معمقة ببروتوكولات الشبكات مثل TCP وUDP بالإضافة إلى إطار الاتصال WebRTC.
  • غير ذلك الكثير مما ستكتشفه.

كيف أختار المجال البرمجي الذي أريده؟

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

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

استعرض هذه المصادر والمجالات وانظر إلى المجهود المطلوب للإبداع فيها، ثمّ انظر إلى وقتك وجهدك وقدراتك: هل أنت قادرٌ على الدخول في هذا المجال أم تريد اختيار مجالٍ آخر؟ 

تابع البحث إلى أن تصل إلى ضالتك.

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

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

اقرأ “دليلك الشامل لتعلم البرمجة” إن أردت الاستزادة حول المجالات البرمجية والاختيار والتفضيل بينها.

المهارات التقنية الإضافية لتعلم البرمجة

البرمجة ليست فقط تعلم اللغات البرمجية المختلفة وأُطر العمل والمكتبات وما شابه ذلك، بل هناك أمور وأساليب إضافية من الواجب معرفتها واتباعها. نريد أن نذكر بعضها هنا.

حاليًا معظم المستودعات البرمجية مُستضافة عبر نظام إدارة مستودعات اسمه Git، وهو نظام تشاركي لتطوير البرمجيات مستخدم في جميع المشاريع البرمجية تقريبًا. ستحتاج تعلم أساسيات Git وطرق استخدامه، كما ستحتاج تعلم GitHub فهي الشبكة الاجتماعية الأكبر لمستودعات Git. يمكنك تعلمهما عبر هذا الرابط من أكاديمية الزيرو أو المقالات المختلفة من قسم Git على أكاديمية حسوب.

من المهارات الإضافية التي ستحتاجها مهارة الكتابة والتوثيق؛ ستمر عليك مشاكل برمجيات عويصة جدًا قد تستغرق أيامًا وأسابيع لحلها في البرمجة، ولكن لا تعيد اختراع العجلة كل مرة فسيكون من الممتاز أن تدوّنها في مستند أو موسوعة محلية أو برنامج على جهازك. من بين ما ننصح به برنامج Google Keep للملاحظات (دليل عنه هنا) و Joplin (مفتوح المصدر).

جانب آخر متعلق بالكتابة هو توثيق الشفرة البرمجية؛ عليك إضافة تعليقات في مختلف أنحاء الشفرة البرمجية الخاصة ببرنامجك لتستفيد منها عندما تعود إليها أنت لاحقًا أو عندما يأتي مطور آخر ليساعدك في المشروع أو يحل مكانك في الشركة مثلًا.

ستحتاج كذلك تعلم البحث على الإنترنت بصورة احترافية. أقول احترافية لأن الكثير من الناس لا يعرف بالضبط كيف يبحث وبجرد كتابته جملة مثل “برنامج البايثون لا يعمل مع مكتبة urllib أرجو المساعدة” على جوجل يظن أنه سيجد حلًا، وهذا خطأ. عليك أن تبحث بأكثر من لغة وأكثر من موقع وأكثر من جملة استعلام (Query) واحدة وأن تكون دقيقًا قدر الإمكان.

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

ماذا بعد تعلم البرمجة؟

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

هذه الخطوة مهمة جدًا ويتجاهلها الكثير من الناس للأسف؛ تجدهم قادمين بمعرض أعمال يحوي صفر أمثلة سابقة على مشاريع طوّروها أو مشاكل برمجية حلّوها، ثم يتساءلون لماذا لا يستطيعون الدخول إلى سوق العمل.

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

يمكنك البحث عن هذه المجموعات والمواقع المهتمة على فيسبوك أو على الإنترنت عمومًا.

يمكنك بعدها:

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

خاتمة

تنتهي هنا رحلتنا الطويلة في هذا المقال الشامل حول تعلم البرمجة. آمل أنكم استمعتم واستفدتم من المصادر العربية التي رشّحناها لتعلم المجالات البرمجية المختلفة، كما لا يسعني هنا سوى التقدم بجزيل الشكر والدعوات لكل صانع محتوى عربي كرّس من وقته جزءًا ليعلّم الناس الخير.

المكتبة العربية ما تزال تنمو وهي بالكاد تغطي الأساسيات والمراحل المتوسطة في تعلم البرمجة. لكنها نقطة بداية جيدة لمن لا يجيد الإنجليزية أو يجد صعوبة في التعلم من المصادر الأجنبية.

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

لأي سؤال أو فكرة أو تعليق من طرفكم (خارج مشاكل البرمجة العملية) يمكنكم أن تطرحوه من مربع التعليقات أدناه في أي وقت أو مراسلتي على البريد: mhsabbagh[at]outlook.com. تعرفوا على المزيد عن حوسبة من صفحة حول حوسبة.