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

دقائق القراءة: 13

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

الدرس الأول: ركز على العملية، لا على النتيجة النهائية

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

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

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

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

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

الدرس الثاني: Stack Overflow رائع (ولكنه خطير)

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

استمرت هذه العملية لفترة من الوقت حتى أدركت في النهاية عيوب نهجي. Stack Overflow نعمة ونقمة في آن واحد. إنه رائع في مساعدتك على حل المشكلات، ومع ذلك، إذا لم تكن حذراً، يمكنك أن تصبح سريعاً معتمداً على الموقع. أحياناً يكون الموقع جيداً جداً في حل المشكلات، مما يخلق شعوراً زائفاً بالثقة يمكن أن يؤدي إلى المزيد من المتاعب لاحقاً. يوضح لك Stack Overflow كيفية جعل شيء ما يعمل، لكنه لا يخبرك عادةً بشكل صريح لماذا يعمل. فهم “كيف” مهم؛ يجب إصلاح الأخطاء ويجب أن يعمل الكود. ومع ذلك، فإن فهم “لماذا” يعمل شيء ما هو ما سيساعدك على تطبيق المعرفة مرة أخرى في المستقبل. الأمر يشبه المقولة الشهيرة: “أعطِ رجلاً سمكة، تطعمه ليوم واحد. علّمه كيف يصطاد، تطعمه مدى الحياة.” نسخ ولصق الكود من Stack Overflow يشبه إعطاء شخص سمكة. فهم سبب عمل جزء من الكود يشبه تعليمه الصيد.

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

الدرس الثالث: تعلم كيفية العثور على المساعدة من ذوي الخبرة

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

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

في نفس الوقت تقريباً الذي حدثت فيه كارثة FFMPEG، سجلت في فصل دراسي عن البرمجة الشيئية (Object Oriented Programming). بصراحة، لست متأكداً كيف تمكنت من الدخول. اكتشفت لاحقاً أنني كنت الطالب الوحيد غير المتخصص في علوم الحاسوب في الفصل. أعتقد أنه كان هناك خطأ في برنامج التسجيل. كانت المهمة الأولى هي بناء برنامج لعبة Blackjack. كنت أتعلم البرمجة ذاتياً لمدة 5-6 أشهر في هذه المرحلة، وشعرت ببعض الثقة في مهاراتي. أنهيت المهمة وشعرت بالرضا عن عملي. لم يدم هذا الشعور طويلاً. كان برنامجي بأكمله مكتوباً في دالة واحدة ضخمة. تقريباً كل شخص آخر في الفصل كان قادراً على إدراك أن البرنامج يحتاج إلى تقسيمه إلى فئات (classes). لم يكن هذا جيداً.

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

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

الدرس الرابع: صمم بيئة عملك بذكاء

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

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

  • ابحث عن مكان لا يقطع فيه الناس تركيزك.
  • ضع هاتفك في وضع الطيران (airplane mode).
  • استخدم نوعاً من أدوات حظر المواقع الموقوتة لوسائل التواصل الاجتماعي ومواقع الأخبار.
  • ارتدِ سماعات رأس واستمع إلى موسيقى غير مشتتة (يفضل قائمة تشغيل طويلة حتى لا تضطر إلى تبديل الأغاني باستمرار).
  • تجنب التلفزيون أو أي محيط آخر شديد التحفيز.
  • احتفظ بدفتر ملاحظات قريباً لتدوين أي مهام أو أفكار تخطر ببالك.
  • أخبر من حولك أنك لا ترغب في أن يتم إزعاجك.

أنت وحدك من يقرر أين وكيف تصمم بيئتك. ولكن تأكد من أن تفعل ذلك، لأنه يستحق العناء.

الدرس الخامس: اخرج إلى العالم والتقِ بالناس

كان حصولي على أول وظيفة برمجة لي نوعاً من الصدفة. لقد انتقلت للتو إلى أوماها، نبراسكا، وكان لدي حوالي عام من الخبرة في التطوير الذاتي. كنت أعرف عدداً قليلاً جداً من الأشخاص في أوماها، لذلك بحثت في موقع Meetup.com لمحاولة العثور على أشخاص آخرين مهتمين بتطوير Android. وجدت مجموعة Meetup تركز على تطوير الأجهزة المحمولة والتي تغطي تطوير كل من iOS و Android وقررت الذهاب. كان الذهاب إلى ذلك الاجتماع الأول مرهقاً للأعصاب. قضيت حوالي 10 دقائق في سيارتي في مكان الاجتماع أقرر ما إذا كان يجب أن أدخل أم أرحل. كنت خائفاً. لم أكن واثقاً من مهاراتي البرمجية وكنت أعرف أن كل شخص في Meetup لديه خبرة أكبر بكثير مني. أخيراً قلت: “لا يهمني” ودخلت. أنا سعيد لأنني فعلت ذلك.

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

تحول التدريب إلى وظيفة بدوام كامل، وبدأت مسيرتي المهنية كمطور برمجيات. عندما تكون عصامياً، لن يأتي الناس ويبحثون عنك. ستحتاج إلى إيجاد الفرص لنفسك. يتمتع خريجو الجامعات لمدة أربع سنوات ومدارس الكود بميزة الاستفادة من شبكة مدرستهم عند البحث عن وظيفة. المطورون العصاميون لا يتمتعون بهذا الترف. سيحتاج المطورون العصاميون إلى الخروج إلى العالم وبناء شبكاتهم بأنفسهم. يمكن أن ينجح الاتصال البارد بالموظفين وإرسال السير الذاتية. ومع ذلك، وجدت أن الناس يفضلون توظيف الأشخاص المقربين منهم في شبكتهم الاجتماعية. مواقع مثل Meetup.com رائعة للعثور على مجموعات شهرية متخصصة في البرمجة. حتى في ظل الوباء، لا يزال هناك العديد من اجتماعات Meetup الافتراضية المفيدة جداً. هناك أيضاً قنوات Slack أخرى أو مجتمعات Discord يمكنك الاستفادة منها لإقامة علاقات ذات معنى. يمكنك أيضاً محاولة التواصل مع أشخاص مختلفين في منطقتك وطلب إجراء محادثة قهوة افتراضية سريعة لمدة 15 دقيقة معهم. افعل ما بوسعك لتبني الشجاعة للتواصل والتحدث مع الناس. كن ودوداً وتحدث معهم عن تجاربك. تأكد من أن الناس يعرفون هدفك طويل المدى في العثور على وظيفة. ضع نفسك في مواقف قد يحدث فيها شيء إيجابي. لا يمكنك الفوز في سحب يانصيب إذا لم تشترِ تذكرة أبداً. فكر في أي فرصة تأتي في طريقك، لأنه حتى لو بدت وكأنها طريق مسدود، فإن لديها القدرة على أن تؤدي إلى شيء أكبر.

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

آمل أن تتعلم من أخطائي وترتكب أخطاء جديدة ومثيرة خاصة بك

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

شكراً للقراءة. إذا كنت ترغب في معرفة المزيد من الرؤى التي تعلمتها على طول الطريق، تابع حسابي Zero to Programmer على Twitter. هدفي هو مساعدتك على تعلم البرمجة بكفاءة أكبر.

الخلاصة التقنية

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

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *