Впервые я услышал про Perl, когда учился в средней школе в начале 2000-х. Это был один из наиболее универсальных языков программирования в мире, своеобразный «швейцарский нож» интернета. Однако если сравнивать Python и Perl, то последний медленно, но верно теряет свою популярность. Что случилось с самым многообещающим языком сети?
Низкий барьер входа по сравнению с компилируемыми, низкоуровневыми альтернативами (а именно C) приводил к тому, что Perl притягивал пользователей даже без базовых навыков в сфере программирования (читай: новичков, которые пишут плохой код). Также была небольшая группа опытных пользователей («продвинутые хакеры»), которые могли быстро писать гибкие, мощные, компактные программы, что увеличивало популярность Perl среди нового поколения программистов.
Присутствие центрального хранилища (Comprehensive Perl Archive Network, или CPAN) означало, что многие пользователи могли применять уже написанный кем-то ранее код в сообществе Perl (Programming Republic of Perl). Все это наряду с энтузиазмом эклектичного создателя Larry Wall, чей интерес к языкам сделал Perl лидером в текстовом парсинге, стало формулой успеха во времена, когда большинство текстовой информации распространялось через интернет.
С приходом 21 века были сотворены многие «жемчужины мудрости», которые помогали получать и анализировать информацию на сайте. Perl имел кривую обучения – под которой обычно подразумевалось то, что это был третий или четвертый язык, выученный программистами – однако он был на самой вершине популярности.
«С приходом нового тысячелетия казалось, что C++ одержит победу, Java займет место в лидерах, а Perl неплохо покажет себя», сообщил Wall в своей речи на третьем State of Perl в 1999. «Некоторые из вас, несомненно, смогли бы спокойно стереть эти две первые строчки, однако я не думаю, что нужно это делать. Обратите внимание на тот факт, что C++ и Java – это языки системного программирования. Они – два спорт-кара в лидерах гонки. Между тем Perl – это самый быстрый внедорожник, первый среди остальных внедорожников. Он лучший в своем классе. Естественно, все мы понимаем, что Perl находится в своем классе».
Но затем все изменилось.
Perl против Python
Затем появился Python. По сравнению с четким скриптингом Perl’а, Python представлял собой нечто кривое и перекошенное. Даже свое название он получил от популярного шоу Monty Python’s Flying Circus («Летающий цирк Монти Пайтона»). Знаменательно, что большая часть ранних упоминаний Wall о Python представляла собой безобидные шутки в адрес этого языка.
Наступил миллениум, компьютеры пережили 2000 год, мои годы юношества ушли в прошлое. Я изучал математику, гуманитарные и естественные науки, однако находился на расстоянии вытянутой руки от написания кода. Мои знания Perl оставались такими же, как начало нового текстового файла: поверхностными, сопровождаемыми большим количеством пробелов, которые нужно было заполнить.
К концу 2000-х Python был не только доминирующей альтернативой Perl’у для различных задач, связанных с текстовым парсингом (которые обычно ассоциировались с Perl – к примеру, регулярные выражения в области биоинформатики), но и являлся самым популярным языком, о котором с изяществом и красноречием говорили многие мои сокурсники, схватывающие все перспективные направления.
Сравнение языков
Несмотря на прекрасно задокументированную конкуренцию Python и Perl и различия в проектных решениях – которые сохраняются и по сей день – они занимают похожие ниши в экосистеме программирования. Оба часто описываются как «языки сценариев», даже учитывая тот факт, что поздние версии обладают всеми возможностями ООП.
В стилистическом плане Perl и Python имеют разную философию. Самый известный девиз Perl – «There’s More Than One Way to Do It» («Есть больше одного способа сделать это»). В Python’е есть только один очевидный способ сделать что-либо. Структура Python обладает одним важным преимуществом для новичков: синтаксис с большим количеством правил и стилистических соглашений (к примеру, требование пробелов для функций) выглядит последовательным, отвечает привычной практике программирования; код, выполняющий аналогичные задачи, выглядит в какой-то степени похоже. Структура Perl рассчитана на опытных программистов: более компактный, не такой многословный язык, обладающий встроенными шорткатами, которые упрощают процесс программирования для экспертов.
В эру доткома и технического подъема с середины до конца 2000-х крупные сайты и компании, такие как Dropbox (Python), а также Amazon с Craigslist (Perl), наряду с некоторыми крупными новостными организациями (BBC, Perl), использовали представленные языки для выполнения задач, являющихся неотъемлемой частью бизнеса в интернете.
Однако в течение последних 15 лет изменилось не только то, как именно компании ведут бизнес, но и инструменты, которые они используют, что пошло в ущерб Perl. (Растущая тенденция, которая была выявлена в последнем сравнении языков «A Perl Hacker in the Land of Python»; к слову, она фигурировала в новостных сводках Python еще за 2000 год).
Медленное крушение Perl
Сегодня рост Perl перешел в состояние застоя. В ходе Orlando Perl Workshop в 2013 одно из выступлений носило название «Perl is not Dead, It is a Dead End» («Perl не умер, он в тупике»), в ходе которого утверждалось, что Perl существует в каком-то своем огороженном мирке. Как только программисты переходили на Perl, они уходили в этот мир навсегда, чтобы уже никогда не вернуться. Другие отмечали, что Perl вышел из списка языков для обязательного изучения – в эру, когда Python и Java чрезвычайно выросли, а новый участник – Ruby – появившийся с середины 2000-х, продолжает идти по нарастающей, притягивая новых пользователей к созданию веб-приложений (через Rails), преследуемый фреймворком Django на Python (и, как самый простой вариант, PHP).
В биоинформатике, где позиция Perl как наиболее популярного языка сценариев помогла состояться многим прорывам 90-х (к примеру, генетическому секвенированию), Perl был вытеснен Python и статистическим языком R (вариант S-plus и потомок S, также разработанный в 1980-е).
В научных вычислениях также правит балом Python, а не Perl. Его код может быть расширен за счет Matlab (еще один потомок 80-х, обладающий ООП-признаками). Так же быстро вырос и PHP, который на данный момент являются наиболее распространенным языком в веб-разработке (несмотря на то, что его позиция непостоянна; Ruby и Python смогли подавить преобладание PHP и закрепиться в качестве его законных альтернатив).
Конечно, Perl не рискует пропасть в целом, однако он рискует утратить свою культурную значимость – ирония судьбы, учитывая любовь Wall к языкам. Когда именно Perl попал в разряд проигравших, и как исправить эту тенденцию? (И, что более важно, будет ли выпущен Perl 6?)
Как я полюбил Python
Почему Python, а не Perl? Возможно, ярким примером того, что именно случилось с Perl, является мой собственный опыт работы с этим языком.
В колледже я все еще придерживался объединенных сред Matlab и Mathematica, однако мои перспективы программирования кардинально поменялись в 2012. Я понял, что нехватка знаний в области структурированного машинного кода, выходящего за рамки настольных приложений, останавливала меня от полного понимания естественного мира, не говоря уже про анализ множеств данных в сети, что также становилось все более интеллектуальной и финансово выгодной стезей.
Спустя год после обучения в колледже я решил тщательно изучить «реальный» язык программирования. Мой приятель старой закалки, который проявлял схожие интересы – опытный программист, работающий с конца 90-х – убедил меня в том, что мне нужно использовать его любимый язык, который позволяет сортировать текст с помощью нескольких строк кода и «достигать цели»: Perl. Язык Python он отклонил по той причине, что «это для ученых». Я решил познакомиться с ним формально.
Перед тем как принять определенное решение, какой язык мне изучать, я посетил разные онлайн-ресурсы, почитал PerlMonks, скачал несколько книг O’Reilly, Camel Book и the Llama Book в дополнение к книгам для новичков. Тогда же Python поднял свою голову, и даже форумы и сайты Perl были обеспокоены цифровой блокадой, жертвой которой пал их язык. Что произошло с Perl? Я заинтересовался этим. В конечном счете, не испугавшись такого шума, я нашел достаточно материалов для того, чтобы начать изучение языка (предпочтение качеству, а не количеству), углубился в его синтаксис и стал работать с примерами.
Однако все пошло не так, как хотелось. В процессе преодоления встроенной гибкости синтаксических решений Perl я уперся в стену. Я использовал Perl для анализа текста, однако после определения выпускной программы перешел на Python.
На тот момент огромное преимущество CPAN было сведено на нет хаотичными действиями разрозненных, однако превосходящих по своим размерам групп так называемых «питонистов», которые проводили свои встречи и собрания в колледжах и корпоративных залах, проповедуя Zen of Python. Язык имел много проблем с импортом (отмеченных Wall’ом) и синхронизацией загрузки для получения библиотеки научных вычислений (как я обнаружил), но затем все это было исправлено в последующих дистрибутивах Python, таких как Anaconda, который уже включал в себя все самые важные библиотеки и ускорял процесс импорта.
Стараясь заработать на духе того времени, издатель книг O’Reilly запустил следующую рекламу, которая задела за живое поклонников Perl.
К 2013 году Python был тем языком, который преподавался в моей академии, куда я вынужден был вернуться на год. Даже учитывая то, что ему недоставало классов ООП, он все равно был на голову выше Perl. Python был замечен корпорацией Google, которая помогала его распространять и которая в течение долгих лет сотрудничала с Ван Россумом, создателем языка. Между тем, противник Google, Yahoo (разработанный в основном на Perl), несколько преуспел за последние годы, однако остался далеко позади в контексте перспектив программирования. Python был фаворитом и единогласным лидером; роли поменялись.
Таким образом, после шести месяцев работы с Perl я решил отказаться от этого языка программирования. После изучения курса по Python я быстро забыл про синтаксис Perl. Сравнения популярности языков программирования, а также мнения моих друзей и коллег, с которыми я познакомился в сообществе, подтвердили тенденцию спада Perl. Также немалую роль в падении Perl сыграл язык Ruby, чье восхождение в середине 2000-х сломало уникальность Perl в плане «сшивания» программ, написанных на разных языках.
Возможно, что программисты Perl просто не уделяли много внимания своему языку. Ведь если посмотреть на запросы к поисковым системам или открытые вакансии, то стало бы ясно, что у данного языка программирования есть много проблем и ошибок, а также сильный пробел между спросом и предложением.
Сегодня многие в сообществе Perl признают, что Perl по существу стал языком второго эшелона, который не канет в лету, но и не будет в списке лидеров – Java, C и Python.
Будущее Perl (да-да, оно есть!)
Я верю, что у Perl есть будущее, но только для узкой аудитории. Сегодняшний Perl не подходит для пользователей, которые работали с языком с момента его появления. Изворотливые стилистические соглашения, такие как использование $ для объявления переменных, контрастируют с другим декларативным символом $, использующимся в современном программировании; в итоге деньги вкладываются в заклятых друзей Perl’а — Python и Ruby. Применение решений на Python оказывается в разы проще.
Подшучивание Perl над другими языками в итоге привело к тому, что теперь подшучивают над Perl. Что произошло с Perl? Возможная проблема языка – сообщество Perl не может привлечь к себе новичков, что с легкостью делает Python. Бескрайние хранилища иероглифического кода выглядят в сети как залы шахт Мории.
Разработка Perl 6 шла с 2000 года. До сих пор, даже после 14 лет разработки релиз официально не готов, что делает его эквивалентом альбома «Chinese Democracy» группы Guns N’ Roses. Как говорил Larry Wall, «Мы не пытаемся сделать Perl языком, который будет лучше, чем C++, Python, Java или JavaScript. Мы хотим сделать Perl языком, который будет лучше, чем Perl. И всё». Возможно, что Perl стоит на том же самом пути, на котором когда-то стоял Эксл Роуз – пути недооценки себя. «Всё» в данном контексте может оказаться решающим.
В отсутствии нового релиза Perl, способного поменять правила игры (который по-прежнему может оказаться «слишком поздним и слишком малым»), люди, обучающиеся программированию в Python, могут спокойно оставаться на этом языке, который решает все их задачи, даже если он занимает второе или третье место в некоторых областях. Импорт библиотеки или использование расширенного синтаксиса заметно проще, нежели переход на новый язык. Таким образом, аудитория Python остается молодой в результате выбранной стратегии, которую заложил сам Ван Россум — Computer Programming for Everybody (Программирование для всех). К примеру, MIT Python заменил Scheme еще в середине 2000-х, и стал первым языком инструкций, понятным для новичков.
Python движется вперед
Python продолжает открывать все новые и новые горизонты применения в таких сферах, как визуализация (где Python по-прежнему отстает от других языков, таких как Matlab, Mathematica и d3.js), создание сайтов (фреймворк Django – выбор мейнстрима), научные вычисления (NumPy/SciPy), параллельное программирование (mpi4py с CUDA), машинное обучение, а также обработка естественных языков (scikit-learn и NLTK). И это далеко не все…
Несмотря на то, что ни одно из этих направлений не координируется самим Ван Россумом, растущая база пользователей, а также первостепенное обучение этому языку в университетах увеличивают шанс того, что сотрудничество между различными дисциплинами приведет к появлению библиотеки Python с тем же самым open source духом, который повлиял на успех Perl в 1990-х годах.
Что до меня, то я готов вернуться к Perl, если он предложит мне совершенно иной опыт, отличный от опыта Python (в положительном контексте). Возможно, Perl 6 станет именно тем релизом, который поменяет ход истории. Посмотрим.
Источник: fastcolabs.com
Спасибо, Дмитрий, благодаря таким людям, как вы, у меня есть работа и, к тому же, много. Я бы сказал так, что будущего нет как раз таки у Python.
Почему не сказали про GIL? Статья получилась в стиле «Ящики лучше апельсинов тем, что туземец бусы колбаса, а мой друг попробовал складывать апельсины в ящики, и у него получилось, а я попробовал складывать ящики в апельсины, но ничего не вышло, а значит, что ящики лучше и апельсины не нужны».
Проблема здесь еще в том, что нет вменяемой экосистемы у Python, механизм модулей, мягко говоря, странный. Нет вменяемого контроля стадий исполнения программы. Асинхронное программирование убого чуть более, чем полностью. Интерфейс для external модулей не очень хороший. Да и Google в последнее время поклонения питону не разделяет.
И да, выбор мейнстрима не django, а rails.
Python для ученых? Да ладно? Язык для ученых это Haskell.
И еще, как показывает практика, если программист везде использует один язык, то он плохой программист, т.к. инструменты нужно использовать такие которые максимально подходят под данную задачу, но не подгонять задачу под инструменты.
Здравствуйте.
Скорее не благодаря мне, а благодаря авторам этой статьи. :) Это перевод с английского.
Я сам не согласен со всеми аспектами, перечисленными здесь, но статья, определенно, заслуживает внимания.
За отзыв спасибо)
Спасибо, а не подскажете, где можно ознакомиться а оригиналом?
Источник указан в самом низу статьи. Попробуйте по сайту поискать по запросу Perl.
Не понятны мотивы переходов автора. Ощущение такое, что «куда подул ветер, туда и унесло». Без рефлексии. Из-за чего статья не несёт полезной информации (для меня лично), хотя по тексту видно, что автор основательно интересовался темой. Диссонанс, однако…
Python хорош только в научных и математических расчетах и для начального обучению программированию. В остальном Perl на порядок выше, а именно в сети,базы данных,администрирование,работа с текстом.По с равнению с Python эти программы получаются на порядок короче в Perl.Да и разрабатывать их быстрее и легче(богатый синтаксический выбор). А программы в одну линию вообще 100 очков вперёд.А проблемы у Perl, прежде всего потому что он заточен на *nix. И создавался он в замен sed, awk, и отчасти bash. И желанию перенести с помощью Perl *nix утилиты на Windows.Но в России (в виду полного оглупления масс) 99%, это пользователи Windows, и понять Perl без опыта Linux практически невозможно. В той же Америке или Германии программисты Perl очень даже востребованы.
Отсебятина. Глупый набор букв. И где факты, сравнения, цифры, чтобы можно было поверить?
Фактов довольно много. Можете дополнительно почитать: http://www.infoworld.com/article/2613302/data-center/perl-isn-t-going-anywhere—-for-better-or-worse.html
Мое мнение, что perl нормальный язык, я не имел дел с питоном, но не было у меня таких задач, которые на перле не решились, вопрос производительности временное явление, технологии на месте не стоят,учите перл и будет счастье.
П.С. Перл использую для веб сайтов,может и php хорош, незнаю, мне хватает перла, синтаксис стабилен в отличии от php
perl 5 — это стабильность и работоспособность практически на любых системах.
python2 и python 3 — и куча минорных версий и трах с поддержкой разных версий.