هل لغة بايثون جيدة لمشاريع البرمجيات الكبيرة (غير المعتمدة على الويب)؟

StackOverflow https://stackoverflow.com/questions/35753

  •  09-06-2019
  •  | 
  •  

سؤال

أقوم حاليًا بالتطوير في الغالب باستخدام C/C++، لكنني كتبت بعض الأدوات المساعدة الصغيرة في Python لأتمتة بعض المهام وأنا أحبها حقًا كلغة (خاصة الإنتاجية).

باستثناء الأداء (مشكلة يمكن حلها أحيانًا بفضل سهولة ربط Python مع وحدات C)، هل تعتقد أنه من المناسب استخدام الإنتاج في تطوير التطبيقات المعقدة المستقلة (فكر على سبيل المثال في معالج النصوص؟ أو أداة رسومية)؟

ما IDE الذي تقترحه؟إن IDLE المقدم مع Python ليس كافيًا حتى للمشاريع الصغيرة في رأيي.

هل كانت مفيدة؟

المحلول

لقد استخدمنا IronPython لبناء تطبيقنا الرئيسي لجداول البيانات (رمز إنتاج 40kloc - وهو Python، والذي يعني IMO أن الموضع لكل ميزة منخفض) على أنظمة الحل, ، لذلك أود بالتأكيد أن أقول إنه جاهز للاستخدام الإنتاجي للتطبيقات المعقدة.

هناك طريقتان قد لا تكون هذه إجابة مفيدة لك :-)

  1. نحن نستخدم IronPython، وليس CPython المعتاد.وهذا يمنحنا ميزة كبيرة تتمثل في القدرة على استخدام مكتبات فئات .NET.ربما أهيئ نفسي للاشتعال هنا، لكنني أود أن أقول إنني لم أر قط تطبيق CPython يبدو "احترافيًا" - لذا فإن الوصول إلى مجموعة عناصر واجهة المستخدم WinForms كان بمثابة فوز كبير لنا.يمنحنا IronPython أيضًا ميزة القدرة على الانتقال بسهولة إلى C# إذا كنا بحاجة إلى تعزيز الأداء.(على الرغم من أن نكون صادقين لدينا أبداً اللازمة للقيام بذلك.جميع مشكلات الأداء لدينا حتى الآن كانت بسبب اختيارنا للخوارزميات الغبية وليس بسبب بطء اللغة.) يعد استخدام C# من IP أسهل بكثير من كتابة ملحق C لـ CPython.
  2. نحن متجر برمجة متطرفة، لذلك نكتب الاختبارات قبل أن نكتب التعليمات البرمجية.لن أكتب كود الإنتاج بلغة ديناميكية دون كتابة الاختبارات أولاً؛يجب تغطية عدم وجود خطوة تجميع بشيء ما، وكما أشار أشخاص آخرون، فإن إعادة البناء بدونها يمكن أن تكون صعبة.(تشير إجابة جريج هيوجيل إلى أنه واجه نفس المشكلة.من ناحية أخرى، لا أعتقد أنني سأكتب - أو أعيد صياغة - كود الإنتاج بشكل خاص أي اللغة هذه الأيام دون كتابة الاختبارات أولاً - ولكن YMMV.)

يكرر:IDE - لقد كنا على ما يرام مع كل شخص يستخدم محرر النصوص المفضل لديه؛إذا كنت تفضل شيئا أكثر ثقلا قليلا ثم WingIDE يحظى باحترام كبير.

نصائح أخرى

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

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

سلبيات:كلغة ديناميكية، لديها دعم IDE أسوأ بكثير (إكمال بناء الجملة بشكل صحيح يتطلب الكتابة الثابتة، سواء كانت صريحة في Java أو مستدل عليها في SML)، فإن نظام الكائنات الخاص بها بعيد عن الكمال (الواجهات، أي شخص؟) ومن السهل أن ينتهي الأمر بكود فوضوي يحتوي على طرق تُرجع إما int أو boolean أو object أو نوع ما تحت ظروف غير معروفة.

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

لنفترض أنه سيكون من الجيد استخدامه مع Stack Overflow، الذي يضم ثلاثة مطورين وأعتقد أنه لا يحتوي على أكثر من 30 ألف سطر من التعليمات البرمجية.بالنسبة للأشياء الأكبر - في البداية، سيكون تطويرك سريعًا للغاية، وبعد ذلك بمجرد نمو الفريق وقاعدة التعليمات البرمجية، تتباطأ الأمور أكثر مما كانت عليه مع Java أو C#.تحتاج إلى تعويض النقص في عمليات التحقق من وقت التجميع عن طريق كتابة المزيد من اختبارات الوحدات، وتصبح عمليات إعادة البناء أكثر صعوبة لأنك لا تعرف أبدًا ما الذي حدث أثناء إعادة التصميم حتى تقوم بتشغيل جميع الاختبارات أو حتى التطبيق الكبير بأكمله، وما إلى ذلك.

الآن - قرر حجم فريقك وحجم التطبيق المفترض بمجرد الانتهاء منه.إذا كان لديك 5 أشخاص أو أقل وكان الحجم المستهدف هو Stack Overflow تقريبًا، فاكتب بلغة Python.سوف تنتهي في وقت قصير وستكون سعيدًا بقاعدة التعليمات البرمجية الجيدة.ولكن إذا كنت تريد كتابة Google أو Yahoo ثانيًا، فستكون أفضل بكثير باستخدام لغة C# أو Java.

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

في رأيي، بايثون أكثر من جاهز لتطوير التطبيقات المعقدة.أرى قوة بايثون على جانب الخادم أكثر من كتابة عملاء رسوميين.ولكن الق نظرة على http://www.resolversystems.com/.قاموا بتطوير جدول بيانات كامل بلغة بايثون باستخدام منفذ .net Ironpython.

إذا كنت معتادًا على الكسوف، قم بإلقاء نظرة عليه pydev والذي يوفر دعم الإكمال التلقائي وتصحيح الأخطاء لـ python مع جميع ميزات Eclipse الأخرى مثل دعم svn.لقد تم شراء الرجل الذي قام بتطويره للتو aptana, ، لذلك سيكون هذا خيارًا قويًا للمستقبل.

@ مارسين

سلبيات:كلغة ديناميكية ، لديها دعم أسوأ من IDE (يتطلب إكمال بناء الجملة المناسب كتابة ثابتة ، سواء كانت صريحة في Java أو مستنتج في SML) ،

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

ولكن إذا كنت ترغب في كتابة Google أو Yahoo الثانية ، فستكون أفضل بكثير مع C# أو Java.

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

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

ومع ذلك، بالنسبة لبعض مشاريع بايثون الأكبر التي تناولتها، أجد أنها ليست تمامًا مثل البرمجة في C++ على سبيل المثال.كنت أعمل على محلل لغة، وأحتاج إلى تمثيل AST في بايثون.هذا بالتأكيد ضمن نطاق ما يمكن أن تفعله بايثون، ولكن واجهت بعض المشاكل في بعض عمليات إعادة البناء.لقد كنت أغير تمثيل AST الخاص بي وأغير الأساليب والفئات كثيرًا، ووجدت أنني أفتقد الكتابة القوية التي ستكون متاحة لي في حل C++.كانت كتابة بطة بايثون تقريبًا أيضاً مرنة ووجدت نفسي أضيف الكثير من assert رمز لمحاولة التحقق من أنواعي أثناء تشغيل البرنامج.وبعد ذلك لم أتمكن حقًا من التأكد من كتابة كل شيء بشكل صحيح إلا إذا قمت باختبار تغطية الكود بنسبة 100٪ (وهو ما لم أفعله في ذلك الوقت).

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

لم أستخدم Python لأي من عناصر واجهة المستخدم الرسومية لذا لا يمكنني التعليق على هذا الجانب.

تعتبر بايثون (بين مبرمجي بايثون :) لغة رائعة للنماذج الأولية السريعة.ليس هناك الكثير من تركيب الجملة الدخيل الذي يعيق عمليات تفكيرك، لذا فإن معظم العمل الذي تقوم به يميل إلى الدخول في التعليمات البرمجية.(هناك مصطلحات مطلوبة للمشاركة في كتابة تعليمات برمجية جيدة لـ Python أقل بكثير من كتابة لغة C++ جيدة.)

بالنظر إلى هذا، ينسب معظم مبرمجي بايثون (CPython) إلى فلسفة "التحسين المبكر هو أصل كل الشرور".من خلال كتابة كود بايثون عالي المستوى (وأبطأ بشكل ملحوظ)، يمكن للمرء تحسين الاختناقات باستخدام روابط C/C++ عندما يقترب تطبيقك من الاكتمال.في هذه المرحلة، يصبح من الواضح أكثر ماهية الخوارزميات التي تتطلب معالجًا مكثفًا من خلال التوصيف المناسب.بهذه الطريقة، تكتب معظم التعليمات البرمجية بطريقة سهلة القراءة وقابلة للصيانة مع السماح بالتسريع في المستقبل.سترى العديد من وحدات مكتبة Python مكتوبة بلغة C لهذا السبب بالذات.

معظم مكتبات الرسومات في بايثون (أي.wxPython) هي مجرد أغلفة Python حول مكتبات C++ على أي حال، لذلك فأنت تكتب إلى حد كبير إلى الواجهة الخلفية لـ C++.

لمعالجة سؤال IDE الخاص بك، SPE (محرر Stani's Python) هو بيئة تطوير متكاملة جيدة استخدمتها و كسوف مع بيديف ينجز المهمة أيضًا.كلاهما OSS، لذلك يمكنك تجربتهما مجانًا!

[تحرير] @مارسين:هل لديك خبرة في الكتابة > 30 ألف LOC في بايثون؟من المضحك أيضًا أن تذكر مخاوف Google بشأن قابلية التوسع، نظرًا لأنها من أكبر الداعمين لـ Python!كما تستخدم منظمة صغيرة تسمى NASA أيضًا لغة Python بشكل متكرر؛) انظر "مبرمج واحد و17000 سطر من التعليمات البرمجية لاحقًا".

لا شيء يمكن إضافته إلى الإجابات الأخرى ، بجانب أنه إذا اخترت بيثون لك يجب استخدام شيء من هذا القبيل بيلينت الذي لم يذكره أحد حتى الآن.

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

كما تقول هنا - "بعض أكبر المشاريع التي تستخدم Python هي خادم تطبيقات Zope، وYouTube، وعميل BitTorrent الأصلي.تشمل المنظمات الكبيرة التي تستخدم لغة بايثون Google وYahoo! وCERN وNASA.تستخدم ITA لغة Python لبعض مكوناتها."

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

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

وبقدر ما أعرف أنهم يستخدمون الكثير من لغة بايثون داخل جوجل أيضًا.

حسنًا، أتمنى ذلك، صانع لغة بايثون لا يزال يعمل في جوجل إذا لم أكن مخطئًا؟

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

بايثون هي متعة الاستخدام.أستخدمه بشكل روتيني وأكتب أيضًا الكثير من التعليمات البرمجية للعمل في C#.هناك عيبان لكتابة كود واجهة المستخدم في بايثون.الأول هو أنه لا يوجد إطار عمل واحد لواجهة المستخدم مقبول من قبل غالبية المجتمع.عندما تكتب بلغة C#، فإن وقت تشغيل .NET ومكتبات الفئات تهدف جميعها إلى العمل معًا.مع Python، تمتلك كل مكتبة واجهة مستخدم دلالات خاصة بها والتي غالبًا ما تتعارض مع عقلية pythonic التي تحاول كتابة برنامجك بها.أنا لا ألوم كتاب المكتبة.لقد جربت العديد من المكتبات (wxwidgets، وPythonWin[Wrapperaround MFC]، وTkinter)، وعند القيام بذلك، غالبًا ما شعرت أنني كنت أكتب تعليمات برمجية بلغة أخرى غير لغة Python (على الرغم من أنها كانت لغة python) لأن المكتبات ليست كذلك. إنها لغة pythonic تمامًا فهي منفذ من لغة أخرى سواء كانت c أو c++ أو tk.

لذلك بالنسبة لي سأكتب كود واجهة المستخدم في .NET (بالنسبة لي C#) بسبب IDE واتساق المكتبات.ولكن عندما أتمكن من ذلك سأكتب منطق الأعمال بلغة بايثون لأنه أكثر وضوحًا وأكثر متعة.

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

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

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

أعلم أن بعض أو كل المشاكل ربما تعتمد على قلة خبرتي في التعامل مع لغة بايثون.

لقد وجدت هذه الأشياء محبطة:

  1. صعوبة العثور على IDE جيد مجانًا
  2. الدعم المحدود لإعادة البناء التلقائي

علاوة على ذلك:

  1. إن الحاجة إلى تقديم مستويين من حزم ووحدات التجميع تربكني.
  2. يبدو لي أنه لا يوجد اصطلاح تسمية رمزي معتمد على نطاق واسع
  3. يبدو لي أن هناك بعض مستندات واجهات برمجة التطبيقات للمكتبة القياسية غير مكتملة
  4. حقيقة أن بعض المكتبات القياسية ليست موجهة للكائنات بشكل كامل تزعجني

على الرغم من أن بعض مبرمجي بايثون يخبرونني أنهم لا يعانون من هذه المشاكل، أو يقولون إنها ليست مشاكل.

جرب Django أو Pylons، واكتب تطبيقًا بسيطًا مع كليهما ثم قرر أيهما يناسبك أكثر.هناك آخرون (مثل Turbogears أو Werkzeug) ولكن هؤلاء هم الأكثر استخدامًا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top