بداية جديدة... وهذه المرة بالعربية!


في ديسمبر من عام 2021، نشرت أول تدوينة لي باللغة الإنجليزية بعنوان Hello World. كنت حينها في سنتي الجامعية الأخيرة، متحمسًا لما تحمله لي الأيام المقبلة.
لم أكن أطيق الانتظار حتى أتخرج، وأبدأ مسيرتي المهنية في هندسة البرمجيات، وأضع ما تعلمته موضع التطبيق.
في ذلك الوقت، كنت أتخيل نفسي مطور ويب شامل (Full-Stack Developer). أردت أن أعمل على مختلف أجزاء الأنظمة البرمجية، وأحل المشكلات المثيرة للاهتمام، وأحوّل الأفكار إلى برمجيات حقيقية.
لكن يبدو أن الحياة كانت تخبئ لي مسارًا مختلفًا!
فبين التخرج، والانتقال من قارة إلى أخرى، والتأقلم مع مرحلة جديدة من حياتي، حصلت أخيرًا على أول وظيفة لي في هندسة البرمجيات.
والمفاجأة أنها كانت في تطوير تطبيقات الهواتف الذكية باستخدام React Native، وهو مجال لم أكن أتخيل أن أبدأ فيه مسيرتي المهنية.
لم تسر الأمور وفق الخطة تمامًا، هاها!
لكن عندما أنظر إلى تلك الفترة اليوم، أشعر بالامتنان لأن الأمور سارت على هذا النحو.
فقد تعلمت الكثير خلال السنوات الماضية، وبما أن هذه أول تدوينة أنشرها بالعربية، أحببت أن أبدأ بمشاركة خمسة دروس غيّرت نظرتي إلى هندسة البرمجيات.
1. قد يغيّر المسار غير المتوقع نظرتك إلى الأمور
عندما بدأت العمل باستخدام React Native، لم أكن مقتنعًا تمامًا بأنه المجال المناسب لي.
لطالما أردت أن أصبح مطور ويب شامل، وكنت أنظر إلى تطوير تطبيقات الهواتف الذكية على أنه أقرب إلى تطوير الواجهات الأمامية (Frontend).
وكنت أعتقد أن القرارات المتعلقة بتصميم الأنظمة (System Design)، والتحديات الهندسية الأكثر تعقيدًا وإثارة للاهتمام، تقع في الغالب ضمن الأنظمة الخلفية (Backend).
واليوم، أدرك مدى محدودية تلك النظرة. ومع ذلك، قررت أن أمنح React Native فرصة، وأنا سعيد بأنني فعلت ذلك.
كانت لدي بالفعل خبرة في البرمجة اكتسبتها من خلال مشروعات مختلفة ودراستي الأكاديمية، لكن العمل في بيئة مهنية أضاف إلى تلك الخبرة مسؤوليات وتحديات من نوع آخر.
فإلى جانب البناء على ما تعلمته سابقًا، بدأت أكتسب خبرة أعمق في التعاون مع المهندسين الآخرين، وفهم الأنظمة البرمجية القائمة، وتسليم برمجيات يعتمد عليها الناس في حياتهم وأعمالهم.
ومع مرور الوقت، بدأت أقدّر الجوانب التي تجعل تطوير تطبيقات الهواتف الذكية مجالًا ممتعًا بحد ذاته.
فالهواتف الذكية ليست مجرد شاشات لعرض المعلومات؛ بل تحتوي على تقنيات وإمكانات عديدة يمكن للمطورين الاستفادة منها، مثل الكاميرات، ونظام تحديد المواقع (GPS)، ومستشعرات الحركة والدوران، وتقنية الاتصال قريب المدى (NFC)، وغيرها الكثير.
أضف إلى ذلك الاختلافات بين أنظمة التشغيل، وأداء الأجهزة، وجودة الاتصال بالشبكة، وتوقعات المستخدمين. كل هذه العوامل تفرض تحديات قد لا تواجهها بالطريقة نفسها عند تطوير تطبيقات الويب.
وكلما تعمقت في تطوير تطبيقات الهواتف الذكية، ازداد إدراكي بأنه تخصص هندسي مثير للاهتمام، وله تحدياته وفرصه الخاصة.
ولعل أهم ما تعلمته هو أن تطوري كمهندس برمجيات لا يتطلب مني العمل في جزء محدد من المنظومة التقنية.
2. عنوانك الوظيفي لا يحدّد قدراتك
لم يتلاشَ اهتمامي بتطوير الأنظمة الخلفية، بل ما زلت أرغب في التوسع في هذا المجال.
لكن الذي تغير هو فهمي لطبيعة هذا الاهتمام.
أدركت أنني لم أكن أسعى بالضرورة وراء مسمى وظيفي معين، أو أرغب في استخدام تقنية محددة لمجرد استخدامها. ما كنت أريده حقًا هو فهم كيفية ترابط أجزاء الأنظمة المختلفة، وامتلاك القدرة على المساهمة في حل المشكلات أينما وُجدت.
وهذا دفعني بطبيعة الحال إلى التفكير في الأنظمة البرمجية بصورة أشمل.
أصبحت أكثر اهتمامًا بفهم ما قد يحدث عند وقوع خلل، وتحديد نقاط الفشل المحتملة، وكيف يمكن لقرار يُتخذ في جزء من التطبيق أن يؤثر في أجزاء أخرى منه.
وتعلمت أن المسميات الوظيفية، وإن كانت تساعد في تحديد مسؤولياتنا، لا ينبغي أن تحدد حدود فضولنا أو ما نستطيع تعلمه.
وقد جعلني هذا الإدراك أكثر شغفًا بهندسة البرمجيات.
3. لست مضطرًا لأن تكون الأذكى في الغرفة
هناك درس آخر تعلمت تقديره مع مرور الوقت: ليس مطلوبًا منك أن تمتلك الإجابات كلها.
فكلما اكتسبت خبرة أكبر، ازداد إدراكي لحجم ما لم أتعلمه بعد.
قد يكون أحد زملائي أكثر فهمًا لنظام معين، أو يلاحظ مشكلة فاتتني، أو يقترح حلًا لم يخطر ببالي.
ولا بأس في ذلك!
لقد تعلمت أن أقدّر طرح الأسئلة، ومناقشة الأفكار، والاستماع إلى المهندسين الآخرين، حتى عندما تتعارض آراؤهم مع آرائي.
فنحن في نهاية المطاف نعمل لتحقيق هدف مشترك. وبالنسبة إليّ، أفضل أن أتعلم شيئًا جديدًا، وأن أساهم في تقديم حل أفضل، على أن أتمسك برأيي لمجرد إثبات صحته.
4. آمن بالمنتج الذي تبنيه، لا بالتقنية وحدها
عندما كنت في بداية مسيرتي، كنت أهتم كثيرًا بالتقنيات التي سأحظى بفرصة العمل بها.
وما زلت أهتم بها بالطبع! فأنا أستمتع باستكشاف لغات البرمجة المختلفة، وأطر العمل البرمجية (Software Frameworks)، والأساليب المتنوعة لبناء البرمجيات.
لكن هناك أمرًا لم أكن أقدّر أهميته بما يكفي، وهو الإيمان بالمنتج الذي تعمل على تطويره.
فعندما تفهم ما يسعى المنتج إلى تحقيقه، وتهتم فعلًا بالأشخاص الذين يستخدمونه، تبدأ قراراتك التقنية باكتساب معنى مختلف.
لم يعد السؤال مقتصرًا على اختيار إطار عمل برمجي أو تصميم النظام الذي سيكون ممتعًا بالنسبة إليك، بل أصبح يتعلق بما يناسب المنتج، وكيف يمكنك المساهمة في تحسينه.
وأصبحت أؤمن بأن هندسة البرمجيات، شأنها شأن سائر التخصصات الهندسية النبيلة، تقوم في جوهرها على توظيف الحلول التقنية لمعالجة مشكلات الناس.
فسواء كنا نعمل على تبسيط عملية معقدة، أو تسهيل مهمة يومية، أو توفير المزيد من الوقت لشخص ما، فإن غايتنا في النهاية هي بناء شيء مفيد.
وعندما أفكر في الأمر اليوم، أعتقد أن هذه الرغبة هي ما جذبتني إلى تطوير الويب الشامل (Full-Stack Development) منذ البداية.
5. الهندسة الجيدة تتطلب قرارات سليمة ونقدًا بنّاءً
بالطبع، امتلاك فكرة أمر، وتحويلها إلى برنامج يعمل على أرض الواقع أمر آخر.
في العمل الهندسي، نتعامل باستمرار مع مجموعة من القيود، منها الوقت، والموارد المتاحة، ومتطلبات الأداء، والبنية الحالية للأنظمة، وقابلية الصيانة، وغيرها من الاعتبارات.
وهناك أمر أصبحت أكثر اقتناعًا به مع مرور الوقت:
لا يوجد حل مثالي. نقطة على السطر!
فلكل نهج مزاياه وعيوبه. ومن مسؤولياتنا كمهندسين أن نفهم المفاضلات بين الحلول (Trade-offs)، ونناقشها بوضوح، ونتخذ أفضل القرارات الممكنة بناءً على المعلومات المتاحة.
لكن اتخاذ القرارات الجيدة ليس سوى نصف المعادلة؛ فعلينا أيضًا أن ننجز العمل ونسلّمه.
المواعيد النهائية مهمة، وتحقيق الأهداف المتفق عليها مهم، ووصول البرمجيات إلى أيدي مستخدميها مهم.
فما فائدة الحل الأنيق هندسيًا إن لم يتمكن الأشخاص الذين يحتاجونه من استخدامه؟
وتعلمت أيضًا أن سرعة كتابة الكود لا تعني بالضرورة الكفاءة في تسليم البرمجيات.
فالقدرة على تحويل فكرة إلى كود بسرعة مهارة مفيدة، لكن علينا كذلك أن نراعي الأداء، والخوارزميات، والتعقيد الحسابي، واستهلاك الذاكرة، ومدى ملاءمة الحل على المدى الطويل.
وأحيانًا، قد يوفر علينا قضاء بعض الوقت الإضافي في التفكير في المشكلة ساعات طويلة من العمل لاحقًا.
وهنا يكمن جزء من التحدي بالنسبة إليّ: إيجاد التوازن المناسب بين الجودة، والأداء، وقابلية الصيانة، والتسليم في الوقت المناسب.
ومع التطور المتسارع لقدرات الذكاء الاصطناعي (AI)، أعتقد أن تحقيق هذا التوازن أصبح أكثر أهمية.
أنا متحمس لما يتيحه الذكاء الاصطناعي من فرص لتطوير البرمجيات بوتيرة أسرع، وأتمتة المزيد من العمليات، وبناء حلول ربما لم يكن تنفيذها عمليًا في السابق.
لكن القدرة على توليد الكود بسرعة أكبر لا تلغي الحاجة إلى فهم ما نبنيه، أو تحمل مسؤولية القرارات التي نتخذها أثناء تطويره.
بل أعتقد أنها تمنحنا مساحة أكبر للتركيز على تلك القرارات.
وهذا جانب أتطلع إلى مواصلة التعلم فيه، مع استمرار تطور قطاع البرمجيات.
إذًا، لماذا عدت إلى الكتابة؟
وهنا أعود إلى هذه المدونة، وإلى سبب غيابي عنها طوال هذه المدة.
خلال السنوات الماضية، أمضيت وقتًا طويلًا أحاول فيه إعادة اكتشاف نفسي، على المستويين الشخصي والمهني.
ومع نضوجي وتغير نظرتي إلى الأمور، بدأت أشعر بأنني لم أعد أرى نفسي تمامًا في الشخص الذي كتب أول تدوينة بعنوان Hello World.
لم أفقد اهتمامي بالكتابة أو مشاركة الأفكار، لكنني لم أعد متأكدًا مما أريد قوله. ولم أرغب في نشر تدوينات لمجرد إبقاء المدونة نشطة.
كنت أريد أن يكون لدي شيء يستحق المشاركة.
واليوم، وبعد كل هذا الغياب، أشعر بأن لدي أخيرًا ما أود قوله.
ليس لأنني توصلت إلى إجابات عن كل شيء، بل على العكس تمامًا! فما زال أمامي الكثير لأتعلمه، وأنا واثق بأن نظرتي إلى الأمور ستواصل التطور.
لكن لدي اليوم تجارب أود مشاركتها، ودروس تعلمتها، وأسئلة أتطلع إلى استكشافها مع مطورين آخرين.
أؤمن بأن التجربة الإنسانية تصبح أكثر ثراءً عندما نتشارك ما تعلمناه مع الآخرين.
فنحن جميعًا ننحدر من خلفيات مختلفة، ونحمل تجارب وطرق تفكير متنوعة. وقد أسهمت رحلتي الخاصة في تشكيل الطريقة التي أتعامل بها مع المشكلات، تمامًا كما قد تساعدني تجارب شخص آخر على رؤية الأمور من زاوية لم أفكر فيها من قبل.
وهذا أحد أكثر الأمور التي أحبها في الانتماء إلى مجتمع المطورين.
ومن خلال هذه المدونة، أتطلع إلى مشاركة ما أتعلمه وما يشغل تفكيري، سواء كان ذلك حول React Native، أو تطوير الأنظمة الخلفية، أو تطوير الويب الشامل، أو الذكاء الاصطناعي، أو هندسة البرمجيات عمومًا.
ربما تجد هنا شيئًا يفيدك، أو تختلف معي في أحد آرائي، أو تشاركني فكرة لم تخطر ببالي من قبل.
وأيًا يكن، فإنني أتطلع إلى هذه الحوارات.
رسالة إلى نفسي قبل سنوات
قبل أن أختم هذه التدوينة، أود أن أشارك فكرة أخيرة.
لو أتيحت لي فرصة العودة إلى ديسمبر 2021، والجلوس مع نسختي الأصغر سنًا، التي كانت قد نشرت لتوها أول تدوينة لها، فهذا ما كنت سأقوله:
إلى نفسي في ذلك الوقت،
واصل المسير، ولا تتوقف عن المحاولة، ولا تسمح للحظات التي لا تسير فيها الأمور وفق ما خططت له أن تثبط عزيمتك.
عندما أنظر إلى الماضي، لا أذكر موقفًا لم تنفرج فيه الأمور في نهاية المطاف، بطريقة أو بأخرى.
هذا لا يعني أن كل شيء حدث كما توقعته، أو حتى كما أردته. بل على العكس! لكنني تمكنت، بطريقة ما، من تجاوز تلك التجارب، وأؤمن بأنك ستتمكن من ذلك أيضًا.
يمكنني أن أحاول شرح كل ما تعلمته خلال هذه السنوات، لكنني لا أعتقد أنك ستدرك معناه حقًا حتى تخوض تلك التجارب بنفسك.
فهناك دروس لا تكفي الكلمات وحدها لتعليمنا إياها. عليك أن تعمل، وتتخذ القرارات، وتخطئ، وتتعلم من أخطائك. عندها ستبدأ أمور كثيرة بالاتضاح لك، على نحو لم تكن تدركه من قبل.
وفي النهاية، ثق بتدبير الله، وثق بقدرتك على العمل والإبداع والنمو. لا تخشَ عيوبك ونقاط ضعفك، ولا تسمح لها بأن تحدد ما يمكنك أن تصبح عليه. فهي، في نهاية المطاف، جزء مما يجعلك إنسانًا.
إلى فصل جديد، وتجارب جديدة، وآمل أن يحمل معه الكثير من الحوارات الممتعة.
طال الغياب، ويسعدني أن أعود إليكم. ألقاكم في التدوينة القادمة!
