Подтвердить что ты не робот

Является ли Python хорошим для крупных программных проектов (а не для веб-сайтов)?

Сейчас я занимаюсь разработкой в ​​основном на C/С++, но я написал несколько небольших утилит в Python для автоматизации некоторых задач, и я действительно люблю его как язык (особенно производительность).

За исключением спектаклей (проблема, которая иногда может быть решена благодаря простоте взаимодействия Python с модулями C), считаете ли вы, что она подходит для использования в производстве автономных сложных приложений (например, для текстовый процессор или графический инструмент)?

Какую IDE вы бы предложили? IDLE, предоставляемый Python, недостаточно даже для небольших проектов, на мой взгляд.

4b9b3361

Ответ 1

Мы использовали IronPython для создания нашего флагманского приложения для электронных таблиц (код производства 40kloc - и это Python, для которого IMO означает, что loc для каждой функции невелик) в Resolver Systems, поэтому я бы определенно сказал, что он готов для использования в сложных приложениях.

Есть два способа, которыми это может быть не полезным для вас: -)

  • Мы используем IronPython, а не обычный CPython. Это дает нам огромное преимущество - возможность использовать библиотеки классов .NET. Я могу настроить себя на пылающий здесь, но я бы сказал, что я никогда не видел приложение CPython, которое выглядело "профессиональным", поэтому доступ к набору виджета WinForms был для нас огромной победой. IronPython также дает нам преимущество в том, что вы можете легко перейти на С#, если нам нужно повысить производительность. (Хотя, честно говоря, нам никогда не приходилось этого делать. Все наши проблемы с производительностью на сегодняшний день были связаны с тем, что мы выбрали немые алгоритмы, а не потому, что язык был медленным.) Использование С# из IP намного проще, чем писать C-расширение для CPython,
  • Мы являемся магазином экстремального программирования, поэтому перед написанием кода мы пишем тесты. Я бы не писал производственный код на динамическом языке, не записывая сначала тесты; отсутствие какого-либо этапа компиляции должно быть подкреплено чем-то, и, как указывают другие люди, рефакторинг без него может быть жестким. (Greg Hewgill ответ предполагает, что у него была такая же проблема. С другой стороны, я не думаю, что я напишу - или, особенно, рефакторинг - производственный код на любом языке в наши дни, не написав тесты сначала, но YMMV.)

Re: IDE - мы отлично справились с каждым, используя свой любимый текстовый редактор; если вы предпочитаете что-то немного более тяжелое, то WingIDE довольно хорошо оценен.

Ответ 2

Вы найдете в основном два ответа на это: ndash; (Да, конечно! Это лучший язык когда-либо!) и другой религиозный (вы должны быть издеваетесь над мной! Python? Нет... это недостаточно зрело). Возможно, я пропущу последнюю религию (Python?! Используйте Ruby!). Правда, как всегда, далеко не очевидна.

Плюсы: он легко читается, включая батареи, имеет множество хороших библиотек для почти всего. Это выразительное и динамическое типирование делает его более кратким во многих случаях.

Минусы: как динамический язык, имеет более худшую поддержку IDE (правильное синтаксическое завершение требует статической типизации, будь то явное в Java или выводимое на SML), его объектная система далека от совершенства (интерфейсы, кто-нибудь?), и легко получить грязный код, который имеет методы, возвращающие либо int, либо boolean, либо объект или какой-либо вид в неизвестных обстоятельствах.

Мой прием – Мне нравится Python для сценариев, автоматизации, крошечных webapps и других простых четко определенных задач. По-моему, это динамичный язык на планете. Тем не менее, я бы никогда не использовал любой динамически типизированный язык для разработки приложения существенного размера.

Скажите – было бы хорошо использовать его для Stack Overflow, у которого есть три разработчика, и я предполагаю не более 30 тыс. строк кода. Для больших вещей – сначала ваше развитие будет очень быстрым, а затем, когда команда и кодовая база будут расти, они замедляются больше, чем с Java или С#. Вам нужно компенсировать недостаток времени проверки компиляции, написав больше unittests, рефакторинг усложняется, потому что вы никогда не знаете, что нарушило ваш отказ, пока вы не запустите все тесты или даже все большое приложение и т.д.

Теперь – решите, насколько велика ваша команда, и насколько велика приложение, как только она будет выполнена. Если у вас 5 или менее человек, а размер цели - примерно переполнение стека, продолжайте писать в Python. Вы закончите в кратчайшие сроки и будете довольны хорошей кодовой базой. Но если вы хотите написать второй Google или Yahoo, вам будет намного лучше с С# или Java.

Боковая заметка на C/С++, о которой вы упомянули: если вы не пишете критичное по производительности программное обеспечение (скажем, массивный параллельный трассировщик, который будет работать в течение трех месяцев с фильмом) или очень критически важная система (скажем, посадочный аппарат Марса, который будет летать три года подряд, и у вас есть только один шанс высадиться или потерять 400 миллионов долларов), не используйте его. Для веб-приложений, большинства настольных приложений, большинство приложений в целом это не очень хороший выбор. Вы умрете отладочные указатели и выделение памяти в сложной бизнес-логике.

Ответ 3

По-моему, python более чем готов к разработке сложных приложений. Я вижу, что сила pythons больше на стороне сервера, чем написание графических клиентов. Но посмотрите http://www.resolversystems.com/. Они разрабатывают целую электронную таблицу на python, используя порт .net ironpython.net.

Если вы знакомы с eclipse, посмотрите pydev, который обеспечивает поддержку автозавершения и отладки для python со всеми остальными eclipse, как svn поддержка. Парень, разрабатывающий его, только что был куплен aptana, поэтому это будет твердым выбором для будущего.

@Marcin

Минусы: как динамический язык, имеет способ хуже поддержка IDE (правильный синтаксис для завершения требуется статическая типизация, будь то явным в Java или предполагаемым в SML),

Вы правы, что статический анализ может не обеспечивать полное синтаксическое завершение для динамических языков, но я считаю, что pydev выполняет свою работу очень хорошо. Более того, при программировании python у меня есть другой стиль разработки. У меня всегда открытый сеанс ipython, и с одним F5 я не только получаю идеальное завершение от ipython, но и самоанализ объектов и манипуляции.

Но если вы хотите написать второй Google или Yahoo, вы будете намного лучше с С# или Java.

Google просто переписал jaiku для работы над App Engine, все в python. И насколько я знаю, они используют много python внутри google тоже.

Ответ 4

Мне очень нравится python, это обычно мой язык выбора в эти дни для небольших (не-gui) вещей, которые я делаю сам.

Однако для некоторых более крупных проектов Python, с которыми я столкнулся, я считаю, что это не совсем то же самое, что и программирование на С++. Я работал над парсером языка и должен был представлять AST в Python. Это, безусловно, зависит от того, что может сделать Python, но у меня были проблемы с некоторыми рефакторингами. Я много менял представление своего АСТ, меняя методы и классы, и я обнаружил, что пропустил сильную типизацию, которая будет доступна мне в решении на С++. Утилизация утиных Python была почти слишком гибкой, и я обнаружил, что добавляю много кода assert, чтобы попытаться проверить мои типы по мере запуска программы. И тогда я не мог быть уверен, что все было правильно напечатано, если у меня не было 100% -ного тестирования покрытия кода (чего я тогда не делал).

Собственно, это еще одна вещь, которую я иногда скучаю. Можно написать синтаксически правильный код в Python, который просто не будет работать. Компилятор не может сообщить вам об этом, пока он фактически не выполнит код, поэтому в нередко используемых кодах, таких как обработчики ошибок, вы можете легко обнаружить невидимые ошибки. Даже код, который так же просто, как печать сообщения об ошибке со строкой формата%, может выйти из строя во время выполнения из-за несоответствующих типов.

Я не использовал Python для каких-либо файлов графического интерфейса, поэтому я не могу комментировать этот аспект.

Ответ 5

Python считается (среди программистов Python:) отличным языком для быстрого прототипирования. Там не много постороннего синтаксиса, мешающего вашим мыслительным процессам, поэтому большая часть работы, которую вы делаете, имеет тенденцию входить в код. (Там гораздо меньше идиом, требуемых для написания хорошего кода на Python, чем при написании хорошего С++.)

Учитывая это, большинство программистов Python (CPython) приписывают философию "преждевременной оптимизации - это корень всех злых". Написав высокоуровневый (и значительно более медленный) код Python, можно оптимизировать узкие места, используя привязки C/С++, когда ваше приложение приближается к завершению. На этом этапе становится понятнее, что ваши алгоритмы с интенсивным использованием процессора проходят через надлежащее профилирование. Таким образом, вы пишете большую часть кода очень удобным для чтения и поддерживаемым образом, позволяя ускорить работу по дороге. По этой причине вы увидите несколько модулей библиотеки Python, написанных на C.

Большинство графических библиотек в Python (т.е. wxPython) все равно являются оболочками Python вокруг библиотек С++, поэтому вы в значительной степени пишете на бэкэнд С++.

Чтобы решить свой вопрос IDE, SPE (Stani Python Editor) - это хорошая среда IDE, которую я использовал, и Eclipse с PyDev выполняет свою работу. Оба являются OSS, поэтому они могут попробовать!

[Редактировать] @Marcin: У вас есть опыт написания > 30k LOC в Python? Также смешно, что вы должны упомянуть о проблемах масштабируемости Google, поскольку они являются крупнейшими сторонниками Python! Также небольшая организация под названием NASA также часто использует Python;) см. "Один кодер и 17 000 строк кода позже" .

Ответ 6

Ничего не добавить к другим ответам, кроме того, если вы выберете python, вы должны использовать что-то вроде pylint которые никто не упоминал до сих пор.

Ответ 7

Один из способов оценить, для чего используется python, - это посмотреть, какие продукты используют python на данный момент. Эта страница wikipedia имеет длинный список, включающий различные веб-фреймворки, системы управления контентом, системы контроля версий, настольные приложения и IDE.

Как говорится здесь -" Некоторые из крупнейших проектов, использующих Python, - это сервер приложений Zope, YouTube и оригинальный клиент BitTorrent Крупные организации, использующие Python, включают Google, Yahoo!, CERN и NASA. ITA использует Python для некоторых своих компонентов.

Короче говоря, да, это "правильно для использования в производстве при разработке автономных сложных приложений". Так много других языков, с различными плюсами и минусами. Какой лучший язык для вашего конкретного случая использования слишком субъективен для ответа, поэтому я не буду пытаться, но часто ответ будет "тот, который ваши разработчики знают лучше".

Ответ 8

Рефакторинг неизбежен в больших кодовых базах, и отсутствие статической типизации делает это намного сложнее в python, чем в статически типизированных языках.

Ответ 9

И насколько я знаю, они используют много python внутри google тоже.

Ну, я надеюсь, что создатель python все еще работает в google, если я не ошибаюсь?

Что касается использования Python, я считаю, что это отличный язык для автономных приложений. Он широко используется во многих программах Linux, и есть несколько хороших наборов виджетов, чтобы помочь в разработке графического интерфейса.

Ответ 10

Python - это удовольствие использовать. Я использую его регулярно, а также пишу много кода для работы на С#. Есть два недостатка в написании кода пользовательского интерфейса в Python. одна из них заключается в том, что не существует ни одной каркас ui, которая принимается большинством сообщества. когда вы пишете в С#, среда выполнения .NET и библиотеки классов предназначены для совместной работы. С Python каждая библиотека пользовательского интерфейса имеет собственную семантику, которая часто противоречит питонскому мышлению, в котором вы пытаетесь написать свою программу. Я не обвиняю авторов библиотек. Я пробовал несколько библиотек (wxwidgets, PythonWin [Wrapper around MFC], Tkinter). При этом я часто чувствовал, что я пишу код на языке, отличном от Python (несмотря на то, что это был python), потому что библиотеки aren ' t точно pythonic - это порт с другого языка, будь то c, С++, tk.

Итак, для меня я напишу код UI в .NET(для меня С#) из-за IDE и согласованности библиотек. Но когда я могу, я напишу бизнес-логику в python, потому что это более понятно и веселее.

Ответ 11

Я знаю, что я, вероятно, заявляю очевидное, но не забывайте, что качество команды разработчиков и их знакомство с технологией окажут значительное влияние на вашу способность доставлять.

Если у вас сильная команда, то это, вероятно, не проблема, если они знакомы. Но если у вас есть люди с 9 до 5 лет, которые не знакомы с технологией, им потребуется дополнительная поддержка, и вам нужно будет позвонить, если прирост производительности будет стоить того, что стоит для этой поддержки.

Ответ 12

У меня был только один опыт python, мой проект trash-cli.

Я знаю, что, вероятно, некоторые или все проблемы зависят от моей неопытности с python.

Я расстроил эти вещи:

  • трудно найти хорошую IDE бесплатно
  • ограниченная поддержка автоматического рефакторинга

При этом:

  1. необходимость введения двух уровней пакетов и модулей группировки меня смущает.
  2. мне кажется, что не принято широко распространенное соглашение о присвоении имен
  3. Мне кажется, что есть некоторые стандартные API-интерфейсы библиотек, которые являются неполными
  4. меня раздражает тот факт, что некоторые стандартные библиотеки не полностью объектно ориентированы.

Хотя некоторые кодеры-питоны говорят мне, что у них нет этих проблем, или они говорят, что это не проблема.

Ответ 13

Попробуйте Django или Pylons, напишите простое приложение с обоими из них, а затем решите, какой из них подходит вам лучше всего. Есть и другие (например, Turbogears или Werkzeug), но они наиболее часто используются.