Friday, July 5, 2013

Perl всё

Ура, я наконец-то перешел на Python в качестве основного языка разработки. Довольно долгое время моим основным орудием был Perl, но в последнее время я все чаще стал посматривать на альтернативы (e.g. Python, Ruby, NodeJS). Немного о том, что мне не нравится в Perl, в произвольном порядке.

  • Perl, пожалуй, худший выбор в качестве первого языка программирования. Этот язык упорот настолько, что поюзав его несколько лет переключиться на что-то вменяемое становится сложно. Чего стоит, например, передача аргументов в функцию в виде массива @_, реализация областей видимости переменных, etc.

    Примерно в этом же ключе отзывался Дейкстра по отношению к Basic:
    "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
    Справедливости ради стоит отметить, что комьюнити у перла весьма дружелюбное и открытое.

  • Стремление к сходству с естественным языком (на Perl можно даже писать стихи). Звучит прикольно, но на практике лишь раздувает синтаксис и делает код менее читабельным/поддерживаемым.

  • Мантры TMTOWTDI (There’s More Than One Way To Do It) и DWIM (Do What I Mean). Чем больше существует способов "сделать это", тем сложнее язык в изучении и понимании. Попытка заставить интерпретатор строить догадки также ни к чему хорошему не приводит.

  • Отсутствие вменяемого ООП. А без ООП нынче никуда.

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

  • Очень узкая ниша. На мой взгляд – это относительно небольшие (одноразовые) скрипты, позволяющие быстро выполнить задачу. Причем "быстро" как по времени написания кода, так и его выполнения.

  • Perl – единственный язык, в котором имеется goatse operator =)

На этом унылом фоне всё лучше смотрится Python. Он на порядок читабельней, более строгий и полностью объектно ориентированный. Наконец, его гораздо легче набивать вслепую из-за минимума пунктуации ) И еще, я уже давно собирался на него перейти...

6 comments:

  1. >Становится ясно, что ниша Perl – это относительно небольшие (одноразовые) >скрипты, позволяющие быстро выполнить задачу
    В основном да. Но так же вполне неплохо ваять web сервисы выдающие данные в json. Приложение состоит из отдельных независимых скриптов. Unix-way.

    > А без ООП нынче никуда.
    Ересь. Конкретно в перл ООП ненужно. Надо принять идеологию перла как есть. А кому нужно ООП в perl - пусть городит костыли и грызет кактус или переходит на другой ЯП.

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

    ReplyDelete
  3. АнатолийJuly 20, 2013 at 8:34 AM

    Нужен ООП в Perl? Ну юзайте Moose.
    Хотя, я не понимаю, чем нативный bless вас не устоил.
    В документации как бы все лаконично и понятно расписано.
    Говнокода полно на любом языке программирования.
    Любите строгий стиль? Используйте use strict.
    По моему вы просто любите Python.
    Но я тоже борщ люблю, но от окрошки не откажусь. ))

    ReplyDelete
  4. "use strict" - это само собой, под строгим стилем я имел в виду скорее невозможность в Python сказать, например, 1 + "2" или {}["key"]. В Python все должно быть явно: {}.get("key", None)

    > Говнокода полно на любом языке программирования.
    В принципе согласен, но код на перле скатывается в говно гораздо быстрее, чем на питоне из-за бесконечного числа возможностей "сделать это", общей корявости синтаксиса, множества трюков, которыми обязательно кто-то решит воспользоваться.

    ReplyDelete
  5. Ну и чем так уж хорошо то, что нельзя сказать 1 + “2″ ? Тем, что для перевода одного типа данных в другой нужно городить целую стену кода?

    Но в целом, увы, вы правы - perl все менее и менее популярен. Хотя, на мой взгляд, это связано не с языком, а сообществом и отсутствием материальной поддержки. Чтобы язык был популярен, надо, чтобы были написанные на нем удобные программные продукты (настолько удобные, что разобраться с его установкой сможет ребенок - аля wordpress). Чтобы были книги и понятная документация. В том числе на русском. Дружелюбное и общительное сообщество, готовое обучать новичков. Т.е. по сути, нужна грамотная маркетинговая политика. Все это было у PHP . И нет у Perl. В итоге побеждает страшненький уродец (ИМХО).

    Ну а если посмотреть на выбор, который вы сделали... не самый лучший. Вакансий для питонистов (по данным hh) - лишь чуть больше, чем для perl. Вполне вероятно, что его ожидает судьба perl. Если переходить на новый язык - лучше уж выбрать что-то посерьезней. C или Java.

    ReplyDelete
  6. Где вы увидели "стену кода"? Вообще-то код на питоне, как правило, получается компактнее аналогичного кода на перле раза в полтора. Знаю по опыту переписывания собственных скриптов.

    Насчет отсутствия поддержки перла (энтерпрайзом и т.п.) - согласен. CPAN, который обычно упоминается как одно из главных достоинств перла, представляет собой библиотеки, которые пишутся энтузиастами. Качество и поддержка соответствующие. К примеру, в свое время я так и не нашел вменяемых библиотек для работы с SOAP в Perl. Тот же SOAP::Lite нуждался в бесконечных костылях и подпорках, etc.

    Насчет Python вы зря, он активно используется гуглом ;) Алсо, в ветке 3.x язык стал значительно приятней в использовании.

    ReplyDelete