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

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

سيف في مدينة الرياضيات

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

سيرتي

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

جسر الحروف

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

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

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

جودة لغة البرمجة وجودة مترجمها

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

توفر المكتبات البرمجية

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

الأدوات

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

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

المصطلحات والاختصارات

هذه أكثر نقطة يجادل فيها أنصار اللغة الإنجليزية فيما يتعلق بالبرمجة، فالحجة التي طالما نسمعها أن اللغة العربية نفسها قاصرة في هذه المجال، وبالتالي فإن البرمجة يجب أن لا تكون بغير الإنجليزية. هكذا يقولون، لكن هل هذا صحيح؟ لنجرِ بعض المقارنات العملية بين العربية والإنجليزية فيما يتعلق بالمصطلحات. هذه بعض المصطلحات البرمجية الإنجليزية وما يقابلها بالعربية:

دالة: function

متغير: variable

تعريف: definition

وحدة: module

صنف: class

لكل: for

بينما: while

نص: string

صحيح: integer

عائم: float

ارجع: return

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

قد_تم_الإدخال: onEntryComplete

انتظر_حدثا: waitForEvent

أضف_وحدة_منافذ: registerEndpointsModule

أضف_مسار_موارد: addAssetRoute

أيوجد_تحديث_للتطبيق: isAppUpdateAvailable

هات_نمط_عرض_التطبيق: getAppDisplayMode

منفذ_بياني: beEndpoint

منفذ_مرئي: uiEndpoint

نجد هنا أن المصطلحات العربة مساوية للإنجليزية من ناحية الطول، لكنها هنا أقرب للغة المحكية من نظيراتها الإنجليزية. فمثلا مصطلح "قد تم الإدخال" جملة صحيحة إملاءًا وقواعدًا بينما "on entry complete" ليست كذلك ولو أردت جملة إنجليزية تقابل العربية من جهة قربها للغة المحكية لكانت "entry has been completed" أو شيئًا من هذا القبيل، وهذا المصطلح أطول لفظا وكتابة من نظيره العربي. ولو اطلعت على مصطلح "انتظر_حدثا" لوجدته من كلمتين بينما نظيره الإنجليزي من ثلاث كلمات. بينما مصطلح "هات_نمط_عرض_التطبيق" مساوي في عدد كلماته وحروفه لنظيره الإنجليزي، لكن المصطلح الإنجليزي قد اختصر كلمة Application إلى App. وتجد مصطلحي "منفذ_بياني" و "منفذ_مرئي" واضحي المعنى وبدون الحاجة للاختصار، فالمنفذ الأول يجلب لك بيانات بينما الثاني يجلب لك واجهة المستخدم، في المقابل المصطلحان الإنجليزيان مختصران من "backend endpoint" و "user interface endpoint". لا أريد الإسهاب في هذه النقطة فلو أردت لملأت صفحات من الأمثلة التي تبين أن اللغة العربية في الحقيقة أقدر على الإتيان بالمصطلحات من الإنجليزية وهي في الحقيقة على عكس ما هو متوقع أكثر ملاءمة للبرمجة من الإنجليزية نظرًا لقصر كلماتها وغزارة تصاريف الكلمات فيها مما يتيح ابتكار اصطلاحات جديدة. على سبيل المثال، تحتوي منصة الويب على صنف باسم "مبدال" وهو أداة تتيح التبديل بين المشاهد، بينما صنف "مكداس" يتيح تكديس المشاهد، ولو كان المبرمج ملمًا بعلم الصرف والاصطلاحات العربية لوجد العربية أسهل من ناحية ابتكار أسماء لعناصر برنامجه.

طبعًا هذا لا يعني أن الإنجليزية لا تمتاز بشيء على العربية في هذه الناحية، فهي في الحقيقة تمتاز بأمرين:

1- الاختصارات. كثيرا ما تُختصر في الإنجليزي عبارات أو جمل في بضعة حروف، وهو أمر شائع ومألوف في الإنجليزية لكنه ليس كذلك في العربية. على سبيل المثال، مكتبة Simple DirectMedia Layer تُختصر في الإنجليزية إلى SDL بينما في العربية تُختصر إلى ط.و.ب (طبقة الوسائط البسيطة)، وفي البرمجة تستخدم النقطة لأمر غير الاختصار لذلك يكتب الاختصار كـ"طوب" وهو أمر قد يبدو غريبًا لمن يقرأه للوهلة الأولى، فهذه الاختصارات ليست شائعة في حياة العرب اليومية، بينما الاختصارات الإنجليزية شائعة في حياة الإنجليزيين اليومية حتى خارج نطاق البرمجة.

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

المراجع والشروح

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

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

إن كنت مبرمجا محبا للعربية فأنا أدعوك للاطلاع على الأمثلة المتوفرة وتجربة مهارتك باللغة العربية، فهي لغة تستحق منك كل الاهتمام.