حينما كُنت أعمل في وظيفة “محلل دعم تقني” لم يكن عملي مقتصراً على حُدود مسمى الوظيفة، كانت مهمتي فعلياً دعم الفريق كاملاً لإنجاح الإصدارات الشهرية للنظام الذي نعمل عليه.
انضمّ إلى فريقنا عضوٌ جديد، فاجتمع الفريقُ لتعريفه بأعضاء الفريق قبل حضوري، فأتيتُ أثناء الاجتماع وعند دُخولي طُلب مني تقديمُ نفسي ومهمتي بالفريق.
رددتُ بجملتين..
إسمي مصطفى الطيب، أنا جامعُ النفايات Garbage Collector
تعالت بعضُ الضحكات والابتسامات وهو ما قصدتُه ولم أزد على ذلك.. فبرغم الطرفة كان الجميع يعلم أن هذه هي مهمتي الحقيقية. جامعُ نفايات الفريق كما يفعل جامعُ النفايات في آلة جافا الافتراضية JVM.
لم تُوجد البرامج التي تعمل دون أخطاء بعد، توقّع الأخطاء بعد إطلاق الإصدارات دائماً
ما قبل وأثناء عملية إطلاق الإصدارة الشهرية تأتي العديد من المشاكل التي ربما تكون بسبب أخطاءٍ برمجيّة بسيطة أو مُركّبة، منطقيّة أو تقنيّة أو حتى تجاريّة.
تحتاجُ الأخطاء دوماً إلى عمليّة تحليل أوّلي لتحديد مصدر الخطأ، يليها إسنادُها إلى الشخص المناسب في القسم المناسب لإصلاح ذلك الخطأ.
من بين هذه الأخطاء المتنوعة نتطرق في هذه التدوينة إلى الأخطاء البسيطة، هي أخطاءٌ تقنيّة صغيرة تحدثُ من قبل المبرمج سهواً أو دون قصد أثناء البرمجة ولكنها على عكس الأخطاء الأخرى يصعبُ إيجادها إلى حد كبير. سترى بعد قليل لماذا يحدث ذلك.
قبل أن نرى أمثلة لهذه الأخطاء البسيطة، يجب أن تأخذ بعين الاعتبار أن هذه ليست قوانين إطلاقاً كما أنها لا تمنع النظام من العمل أبداً .. ولكن المحصلة النهائية لها هي إما أخطاء أثناء التنفيذ أو رفع درجة صعوبة تحليل الشفرة المصدرية وإصلاح الأخطاء مستقبلاً.
خداعُ الحرُوف البصري!
هل تعلم |نّ حرف الألف المكتوب في كلمة “أن” السابقة ليس حرف ألف؟ إنّها علامة “أو” البرمجية. عُد إليها الآن وانسخها في ملف Notepad وكبّرها وتأكد 🙂
لقد خدعك توقُّعك لحرف الألف أو أن علامة “أو” البرمجية قد خدعتك .. اختر أيَّهما أحبُّ إليك 🙂
سُقت لك هذا المثال باللغة العربية، ولكن اللغة الإنجليزية مليئة بالمتشابهات من الأحرف والأرقام والعلامات مثل:
- حرف إل الصغير l وعلامة أو |.
- حرف B ورقم 8 في بعض الخطوط.
- حرف آي الكبير I و رقم 1.
- حرف S ورقم 5.
انظر للشفرة المصدرية التالية مثلاً
public static void main(String args[]){ Long totalRevenue = 5325l; System.out.println(" Total Revenue = " + totalRevenue); }
هل تعلم ما هو الرقم الذي سيطبع في الشاشة؟ ركّز قليلاً ثم انظر إلى النتيجة أدناه

أين ذهب الرقم 1 في يمين مجموع الأرباح؟!!
نعم نعم.. إنّه حرف إل L الصغير الخاص بتعريف المتغير كنوع Long.
فضل أن يستخدم حرف L الكبير للتعبير عن رقم من النوع Long لتفادي الخداع البصري لحرف L الصغير واعتقاده الرقم 1.
انظر للمثال أدناه والذي يدل على سهولة تلافي هذا النوع من الأخطاء.
public static void main(String args[]){ Long totalRevenue = 5015325L; System.out.println(" = " + totalRevenue); }
التلاعب الشهير في معرّفات المخترقين بين الـ O والـ 0 كمثال آخر

مثال آخر هو الخلط بين حرف O و صفر 0 والتي يستخدمها المخترقون في أسمائهم كثيراً للتمويه، مثل المثال التالي
public static void main(String args[]){ String role = "R0LE"; }
بينما هذه الأخطاء ربما يكون من السهل الانتباهُ لها، أعتبر الخطأ التالي خطئاً مركباً لأنه يعتمد على التحويل من النظام الثماني إلى العشري.
11 تصبح 9 بسبب صفر إضافي فقط!
فكما تعلم عند تعريف رقم ثُمانيٍ في لغة جافا نسبق الرقم بالرقم صفر ثم يليه عدة أرقام تتراوح بين 0 و 7، وبالتالي إذا ما عرّفت متغيراً من النوع Int ثم أسندت له رقماً ثمانياً فستتم عملية التحويل دون أن تنتبه!
شاهد هذا المثال
public static void main(String args[]){ int age = 011; System.out.println("Age = "+age); }
طباعةُ هذا الرقم لن تكون 11 كما قد يعتقد البعض، بل ستكون 9

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

لا يا أستاذ مصطفى، صعبة عليّ، فأنا رجل أبلغ من
العمر 65 عاما، ففى زماننا كان كتاب “عادل وسعاد” يلعبان
فى الحديقة، وكامل عامل فى مصنع، وحصُلت على الابتدائية
وقتها بمجموع 202 من 300. كان ذلك بين عامي 1961-1960
تقريبا. وسيادتكم قلتم:
«تجاربُ الصغر هذه تعلمتُ منها منذ نعومة أظافري أن القصص
و النصائح لا تكفي للتعلم، و إنما لا بُد للتجربة أن تحل محلها».
منذ نعومة الأظافر، فكانت النكسة فى العام 1967
وإعادة البناء وتَحَمَّل الفقراء العبء الأكبر مع 131 قرش معاشا
شهريا لثلاثة أفراد: أم وطفلين!! بعد وفاة أب ترك طفل فى
السابعة من عمره، وطفل فى الخامسة من عمره.
واليوم بفضل وكرم من رب السموات السبع ورب العرش العظيم
الله الواحد الأحد، خَصَّص لى معاشا كريما حكوميا بعد التقاعد
نحمده سبحنه فهو أكرم الأكرمين ويدير مصالح وشؤون مخلوقاته
جميعا وحده بدون مساعدين ولا مستشارين وحاشا لله قائم بذاته
يدير شؤون ويلبى مطالب 7 مليار وأكثر هم عدد سكان
كوكب الأرض. الله القوى العزيز العظيم لم يلد ولم يولد
ولم يكن له كفوا أحد، قائم بذاته سبحانه وتعالى تنزه
فى علاه عما يصفون وعما بشركون.
فصعبٌ عليّ فهم لغتكم الجديدة، ولكنى أحاول جاهدا أن أجاريكم
علّنى أفوز بمعلومة أتعكز عليها لو حضرت نقاشا طيبا.
شكرا لكم، وتقبلوا تحياتنا.
شكر إضافى:
نشكركم على خاصية التنبؤ بإسم الضيف وبريده
الإلكترونى.
جزاك الله خيرا …. والله كل مقالات حضرتك بنستفيد منها جدا ربنا يكرمك 🙂
وجزاك الجنة أخي حسام. مرحباً بك دوماً وأسعد بوجودكم في مدونة علوم بالتأكيد.
أقسم بالله مقال يكتب بماء الذهب
سلمت يداك أخي الحبيب وجزاك الله خيرا
شكراً لك على وجودك في مدونة علوم أخي سعيد. سلمك الله من كل سوء