هناك عدد لا نهائي من المقالات حول كيف تصبح مبرمجًا. لأي لغة تختارها، ستجد مقالات وأشخاصًا يتحدثون عنها ويحاولون تعليمك بطريقة جد مضبوطة كيف تصبح محترفًا في لغة البرمجة تلك. الهدف من هذا المقال ليس أن أعلمك لغة برمجة، الهدف هو أن أعلمك كيف تتعلم.
المشكلة التي يقع فيها أغلبية المبتدئين هي أنهم تكون لديهم رغبة في التعلم، ويريدون أن يبدأوا، ولكن بين الكم الهائل من المعلومات والصعوبات التي يجدونها وقلة التوجيه، يتخلون عن الأمر ويبقى لديهم ذلك الحلم بأن يصبحوا مبرمجين يومًا ما ويحققوا ما كانوا يطمحون إليه، ولكنهم لا يصلون إليه أبدًا. هذا المقال هو الذي سيحل لك تلك المشكلة.
لماذا البرمجة؟
قبل أن أبدأ، أود أن أجيب على سؤال: “لماذا البرمجة؟”. بالنسبة لي، البرمجة مثل حرفة يدوية تمكنك من صنع شيء من لا شيء. وهذا الشيء له إمكانيات كثيرة:
- يمكنك أن تصنع روبوت لعبة أو بوت للتداول.
- يمكنك إجراء تحليل للبيانات.
- يمكنك العمل مع شركات كبرى مثل جوجل أو فيسبوك.
- يمكنك تأسيس شركتك الخاصة التي قد تصبح شركة كبيرة.
الإمكانيات تقريبًا غير محدودة، والحد الوحيد هو خيالك. هذا الأمر يجعل البرمجة في نفس الوقت عملًا ومجالًا جد خصب، وفي نفس الوقت هي شيء يقدم رضا ومتعة لا تشعر بها في أماكن أخرى. فأنت تأخذ بضعة أسطر من الكود مكتوبة أمامك على شاشتك ويمكنك تحويلها تحت أناملك إلى أي شيء.
أضف إلى ذلك أن هناك الكثير من فرص العمل المتاحة وبرواتب جيدة، وأنه يمكنك العمل من أي مكان كنت فيه، حيث غالبًا ما ستتمكن من العمل عن بعد. وفي المغرب، يمكنك العمل مع شركة في أمريكا أو أماكن أخرى.
آخر نقطة تبدو لي مهمة جدًا هي أن المعرفة ثروة غير مادية. إذا كان لديك مليون في جيبك، فأنت تملك ذلك المليون، ولكنك لا تملك بالضرورة المعرفة التي تمكنك من كسب مليون آخر. ولكن إذا كانت لديك المعرفة التي تمكنك من كسب ذلك المليون، فلا يهم إن أنفقته أو سافرت إلى مكان بعيد. المهم أنك عندما تعود، فإن معرفتك غالبًا ما ستظل لها قيمة في السوق.
أتمنى أن أكون قد أقنعتك بأن تترك تصفح وسائل التواصل الاجتماعي وتقرأ هذا المقال. والآن بعد أن اقتنعت وقررت أن تبدأ في تعلم البرمجة، تأتي الكثير من الأسئلة إلى ذهنك: أي لغة برمجة تتعلم؟ أي مجال تتجه إليه؟ كيف تبحث عن عمل؟ وغيرها الكثير.
لغة البرمجة ما هي إلا لغة، مثلما نقول نتعلم الإنجليزية أو الفرنسية أو الصينية. الهدف من هذا المقال ليس أن أعطيك لغة معينة، بل أن أعطيك الكيفية التي ستمكنك من تعلم اللغات بطريقة جيدة. احتفظ بهذه النقطة في ذهنك وتابع معي.
الخطوات التحضيرية الثلاث قبل البدء
أولًا، إذا كنت مبتدئًا (وبين قوسين، حتى لو لم تكن مبتدئًا، أظن أن هذا المقال يمكن أن يفيدك)، يجب عليك القيام بثلاثة أمور مهمة.
1. تعلم Git
Git
هو نظام للتحكم في الإصدارات يتيح لك إدارة مشاريعك وتحديثها وتتبع تطورها بطريقة سلسة جدًا. تقريبًا جميع المبرمجين في جميع المجالات يستخدمون Git
ومواقع مثل GitHub
أو GitLab
. تعلم Git
سيمكنك من أمرين:
- أولًا: سيكون لديك أول لقاء مع شيء اسمه البرمجة، وهو بسيط جدًا لكنك ستتعلم القليل.
- ثانيًا: سيمكنك عندما تبدأ في تعلم لغة البرمجة الخاصة بك وإنشاء مشاريعك من حفظها في مكان واحد. وفي نفس الوقت الذي تتعلم فيه، تكون تبني محفظة أعمالك (Portfolio).
بالنسبة لـ Git
، إذا كنت مبتدئًا، فسيستغرق منك الأمر ما بين أسبوع إلى ثلاثة أسابيع في نظري لتعلم كيفية استخدامه وإتقان أساسياته.
2. فهم كيفية عمل الحاسوب
الأمر الثاني، وهو أيضًا مهم جدًا، هو أن تفهم كيف يعمل الحاسوب.
- افهم ما هي الذاكرة الحية (RAM).
- افهم ما هو المعالج (CPU).
- افهم ما هي لغة التجميع (Assembly).
- افهم المبادئ الأساسية.
ستستخدم لغة برمجة ستعمل على حاسوب. ما هي مكونات ذلك الحاسوب التي غالبًا ما ستعمل بها، بغض النظر عن لغة البرمجة التي تستخدمها؟ الهدف هنا ليس أن تصبح مختصًا في مكونات الحاسوب (Hardware) أو في منطق لغات البرمجة، الهدف فقط هو أن تكون لديك الأساسيات. لماذا؟ لأنه عندما تبدأ في البرمجة، مهما كان ما تريد أن تفعله، ستواجه مشاكل ومسائل ولن تفهم كيف يرتبط هذا الأمر بذاك. في كثير من الحالات، هذا الفهم البسيط لكيفية عمل الحاسوب سيمكنك من التوجه مباشرة إلى مكان المشكلة ومحاولة حلها. هذه الخطوة في نظري قد تستغرق منك ما بين أسبوعين إلى ثلاثة أسابيع أو شهر لتعلمها، وسيكون لديك أساس جيد.
3. تعلم المفاهيم الكبرى (Core Concepts)
هنا تأتي المرحلة الثالثة، والتي في نظري هي جدًا جدًا مهمة، وهي المرحلة التي لا يقوم بها الكثير من الناس، والتي تجعلهم يواجهون مشاكل كبيرة لاحقًا تمنعهم من إكمال رحلتهم في تعلم البرمجة. تعلم المفاهيم الكبرى.
لماذا المفاهيم الكبرى؟ كما تقول حكمة شهيرة: “بمجرد أن تفهم المبادئ، يمكنك بنجاح أن تبتكر أساليبك الخاصة. وبمجرد أن تجرب الأساليب، متجاهلاً المبادئ، فمن المؤكد أنك ستواجه المشاكل.”
هناك مبادئ ستجدها بغض النظر عن لغة البرمجة التي تستخدمها. كلما تعلمت أكثر، تسارعت وتيرة تعلمك. لماذا؟ لأنك عندما ترى شيئًا هنا، تفهم أن ذلك الشيء الذي رأيته وتعلمته ما هو إلا جزء صغير من مفهوم كبير كان لديك بالفعل في ذهنك، لذلك يمكنك ربطه. وفي المرة القادمة، سترى شيئًا يبدو مختلفًا تمامًا، ولكنك ستتمكن من ربطه بذلك المفهوم الكبير، وبهذه الطريقة ستتعلم ذلك الشيء الجديد بشكل أسرع.
ما هي هذه المفاهيم التي أتحدث عنها؟ بشكل عام، أشياء مثل:
- هياكل البيانات (Data Structures)
- الخوارزميات (Algorithms)
- التعقيد (Complexity)
- بعض مبادئ البرمجة الشيئية (Object-Oriented Programming)
- بعض مبادئ البرمجة الوظيفية (Functional Programming)
عندما تكون لديك هذه المبادئ، سأترك بعض المصادر إذا أردت أن تتعلم شيئًا فشيئًا. هذه المرحلة، أظن أنها ستستغرق منك شهرًا واحدًا، شهرًا من العمل الجاد، خمس إلى ست ساعات من العمل يوميًا، وستفهم منطق هذا الشيء جيدًا. بعد ذلك، ستكون قادرًا على كتابة ما يسمى بـ الكود الزائف (Pseudocode). أي أنك لا تكتب بلغة برمجة معينة، ولكنك تحل المسائل بالفعل باستخدام لغة برمجة مبسطة خاصة بك، لا تعمل على الحاسوب بل على الورق والقلم، ولكنها تحتوي على المنطق الذي سيمكنك من ترجمتها إلى لغة برمجة حقيقية لاحقًا.
مثال على الكود الزائف لحساب مجموع عددين:
FUNCTION calculate_sum(number1, number2)
sum = number1 + number2
RETURN sum
END
بمجرد أن تنهي هذه المراحل الثلاث، والتي قد تستغرق حوالي شهرين ونصف، أظن أنك ستكون مستعدًا لتعلم أي لغة برمجة. الفرق بين أن تبدأ التعلم مباشرة وأن تقوم بهذه المراحل التحضيرية هو الفرق بين شخص يريد تسلق جبل إيفرست ويأخذ وقته للتحضير وتجهيز معداته، وشخص آخر يقرر الصعود بملابس عادية. الثاني سيبدأ قبل الأول، لكنه لن يصل أبدًا، بل قد يموت في الطريق.
اختيار لغة البرمجة
هنا يأتي السؤال الذي يطرحه الجميع: “أي لغة برمجة أتعلم؟”. أظن أن هذا السؤال متعلق بماذا تريد أن تفعل. إذا كنت ستصنع ألعابًا، فالأمر يختلف عما إذا كنت تريد أن تصبح عالم بيانات أو تعمل في التداول. كل مجال يتطلب لغة برمجة مختلفة وطرق برمجة مختلفة.
عمومًا، إذا لم تكن تعرف جيدًا بماذا تبدأ أو تريد فقط أن تتعلم وتجرب شيئًا، فأنصحك أن تبدأ بـ بايثون (Python). لماذا؟ لأنه من أسهل اللغات وفي نفس الوقت عام جدًا ويمكنك أن تفعل به أي شيء. بايثون مثل أداة متعددة الاستخدامات؛ لن تفعل أي شيء بإتقان شديد، ولكن أي شيء تحاوله ستتمكن من تجربته.
- يمكنك إنشاء واجهات برمجة تطبيقات (APIs).
- يمكنك فعل شيء في البلوك تشين.
- يمكنك صنع لعبة صغيرة.
- يمكنك القيام بعلوم البيانات باستخدام مكتبات مثل
pandas
.
هذا الشمول يجعله يفتح لك الأبواب لكل شيء. طبعًا، أي شيء تفعله به لن يكون بأفضل طريقة ممكنة، ولكن يمكنك أن تبدأ به. في نفس الوقت، بايثون سهل جدًا في الاستخدام، وهو يدعم البرمجة الشيئية (Object-Oriented) ويمكنك أيضًا أن تبرمج به بأسلوب وظيفي (Functional). وعدد المكتبات والأدوات الجاهزة التي يمكنك استخدامها لبناء أشياء خاصة بك في بايثون كبير جدًا، لدرجة أنني لا أعتقد أن هناك لغة برمجة أخرى لديها هذا الكم من المكتبات.
إذًا، إذا كان لديك شك، ابدأ ببايثون.
إذا لم يكن لديك شك وكنت تعرف لغة برمجة تريد أن تبدأ بها، فابدأ بها. الشيء الوحيد المهم في اللغة التي تريد تعلمها هو أن تكون لغة برمجة معروفة بما فيه الكفاية ليكون لها توثيق ومصادر تعلم كثيرة.
عملية التعلم: التعلم القائم على المشاريع (Project-Based Learning)
عندما تجد مصادر التعلم، ابدأ بمتابعة المراحل: كيف تقوم بإعداد بيئة التطوير، وكيف تكتب أول برنامج لك Hello, World!
.
print("Hello, World!")
وهنا نقطة جد مهمة، وهي الفخ الثاني الذي في نظري يجعل الكثير من الناس لا يكملون في البرمجة. عندما تبدأ في تعلم المبادئ وتجربة برامج أساسية، وبعد أن تقضي من 20 إلى 50 ساعة من التعلم، غالبًا ما تبدأ في التعمق أكثر فأكثر في المفاهيم النظرية. المشكلة هي أنك في الحقيقة لم تضع يديك في العجين بعد، لم تتعلم شيئًا بيديك. وطالما لم تفعل شيئًا بيديك، فأنت في الحقيقة لم تتعلم بعد.
الحل هو التعلم القائم على المشاريع. ببساطة، بعد أن تقضي تلك الـ 20 إلى 50 ساعة الأولى في تعلم الأساسيات، فكر في مشروع صغير. من الأفضل أن يكون مشروعًا يوجد حله بالفعل على الإنترنت، مثل:
- صنع لعبة الثعبان (Snake) ثنائية الأبعاد.
- صنع بوت يراقب التبادلات التجارية في بورصة ما أو على البلوك تشين.
شيء صغير تعرف أن هناك أناسًا فعلوه قبلك، ولكنك ستبدأه من الصفر وتحاول صنعه بنفسك. عندما تبدأ، سيحدث لك أمران:
- لن تعرف من أين تبدأ. لذلك، ستذهب لترى الحلول الموجودة وتحاول متابعتها. لا بأس في “الغش” في هذه المرحلة، المهم هو أن تبدأ.
- كلما تقدمت، ستكتشف أن المفاهيم الأساسية التي تعلمتها غير كافية. ستحتاج لتعلم مفاهيم جديدة مثل
WebSockets
أو غيرها. ما ستفعله هو أنك ستذهب لتعلم تلك المفاهيم المتقدمة التي تحتاجها تحديدًا لمشروعك.
بما أنك تتعلم مفاهيم متقدمة وفي نفس الوقت تطبقها، فأنت في الحقيقة تستوعبها، على عكس لو كنت تتعلم عددًا كبيرًا من المفاهيم بطريقة نظرية دون تطبيق. الهدف من هذا ليس صنع ذلك المشروع بحد ذاته، بل صنع شيء خاص بك، شيء أعدت صنعه بنفسك كوسيلة للتعلم.
عندما تبدأ في صنع هذا المشروع، تذكر Git
الذي تعلمته، وقم برفع مشروعك إلى مستودع على GitHub
. مع الوقت، هذا الأمر سيمكنك من شيئين:
- أولًا: يمكنك الرجوع ورؤية ما فعلته سابقًا، سترى تطور تعلمك وستتمكن من تصحيح أخطائك.
- ثانيًا: كما قلت سابقًا، سيمكنك من بناء محفظة أعمالك (Portfolio) في نفس الوقت.
المحفظة هي الطريقة الوحيدة التي يمكنك بها تعويض السيرة الذاتية التي لا تحتوي على شهادات. إذا قرأ شخص ما سيرتك الذاتية وقلت له أنك لم تحصل على دبلوم في هذا المجال، ولكنك صنعت مشاريع وها هي روابطها، فإن ذلك سيكون بالنسبة لذلك الشخص بمثابة الدبلوم.
التغلب على الصعوبات
في كثير من الحالات، تكون هذه النقاط صعبة، لأن التعلم الذاتي شيء لا يفعله الكثيرون منا. في المرة الأولى، تجد جدارًا كبيرًا، ولكن لا تنسَ أنك بمجرد أن تتسلق هذا الجدار، سترى منظرًا رائعًا وتكتشف ساحة لعب لا منتهية، والشيء الوحيد الذي يحد من سفرك فيها هو خيالك. هذا الإحساس بالرضا الذي تحصل عليه بعد بذل مجهود لن تجده في الأشياء اليومية.
هذا المجهود قد يكون صعبًا، ولهذا حاول أن تجد أصدقاء لك تتعلم معهم في نفس الوقت. إذا لم يكن لديك أشخاص في محيطك لديهم نفس الهدف، حاول الانضمام إلى مجتمعات عبر الإنترنت. هناك الكثير من خوادم Discord
لأي نوع من لغات البرمجة أو المجالات، ستجد فيها أشخاصًا مثلك، وأشخاصًا أكثر تقدمًا منك يمكنك أن تسألهم وتتعاون معهم.
خاتمة
لإنهاء المقال، أود أن أحطم خرافة “عقلي ليس مصممًا لهذا الشيء”. هذا الكلام ليس صحيحًا. الفرق الوحيد بينك وبين شخص تعلم البرمجة هو أن ذلك الشخص خصص وقته وواجه الصعاب وحاول أن يتعلم.
حتى لو قررت أن البرمجة ليست الشيء الذي تريد تعلمه، حاول أن تتعلم أي شيء آخر، أي حرفة، أي فن. في آخر المطاف، عندما تمر السنون وتنظر إلى ماضيك، لن تتذكر الوقت الذي قضيته في تصفح وسائل التواصل الاجتماعي، بل ستتذكر الوقت والأشياء التي صنعتها بفضل معرفة تعلمتها بنفسك.