يا جماعة الخير، السلام عليكم. اسمحوا لي أبدأ معكم بقصة صارت معي قبل كم سنة، قصة غيرت نظرتي كلها للبرمجة والتطوير. كنت وقتها سهران في المكتب، فنجان القهوة الثالث جنبي، وشغال على إطلاق ميزة جديدة في تطبيق كنا فخورين فيه جدًا. الواجهات بتلمع، والأنيميشن سلسة، وكل شي “تمام التمام” من وجهة نظري.
بعد الإطلاق بيومين، وصلتنا رسالة على بريد الدعم من مستخدم. الرسالة كانت قصيرة ومباشرة: “زر ‘التالي’ في صفحة التسجيل لا يعمل”.
قرأت الرسالة وضحكت بيني وبين حالي. “شو هالحكي؟” قلت لزميلي. “أكيد الزلمة مش كابس منيح”. فتحت التطبيق، ضغطت على الزر، واشتغل زي الحلاوة. رديت على المستخدم رد لطيف بس جاف: “سيدي، الميزة تعمل بشكل جيد. يرجى التأكد من أنك تضغط على الزر بشكل صحيح”. شعرت بنوع من الغرور، “مستخدم لا يعرف كيف يستخدم تطبيقنا البسيط”.
بعدها بساعة، رجع رد منه، وهذا الرد هو اللي صعقني وصحاني من غفلتي. قال:
“يا أخي، أنا كفيف وأستخدم قارئ الشاشة (Screen Reader). عندما أصل إلى هذا الجزء من الصفحة، قارئ الشاشة لا يقرأ وجود أي زر. بالنسبة لي، هذا الزر غير موجود. أنا لا ‘أرى’ واجهتكم اللامعة، أنا ‘أسمعها’.”
والله يا عمي، حسيت الأرض دارت فيي. الزر اللي كنت شايفه واضح وجميل، كان بالنسبة لهذا المستخدم جدارًا شفافًا لا يمكنه تجاوزه. أنا لم أبني ميزة، أنا بنيت جدارًا رقميًا. في تلك اللحظة، أدركت أننا كمطورين ومصممين، وبدون قصد، قد نبني سجونًا رقمية بدلاً من جسور للتواصل. ومن يومها، صار موضوع “إمكانية الوصول” أو الـ Accessibility هاجسي الأول في أي مشروع.
ما هي “إمكانية الوصول” (Accessibility) حقًا؟
لما نحكي “Accessibility” أو (a11y) اختصارًا، كثير من المبرمجين بفكروها “ميزة إضافية” أو “شيء للشركات الكبيرة”. لكن الحقيقة، يا جماعة، إنها أساس وجوهر. هي ببساطة تصميم وبناء منتجات رقمية يمكن للجميع استخدامها، بغض النظر عن قدراتهم الجسدية، العقلية، أو حتى ظروفهم المؤقتة.
فكر فيها هيك: هل كنت لتبني مبنى عام بدون منحدر للكراسي المتحركة أو مصعد؟ بالطبع لا. فلماذا نبني مواقع وتطبيقات تستبعد ملايين البشر؟
ليست فقط لأصحاب الهمم
من أكبر المفاهيم الخاطئة هي أن إمكانية الوصول تخدم فئة صغيرة. الحقيقة أنها تخدمنا جميعًا في مواقف مختلفة:
- إعاقة دائمة: مثل فقدان البصر، الصمم، أو إعاقات حركية.
- إعاقة مؤقتة: مثل كسر في اليد يمنعك من استخدام الماوس بسهولة.
- إعاقة ظرفية: مثل محاولة مشاهدة فيديو في مكان عام صاخب (وهنا تأتي أهمية الترجمة النصية للفيديو)، أو استخدام الهاتف تحت أشعة الشمس الساطعة (وهنا تظهر أهمية تباين الألوان العالي).
لما تصمم للجميع، الكل بستفيد. هاي هي الفكرة.
الجدران التي كنا نبنيها دون أن ندري
خلال مسيرتي، شفت كثير من “الجدران الرقمية” اللي بنبنيها بحسن نية وجهل. خلونا نحكي عن أشهرها وكيف نهدمها.
جدار الصور الصامتة: النص البديل (Alt Text)
كل صورة بنرفعها على موقع أو تطبيق بدون نص بديل هي صورة صامتة لقارئ الشاشة. المستخدم الكفيف سيسمع “صورة” ويمر، دون أن يعرف محتواها. هل هي شعار الشركة؟ رسم بياني مهم؟ صورة للمنتج؟
الحل بسيط ومدمج في لغة HTML:
مثال سيء (جدار):
<img src="graph.png">
مثال جيد (جسر):
<img src="graph.png" alt="رسم بياني يوضح نمو أرباح الشركة بنسبة 30% في الربع الأخير">
نصيحة أبو عمر: لا تكتب `alt=”صورة”` أو `alt=”رسم بياني”`. كن وصفيًا! تخيل أنك تصف الصورة لشخص عبر الهاتف. إذا كانت الصورة زخرفية بحتة ولا تضيف معنى، استخدم `alt=””` فارغًا ليتجاهلها قارئ الشاشة.
جدار الألوان الخادعة: التباين والمعنى
أنا بحب الألوان والتصاميم الجريئة، بس تعلمت بالطريقة الصعبة إن الجمال لا يغني عن الوضوح. استخدام لون رمادي فاتح على خلفية بيضاء قد يبدو “أنيقًا”، لكنه جدار منيع لمن يعاني من ضعف في البصر أو حتى لمن يستخدم جهازه في الخارج.
الحل: استخدم أدوات فحص تباين الألوان (Color Contrast Checker) للتأكد من أن نسبة التباين بين النص والخلفية تتوافق مع معايير WCAG (على الأقل 4.5:1 للنص العادي).
جدار آخر هو الاعتماد على اللون وحده لنقل المعلومة. مثلًا، إظهار حقول الإدخال الخاطئة باللون الأحمر فقط. هذا لا يفيد من يعاني من عمى الألوان.
مثال سيء (جدار): تغيير لون حدود الحقل إلى الأحمر فقط.
مثال جيد (جسر): تغيير لون الحدود + إضافة أيقونة خطأ + عرض رسالة نصية واضحة مثل “هذا الحقل مطلوب”.
جدار التنقل بالماوس فقط: سحر لوحة المفاتيح
كثير من المستخدمين، سواء بسبب إعاقة حركية أو ببساطة لأنهم “Power Users”، يعتمدون على لوحة المفاتيح للتنقل (باستخدام مفتاح Tab). إذا بنيت عنصرًا تفاعليًا باستخدام `
الحل: استخدم عناصر HTML الدلالية (Semantic HTML) كلما أمكن.
مثال سيء (جدار):
<!-- لا يمكن الوصول إليه بلوحة المفاتيح، ولا يعلن عنه قارئ الشاشة كزر -->
<div class="custom-button" onclick="submitForm()">إرسال</div>
مثال جيد (جسر):
<!-- يمكن الوصول إليه والتركيز عليه بلوحة المفاتيح، ويعلن عنه كزر، ويعمل بـ Enter/Space -->
<button class="custom-button" onclick="submitForm()">إرسال</button>
نصيحة أبو عمر: جرب بنفسك. اترك الماوس وتصفح موقعك باستخدام مفتاح Tab فقط. هل يمكنك الوصول لكل الأزرار والروابط؟ هل ترى بوضوح أين أنت في كل خطوة (هذا يسمى `focus state`)؟ إذا كانت الإجابة لا، فلديك عمل لتقوم به.
جدار الهيكل العشوائي: قوة الدلالات (Semantics)
في الماضي، كانت صفحات الويب عبارة عن “حساء من الـ `
الحل: استخدم عناصر HTML5 الدلالية. هذه العناصر هي الخريطة التي تعطيها لقارئ الشاشة.
- استخدم `<header>`، `<nav>`، `<main>`، `<article>`، `<aside>`، `<footer>` لتقسيم صفحتك.
- استخدم `<h1>` لعنوان الصفحة الرئيسي (واحد فقط)، ثم `<h2>`, `<h3>` بالترتيب المنطقي. لا تقفز من `<h1>` إلى `<h4>` فقط لأن الخط يبدو أجمل.
هذا لا يساعد فقط قارئات الشاشة، بل يحسن محركات البحث (SEO) ويجعل الكود الخاص بك أكثر تنظيمًا وسهولة في الصيانة.
كيف فتحت لنا “إمكانية الوصول” أبوابًا جديدة؟
لما بدأت أطبق هذه المبادئ، ما كنت فقط “أصلح” مشاكل، بل اكتشفت أبوابًا جديدة للابتكار والإبداع.
باب تجربة المستخدم الأفضل للجميع
اكتشفت أن التصميم الشامل لا يحسن التجربة لفئة معينة فقط، بل للجميع. النص الواضح والتباين العالي يساعدان أي شخص متعب في آخر اليوم. الهيكل المنطقي للصفحة يساعد الجميع على إيجاد ما يبحثون عنه بسرعة. الترجمة النصية للفيديو (Captions) لا تخدم الأصم فقط، بل تخدم من يشاهد الفيديو في الحافلة ونسي سماعاته.
باب الابتكار التقني
التفكير في القيود يولد الإبداع. عندما تفكر “كيف يمكن لشخص لا يرى الشاشة أن يستخدم هذا؟”، تبدأ في التفكير في واجهات صوتية، أوامر صوتية، واهتزازات لمسية (Haptic Feedback). الكثير من التقنيات التي نستخدمها اليوم، مثل المساعدات الصوتية (Siri, Alexa)، بدأت كتقنيات مساعدة (Assistive Technologies).
باب الوصول إلى شريحة أكبر من الجمهور
الشغلة مش بس إنسانية، فيها جانب عملي وتجاري مهم. هناك أكثر من مليار شخص في العالم يعيشون مع شكل من أشكال الإعاقة. تجاهلهم يعني أنك تتجاهل سوقًا ضخمًا. بالإضافة إلى ذلك، محركات البحث مثل Google تعشق المواقع التي تتبع معايير إمكانية الوصول، لأنها تكون منظمة وسهلة الفهم للروبوتات أيضًا. إمكانية الوصول = SEO أفضل.
نصائح أبو عمر العملية للبدء
طيب يا أبو عمر، كلام جميل، بس من وين أبدأ؟ الشغلة تبدو كبيرة.
- ابدأ صغيرًا: لا تحاول إصلاح كل شيء دفعة واحدة. في مشروعك القادم، ركز على شيء واحد: مثلًا، التأكد من أن كل الصور لها `alt text` صحيح.
- استخدم الأدوات: المتصفحات الحديثة (Chrome, Firefox) فيها أدوات مدمجة رائعة (مثل Lighthouse) لفحص إمكانية الوصول. هناك أيضًا إضافات مثل axe-dev-tools و WAVE.
- اختبر بلوحة المفاتيح: هذه أسهل وأسرع طريقة لاكتشاف مشاكل كبيرة.
- استمع لموقعك: نزل قارئ شاشة مجاني مثل NVDA (للويندوز) أو استخدم VoiceOver (المدمج في أجهزة آبل). جرب أن “تسمع” موقعك. ستكون تجربة صادمة ومفيدة.
- اجعلها جزءًا من العملية: لا تترك إمكانية الوصول للنهاية. فكر فيها من مرحلة التصميم، مرورًا بالتطوير، وانتهاءً بالاختبار.
الخلاصة: ليست مجرد “ميزة إضافية”
يا جماعة، الشغلة مش بس كود نظيف أو تصميم حلو. الشغلة إنسانية. كل سطر كود نكتبه إما أن يبني جسرًا أو جدارًا. قصة ذلك المستخدم غيرتني لأني أدركت أن مسؤوليتنا أكبر من مجرد تسليم مشروع في وقته. مسؤوليتنا هي أن نفتح الأبواب الرقمية للجميع، لا أن نغلقها في وجه البعض.
لا تبنوا جدرانًا. ابنوا جسورًا. ابنوا بوابات. ابنوا عالمًا رقميًا يرحب بالجميع. 🚀
سجل دخولك لعمل نقاش تفاعلي
آراء من النقاشات
لا توجد آراء منشورة بعد. كن أول من يشارك رأيه!
آخر المدونات
كنا نكتب للمحركات لا للبشر: كيف أنقذنا ‘التحسين الدلالي للمحتوى’ من جحيم حشو الكلمات؟
أتذكر أيامًا كنا نتعامل فيها مع جوجل كأنه آلة غبية، نحشو المقالات بالكلمات المفتاحية حتى تفقد معناها. في هذه المقالة، أسرد لكم قصة انتقالنا من...
كانت صفحاتنا تموت من ألف استعلام: كيف أنقذتنا تقنيات ‘التحميل المسبق’ (Eager Loading) من جحيم مشكلة N+1؟
أشارككم قصة حقيقية من أرض المعركة البرمجية، كيف اكتشفنا عدوًا صامتًا يسمى "مشكلة N+1" كان يقتل أداء تطبيقنا، وكيف كانت تقنية التحميل المسبق (Eager Loading)...
كنا نغرق في بحر الاستدعاءات: كيف أنقذنا GraphQL من جحيم الـ over-fetching والـ under-fetching؟
أتذكر مشروعًا كاد أن يغرقنا في بحر من طلبات API المعقدة، حتى ظهرت GraphQL كطوق نجاة. في هذه المقالة، أشارككم يا جماعة قصتنا مع مشكلتي...
كانت بيئاتنا جزرًا من الفوضى: كيف أنقذتنا “البنية التحتية كشفرة” (IaC) من جحيم الانحراف التكويني؟
أشارككم قصة من قلب الميدان، عن ليلة كادت أن تنهار فيها أنظمتنا بسبب تغيير يدوي بسيط. سأشرح لكم كيف كانت "البنية التحتية كشفرة" (IaC) وأدوات...
مقابلاتي التقنية كانت كارثة: كيف أنقذني ‘التفكير بصوت عالٍ’ من جحيم الفشل؟
أشارككم قصة شخصية عن فشلي في المقابلات التقنية بسبب الصمت القاتل، وكيف غيرت استراتيجية "التفكير بصوت عالٍ" مساري المهني. اكتشفوا معي كيف تحولون المقابلة من...
كان مستخدمونا في الطرف الآخر من العالم ينتظرون إلى الأبد: كيف أنقذتنا شبكات توصيل المحتوى (CDN) من جحيم زمن الاستجابة المرتفع؟
قصة حقيقية من قلب المعركة البرمجية، وكيف انتقلنا من شكاوى المستخدمين بسبب بطء الموقع إلى أداء صاروخي عالمي. في هذه المقالة، أغوص معكم في عالم...
من شبكة مثقوبة إلى حصن منيع: كيف أنقذتنا قواعد البيانات الرسومية من كابوس الاحتيال؟
كنا نغرق في بحر من الإنذارات الكاذبة والشبكات الاحتيالية المعقدة التي لم تستطع قواعدنا التقليدية كشفها. في هذه المقالة، أسرد لكم تجربتي كـ "أبو عمر"...
ميزانيات الخطأ (Error Budgets): كيف أنهت كابوس مكالمات منتصف الليل وأنقذتنا من الإرهاق؟
كنا غارقين في مكالمات طوارئ ليلية لا تنتهي، فريق منهك والمنتج على المحك. في هذه المقالة، أشارككم قصة كيف أنقذنا مفهوم "ميزانيات الخطأ" (Error Budgets)...
كانت اجتماعاتنا الفردية استجواباً صامتاً: كيف حولنا الـ 1-on-1 من تقرير حالة ممل إلى محرك لنمو الفريق؟
أشارككم تجربتي كقائد فريق تقني في تحويل الاجتماعات الفردية (1-on-1s) من جلسات استجواب مملة إلى محادثات مثمرة تساهم في بناء الثقة وتطوير الفريق. هذه المقالة...
نحافظ على خصوصيتك وظهورك بالمنصة ولا نستخدم البيانات لأي أغراض تسويقية.
دخولك أو اشتراكك يعني موافقتك على سياسة الخصوصية وشروط الاستخدام