марта 29, 2008

Почему Python (Муки выбора)

Всем нам наверное знакомы терзания по поводу выбора той или иной альтернативы в процессе разработки. В последнее время я пришел к выводу, что правда, она не всегда одна и что не надо стараться найти самое хорошее решение, надо просто найти одного из двух-трех финалистов и дальше слушаться внутреннего голоса, а не сухого сравнения фич, выбор зачастую индивидуален в пределах человека (комманды). Поэтому то что работает для ребят из Бангалора или консльтантов из Амстердама, не всегда будет работать для Вас. Как и то что я опишу ниже.

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

На чем в современном мире пишут веб приложения - PHP, Perl, Java, .Net, Perl, Python, Ruby. Все остальное экзотика (простите если кого забыл из серьезных но вроде все тут, Flex не предлагать это не платформа а скорее утилита).
Паралельно давайте определимся с критериями, для нас они (в порядке важности)
- скорость разработки, как начальная так и общая. Это разные вещи
- мощность библиотек
- хороший templating language
- не write-only (goodbye Perl)
- чтобы от синтаксиса и возможостей языка не воротило (goodbye Java, PHP, .Net)
- развертывание на NIX системе (goodbye .Net)
- Мощный community и, как следствие, поддержка

PHP - про этот язык я знаю только то, что он простой и про то, что узнавать больше не хочу, так как нет в нем абсолютно никакой изюминки. Популярен только из-за простоты и огроменного количества библиотек (следствие первого). Особого удовольствия програмирование на нем приносить не должно, а следовательно зачем нам такое надо. Работа должна нравится, и язык тоже как часть ее.

Perl - наверное единственный нефункциональный язык, код написаный на котором я не понимаю. Для меня этого достаточно чтобы продолжать непонимать. Более того, от людей которые на нем пишут знаю, что зачастую код написаный на Perl-е, даже авторам понятен только в течении часа после того как работа над ним завершена. Библотеки хороши, с комьюнити тоже неплохо, но как можно писать на write-only языке что-либо серьезное не знаю.

Java - язык написаный консультантами для консультантов, по крайней мере его J2EE часть. Хорошая платформа для зарабатывания денег, как и .Net, но для работы в свое удовольствие не годится. К примеру, сравнивать JSP с Mako templates из Python это как сравнивать Волгу и BMW в старые советские времена, первое явно неудобно и явно устарело, хоть и ездит но МинТранс не дает добро на переработку так как сильно много людей уже на ней ездит и им будет больно/завистно что они в свое время купились на такое г-но. Лучше им просто не показывать что где-то есть BMW. Кстати позор Java еще и в том что там до сих пор нет механизма делания thumbnails из картинки, дающего результат с нормальным качеством. Одного только этого факта достаточно чтобы судить о том как эта платформа предназначена для Web. Да и язык мягко говоря за 10 лет устарел, нет в нем динамики, один геморой с рефлекшинами.
В итоге вердикт - отказать, хоть я и посвятил этой платформе 7 лет своей работы и знаю там почти все входы - выходы.

.Net - см Java + Microsoft + No NIX = отказать.

Ruby - очень хороший язык, RoR очень хорошая платформа, наверное лучшая для Web в плане начальной скорости, но - слабые библиотеки и если бы не это то писать бы нам на рельсе. В остальном - язык с точностью до синтаксиса практически идентичен Python. Чуть красивее, и в 10 раз медленнее (обещают скоро пофиксить). Я думаю у платформы большое будущее, но все же пока стремновато нарватся на задачу типа парсинга/создания excel файлов которую прийдется решать самостоятельно и почивать на лаврах автора супер-дупер библиотеки с милионами фанатов, или забить и ждать пока это не сделает кто-то другой.

Python - отличный язык (ну немного корявый синтаксис __конструкторов__ и прочего, но это терпимо и привыкаешь быстро), зато:
- отличные Mako templates, лучшее наверное из того что есть на сегодня во всех языках
- отличная читаемость кода
- Pylons - по сути перенос идей RoR, отличный веб фреймворк
- подходит для системного програмирования (замена bash) так что не надо активно использовать сразу несколько языков (например Java и Python как раньше)
- отличные библиотеки на все случаи жизни (пока что)
- удобная работа с СУБД - SQLAlchemy - отличный ORM, Elixir - отличная надстройка над ним
- очень быстрый, есть возможность JITи прочих оптимизационных наворотов

В итоге Python теперь наш выбор и, несмотря на то, что никто из нас толком на нем до этого не писал за 6 недель мы сделали столько, сколько на Java делали бы бесконечность времени. Просто потому что на Python код успевает за твоими желаниями хоть как-то, а в Java нет, в итоге, прототипировать на Java это как бежать за своей тенью, в Sonopia мы ее догнали, но за 30 лямов и поздно, да и вдвадцатером.

Вообще после 7 лет Java сейчас после 6 недель Python сложлось ощущение, что тебя злобно обманывали заставляя ходить на костылях, при том что рядом люди ходили нормально, ну может зарабатывали поменьше, но ведь и ходили ровно, и не думали каждую секунду как бы так извратиться с рефлекшином чтобы написать более менее универсальный код. Причем обманывали на очень высоком уровне, и очень много людей, и продолжают успешно обманывать. Консалтинг великая сила, что тут говорить.

55 комментариев:

  1. Я тоже пишу много на питоне, одна только проблема меня волнует - отладка и война с глюками. Не слишком ли много способов сделать глюк который потом долго искать? Забыл скобки после имени метода поставить это еще ладно, но к примеру перепутать порядок аргументов если - я думаю иногда долго отлаживать. Были еще какие-то примеры, но в голову сейчас не лезут. Хотя наверное если придерживаться какой-то дисциплины то это лечится.

    ОтветитьУдалить
  2. pylint помогает с отловом многих ошибок типа неопределенной переменной итд.
    По поводу аргументов то их же можно именовать при вызове, что я всегда делаю когда их больше двух-трех. Ну и можно еще писать тесты

    ОтветитьУдалить
  3. пишу на питоне примерно 7 лет, с перерывами на плюсы/джава. таки да, альтернативной платформы при выборе платформы для веб-разработки не вижу. ;)

    ОтветитьУдалить
  4. Макс я думаю через пару лет Руби станет очень хорошей альтернативой и выиграют от этого все. В принципе Руби уже весьма хорош и во многом Питоновские фреймворки учатся у него, повторюсь что были бы либы настолько мощные как в питоне и не было бы проблем со скоростью, мы бы наверное выбрали бы рельсу.

    ОтветитьУдалить
  5. Весьма разумный выбор.

    Поддержу насчёт Руби - у него действительно сейчас громадные перспективы и большинства основных недостатков он скоро лишится.

    Кстати, я сейчас активно занялся фреймворком Merb - очень многообещающий. По конвеншнам и процессу разработки очень сильно похож на рельсы, но со следующими отличиями:

    - серьёзный упор на быстродействие
    - полностью модульный, разбит на крохотное ядро, 6-7 доп. пакетов (скажем, отдельно мейлер, отдельно кешинг, етс.) и кучу плагинов
    - не привязан к конкретным ORM, templating-системам и JS-библиотекам - что хочешь, то и используешь
    - simplicity over magic
    - threadsafe, поддерживает concurrent uploads

    Скоро запущу на нём свой блог наконец-то. :)

    ОтветитьУдалить
  6. 1. Любой язык поддерживает write-only синтаксис, но это не значит что Перл создан для написания write-only скриптов.
    write-only – это такой штамп на Перле. Но, поверьте, на любом другом языке получаются приложения в таком стиле если они имеют гнилую архитектуру: например, кучу функций в одном файле, которые взаимодействуют с кучей глобальных переменных и при этом, каждая функция выводит свой кусок HTML кода, который находится в двойных кавычках, и при этом каждую кавычку в HTML коде нужно экранировать.

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

    Сейчас же я, в любом языке, на котором пишу руководствуюсь следующими правилами:
    1. Отдельная сущность –> в модуль (класс)
    2. Много констант и конфигурационных данных -> в отдельный модуль или XML/YAML файл.
    3. Сложный кусок кода – значит нужно прокомментировать.
    4. use strict; ( use warnings; ) Это индикатор write-only кода. Если вы не находите эти строчки или хотя бы «use strict» вначале перлового исходника – с большой вероятностью можно сказать что это write-only код.

    На самом деле, если следовать этим четырем необходимым правилам – Перловый код и код на любом другом языке не будет казаться write-only. Write-only это больше ярлык для человека, пишущего код, а не для какого либо языка.

    2. Python и pylons – хороший выбор для веб разработки
    Питон хороший язык. Для веб разработки подходит.
    Pylons – толковый веб фреймворк. Хорошо, что, в принципе, не сложно понять как он работает и начать писать с его помощью веб-приложения. Pylons не ограничивает выбор шаблонизатора и движка (или ORM’a) для работы с базой данных. Насколько я заметил, фреймворк взял лучшее с Рельсов. Мне, лично, нравятся модули Routers и WebHelpers.
    Неплохо документирован. Документации на сайте разработчиков мне было достаточно для того чтобы установить Pylons и разобраться в его работе за 2 дня.

    ОтветитьУдалить
  7. Прикольно наехали на джава. А не пробовали юзать что то более продвинутое чем JSP? И чем Image.getScaledInstance() не устраивает для рисайза картинок? Я вот програмал и на джава и на питоне, но выбрал бы для своего проэкта джава. Хотя может это потому что я консультант? :)

    ОтветитьУдалить
  8. Рад что тема породила дискусию.
    Отчасти согласен по поводу write-only и perl да здесь все зависит от человека, но все же на перле такой код писать проще и его больше уже написано. Вобщем ложку то может и можно найти но осадок останется навсегда. Все таки перл это больше для работы с текстом, хотя с помощью жеских конвеншинов на нем можно писать командой большие проекты.

    По поводу явы - а что там есть навороченей JSP из темплейтинга? Велосити? Ему до мако столько жк сколько и JSP
    а по поводу Image.getScaledInstance(), который кстати нетривиально заставить работать на NIX сервере без иксов, так вот наш арт директор обещала уволиться если у нас будут такие паршивые thumbnails нет там антиалиасинга, я уже молчу про скорость работы. Метод чисто для консультантв чтобы поставить галочку - это мы умеем, а юзера и програмеры потом страдают

    ОтветитьУдалить
  9. Вот только что в гугле нашел:
    Graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

    А по поводу X11 то наверное поможет -Djava.awt.headless=true.(Там правда одну иксовую либу поставить пришлось все таки)

    Иследование проблемы заняло 10 мин гугления и 10 мин написания примера по скалингу фотки тимошенки :) на сервере без Х11.

    Ну а про презентейшн тир, то я мако не видел и чесно говоря здесь аргументов или какого то мнения привести не могу.

    Вообще я ничем не меряюсь, просто мне очень нравится джава а вы ее так ..

    ОтветитьУдалить
  10. Андрей а теперь попробуйте заресайзить и посмотреть на результат, он будет весьма хуже того что делает Пикаса например. То что есть хинты это еще ничего не значит, не работает оно, и скорость была ужасная и память оно хавало как ненормальное. Мы в результате использовали злобную интеграцию с imagemagick.
    А насчет любви - то я ее тоже любил, а оказалось что миф это все.

    ОтветитьУдалить
  11. битая ссылка в предыдущем комментарии, сорри

    thumbnails sux

    ОтветитьУдалить
  12. Мыкола, а почему, собственно Flex -- не платформа? хотелось бы услышать мысли на эту тему
    p.s. Я слыхал про большие проблемы с этим делом в сонопии

    ОтветитьУдалить
  13. Да, и еще -- а как в Pylons с организацией сложной валидации форм?
    Я вот последнее время оцениваю фреймворки именно по тому как легко/сложно делать там человеческие формы

    ОтветитьУдалить
  14. ну флекс это утилита а не платформа, на ней можно сделать пару формочек но сайты на ней не делаются, есть опыт Сонопии и MTV, ну и еще наверное top4top, там флеш правда, но тоже говно.

    А с формами есть FormEncode в принципе все ОК там, мы еще накрутили AJAX валидацию на той же основе (опишу наверное когда отлежится и уберутся все баги).
    по крайней мере валидация в яве посложнее в разы.

    вот пример мега большой формы

    class CreateProductFormSchema(formencode.Schema):
    allow_extra_fields = True
    filter_extra_fields = False
    name = validators.String(max=100, not_empty=True, strip=True)
    keywords = validators.String(max=100, not_empty=True, strip=True)
    category = IsLastLevelCategory(not_empty=True)
    group = InEntity(model.ProductGroup, if_empty=None)
    short_description = validators.String(max=160, not_empty=True, strip=True)
    long_description = validators.String(max=10000, if_empty=None, strip=True)
    measure_unit = InDictionary(g.data.units, if_empty=None, if_missing=None)
    price = Float(positive=True, max=10 ** 12, if_empty=None, if_missing=None)
    price_currency = InDictionary(g.data.currencies, if_empty=None, if_missing=None)
    minimum_order_quantity = Float(positive=True, max=10 ** 6, if_empty=None, if_missing=None)
    supply_ability_quantity = Float(positive=True, max=10 ** 6, if_empty=None, if_missing=None)
    supply_ability_time_unit = InDictionary(g.data.time_units, if_empty=None, if_missing=None)
    packaging = validators.String(max=500, if_empty=None, strip=True, if_missing=None)
    chained_validators = [
    validators.RequireIfPresent(required='measure_unit', present='price', messages={
    'empty':_("Please select a unit")
    }),
    validators.RequireIfPresent(required='measure_unit', present='minimum_order_quantity', messages={
    'empty':_("Please select a unit")
    }),
    validators.RequireIfPresent(required='measure_unit', present='supply_ability_quantity', messages={
    'empty':_("Please select a unit")
    }),
    validators.RequireIfPresent(required='price_currency', present='price', messages={
    'empty':_("Please select a currency")
    }),
    validators.RequireIfPresent(required='supply_ability_time_unit', present='supply_ability_quantity', messages={
    'empty':_("Please select a time unit")
    }),
    ]

    ОтветитьУдалить
  15. хм... есть повод задуматься -- у меня как-то о Pylons сложилось мнение что это набор разносторонних либ которые для того чтобы собрать вместе и поехать надо долго обрабатывать напильником

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

    ОтветитьУдалить
  17. вот Вы не поверите, а мне не нужно было ни разу создать из картинки thumbnails. вот за все 8 лет программирования на Java под веб было не нужно.
    ну а что касается презентейшина -- спасибо, поржал. pure JSP в качестве уровня представления это конечно очень старо, и конечно с Питоном не сравнится. как насчет JSF + Facelets, GWT? и про серверсайд -- как насчет аналогов Spring, Hibernate, JBoss Seam, JMS?

    ОтветитьУдалить
  18. да, и в догонку. я тоже ничем не меряюсь, судя по опыту Вы должны быть в теме и мне интересно, Вы случайно современный (ведь Mako -- это современный фрэйморк?) с технологией 1999-2000 года? или все-таки не случайно?
    а вообще каждый выбирает для себя, и если получается хорошо на Питоне -- счастливого плаванья.

    ОтветитьУдалить
  19. corwin спасибо поржал.
    Жаль что не надо было делать самбнейлы, я с трудом представляю современную (а сейчас рулит SaS) задачу где это не надо.
    Аналогов Spring, Hibernate, JBoss Seam, JMS нам не надо, разве что хибернейт но тут есть в разы лучше SQLAlchemy + Elixir. Кода навскидку меньше в 20 раз и SQL читаемый в логах да и не глючит оно.
    Спринг это тулза которое оттягивает конец явы2ее, подобные вещи (депенденси инжекшин) есть но не прижились в силу того что это просто никому не нужно, в питоне вообще по-моему нет интерфейсов. А остальной спринг просто интегрирует все то что в питоне интегрируется и так просто.
    JMS - есть плагины ко всем нормальным провайдерам по хттп протоколу, есть плагин к амазону. JBoss Seam - хз что такое наверное аппликейшин фреймворк тогда не понял сути вопроса тут такого валом
    По поводу JSF - тут подмена понятий, он опирается на язык темплейтов, будь то JSP или Facelets. JSF я когда-то осилил но понял что писать на нем не буду ибо говно причем оверкомпликейтед, как и вся ява2ее. Может в яве нет ничего лучше но плейн жсп приятнее хоть и тоже говно. а GWT к яве2ее не имеее отношения вообще, это чистый клайент сайд.
    Короче чтобы не спорить напишите апликуху на питоне сами и сравните. Только к яве боюсь вы больше не вернетесь, даже если ЗП упадет уна 30%. Мы ведь все не только за деньги работаем?

    ОтветитьУдалить
  20. Я вот посмотрел на досуге Mako и не нашел в нем чего то военного. Чем он принципиально отличается от JSP кроме отсутствия механизма теглибов, и как следствие отсутствия тон уже написанных теглибов третьих сторон?

    ОтветитьУдалить
  21. Кстати только что осознал что у нас нет ниодного XML файла в проекте :)

    ОтветитьУдалить
  22. Андрей а Вы попробуйте на нем пописать,
    навскидку - нормальный а не c:if...
    синтаксис организации блоков
    нормальный вызов функций
    нормальная интернационализация
    встроеный механизм наследования темплитов в 100 раз круче чем Тайлз
    и вообще нету этого конченого ХМЛ везде где люди привыкли писать код

    ОтветитьУдалить
  23. т.е. Вы мне явственно даете понять, что на коструктивный диалог мне расчитывать нечего? что касается Spring, то он не имеет никакого отношения к J2EE. то есть вообще. Spring наоборот добавляет к обычному J2SE функции, которые являются стандартными для J2EE платформы. но вероятно я пишу все это зря. в "священные войны" я уже наигрался и никого никуда не агитирую. рынок большой, мы все на нем поместимся. тем более, что мне нравится XML, Java, J2EE, Spring, JSF... я просто не считаю, что хороший фреймворк -- это простой фрэймворк.
    за сим позвольте откланятся, участвовать в дискуссиях с аргументами "говно-говно", уж простите за циату. у меня нет желанию.

    ОтветитьУдалить
  24. corwin ну Вы как маленький, не воспринимаете аргументы, по моему я очень конструктивно описал почему нам не нужен весь этот хлам, и что у нас в Python есть взамен. А называть Spring J2SE фреймфорком я бы не стал, это самый что ни на есть интеграционыый фреймыорк джя J2EE из SE там только депенденси инджекшин.
    Думаю сам Род Йонсон меня бы поддержал. Да Спринг делает разработку на яве терпимой, но можно же писать в 5 раз быстрее, попробуйте и возможно Вы измените свой взгляд на миф под названием J2EE.

    ОтветитьУдалить
  25. откровенно говоря, кроме эмоциональной реакции на какие-то аббривеатуры не увидил никаких аргументов, уж простите. может смотрел не правильно. меня не надо "за Питон" агитировать, я свой выбор сделал. давно. и ни разу кстати не пожалел. хорош Питон? не знаю, если Вам нравится, так кто же против -- пишите, выкладывайте интересные посты, новости, что сочтете нужным. это важно и полезно. а мерятся в комментах чье кунг-фу сильнее... равно как называть то, чем я занимаюсь "мифом", "обманом", "костылями"... обидно, что 7 лет Вы занимались технологией, котрая явно не приносила Вам удовольствия, но это ведь только ошибка выбора. которая уже исправлена, я надеюсь.

    ОтветитьУдалить
  26. Отчего же, совсем было не неприятно писать на Java, подобно тому как гражданам СССР было нормально жить в своей стране. Люди ко всему привыкают.
    Просто много вещей которые говорят Вам про нее есть завлекаловкой, которая отвлекала и меня и Вас от реального состояния технологий "за железным занавесом".
    Java - это новый Cobol, это вполне признаное уже мнение, она долго еще не умрет, но реально за 10 лет появилось много технологий которе позволяют получать больше удовольствия от эффективности своей работы.
    А спорить нам дальше смысла не вижу, в это невозможно поверить если не попробовать самому. Я 7 лет писал на J2EE 3 из которых был архитектором, и 3 мес на питоне мне хватило чтобы постараться забыть об этом навсегда.
    Питон тоже может станет неэфективным вскоре, но пока вроде мы уже плотно вошли в эру динамических языков.
    Будьте эффективными.

    ОтветитьУдалить
  27. Чтобы сделать нормальный thumbnails в java лучше подключить imagemagick, а стандартными (или даже сторонними, но написаными на java) и вправду замучаешься - потратил неделю, пока не пришёл к imagemagick :)

    По поводу всего остального думаю java еще покажет всем этим питонам и руби. :) По мощности фреймворков java сейчас превосходит их. Да, чтобы просечь всю мощь нужно потратить больше время на их изучение и практику, но в итоге получаешь мощные орудия, которых нет на других платформах.

    Опять же, сейчас есть мощная альтернатива J2EE (впрочем, J2EE также упрощается, тот же EJB3). Посмотрите новые фреймворки такие как Tapestry 5 или Wicket. Особенно рекомендую посмотреть Tapestry5.

    И самое главное это Hibernate + HibernateSearch + HibernateAnnotations + HibernateValidator - вся эта связка действительно мощна, особенно если завязать HibernateValidator с frontend веб-формами (я это сделал за 3 дня для Tapestry5). На питоне я такого не видел, да там и аннотаций еще нет.

    Кстати, благодаря аннотациям теперь нет нужды во множестве xml конфигураций - все конфиги теперь в аннотациях в соответсвующих классах.

    Я планирую попозже написать статью сравнения питона и джавы (не J2EE, а альтернативы типа Tapestry5) для веб-разработки. Правда на питоне у меня сейчас 0 практического опыта, но думаю в этом году я его наверстаю, чтобы сделать реальную статью без эмоций на реальных фактах.

    ОтветитьУдалить
  28. Foror ключевые слова вашего коментария -
    >> Правда на питоне у меня сейчас 0 практического опыта

    Я уверен как только этот 0 сменится на пару недель или месяц - Вы поймете что во многом заблуждались.
    В питоне есть аннотации (называются декораторы), так вот эти декораторы дают фору всей этой мета информации, так как кроме аннотирования позволяют выполнять экшины сразу. Это просто функция в которую обрамляется вызов метода.
    Если надумаете учить питон для веб - обратите внимание на Pylons, SQLAlchemy, Elixir
    Кстати в питоне еще и прекрасная интернационализация, в разы удобнее явы.
    И еще совет - не пишите пост о сравнении J2EE c Python пока не разберетесь основательно в последнем, просто чтобы не выглядеть глупо.

    ОтветитьУдалить
  29. А почему не turbogears? Фреймворк должен помагать а не ставить палки в колеса, с джангоподобными вещами я еще во времена ява девелопмента намучился, выглядит круто но шаг влево шаг вправо - пиши костыли, Иван Сагалаев из Яндекса только убедил меня своим докладом год назад что джанго таки не мое.

    ОтветитьУдалить
  30. Linux Journal:

    Python Wins "Favorite Scripting Language" Award

    details

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

    ОтветитьУдалить
  32. Зря вы так игнорируете Flex. Это очень даже "платформа". Если не поленитесь глянуть http://flex.org/showcase/ , то увидите сколько веб-приложений и сайтов уже сделано на нем. Я делал обзор флэш-программирования в своей статье http://yzh44yzh.com/?blog/flash_platform
    там обо этом подробнее. Статья за 20 апреля, но уже, считай, устарела, в связи с появление флэш-плеер 10. Там куча обалденных возможностей.

    ОтветитьУдалить
  33. Спасибо за статью, большинство вещей оттуда мы поняли и сами хоть и не сразу, но с классметодами надо будет еще разобраться, мы их немного используем :(

    ОтветитьУдалить
  34. Есть сорт программистов (к которым отношусь и я), которые привыкнув к инструменту/языку, начинают испытывать томление по чему-то новому и неизведанному. Язык Ruby, изначально запланированный если не для конфронтации с Python, то точно как его и исключительно его альтернатива, почему-то начинает привлекать программистов. Я тоже решил посмотреть это чудо. И в итоге 100% согласился с выводом о нем самого GvR. Какой-то неопрятный синтаксис. Какие-то порой странные конструкции (работа с блоками, аналоги yield и send).
    Не так давно читал пост человека, писавшего на RoR и в итоге ушедшего в PHP с выводом: "много букв". Вобщем, лично у меня создал впечатление какой-то альтернативщины. Возможно, туда ушло много людей из Perl...

    Сам сейчас пишу на J2ME (после 6 лет работы на Python) и, конечно же, в легком шоке от Java.
    Свои выводы о ней я сделал в своем блоге (http://aquagnu.blogger.com).

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

    ОтветитьУдалить
  35. Здравствуйте!

    Скажите, пожалуйста, а как вы запускаете python-скрипты на выполнение?

    CGI? FastCGI? mod_python? Что-то ещё?

    ОтветитьУдалить
  36. lighttpd + mod_scgi + paste, само приложение запускается через paste.

    Мы пробовали разные варианты но этот нам нравится больше всего.

    ОтветитьУдалить
  37. Не заслуженно Вы с php.
    Мое личное ИМХО.

    ОтветитьУдалить
  38. Я думаю, что "нечитаемость" перла и "читаемость питона" -- мифы. В ходе повседневной работы я сталкиваюсь с огромным количеством неудобоваримого кода на Питоне. Это бывает в 2 случаях:
    * когда человек пишет на Питоне как на C (PHP, Java etc.)
    * когда человек питается писать слишком умный код

    О Perl-e можно сказать совершенно то же самое. Несмотря на его декларируемую анархию, там уже давно сложились свои идиомы. И если следовать рекомендациям из 'Perl Best Practices', код будет компактный и удобочитаемый.

    ОтветитьУдалить
  39. UPD: Забыл, про сервис КЛАДР, описание здесь http://gazdovsky.blogspot.com.

    ОтветитьУдалить
  40. Популярен только из-за простоты и огроменного количества библиотек (следствие первого). Особого удовольствия програмирование на нем приносить не должно, а следовательно зачем нам такое надо.

    Серьезный аргумент привыборе инструмента ;)

    ОтветитьУдалить
  41. Добрый день, коллеги! Согласен со многими высказываниями в данном обсуждении. В моей практике было применение и Python'а и Java и Microsoft ASP.NET AJAX - и хочу заметить, что чаще всего выбор инструментария все же зависит от задачи и опыта разработчика. Например, если нет проблем с покупкой коммерческих продуктов, то ASP.NET AJAX + DevExpess - это конфетка с богатыми возможностями и роскошным интерфейсом; Java - единственный адекватный инструмент для команды разработчиков в очень больших корпоративных разработках и интеграции между платформами( например, в бизнес-системах типа SAP); Python - отличный инструмент для разработки приложений, где важна гибкость при адаптации к изменяющимся условиям. Мне также удавалось запускать PHP в связке с высокопроизводительным расширением FastCGI и IIS и получать отличные результаты по производительности ))). Поэтому, господа, возможно стоит обратить внимание на то, чтобы инструмент соответствовал задаче, а не пытаться найти панацею в одном средстве разработки. Удачи всем.

    ОтветитьУдалить
  42. перешел на Java (точнее Scala) из Питона.

    из преимуществ :
    - скорость - можно писать даже математику / обработку изображений не особо проиграв в скорости по ср.с С/С++ и без необходимости задействования C/C++;
    - более продуманная инфраструктура - система типов, контейнеров, организация стандартной библиотеки. В Питоне ст.библиотека похожа на сборную солянку от разных авторов написанную в разных стилях, с разным уровнем документированности, продуманности и т.д. ИМХО лучшие библиотеки Питона написаны в Java-стиле (классы, правильное наследование и т.д.). И вообще в J2SE более богатая ст.библиотека;
    - более высокие требования к продуманности своей программы - организации классов/подклассов, интерфейсов. По сравнению с Питоном это напрягает, но в итоге получаются более гибкие и расширяемые решения;
    - лучшая поддержка многопоточности и многоядерности, в Питоне ее фактически нет. Акторы в Скале не уступают Эрланговским;
    - куча подключаемых скриптовых движков - BeanShell, Kawa, JScheme, Groovy, Jython, JRuby. Не нравится Java - пожалуйта, пиши на них, используя все возможности фреймворка;

    по объему кода - за счет вывода типов и т.д. объем текстов на Скале не намного больше Питона. Плюс полноценные лямбды, замыкания и прочая функциональность.

    по обработке изображений - в Java она полноценная, в Питоне встроенной фактически нет. вызывать внешний Imagemagick можно как из Явы, так и из Питона, так что Ява в этом выигрывает.

    по интернационализации - в Питоне фактически используется библ.Gettext. Никто не запрещает прикрутить его к Java. Или написать похожую обертку к ресурсам, в том числе и с чтением формата .PO/.MO - дело нескольких часов. А вот встроенного аналога Locale и др. в Питоне нет, приходится подключать внешние типа Babel - и тут Ява выигрывает.

    по шаблонам - в Скала удобная интеграция XML в код программы, выглядит не хуже Mako.

    короче с появлением Scala не вижу никаких преимуществ Питона.

    ОтветитьУдалить
  43. Спасибо за развернутый коментарий про Scala, нужно будет посмотреть что за зверь.
    Теперь по существу. Python это прежде всего философия, мне действительно нравится как пишут на ней люди и нравится использовать их код. В яве такого и близко не было, все сложное и запутаное. Возожно появятся более удачные средства в будущем, может уже появились но мы свой выбор сделали и еще ни разу не пожалели. Все есть и все быстро и удобно.

    ОтветитьУдалить
  44. еще - ООП в SCala по-моему мощнее Питоньего.

    и советую взглянуть на Lift :
    http://liftweb.net

    ОтветитьУдалить
  45. здравствуйте!
    у меня просьба. не могли бы вы привести пример обработки формы на питоне?
    пожалуйста, мне нужно как можно скорее!
    буду безмерно благодарна.

    ОтветитьУдалить
  46. Что вы думуете по поводу декларативной философии созданий приложений, например, OpenLaszlo?

    ОтветитьУдалить
  47. Приложения слишком сложны чтобы быть описаны декларативно, рано или поздно вы упираетесь в неразрешимую проблему и плюсы превращаются в минусы. Потому мы впринципе и Django не используем.
    Но прототипы и части приложений можно писать на более декларативных вещах.

    ОтветитьУдалить
  48. Но прототипы и части приложений можно писать на более декларативных вещах.

    Подскажите, пожайлуста, на каких?
    По моему Laszlo довольно удачно сочетает в себе и полностью декларативный подход и ООП.

    Пробую для создания интерфесов.

    А в качестве сервера данных, служит eXist.

    Хотелось бы иметь похожий механизм для "декларирования", например различных версий модулей, функций, и справочных данных. И механизм сборки из этого приложения. Но это уже ближе к RDF и онтологиям мне кажется

    ОтветитьУдалить
  49. Евгений, я не против академических вещей, они развивают мозг, но к сожалению в чистом виде на них не построишь хороших систем. Здесь больше рулят прагматичные вещи вроде python, ruby или даже php :).
    Lazlo я не смотрел года 3 как, тогда мне оно не понравилось, и вообще xml это реально не лучший синтаксис для програмирования.

    ОтветитьУдалить
  50. Я согласен, но все течет, все меняется. Кода-то, лет 15 назад, тоже акадимические вещи вроде трансляторов с одного языка на другой казались бесполезными, а теперь вот есть вполне практичный GWT.

    А по поводу программирования на XML, так на XML делается только описание структур или данных, сами данные, и XSLT трансформации. А прагромирование в основном: XQuery, JavaScript, Java - это в моем случае, или, например, - Python в Вашем

    ОтветитьУдалить
  51. это будет всегда, наука перерастает во вполне рабочие технологии, возможно сроки уменьшаются в связи с развитием средств обмена информацией. Но XSLT и XML это имхо немного тупиковые ветки, сложные они очень.

    ОтветитьУдалить
  52. XSLT - да, я бы по урвню сложности сравнил с perl (можно написать такое что через час сам забудешь, что это значило).

    А XML - очень даже хорош и не сложен для обмена информацией, а приналичии языка запросов (XQuery) так и для хранения данных.

    А будущее я думаю за смешанной технологией XML и RDF и единым языком запросов для обоих моделей данных.

    На последнее (RDF) не хватает времени к сожалению. Вроде уже даже появились хранилища триплетов и w3c анансировал XSparQL (SPARQL в нотации XQuery)

    ОтветитьУдалить
  53. Стосовно PHP: Синтаксис вбиває і вводить в глибоку депресію.... але ж блін, якщо подивитись на чому написні найкрутіші стартапи, то диву даєшся.... майже всі на PHP та й до того ж PHP фактично насьогодні найшвидший, це факт (просто за свою історію він більше обкатаний)... думаю все ж PHP недостатньо детально оцінили перш ніж відкинути (це я не про те, що кінцеве рішення не вірне)

    ОтветитьУдалить
  54. Почему-то, такие, с виду, осведомленные люди, совершенно ничего не упомянули о таком гибком языке как JavaScript. Который, кстати, стал четвертым официальным языком в Гугле, наряду с Питоном. А один из разработчиков Steve Yegge даже портировал на серверный JavaScript Ruby on Rails. Впрочем, мне известны еще около трех рельсоподобных фреймверков на JavaScript. Существует несколько серверных интерпретаторов, из которых наибольшую популярность приобрел Rhino

    ОтветитьУдалить