في نقرة، نحن لا نميل للمقدمات الطويلة، لذلك سندخل في صلب الموضوع مباشرة. هذا مقال غير تقليدي، وهو موجه لغير المبرمجين؛ انه موجه الى كل شخص مهتم بالدخول الى عالم البرمجة Programming، ولا يعرف كيف، او لأي طالب مقبل على الجامعة، ولا يعرف اذا ما كان اختصاص البرمجة والحواسيب يلائمه. سيغطي هذا المقال الأسئلة الأكثر شيوعًا في عالم البرمجة، بداية بماهية البرمجة، وما هي مسارات البرمجة و اختصاصتها، وصولًا الى كيف تتعلمها، وأساليب الربح من خلالها، وختامًا بكيفة معرفة ما اذا كان اختصاص البرمجة يلائمك. الآن، وبدون المزيد من اللغط، فالنبدأ بالنقطة الأولى.
اذا اردنا التكلم بصورة تقنية بعض الشيء، فان البرمجة ( بالانجليزية Programming) تُعرّف على انها عملية كتابة تعليمات وأوامر للأجهزة الالكترونية مثل الحاسوب والهاتف، من أجل جعلها تحقق غاية معينة. لكن دعونا من التعريفات الرسمية؛ ببساطة، البرمجة عبارة عن كتابة أكواد بلغات خاصة تعرف بـ"لغات البرمجة"، من أجل صنع برنامج يؤدي الوظيفة المطلوبة منه من قبل المبرمج، كتطوير برنامج للدردشة، او موقع لمشاهدة الأفلام، او حتى لعبة سباق سيارات. ان جهاز الحاسوب او الأجهزة الذكية كلها قادرة على القيام بهذه المهام، لكنها بحاجة الى شخص يشرح لها بلغة تفهمها ما المطلوب منها. وهنا يأتي دور المبرمج: ان لغات البرمجة هي لغات يمكن تحويلها تلقائيا الى لغة يفهمها الحواسيب، لكنها لغات دقيقة وتحتاج الى تفصيل. على سبيل المثال، لا يمكنك ان تقول لهاتفك ان يعطيك برنامج آلة حاسبة. عليك انت تصميم الواجهة، واخبار الحاسوب ماذا يجب ان يفعل بالتحديد عندما يضغط المستخدم على كل زر. الحاسوب (ويقصد هنا بالحاسوب اي جهاز الكتروني يقوم بمعالجة المعلومات، كالكومبيوتر والهاتف والبلايستايشن وغيرها من الأجهزة) لا يفكر. المبرمج هو من يقوم بوضع طريقة عمل البرنامج (ما يسمى بالخوارزمية)، والحاسوب يطبقها حرفيا.
الآن وقد تعرفت على معنى البرمجة، النقطة الثانية في رحلتك هي تحديد المسار الذي ستتخصص به. تجدر الاشارة الى ان المبرمج الجيد يجب ان تكون لديه فكرة عامة عن كل المسارات، ولكن تخصصه يجب ان يكون في مسار واحد، يعطيه كل وقته ليحترفه. يوجد عدة مسارات فرعية في البرمجة، لكن المسارات الأساسية يمكن تقسيمها الى 4 مسارات عامة، هي:
1- تطوير المواقع
2- تطوير تطبيقات الهواتف الذكية
3- تطوير الألعاب
4- تطوير برامج سطح المكتب
لنشرح بالتفصيل كل واحد من هذه المسارات.
احد اكثر الاختصاصات شيوعًا في العالم العربي، والسبب هو سهولة دخوله نسبيا من قبل غير متعلمين البرمجة أكاديميًا، بالاضافة الى الطلب الكبير على المواقع الاكترونية في وقتنا الحالي. ينقسم هذا المسار الى مسارين فرعيين، هما Front-End و Back-End. الـFront-End يقصد بها الجزء من الموقع الذي يتفاعل معه المستخدمين. أي شيء من مكونات الموقع التي يمكنك مشاهدتها والتفاعل معها، مثل النصوص والأزرار والخطوط والألوان والصور وحركات الأنيميشن وغيرها من الأمور التي يراها المستخدم ويتفاعل معها. ببساطة، كل شيء يظهر أمامك على الشاشة عند الدخول الى اي موقع هو جزء من الفرونت اند. اللغات المستخدمة في الفرونت اند هي الـHTML، الـCSS، والـJavascript. لكن اتقان هذه اللغات لا يكفي، حيث ان مطور الفرونت اند يجب ان تكون لديه نظرة فنية وخبرة بالـUX والUI (اي تجربة الاستخدام وتصميم الواجهات على التوالي) من أجل ان يكون الموقع جميلا، وبنفس الوقت سهل الاستخدام من قبل الزوار والمستخدمين. اما الBack-End، وقد تسمى ايضًا Server-Side، فيقصد فيه الجزء الذي يتم بنائه ليعمل على الربط بين الصفحات الظاهرة للمستخدم والبيانات والتطبيقات المختلفة. بمعنى آخر هو الجزء الذي يتم تنفيذه وقرائته من خلال السيرفر ويهتم بالتحقق من استقبال البيانات وارسالها بشكل صحيح من والى المتصفح. وبكل تأكيد هذا الجزء من الشيفرة البرمجية لا يكون ظاهرا على المتصفح، وإنما تظهر نتائجه. فمثلا، اذا دخلت لصفحة تسجيل الدخول في اي موقع، فان خانتي اسم المستخدم وكلمة السر هما عبر الفرونت اند. لكن عملية التحقق التي تحدث، والتي تتحقق مما اذا كانت كلمة السر صحيحة، فهي تحدث عبر الباك-اند. اللغات المستخدمة في الباك اند كثيرة، اشهرها الـPHP، الـPython، الـRuby، الـJava والـMYSQL من اجل قواعد البيانات. تجدر الاشارة هنا انه لتحقيق نتائج اسرع وأفضل، يتم استخدام بيئات عمل تابعة للغات المذكورة آنفا، من شئنها تسهيل عملية التطوير على المبرمج. اشهر هذه البيئات بيئة لارافيل التابعة لـPHP. بامكانك الاطلاع على مقال مفصل عن بيئة التطوير هذه من خلال هذا المقال من نقرة.
هناك ايضا ما يعرف بمطور الFull-Stack. هذا هو المبرمج الذي لديه خبرة كبيرة بكلا الفرعين السابقين، اي انه بامكانه تطوير موقع كامل لوحده. طبعًا، اذا كانت لديك الخبرة الكافية لاتقان الفرعين، فهذا امر ممتاز. لكن في البداية، قم بصب كل تركيزك على مسار واحد فقط. ان كل مسار منهما عميق جدا، وسيأخد منك وقتًا طويلا (سنوات ربما) لاتقانه بشكل احترافي. لذلك لا تشتت تفكيرك، وركز على واحد فقط، مع تعلم أساسيات المسار الثاني. اي انه لو اخترت العمل كمطور باك-اند، ان معرفة أساسيات الHTML امر لا بد منه، والعكس صحيح بالنسبة لمطور الفرونت اند، ولو بنسبة اقل.
كما يشير الاسم، فان المتخصصين بهذا المسار يعملون على تطوير التطبيقات للهواتف الذكية كالأندرويد والآيفون. اذا اخترت هذا المسار، فانه سيصبح بامكانك تطوير تطبيقات متنوعة المجالات، كتطبيقات ويب (مرتبطة بمواقع او سيرفر بشكل عام، كتطبيق الفيسبوك)، او تطبيقات عملية، كتطبيقات لتعلم لغة معينة، او تطبيق منبه ذكي. الربح من خلال هذا المسار قد يكون مرتفعا جدا، حتى لو كان التطبيق بسيطًا من الناحية البرمجية. المهم ان يكون التطبيق فريدًا من نوعه، ويوجد طلب عليه. تطبيق Alarmy مثلا، وهو تطبيق منبه يطلب منك انجاز عمل ما قبل ان تستطيع اطفاء المنبه (كحل مسائل رياضية او تحريك الهاتف بسرعة لمدة دقيقة مثلا)، حصد عشرات ملايين التحميلات. مشكلة هذا المسار هو سوق التنافس الصعب جدا. فبحسب موقع Statista للاحصاءات، اكثر من 6000 تطبيق يتم نشره يوميا على متجر جوجل للأندرويد. هذا يعني ان تطبيقك هو نقطة في بحر من التطبيقات، كلها تحاول المنافسة للنجاح. لذا اذا قررت الدخول في هذا المجال، وفشل اول تطبيق لك، لا تيأس، وتعلم من التجربة. من اجل الدخول في هذا المسار، عليك تعلم اللغات التالية: للأندرويد، اللغة الأشهر هي جافا، من خلال العمل على Android Studio. يمكنك ايضا استخدام ال#C من خلال استخدام بيئة عمل Xamarin. يمكنك التعرف على مدة قوة وفعالية لغة السي شارب من خلال قراءة هذا المقال. كل من الـPython، الـ++C، والـC يعطوك الامكانية ايضا لتطوير تطبيقات اندرويد، لكنهم غير موصى بهم. الجافا هي الخيار الأفضل. اما اذا اردت برمجة تطبيقات للآيفون والآيباد، فالـSwift لا بديل حقيقي لها. لغة قوية جدا ستمكنك من تطوير التطبيق الذي تريد. المشكلة في تطوير تطبيقات لمنتجات آبل هي انك بحاجة الى جهاز ماك لبرمجتها. يوجد طرق لاستخدام Swift على ويندوز، لكنها مجرد حلول معقدة لا تعطي نتائج ممتازة، لذا ان لم تكن تملك جهاز ماك، او لا احد مقرب منك يملكه، اعد النظر في موضوع تطبيقات الآيفون.
المسار المفضّل لي شخصيًا. مهما تكلمت عن هذا المسار، لن اوفيه حقه بنظري، اذ انني سأحتاج لكتابة مقال كامل عنه (قد أقوم بهذا مستقبلا). بعكس المسارات الأخرى، فان هذا المسار يعطيك حرية تامة لصب كل مخيلتك في مشروعك. العائق الوحيد امامك هو قدرتك على البرمجة. والمميز فيه ايضا ان النتائج فورية. هذا يعني انه عندما تكتب اي كود، او تتعلم شيئًا جديدًا، فبامكانك رؤية حصاد تعبك مباشرة في اللعبة التي تقوم بتطويرها. مساوىء هذا المسار هو ضعفه الشديد في العالم العربي. فان استديوهات تطوير الألعاب العربية شبه الناجحة تعد على أصابع اليد الواحدة. وان تطوير لعبة عالية المستوى (او ما يعرف بالـAAA) يحتاج سنوات من العمل والكثير من المطورين المحترفين. لذا ان فرصك بالنجاح في هذا المسار، وربح ما يكفي منه للعيش، قد يكون مستحيلا (ولن اقول مستحيلًا). سنتكلم أكثر عن كيفية الربح من هذا المجال لاحقًا في هذا المقال. ان اردت الدخول بعالم تطوير الألعاب، فعليك تعلم احد محركات الألعاب المشهورة. الشركات الكبيرة تطور محركًا خاصًا بها من الصفر، لكن هذا الأمر يحتاج لسنوات وخبرات كبيرة بالبرمجة، لذا تعلم استخدام محرك جاهز امر افضل بالتأكيد. يمكنك تطوير لعبة من دون استخدام محرك، لكنك ستجبر على برمجة كل شيء من الصفر، كالفيزياء وغيرها. لذا لا تقم باعادة اختراع العجلة، بل استخدم محركًا جاهزًا لتكسب نفسك وقتًا، وتريح نفسك من جهد لا فائدة منه. المحركات الأكثر شهرة هي Unity، Unreal Engine، و Godot. شخصيا انصح بجودوت لعدة أسباب ذكرناها في هذا المقال. ان محرك يونتي يستخدم لغة الـ#C، ومحرك Unreal يستخدم ++C، اما محرك Godot فيمكنك من البرمجة باستخدام اما #C، او GDScript الشبيهة جدا بالبايثون، او الـ++C، رغم انه لا ينصح بتلك الأخيرة لغير بعض الأمور المحددة. تجدر الاشارة في هذا الموضوع ان تطوير العاب معقدة ثلاثية الأبعاد يتطلب منك معرفة ببعض حقول الرياضيات، كالفضاء والأشعة (Space and Vectors) والجبر الخطي (Linear Algebra)، بالاضافة الى الجبر الأساسي بالطبع، كما هو الحال مع كل مجالات البرمجة.
لعل هذا هو اكثر المسارات تعقيدًا وتشابكًا، نظرًا للاختلاف الشاسع في معنى "برامج سطح المكتب". فالـPhotoshop وبرنامج مكافحة الفيروسات وبرنامج محاسبة بسيط لمحل تجاري كلها تعد برامج سطح مكتب. لكن اذا اردنا النظر للنصف الممتلئ من الكوب، فنرى انه مع النتائج الكثيرة، لديك كمبرمج ايضًا خيارات كثيرة لبرمجة هذا النوع من البرامج. اي لغة تقريبًا تسمح لك بالتطوير لسطح المكتب. الجافا، البايثون، السي، السي بلاس بلاس، السي شارب، وحتى لغات الويب كالـHTML والـCSS والـJavascript عبر استخدام بيئة عمل Electron.js تمكنك من تحقيق ما تريد. هذه هي المسارات الأكثر شهرة خصوصًا في العالم العربي، لكن يوجد العديد من الاختصاصات الأخرى كالذكاء الاصطناعي وتعلم الآلة، ومسؤولي قواعد البيانات والشبكات. كلها مسارات سنتكلم عنها بالتفصيل في مقال لاحق.
يسود اليوم اعتقادان نحاول في نقرة مكافحتهما قدر الامكان: الاعتقاد الأول هو ان التكنولوجيا تخصص وليس من المعارف العامة. هذا خطأ جسيم! فكما الرياضيات والحساب تعتبر من المعارف العامة، وليس فقط للمختصين بالحساب، فان المعرفة التكنولوجية ايضًا يجب ان تكون معرفة عامة، بسبب استخدامنا الكبير لها في حياتنا اليومية. هل تعلم ان شركة General Electric الشهيرة مثلا قامت بالزام كل موظفيها (حتى الذين يعملون بقسم المبيعات) بتعلم أساسيات البرمجة؟ الهدف من هذا ليس تعلم البرمجة كوظيفة، بل لتعلم المنطق البرمجي. لذلك، مهما كان اختصاصك، حاول تعلم لغة برمجة واحدة، والتركيز على الخوارزميات. الاعتقاد الثاني هو ان البرمجة دراسة أكادميّة ولا يمكن تعلمها بشكل فردي. نريد اعلامك عزيزي القارئ ان مطوري الفرونت اند والباك اند في هذا الموقع اكتسبوا خبرتهم كاملة عبر التعلم الذاتي من الكتب والانترنت وغيرها. صحيح، ان تعلم البرمجة عبر الجامعة افضل كثيرًا، لكن تعلم البرمجة بدون جامعة امر ممكن طبعًا. لم تصدقني بعد؟ اسأل مارك زاكربيرغ، مدير شركة فيسبوك ;) فلنعد الى موضوعنا. اخترت المسار الذي تريد تعلمه. ماذا بعد؟ الآن لديك خياران. اذا كنت في عمر او بظرف يسمح لك بالدخول الى الجامعة، فهذا طبعا الخيار الأفضل. ادخل الجامعة باختصاص حاسبات او برمجة. اما اذا كان الآوان قد فات (او لم يحن بعد) على دخولك الجامعة، فالتعلم الذاتي هو سبيلك للدخول الى عالم البرمجة. عندما نتكلم عن التعلم الذاتي، فيوجد اسلوبين. اما دورات الفيديو، او الكتب. الأمر يعود الى تفضيل الشخص. بخصوص الفيديوهات، فيوجد مئات الدورات الممتازة. للأسف، الدورات العربية ليست بمستوى عالي جدا. الدورات الانجليزية افضل بأشواط. لكن على كل حال، اذا لم تكن لغتك الانجليزية قوية، اشهر الدورات العربية تجدها في قنوات اليوتويوب التالية: بغداد الجديدة أسامة الزيرو أكادمية حسونة اما بالنسبة للمصادر الأجنبية، فيوجد عدد من القنوات المجانية الممتازة، نذكر افضلها: TheNewBoston FreeCodeCamp Brackeys ويوجد ايضا عدد من المواقع المخصصة للدورات، منها المجاني ومنها المدفوع. ذكرنا اشهر 5 منها في هذا المقال. اما اذا كنت تفضل الكتب اكثر، فيوجد كنز من الكتب البرمجية المجانية على موقع "المكتبة البرمجية".
السؤال الذي يخطر ببال الجميع عند التفكير بتعلم البرمجة: هل فيها ربح يكفي للعيش من البرمجة فقط؟ عندما نتكلم في هذا الموضوع، سنترك الوظائف في الشركات جانبًا، ونركز على الربح كمبرمج مستقل. السبب هو ان فرص العمل في الشركات تختلف بشكل شاسع من بلد لآخر، بل وحتى ضمن البلد الواحد، وحسب الخبرات والشهادات التي يملكها المبرمج، وما اذا كانت مطلوبة في سوق العمل الذي يسكن فيه. لذا عندما تخاطب جمهورًا عربيًا يتوزع على 22 دولة، فالنقاش بهذا الموضوع سيكون عقيمًا. لذلك لنصب تفكيرنا بالعمل المستقل: هل هو مربح؟ من ناحية المنصات المتخصصة في هذا المجال، فان العالم العربي فيه فقر شديد بهذا الموضوع. المنصة الوحيدة التي يمكن الربح بشكل جيد من خلالها هي منصة "مستقل". انها منصة تسمح للمبرمجين بعرض خدماتهم، وتتيح لهم فرصة الالتقاء بزبائن لمشاريعهم، وتعمل كوسيط يضمن حقوق المبرمج والزبون على حد سواء. لكن بسبب عدم توافر منصات اخرى، فان المنافسة شديدة بالغاية. لكن طبعا، المحترف سيثبت نفسه مهما اشتدت المنافسة. بعيدا عن منصات العمل، يمكنك ايضا بيع مشاريعك بشكل خاص. افتتاح شركة الكترونية لتطوير مشاريع عبر الانترنت، والاعلان عنها عبر مواقع التواصل الاجتماعي امر ممكن ايضًا. سيحتاج منك الأمر جهد وتعب كبيرين من اجل الوصول الى زبائن، لكن في نهاية المطاف، اذا اردت الوصول الى نجاح كبير، فعلى جهدك ان يكون كبيرًا ايضا. الوسيلة الأخيرة التي سنتكلم عنها للربح من خلال البرمجة هي الاعلانات، ان كانت على موقعك او على تطبيقاتك وألعابك. بامكانك تطوير موقع يجذب زوار، كموقع مقالات مثلا، ووضع اعلانات من ادسينس على سبيل المثال فيه. اذا استطعت الحصول على عدد كبير من الزوار، فيمكنك ربح آلاف الدولارات شهريا منه. او حتى في التطبيقات والألعاب على الهاتف؛ على سبيل المثال، لعبة Flappy Bird المشهورة كانت تحصد اكثر من 50 الف دولار يوميا بسبب الاعلانات (المصدر من Forbes)، بالرغم من كون اللعبة بسيطة جدا من الناحية البرمجية، حيث انه يمكنك تعلم تطوير لعبة شبيهة في اقل من اسبوع! ما جعل هذه اللعبة تجني هذا الرقم الخيالي من الأرباح بالنسبة للعبة بسيطة قام بتطويرها شخص واحد في وقت فراغه هو انها لعبة جديدة، بسيطة ومسلية. لذا خذ هذا المثال كدرس لك: المهم ليس التعقيد، بل الفكرة هي الأساس!
وصلنا الى ختام مقالنا، لذا كنتيجة، تريد ان تعرف ما اذا كانت البرمجة ملائمة لك. الجواب بسيط: هل عند قرائتك لهذا المقال شعرت بحماس لتعلم البرمجة؟ اذا كان جوابك "نعم"، فان العمل كمبرمج قد يكون مناسبًا لك، لكن لايزال هناك عدة شروط عليك ان تستوفيها: هل بامكانك العمل على الحاسوب لعدة ساعات متواصلة بدون ملل؟ ان العمل كمبرمج سيتطلب منك العمل على مشروعك ساعات طويلة من يومك، قد تبلغ ال10 ساعات. اذا كان الجلوس في مكان واحد لا يناسبك، فعليك اعادة التفكير في ما اذا كانت البرمجة فعلا المجال المناسب لك. على كل حال، ننصحك بالتجربة اولا قبل الاقدام على اي خطوة مصيرية (كتغير اختصاصك الجامعي). ما ننصح به هو تعلم اساسيات الـ++C عبر الانترنت. اعطي نفسك اسبوعًا او اسبوعين، وقم بحل تمارين قدر الامكان، عبر استخدام مواقع مثل الـHackerRank. اذا شعرت بعد هذه المدة بانك تريد تعلم المزيد، فستعلم بان هذا الاختصاص لك. اذا شعرت بالملل، او لو تتمكن حتى من انهاء الدورة، فللأسف، لا اظن ان البرمجة ملائمة لك. اذا كان لديك اي سؤال او استفسار، لا تتردد في نشر سؤالك على موقع نقرة، حيث سيجيب عليك مختصين بأسرع وقت ممكن لحل جميع مشاكلك.