لغات البرمجة15 ديسمبر 20254 دقائق قراءة
Go وRust وPython: الحقيقة المملة في اختيار لغة البرمجة
أسامـــة الدروشـــي

كل بضعة أشهر تتكرر الدورة نفسها: اختبار أداء يُظهر أن Go تعالج عشرة أضعاف الطلبات، وتدوينة تحتفي بإعادة كتابة خدمة بلغة Rust وتسريعها أربعين مرة، وسلسلة ردود تعلن موت Python من جديد. المشهد ممتع، وأنا أقرأ هذه النقاشات مثل غيري. لكن بعد ست سنوات من بناء البرمجيات لجهات تنظيمية وشركات اتصالات وشركات ناشئة، أستطيع أن أقول بثقة: لم يحدث قط أن نجح مشروع عملت عليه أو فشل بسبب لغة البرمجة.
المشاريع تنجح أو تفشل بسبب المواعيد النهائية، والمتطلبات، ووضوح المسؤولية، وقدرة أحدهم على تتبّع خطأ في بيئة الإنتاج. أما اللغة فلم تكن يومًا أكثر من حاشية في القصة.
لا أحد يُستدعى فجرًا بسبب الصياغة
حين يتجادل الناس حول اللغات، فإنهم يتجادلون حول ما تلمسه في الأسبوع الأول: الصياغة، ونظام الأنواع، ونتيجة اختبار أداء بسيط. أما ما يؤلم فعلًا فيظهر في الشهر الثامن:
- المكتبة التي حلّت مشكلتك الصعبة ينقطع عنها التطوير، ويختفي القائم عليها الوحيد.
- المهندس الوحيد الذي يفهم بيئة التشغيل غير المتزامنة حقّ الفهم يقدّم استقالته.
- تحتاج إلى توظيف مطوّرَين إضافيين، وسوقك المحلي فيه خمسون مهندسًا متمكنًا في Java أو Python مقابل كل مرشح Rust.
- الذاكرة تتسرّب في الإنتاج، ولا أحد في الفريق سبق له أن حلّل أداء بيئة التشغيل هذه تحت الضغط.
لا شيء من هذا عيب في اللغة؛ كلها أسئلة تخص المنظومة والتوظيف والتشغيل، وهي التي تحسم النتيجة. حين قدت تطوير «صبر»، منصة التحليلات والمراقبة المركزية لهيئة تنظيم الاتصالات في عُمان، بنينا النواة على Spring Boot وPostgreSQL. ليس لأن Java لغة مثيرة؛ فهي ليست كذلك، وهذا هو المقصود تحديدًا. نظام تعتمد عليه جهة تنظيمية سيعيش سنوات وسيمرّ بأيدٍ كثيرة، والأجزاء المملة فيه، من المعاملات والمهام المجدولة إلى تكامل المصادقة والمقاييس، يقف خلفها عقدان كاملان من الصقل في بيئات الإنتاج. هذا كان أهم من أي اختبار أداء.
حين تفوّقت FastAPI على Spring Boot، وحين خسرت
لست ممن يقولون «اختر JVM دائمًا». في Byanat بنينا منصة تحليلات لشركة Ooredoo تغطي نحو 300 ألف شريحة M2M/IoT، وهناك فازت FastAPI بوضوح. كان العمل في جوهره تحليل بيانات يرتدي زيّ API: المنطق الحقيقي يعيش بجوار pandas وبقية منظومة Python للبيانات، والفريق يفكر بلغة Python، وPydantic منحنا عقودًا صادقة للطلبات والاستجابات. كانت سرعة التكرار هي الميزة التي نسعى إليها، وإعادة كتابة ذلك بـ Spring Boot كانت ستعني ترجمة كل فكرة تحليلية عبر حدود لغة أخرى دون أي مكسب.
الإطار نفسه، ومشروع مختلف، ونتيجة معاكسة. في منصة «المؤشرات»، النظام الذي تستخدمه شركات الاتصالات لرفع بياناتها إلى الجهة التنظيمية، اخترت Spring Boot وسأختاره مرة أخرى: مسارات عمل طويلة العمر، وتحقق صارم من البيانات، وتسلسل صلاحيات، ومعالجة دفعية مجدولة، وقاعدة شيفرة ستُعاد هيكلتها مرات كثيرة بأيدٍ كثيرة. في مرحلة النموذج الأولي شعرت بإغراء «الكتابة بـ FastAPI أسرع»، وهي كذلك فعلًا، إلى أن تجد نفسك تركّب يدويًا آليات المعاملات والجدولة والترحيل التي يقدّمها لك Spring مجانًا، وفي فريق يفكر أصلًا بلغة Java.
المغزى ليس FastAPI مقابل Spring Boot؛ المغزى أن الأداتين نفسيهما تبادلتا الترتيب حين تغيّر السياق، والسياق لم يكن يومًا هو الصياغة.
أفضل تقنية لمشروعك هي التي يستطيع فريقك تشغيلها في الإنتاج عند الثالثة فجرًا.
القائمة التي أستخدمها فعلًا
حين يصل إلى مكتبي مشروع حقيقي بموعد نهائي حقيقي، أمرّ على هذه الأسئلة بالترتيب:
- من سيصون هذا النظام في سنته الثالثة؟ إن كان الجواب الصادق «من نستطيع توظيفه»، فانظر إلى سوق التوظيف الفعلي عندك، لا إلى ما هو رائج على الإنترنت.
- ماذا تمنحك المنظومة مجانًا لمشكلتك أنت تحديدًا؟ أعمال البيانات تميل إلى Python، والخدمات الشبكية عالية التزامن تميل إلى Go، والنواة المؤسسية المعاملاتية تميل إلى JVM أو .NET. والسباحة عكس التيار تكلّفك شهورًا.
- هل يستطيع الفريق تشغيلها؟ لا كتابتها فحسب، بل تحليل أدائها، وقراءة تتبّعات أخطائها، وترقية اعتمادياتها دون خوف.
- افحص أهم عشر مكتبات ستعتمد عليها. تاريخ آخر إصدار، والمشكلات المفتوحة، وعدد من يقف خلفها. اعتمادية ميتة في منظومة «عصرية» أسوأ من اعتمادية قديمة في منظومة مملة.
- الألفة تتفوق على الملاءمة النظرية. لغة يعرفها الفريق بعمق ستهزم لغة «أفضل» يتعلمها من الدروس، في أي جدول زمني ذي أهمية.
- احسب رصيدك من الجديد. كل مشروع يحتمل عنصرًا أو عنصرين غير مألوفين؛ فأنفقهما على الجزء الصعب حقًا من مشكلتك، لا على التقنية نفسها.
لاحظ ما ليس في القائمة: اختبارات الأداء، وأناقة الصياغة، وما هو رائج هذا الموسم. Rust وGo وPython كلها لغات ممتازة، بل كل لغة سائدة اليوم تكاد تكون ممتازة، وهذا بالضبط ما جعل اللغة تكفّ عن كونها القرار الحاسم. استمتع بحروب اللغات بوصفها تسلية، فأنا أفعل، ثم اختر الخيار المملّ الذي يستطيع فريقك حمله، وضع الطاقة الموفَّرة في المشكلة التي تتقاضى أجرًا لحلّها.