فشلتُ في اختبار اللياقة بالجامعة، ولا أرغب في الذهاب إلى التدريب.
جاء العم رائد ليساعدني.
لكنني لم أقم إلا ببضع قرفصاءات، حتى بدأ صدري يثقل ويؤلمني، فارتخت قواي وسقطتُ جالسةً في حضنه، وقلت: "لا أستطيع يا عم رائد، ليست لدي حمالة صدر رياضية..."
كان العم رائد يلهث، وقال: "فاطمة، سأساعدك."
ولم أتوقع أنه سيستخدم يديه الخشنتين ليسند صدري، ويقودني صعودًا وهبوطًا، أسرع فأسرع...
“في ليلة زفافها… لم تكن عروسًا، بل كانت صفقة.”
أُجبرت على الزواج من رجل لا يعرف الرحمة…
رجل بارد، قوي، وغامض…
يرى في هذا الزواج مجرد اتفاق لا أكثر.
لكنه لا يعلم…
أن الفتاة التي دخلت حياته ليست ضحية.
خلف نظراتها الهادئة…
تخفي سرًا قادرًا على تدمير كل ما يملكه.
ومع كل يوم يمر…
تتحول حياتهما إلى ساحة حرب صامتة،
حيث لا أحد يثق بالآخر…
ولا أحد مستعد للخسارة.
لكن ماذا سيحدث…
عندما يتحول الانتقام إلى شيء أخطر؟
🔥 حب؟
أم دمار لا رجعة فيه؟
لقد أمضيتُ ستة أشهر، وأنفقتُ أكثر من 20,000 دولار للتخطيط لعطلة عائلية.
ولكن عندما سمعت حبيبة طفولة رفيقي، فيكتوريا، عن رحلتنا، توسلت للانضمام إلينا.
لم يتردد ألكسندر. ألغى مكاني في القافلة المحمية وأعطاه لها بدلاً من ذلك.
أجبرني على السفر وحدي عبر أراضي قطيع الظل المميتة - رحلة استغرقت ستة وثلاثين ساعة، حيث قُتل ثلاثة ذئاب الشهر الماضي.
دعمت العائلة بأكملها قرار ألكسندر دون أن تفكر لحظة في سلامتي.
لذلك، قمتُ بتغيير خطط سفري. توجهتُ شمالًا بدلًا من الجنوب. قضيتُ ثلاثة أشهر أستمتع بوقتي، متجاهلةً رسائل رابط الذهن الخاصة بهم.
عندها بدأت العائلة تشعر بالذعر...
«هل... هل قلت لي حقاً أنك ستدفع لي ١٠٠٠ يورو مقابل ساعة واحدة، أليس كذلك؟» سألت وهي ترمقه بنظرة مترددة.
«أجل يا إليسا، أؤكد لك أن هذا ما قلته تماماً» أجابها بابتسامة عريضة.
استلقت إليسا على السرير، واقترب منها الرجل الثاني. همست لنفسها أنها يجب أن تكون حذرة، لكن الغريب أنها شعرت بثقة غامرة تجاهه.
«والآن، سيكون عليكِ أن تخلعي ملابسك» قالها بصوته الدافئ والناعم...
---
ثمة لقاءات تقلب حياة الإنسان رأساً على عقب، ولحقات يطرق فيها القدر الباب بعنف يصعب تصديقه. لم تكن إليسا مورو تتخيل أبداً أن خسارتها لعذريتها مقابل ألف يورو في قبو مظلم سيقودها إلى طريق باولو مانشيني، الملياردير ورجل المافيا الذي تمتد إمبراطوريته إلى أبعد مما يمكنها فهمه.
طُردت من شقتها، يائسة ووجهها الواقع القاسي للفقر، فاتخذت إليسا قراراً لن تنساه أبداً. لقد باعت جسدها، ليس من أجل المتعة في البداية، لكن بعد الأحداث، تعودت بل واستمتعت، وبررت لنفسها أنها فعلت ذلك من أجل البقاء.
بالنسبة لباولو، لم تكن هذه القصة عابرة. إليسا، بملامحها اليافعة وبراءتها الملموسة، كانت شيئاً فضولياً في عالم يرتدي فيه الجميع الأقنعة.
لم يكن من المفترض أن توجد قصتهما. ملياردير من عالم المافيا ومراهقة بلا مأوى، لا شيء مشترك بينهما. لكن في عالم كُتب على قواعده أن تُكسر، سيكتشف إليسا وباولو أن الصدفة غير موجودة. الرغبة، الخوف، والأسرار ستنسج خيوطاً تربط بينهما.
في يوم العائلة بروضة الأطفال، تعذر زوجي ياسر الطيب بأن لديه اجتماعا مهما في الشركة، وطلب مني أن لا نحضر أنا وابنتي.
عندما رأيت الحزن على وجه ابنتي الصغير، شعرت بالأسى وقررت أن آخذها بنفسي.
ما إن دخلنا الروضة، حتى رأيت ياسر الطيب يحمل طفلا صغيرا بيد ويمسك بيد سارة النجار، صديقة طفولته، باليد الأخرى.
كانوا يبدون كعائلة حقيقية، يضحكون ويتبادلون الأحاديث في جو من السعادة.
وعندما رآني مع ابنتي، تجعد جبينه قليلا، وترك يد سارة على الفور.
"ليلى العامري، لا تسيئي الفهم. سارة أم عزباء ومن الصعب عليها تربية طفلها وحدها. اليوم عيد ميلاد ابنها الخامس، وأراد أن يشعر بحنان الأب."
نظرت إليه نظرة ذات مغزى، ثم انحنيت وأمسكت بيد ابنتي الصغيرة:
"حبيبتي، سلمي على العم."
قبل زفافي بشهر، قرر خطيبي أن يُنجب طفلًا من امرأةٍ أخرى.
رفضتُ، فظلّ يُلح عليّ يومًا بعد يوم.
وقبل الزفاف بأسبوعين، وصلتني صورة لنتيجةِ اختبارِ حملٍ إيجابية.
عندها فقط أدركت أن حبيبته القديمة كانت بالفعل حاملًا منذ قرابةِ شهرٍ.
أي أنه لم يكن ينتظر موافقتي من البداية.
في تلك اللحظة، تبدد كل الحب الذي دام سنواتٍ، فتلاشى كالدخان.
لذا ألغيت الزفاف، وتخلصت من كل ذكرياتنا، وفي يوم الزفاف نفسه، التحقتُ بمختبرٍ بحثيّ مغلقٍ.
ومنذ ذلك اليوم، انقطعت كل صلتي به تمامًا.
من خلال تجاربي مع أطفال مختلفين لاحظت أن البداية الصحيحة تصنع كل الفرق.
أبدأ دائمًا بالأدوات المرئية لأن عقل الطفل يتفاعل بسرعة مع السحب والإفلات والقصص: 'ScratchJr' و'Kodable' و'Lightbot' ممتازة للأطفال من 4 إلى 8 سنوات. هذه البرامج تعلم مفاهيم أساسية مثل التسلسل، الحلقات، والشروط بطريقة لعبية بسيطة. أحب أن أضع نشاطًا قصيرًا بعد كل جلسة — لعبة ورقية أو تمثيل — لتثبيت الفكرة بدون شاشة.
لأطفال أكبر قليلًا أو للصفوف الابتدائية العليا، أنتقل إلى 'Scratch' و'Code.org' و'Tynker' و'MakeCode' لأنها تمنحهم حرية أكبر لبناء مشاريع تفاعلية أو ألعاب بسيطة. بعدها أخطط لمشروعات صغيرة: لعبة متكاملة، قصة تفاعلية، أو تجربة مع 'micro:bit' أو 'Sphero' للتعرف على الأجهزة الحقيقية. عندما يصبح الطالب مستعدًا للانتقال إلى النصوص البرمجية، أوجّههم نحو 'Python' عبر 'CodeCombat' أو 'Trinket' أو 'Swift Playgrounds' للأطفال المهتمين ببيئة آبل.
ألاحظ أن المزج بين اللعب والمشروعات الواقعية (روبوت بسيط، مجسّم متحرك) والتمارين غير الرقمية يُحافظ على الحماس ويُنمّي مهارات حل المشكلات بصورة أفضل من الاعتماد على برنامج واحد فقط. هذه الخلطة أعطت نتائج رائعة معي في بناء ثقة الأطفال وحبهم للبرمجة.
أجد أن الجواب على هذا السؤال يعتمد كثيرًا على نوع الشغل الرقمي الذي تتصوره وما الذي تحب أن تفعله يوميًا. بعد سنوات من التجربة في مشاريع متنوعة عن بُعد، علّمتني التجربة أن عالم الفرص على الإنترنت يتسع ليشمل مهنًا تقليدية تعتمد على البرمجة، ومجالات إبداعية تعتمد على الكتابة، وفئات ثالثة لا تحتاج أيًّا منهما بشكل عميق.
هناك وظائف تقنية واضحة تطلب مهارات برمجة: تطوير الويب والتطبيقات، تحليل البيانات، أتمتة العمليات، وبناء واجهات برمجية. هذه الأدوار تتطلب فهمًا للغات مثل JavaScript أو Python، ومهارات هندسية في التصميم والاختبار والتعامل مع قواعد البيانات. أما وظائف تعتمد أساسيًا على الكتابة، فهي تتراوح بين كتابة محتوى تسويقي، تدوين، كتابة نصوص الفيديو والبودكاست، والتحرير الصحفي. في هذه الحالات، القدرة على السرد الجيد، الدقّة اللغوية، وفهم الجمهور أهم من معرفة أي كود.
لكن لا تَظُن أن الاختيارات محصورة بين هذين القطبين؛ هناك مساحات وسطى ممتعة. على سبيل المثال، مُصمم محتوى قد يحتاج لبرمجة بسيطة لتهيئة صفحات، وكاتب تقني قد يستفيد من معرفة أدوات إدارة المحتوى أو أساسيات SQL. كذلك ظهرت كثير من أدوات 'لا-برمجة' (no-code) التي تقلل الحاجة لخبرات برمجية عميقة، ما يفتح الباب أمام مسوّقين ومخططين محتوى ومديري منتجات للعمل بفعالية. وفي المقابل، مبرمجون ناجحون يحققون فارقًا كبيرًا حين يطوّرون مهارات كتابة تقنية واضحة لتوثيق أعمالهم وشرح حلولهم للعملاء.
نصيحتي العملية: اختَر طريقًا يحمسك، وابدأ ببناء محفظة أعمال بسيطة. لو كنت تميل للكتابة، انشر مقالات قصيرة، اعمل على مشاريع صغيرة، وطوّر أسلوبك في السرد. لو أميل للجانب التقني، ركّز على مشروع عملي يُظهِر مهاراتك (موقع بسيط، أداة صغيرة، أو تحليل بيانات). الاتقان في مهارات التواصل، إدارة الوقت، والتعلم المستمر غالبًا ما يتفوق على إجادة أداة معينة. في النهاية، ما جذبني للاستمرار هو تنوع المهام والقدرة على مزج المهارات: قليل من الكود، قليل من الكتابة، والكثير من التجربة التي تكشف لك أي درب يناسبك أكثر.
أذكر أنني بدأت رحلة التعلم مع دورات جوجل من دون أي خلفية تقنية، وكانت المفاجأة الجميلة أن العديد منها مهيأ تمامًا للمبتدئين. في أول مساق ألتحقته، شعرت أن اللغة بسيطة والمفاهيم تُشرح خطوة بخطوة، مع أمثلة عملية وتمارين صغيرة تساعد على الفهم. مكتبات الفيديو والمواد النصية عادةً تذكر بوضوح إن كانت الدورة «لا تحتاج خبرة سابقة» أو «مناسبة للمبتدئين»، فكنت أتحقق من هذا الجزء قبل الاشتراك.
لكن ليس كل دورات جوجل بنفس المستوى؛ بعض البرامج المتقدمة تتطلب حلاً بسيطًا للبرمجة أو مفاهيم سابقة. مثلاً، 'Google IT Automation with Python' يفترض أن لديك حس مبدئي في كتابة الأكواد أو أنك مرتاح مع المفاهيم الأساسية للبرمجة، بينما دورات مثل 'Google IT Support Professional Certificate' أو محتوى 'Google Digital Garage' غالبًا ما تبدأ من الصفر وتشرح الأمور العملية بوضوح.
نصيحتي العملية بعد تجربتي: اقرأ وصف الدورة بعناية، انظر إلى قائمة الموضوعات والفيديوهات التجريبية، وابدأ بدورات تضع عبارة «no prior experience» أو «suitable for beginners». إذا شعرت أن هناك فجوة، لا تخف من المرور بدورة تمهيدية قصيرة في أساسيات البرمجة (بايثون مثلاً) ثم العودة. التجربة العملية والتدرج هما أهم شيء، ومع القليل من الصبر ستجد أن معظم مواد جوجل المجانية يمكن الوصول إليها بسهولة، بينما القفز مباشرة إلى المحتوى المتقدم يحتاج استعداد بسيط.
أول ما أبدأ به عندما أقرر تخصيص سيفي لوظيفة برمجة محددة هو قراءة وصف الوظيفة وكأنني أحاول تقمص شخصية المُعلِن: ما هي المهارات المطلوبة؟ ما هي الكلمات المفتاحية؟ بعدها أعدّ ورقة العمل الخاصة بي.
أضع معلومات الخبرة والمهارات الأكثر توافقًا في بداية السيفي—ملخص قصير يذكر لغات البرمجة والأطر والتقنيات التي تطابق الإعلان، مع سطر يوضح نوع المشاريع التي أنجزتها وتأثيرها بأرقام بسيطة (مثل 'خفضت زمن الاستجابة بنسبة 30%'). أعدّل قسم الخبرات بحيث تُسهب في النقاط التي تتقاطع مع متطلبات الوظيفة، مستخدمًا أفعالًا عملية مثل 'صمّمت'، 'طبّقت'، 'حسّنت'، مع ذكر التقنيات المستخدمة في كل نقطة.
أحرص على إبراز روابط عملية: مستودعات GitHub، مشاريع حية، سيرة مصغرة في README، ولقطة شاشة إن لزم. أمحو أو أختصر الخبرات غير المرتبطة بمجال البرمجة، وأعيد ترتيب قائمة المهارات التقنية بحيث تظهر أولًا الأدوات واللغات المطلوبة في الإعلان. وأخيرًا، أتحقق من الكلمات المفتاحية لتتوافق مع أنظمة تتبع المتقدمين (ATS) وأرسل ملف PDF نظيفًا ومُنسقًا؛ هذا الترتيب البسيط يرفع فرصي في المرور للمرحلة التالية.
أحب ربط الأمور ببعضها، وبالنسبة لي تعلم البرمجة كان بمثابة عدسة جعلت الرياضيات تبدو أقل غموضاً وأكثر حياة.
في البداية كنت أتعلم البرمجة لأبني مشاريع صغيرة فقط، لكن سرعان ما صادفت مشكلات تتطلب فهم أساسيات مثل المتغيرات والمنطق الشرطي، وهذا قادني مباشرة إلى مفاهيم رياضية بسيطة مثل الجبر والمنطق البولياني. لاحقاً عندما حاولت رسم حركات لشخصية في مشروع لعبة بسيطة، أدركت أن المتجهات والمصفوفات ليست مفاهيم نظرية فقط بل أدوات عملية تجعل الحركة تبدو واقعية.
بعد تجربة صغيرة مع معالجة البيانات، أصبحت الإحصاء والاحتمالات أموراً يومية؛ فجأة فهمت لماذا المتوسط والانحراف المعياري يساعدان في فهم نتائج الاختبارات أو قياسات الأداء. بالمحصلة، البرمجة جعلت الرياضيات أقل خوفاً وأكثر تطبيقية بالنسبة لي، وبدلاً من حفظ معادلات جافة بدأت أرى أنها لغة لوصف الحلول، وأن إتقانها يفتح أبواباً لإبداع عملي حقيقي.
تفاصيل عمل استوديو التحريك على شخصية 'بيكي' مليانة حيل تقنية وفنية، وكنت متابع لكل خطوة لأنها مزيج جميل من الحرفية والابتكار.
في البداية كان كل شيء يبدأ من الورق: لوحات مفهوم تحدد الشخصية من حيث الحجم، والتعابير، وأسلوب الحركة الذي يناسب شخصيتها. بعد ذلك انتقل الفريق إلى النمذجة ثلاثية الأبعاد بنحت عالي الدقة لصياغة أشكال عضلات الوجه وتفاصيل الملابس، ثم يقومون بعمل إعادة تبسيط هندسية (retopology) لتجهيز الشخصية لمرحلة التحريك. الحيز الأهم كان الـrig: بناء هيكل عظمي رقمي مع تحكمات متقدمة للوجوه—مزيج من المفاصل التقليدية و'blendshapes' لتعابير الوجه، مع أنظمة تصحيح وضعيات (corrective shapes) لضمان عدم تشويه الموديل عند التحركات القاسية.
من ناحية الحركة استوديوهات كثيرة تعتمد على مبدأين متوازيين؛ استخدموا تسجيل حركة (motion capture) لالتقاط الإيقاع العام والحركات الكبيرة، ثم مرّروها خلال عملية تنظيف وإعادة توزيعات ليتناسب مع أسلوب 'بيكي'—هنا يأتي دور الأنيماتور الذي يضيف اللمسات اليدوية: مبالغة في الإيماءات، توقيت مختلف للخطوط الحوارية، وقواعد الـsquash and stretch لتكريس الطابع الكارتوني إذا احتاج المشهد. الوجوه غالبًا تعاملت عبر مزج بين تتبع تعابير الوجه الحي (facial mocap) وكتب تعابير جاهزة ليستطيع الفنانان خلق تفاصيل دقيقة كوميض العين أو ارتعاش الشفة.
الملابس والشعر كان لهما طبقة أخرى من الواقعية: محاكاة الأقمشة عبر أدوات مثل 'Marvelous Designer' أو نماذج في هوديني، وشعر يعتمد على بطاقات شعر أو أنظمة شعر فعلية مع محاكاة ثانوية تلتقط الريح والحركة. المواد والـshaders مزيج بين ملمس منطقي وإضاءة موجهة للحفاظ على أسلوب العمل الفني؛ أعين 'بيكي' مثلاً عولجت بعدة طبقات لعكس الضوء وإظهار الرطوبة بطريقة دقيقة دون أن تفقد الأسلوب الرسومي. أخيرًا، عملية الاندماج مع الإخراج تضمنت اختبارات ضوء يومية، playblasts، وجلسات نقد لتعديلات الطاقات الحركية حتى نشعر أن 'بيكي' تتنفس وتفكر وتتحرك بشكل حي ومقنع. بالنسبة لي، أكثر ما جذبني هو الانتباه للتفاصيل الصغيرة—حركة جفن، تغيير بسيط في الوزن عند الوقوف—هذه الأشياء هي اللي تخلي الشخصية حية فعلاً.
أعتبر محفظة المشاريع كالسيرة المرئية التي تقرأها الشركات عني قبل المقابلة.
أبدأ دائماً بتحديد هدف المحفظة: هل أريد دور مهندس واجهات أمامية أم منصب هندسي عام؟ بعد تحديد الهدف أختار 5 إلى 8 مشاريع تمثل أفضل ما لدي — مزيج من مشاريع شخصية حقيقية، مساهمات مفتوحة المصدر، ومشاريع عمل أو تدريب إن وُجدت. لكل مشروع أكتب دراسة حالة قصيرة توضح المشكلة التي حلتها، دوري بالضبط، التقنيات المستخدمة، وأهم النتائج أو المقاييس (مثل: زيادة أداء الصفحة بنسبة 40%، خفض زمن الاستجابة من 800ms إلى 200ms). أضع أيضاً رابطاً للمستودع ونسخة حية إن أمكن، وصور شاشة أو فيديو عرض سريع مدته 1–3 دقائق يشرح الفكرة.
أهتم بجودة العرض بقدر اهتمامي بجودة الكود: صفحة هبوط بسيطة للمحفظة تحمل نبذة واضحة، رابط للسيرة الذاتية، طرق التواصل، ومقاطع توضيحية. في المستودعات أحرص على README مرتب، أمثلة تشغيل، اختبارات أساسية وملفات تكوين CI. ولا أنسى قسم يوضح قرارات التصميم والمشاكل التي لم أحلها بعد؛ الصراحة تنقل نضجاً مهنياً. أختم بأن أراجع المحفظة كل بضعة أشهر، أزيل المشاريع الضعيفة وأحسّن شرح المشاريع القوية، فالمحفظة نهج حي يتطور مع كل مشروع جديد.
كل مشروع برمجي كبير بالنسبة لي أشبه ببناء مدينة: تحتاج شوارع (البنية التحتية)، قوانين مرورية (عمليات)، ومراكز مراقبة (مراقبة وأخطاء). خلال سنوات عملي، تعلمت أن الأدوات ليست رفاهية بل ضرورة لتنظيم العمل وجعله قابلاً للتكرار.
أبدأ دائماً بأدوات التحكم في الشيفرة—'git' مع منصات مثل GitHub، GitLab أو Bitbucket لتخزين التاريخ وإدارة فروع العمل. على مستوى التكامل المستمر والنشر المستمر (CI/CD) نعتمد على Jenkins أو GitLab CI أو GitHub Actions وربما CircleCI لبناء الحزم وتشغيل الاختبارات ونشر النسخ تلقائياً. أدوات البناء وإدارة الحزم مثل Maven، Gradle، npm، yarn، وpnpm مهمة لبيئات لغات متعددة، بينما Bazel مفيد للمشاريع الضخمة متعددة المكاتب.
أما جودة الشيفرة والاختبارات فهناك SonarQube وESLint وpylint لاكتشاف المشكلات المبكرة، وإطارات اختبار مثل JUnit، pytest، Jest. لا أنسى إدارة الحاويات ونسق البيئة: Docker وDocker Compose لتوحيد بيئة التطوير، وKubernetes لإدارة الحاويات على نطاق الإنتاج. للبنية التحتية ككود نستخدم Terraform، Ansible، أو CloudFormation لتجسيد الموارد بشكل قابل للإصدار.
لمراقبة الأنظمة واكتشاف المشكلات نعتمد على Prometheus وGrafana للقياسات، وELK Stack أو Loki/Fluentd للوجات، وJaeger أو OpenTelemetry للتتبع الموزع. وأخيراً أدوات إدارة المشاريع والتذاكر مثل Jira، Confluence، وTrello تحافظ على تنظيم المتطلبات والمهام. عندما تُدمج كل هذه الأدوات مع سياسات مراجعة الشيفرة واختبارات آلية وSLOs واضحة يصبح المشروع كبيراً لكنه قابل للإدارة، وهذا ما يجعلني أشعر بالأمان عند إطلاق تحديثات جديدة.
أستطيع أن أعدّ قائمة بالأسباب التي تجعل سوق العمل قاسٍ على خريج هندسة البرمجيات، لكن أهم ما يلفت نظري هو الفجوة العملية بين الدراسة والحاجة الحقيقية للشركات.
الجامعات تعطيك أساساً نظرياً مهماً، لكن كثير من الخريجين يخرجون بدون مشاريع حقيقية تُعرض لرب العمل؛ مشاريع تُبيّن أنك بنيت نظامًا، حليت مشكلة أداء، أو عملت ضمن فريق. كذلك، المناهج قد تكون قديمة بالنسبة للتقنيات المطلوبة اليوم مثل الحوسبة السحابية، الحاويات، أو أنماط التصميم الحديثة. النتيجة؟ سيرة ذاتية تبدو جيدة على الورق لكنها لا تنقل القدرة على التنفيذ.
أضف إلى ذلك نقص المهارات الشخصية: التواصل، العرض، إدارة الوقت، والعمل ضمن فريق. كثير من مقابلات التوظيف تبحث عن خبرة ملموسة وحل مشاكل واقعية، وليس مجرد درجات جيدة. المنافسة شرسة أيضاً؛ مئات السير الذاتية تصطف أمام كل فرصة عمل، وشركات التوظيف تستخدم مرشحات آلية تقصي المرشحين غير المطابقين للكلمات المفتاحية.
نصيحتي العملية: ركّز على بناء ملف أعمال عملي على GitHub، وأنجز مشروعًا واحدًا يمكنك شرحه من البداية للنهاية، شارك في مشاريع مفتوحة المصدر، واطلب تدريبًا صغيرًا أو عملًا حرًا حتى لو بأجر ضئيل للحصول على خبرة فعلية. وأهم شيء: تعلم كيف تحكي قصتك في المقابلات — ماذا بنيت، ما التحدي، وما النتيجة. بهذه الخطوات تتحول من مجرد خريج إلى شخص يمكنه إثبات قدرته في أول يوم عمل، وهذا ما يفتح الأبواب فعلاً.
أتذكر مختبر الاختبارات في الجامعة وكأنها معسكر تدريبي صغير: بين أدوات قياس التغطية، وحركات كتابة حالات الاختبار، تعلمت أن الاختبار ليس مجرد الضغط العشوائي على الأزرار.
في البداية، منحتني دورات هندسة البرمجيات إطارًا منظَّمًا لفهم أنواع الاختبارات—وحدة، تكامل، نظام، قبول—فقط لأن المُحاضر فصل المفاهيم وطلب منا تصميم حالات اختبار لكل مرحلة. هذا التنظيم جعلني أتعلم كيف أترجم متطلبات غير واضحة إلى سيناريوهات قابلة للاختبار، وهو مهارة لا تُقدَّر بثمن في سوق العمل.
بعدها جاء التطبيق العملي: كتابة اختبارات وحدية باستخدام مكتبات، وقياس التغطية، ومحاكاة المكونات، ثم ربط كل ذلك بأنظمة التكامل المستمر. أكثر ما أثر فيَّ كان تمرينان؛ أحدهما على كتابة اختبارات لميزة جديدة دون الاطلاع على الكود الأصلي، والآخر كان تقارير عيوب تُظهِر كيف يُمكن لحالة اختبار جيدة أن تكشف افتراضًا خاطئًا لدى المصمم. هذه الدورات بدّلت طريقتي في التفكير: من البحث عن حل سريع إلى التفكير بمنطق «هل يمكن اختباره؟»، وهذا التحول هو ما يصنع مطوِّرًا واعيًا وصانع برامج أكثر موثوقية.