لماذا تم استخدام Python بدلا من php في بناء موقع quora (كورا)

موقع كورا (quora) هو منصة إلكترونية لطرح الأسئلة والإجابة عليها في مختلف المواضيع والمجالات وأحيانا قد تصل نوعية الأسئلة المطروحة الى درجة الغرابة وهو من المواقع الشهيرة التي لا بد وأنك وجدت ضالتك بها عند البحث عن شئ ما.

تم تأسيس موقع quora في 21 يونيو 2010 من قِبل أدام دانجلو وتشارلي شيفر وهما من موظفي فيسبوك سابقاً وكان سبب إنشاء الموقع على حد وصفهم أنه بالرغم من انتشار مواقع مماثلة للسؤال والإجابة على الإنترنت إلا أنها ليست بالجودة الكافية لذلك قررا إنشاء موقع Quora.com.

لماذا تم إختيار لغة Python في تطوير موقع quora؟ وما هي التحديات التقنية التي واجهها المطورون كي يتم بناءا عليها إختيار لغة بايثون بدلا من php على سبيل المثال؟

وقد أجاب على هذا السؤال Adam D’Angelo، المدير التنفيذي وأحد مؤسسي منصة Quora فقال:

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

كنت أنا وتشارلي (يقصد تشارلي شيفر وهو الشريك المؤسس لموقع كورا) على علم بشكل جيد بلغة Python او بشكل معقول (الآن أفضل بكثير مما كنت أعرفه عندما بدأنا).

تحققنا من بعض اللغات المرشحة مثل  C # و Java و Scala. وكانت أكبر مشكلات بايثون هي السرعة وعدم إحتوائها على Type Checking.

  • لغة سي شارب (C#) بدت كخيار واعداً كلغة برمجة ولكن لهذه الأسباب لم تكن الخيار الأمثل، فنحن لم نكن نرغب في أن نرتبط ببيئة مايكروسوفت، نعم كنا جاهزين لتعلم شيء جديد، وبدا MS SQL Server جيدًا، لكن كنا على علم بأننا سنحتاج لتكامل مع الكثير من البرمجيات مفتوحة المصدر التي تدعم تكامل من الدرجة الثانيه في .NET ان كان يدعمها اصلا، كما أن معظم المهندسين يفضلون ثقافة المصادر المفتوحة (Open Source).
    أيضا لم نرغب بالمخاطره بإستخدام مشروع Mono ( فريم وورك c# مفتوح المصدر لبيئة  .NET) فلم يكن من الواضح في ذلك الوقت اذا كان سيستمر تمويل هذا المشروع والإستمرار في تطويره أم لا، وقد سمعت أيضا عن بعض المشاكل المختلفة في الأداء بالإضافة الى ذلك كل شئ في c# تقريبا يعتمد فقط على بيئة Microsoft.
  • لغة جافا (java) للعديد من الأسباب ينتهي الأمر بالجافا لتكون أطول وأصعب في الكتابه من برامج بايثون المماثلة كما أن الجافا صعبة التعامل مع أشياء ليست بالجافا (nonJava stuff).
  • لغة سكالا (Scala)  كان لديها العديد من سلبيات Java و JVM ، وعلى الرغم من أنها لم تكن سيئة، إلا انها كانت لغة جديدة نوعا ما ومن وجهة نظرنا سيكون هناك نوع من المخاطرة غير الضرورية فمن يدري كيف سيكون حال هذه اللغة خلال 10 سنوات.

ولفترة وجيزة فكرنا أيضا بلغتين أخريين هنا OCaml و Haskell ولكن لم يكن لهما أنظمة بيئية غنية أو جيدة بما يكفي وكما هو الأمر أيضا بالنسبة للمكتبات فليس لديهم مكتبات قياسية جيدة بما يكفي، إلى جانب أن كلاهما من الصعب التعامل معهم بالنسبه للمصممين ومحللي البيانات (غير المهندسين) والذين قد يحتاجون الى كتابة بعض التعليمات البرمجية

القرار بنهاية الأمر

وبالنهاية قررنا أن نستخدم لغة بايثون فقد كانت سريعه بما يكفي لتلبي احتياجاتنا فيما نود القيام به، وقمنا بنقل الأجزاء المهمة والتي تحتاج الى سرعة أداء أعلى الى خوادم مبنية على c++.

وفيما يتعلق بـ نقص ميزة Type Checking، عوضنا الأمر بكتابة إختبارات وحدة شاملة (Unit Tests) تحقيق معظم الأهداف نفسها وكانت تستحق الكتابة على أي حال.

كان لدينا ثقة كبيرة في بايثون ونعلم انها ستستمر في التطور بخطى سريعة في الاتجاه الذي نريدة، بناءاً على ما شاهدناه من تطور للغة خلال الخمس سنوات الماضية

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

وأيضا :

  • في الإصدار Python 2.6 وصلنا إلى نقطة كان فيها ما يكفي من المكتبات التي استخدمناها وكانت متوافقة معنا وقمنا بانتقال سهل للغاية.
  • عندما تم إصدار إطار عمل الويب Tornado كمصدر مفتوح (Open Source)، قمنا بنقل خدمة تحديث الويب المباشرة إلى ذلك.
  • وعند اصدار PyPy كانت هذة نقطة فارقة لمعالجة مشكلة السرعة التي تحدثت عنها بالبداية.

مصادر: