ما الذي يجعل بايثون منتشرةً حاليًا؟
يعتمد نجاح بايثون على مؤشر الرواج وفقًا لموقع (ستاك أوفرفلو)، الذي يقيس الإشارات في منشورات المنصة، ونظرًا إلى حجم هذه المنصة، فهو مؤشر جيد لانتشار هذه اللغة.
كانت اللغة (R) في صعود مستمر خلال السنوات العديدة الماضية، والكثير من لغات البرمجة الأخرى في هبوط مستمر، لكن يبدو أن نمو بايثون لا يمكن إيقافه. ترتبط 14% تقريبًا من إجمالي الأسئلة المطروحة على منصة ستاك أوفرفلو ببايثون، وهذا الاتجاه تصاعدي لأسباب عديدة.
1. إنها لغة قديمة
كانت بايثون موجودةً منذ التسعينات، وبهذا فهي لم تحظ بوقت كاف للنمو فحسب، بل اكتسبت مجتمعًا كبيرًا داعمًا لها أيضًا.
لذلك، إذا كانت لديك أي مشكلة في أثناء البرمجة بواسطة بايثون، فاحتمال قدرتك على حلها بإجراء بحث واحد على غوغل كبير، لأن شخصًا ما قد واجه مشكلتك بالفعل وكتب شيئًا مفيدًا بشأنها.
2. السهولة
ليس فقط أنها كانت موجودةً منذ عقود، فقد مُنح المبرمجون وقتًا كافيًا لتقديم دروس رائعة عنها، فبُنية بايثون قابلة للقراءة البشرية بسهولة.
بدايةً، لا ضرورة لتحديد نوع البيانات، عليك فقط تحديد المتغيرات، وبايثون سيفهم من سياق المدخلات إن كانت عددًا صحيحًا أم قيمة عشرية أم قيمة مطلقة أو غير ذلك، وهذه ميزة كبيرة للمبتدئين، فإذا استخدمت لغة (++C) سابقًا من أجل البرمجة، فلا بد أنك عرفت قدر الإحباط عندما لا يتجمع برنامجك بسبب استبدالك قيمةً عشرية بعدد صحيح.
3. التنوع
لما كانت بايثون موجودةً وقتًا طويلًا، فقد صمم المطورون حزمةً لكل غرض، وتستطيع اليوم أن تجد حزمةً لكل شيء تقريبًا.
هل تريد أن تعالج الأرقام والمتجهات والمصفوفات؟ أفضل حزمة لذلك هي NumPy. هل تريد إجراء حسابات للتكنولوجيا والهندسة؟ استخدم حزمة SciPy. هل تريد أن تتوسع في معالجة البيانات وتحليلها؟ جرب حزمة Pandas. هل تريد مجال الذكاء الاصطناعي؟ استعمل حزمة Scikit-Learn.
مهما كانت المهمة الحسابية التي تحاول إدارتها، فستجد حزمة بايثون مخصصة لها، ما يجعل بايثون على قمة الطفرة الحديثة في مجال التعلم الآلي خلال السنوات الماضية.
سبب آخر هو أن بايثون تستطيع تأدية مهمة واحدة فقط في وقت ما، وهذا من تداعيات استخدام أنواع البيانات المرنة. يجب تأكيد أن كل متغير لديه نوع واحد فقط من البيانات، واستخدام عمليات متوازية قد يُفسد ذلك.
هذا في حين أن متصفح الويب لديك يمكنه تشغيل عشرات العمليات في نفس الوقت، وتوجد بعض النظريات الأخرى حول ذلك أيضًا. لكن الخلاصة أن مشكلة السرعة غير مهمة، إذ أصبحت أجهزة الحاسوب والخوادم رخيصة جدًا، لدرجة أننا نتحدث عن أجزاء من الثانية، ولا يهتم المستخدم حقًا إذا حُمِل تطبيقه في 0.001 أو 0.01 ثانية.
2. النطاق
حُدِد نطاق بايثون أصلًا ليكون ديناميكيًا، ما يعني أساسًا أنه عند تقييم أي عبارة، سيبحث المترجم (كومبايلر) أولًا في القسم الحالي، وبعدها في كل الدوال المُستدعاة تواليًا.
مشكلة النطاق الديناميكي أن كل عبارة يجب أن تُختبر في كل سياق ممكن، وهذا مضجر. لهذا السبب تستخدم أغلب لغات البرمجة النطاق الثابت.
فشل انتقال بايثون إلى النطاق الثابت. تستطيع النطاقات الداخلية للدوال الفرعية ضمن الدوال الرئيسية رؤية النطاقات الخارجية وتغييرها، أما في بايثون فإن النطاقات الداخلية يمكنها رؤية النطاقات الخارجية فقط، دون أن تستطيع تغييرها، ما يؤدي إلى الكثير من الإرباك.
3. الدوال المجهولة
رغم مرونة لغة بايثون ، يبقى استعمال الدوال المجهولة مقيدًا إلى حد ما. قد تكون العبارات دوال مجهولةً في بايثون، لكن من غير المحتمل أن تكون الصيغ كذلك.
تتعامل بايثون مع تعريفات وعبارات المتغيرات على أساس كونها عبارات دائمًا، ما يعني أنه لا يمكن استعمال الدوال المجهولة معها. هذا الفارق بين العبارات والصيغ تعسفي إلى حد ما، وغير موجود في اللغات الأخرى.
السلبيات
استنادًا إلى ما سبق، قد تتخيل أن بايثون ستبقى على قمة الهرم لأجيال قادمة، لكن لها -مثل كل تقنية- نقاط ضعف، سنتناول أهمها تاليًا، وسنقيّم كون هذه العيوب قاتلةً أم لا.
1. البطء
لغة بايثون بطيئة للغاية، إذ تحتاج إلى ما يقارب ضعفين إلى 10 أضعاف الوقت لتأدية مهمة مقارنةً بأي لغة أخرى.
توجد عدة أسباب لهذا، منها أنها مكتوبة ديناميكيًا، فأنت لا تحدد نوع البيانات كما في اللغات الأخرى، ما يعني استهلاك جزء كبير من الذاكرة، لأن البرنامج يحجز مساحة كافية لكل متغير يعمل داخله في كل حالة، واستهلاك قدر أكبر من الذاكرة يعني استغراق وقت أطول في الحوسبة.
سبب آخر هو أن بايثون تستطيع تأدية مهمة واحدة فقط في وقت ما، وهذا من تداعيات استخدام أنواع البيانات المرنة. يجب تأكيد أن كل متغير لديه نوع واحد فقط من البيانات، واستخدام عمليات متوازية قد يُفسد ذلك.
هذا في حين أن متصفح الويب لديك يمكنه تشغيل عشرات العمليات في نفس الوقت، وتوجد بعض النظريات الأخرى حول ذلك أيضًا. لكن الخلاصة أن مشكلة السرعة غير مهمة، إذ أصبحت أجهزة الحاسوب والخوادم رخيصة جدًا، لدرجة أننا نتحدث عن أجزاء من الثانية، ولا يهتم المستخدم حقًا إذا حُمِل تطبيقه في 0.001 أو 0.01 ثانية.
2. النطاق
حُدِد نطاق بايثون أصلًا ليكون ديناميكيًا، ما يعني أساسًا أنه عند تقييم أي عبارة، سيبحث المترجم (كومبايلر) أولًا في القسم الحالي، وبعدها في كل الدوال المُستدعاة تواليًا.
مشكلة النطاق الديناميكي أن كل عبارة يجب أن تُختبر في كل سياق ممكن، وهذا مضجر. لهذا السبب تستخدم أغلب لغات البرمجة النطاق الثابت.
فشل انتقال بايثون إلى النطاق الثابت. تستطيع النطاقات الداخلية للدوال الفرعية ضمن الدوال الرئيسية رؤية النطاقات الخارجية وتغييرها، أما في بايثون فإن النطاقات الداخلية يمكنها رؤية النطاقات الخارجية فقط، دون أن تستطيع تغييرها، ما يؤدي إلى الكثير من الإرباك.
3. الدوال المجهولة
رغم مرونة لغة بايثون ، يبقى استعمال الدوال المجهولة مقيدًا إلى حد ما. قد تكون العبارات دوال مجهولةً في بايثون، لكن من غير المحتمل أن تكون الصيغ كذلك.
تتعامل بايثون مع تعريفات وعبارات المتغيرات على أساس كونها عبارات دائمًا، ما يعني أنه لا يمكن استعمال الدوال المجهولة معها. هذا الفارق بين العبارات والصيغ تعسفي إلى حد ما، وغير موجود في اللغات الأخرى.
4. المسافات البيضاء
يمكن استخدام المسافات البيضاء والمسافات البادئة في بايثون للإشارة إلى مستويات البرمجة المختلفة، ما يجعل الأسطر البرمجية جذابةً للنظر، وبديهية الفهم.
تعتمد اللغات الأخرى (++C مثلًا) على الفواصل والأقواس، ومع أن هذا يجعلها غير جذابة بصريًا، وليست سهلةً للمبتدئين، لكنها تجعل الشيفرة البرمجية أكثر قابليةً للصيانة والتعديل، وهذا مفيد جدًا للمشاريع الكبيرة.
تحل لغات جديدة مثل (هاسكل) هذه المشكلة، إذ تعتمد المسافات البيضاء، مع تقديم بنية بديلة لمن يرغبون في العمل دونها.
5. تطوير تطبيقات المحمول
في ظل التحول من الحواسيب المكتبية إلى الهواتف الذكية، اتضح الاحتياج إلى لغات قوية لبناء البرمجيات المحمولة.
لا تُطوَّر أكثر تطبيقات الجوال باستخدام لغة البرمجة بايثون ، وهذا لا يعني استحالة تصميم التطبيقات من طريقها، إذ تتخصص إحدى حِزم بايثون في ذلك، وهي حزمة (كيفي).
لكن لم تأخذ بايثون -عند إنشائها- الهواتف المحمولة بعين الاعتبار، ومع أنها تعطي نتائج مقبولة للمهام أساسية، فإن الخيار الأفضل هو اختيار لغة أُنشئت لتطوير تطبيقات الجوال، مثل ريآكت نيتف، وفلاتر، وأيكونيك، وكوردوفا.
لن تختفي الحواسيب المكتبية والمحمولة لسنوات قادمة، لكن الهواتف أصبحت أكثر انتشارًا، لذلك فإن تعلم بايثون ليس كافيًا كي تصبح مطورًا خبيرًا.
6. أخطاء التشغيل
لا يُجمع نص بايثون في البداية ثم يعمل بعد ذلك، بل يُجمع في كل مرة لتنفيذه. لذلك لا تظهر أي أخطاء برمجية إلا وقت التشغيل، ما يؤدي إلى أداء ضعيف واستهلاك للوقت وإجراء العديد من الاختبارات.
هذا جيد للمبتدئين، لأن الاختبارات ستعلمهم الكثير، لكن للمطورين المخضرمين، فإن الاضطرار إلى إصلاح الأخطاء في برنامج معقد يزعجهم. هذا الضعف في الأداء هو العامل الأكبر الذي يحدد طابع الوقت في بايثون.
ما البدائل المحتملة للغة بايثون؟ ومتى يمكن تطبيقها؟
تتنافس عدة لغات جديدة في مجال البرمجة.
لغة (رست)
توفر نفس النوع من الأمان الذي تتمتع به بايثون، ولا يمكن استبدال أي متغير دون قصد، وتحل مشكلة الأداء بمفهوم الملكية والاقتراض، وهي أيضًا لغة البرمجة الأكثر شعبية في السنوات القليلة الماضية، وفقًا لإحصائيات ستاك أوفرفلو.
لغة (غو)
هي مثل بايثون، رائعة للمبتدئين وتسهل صيانة شيفرتها البرمجية وتعديلها. ويُعَد مطورو لغة (غو) الأعلى دخلًا بين المبرمجين.
لغة (جوليا)
هي لغة جديدة منافسة لبايثون، تملأ الفراغ الموجود في الحوسبة التقنية واسعة النطاق (المستخدمة في المشاريع الضخمة). عند استخدام بايثون أو ماتلاب، يتطلب إصلاح الأخطاء عادةً دمجها مع مكتبات (++C)، وهذا ضروري على نطاق واسع، أما الآن يمكنك استخدام جوليا بدلًا من استخدام لغتين.
توجد لغات أخرى في السوق، لكن اللغات الثلاث التي ذكرناها هي التي تتلافى أخطاء بايثون، وتتفوق في التقنيات الأحدث، خاصةً في مجال الذكاء الاصطناعي، ومع ذلك ما زال انتشارها محدودًا، وإن كان مؤشر ستاك أوفرفلو يشير إلى أنها منطلقة نحو الأفضل.