[Moscow.pm] Why Perl?

Walery Studennikov despairr на gmail.com
Чт Фев 4 08:44:01 PST 2010


3 февраля 2010 г. 10:54 пользователь Andrew Shitov <andy на shitov.ru> написал:
> Дано:
> Аудитория начинающих программистов, которые еще не сделали выбор
> своего основного языка.
>
> Задача:
> Показать им прелести перла.
>
> О чем бы вы сказали в первую очередь?

В своё время читал курс "Перспективные информационные технологии" в
универе и моя задача была как раз "распрограммировать" мозги
студентов, которым долго и упорно вдалбливали Java и которые просто не
умеют и не хотят мыслить другими категориями, чем те, которые приняты
в Java World.

Мои основные аргументы были:

1. "Сильная типизация" vs "Сильное тестирование".
Типа тестирование, гораздо круче позволяет уберечься от ошибок, чем
мнимый костыль под названием "строгая типизация"; при этом код при
динамической типизации _в несколько раз_ короче и проще в написании за
счёт отсутствия объявления и явной конвертации типов (вообще
приходиться ДУМАТЬ о типах и следить за ними).

2. "Динамический язык" vs "Нединамический язык".
Разбить в "пух и прах" второе, показав, что в динамических языках
возможно в принципе ВСЁ (всё что можно помыслить даже в самом
извращённом воображении)). Эти возможности позволяют целый ряд задач
решить настолько просто и красиво, для чего в Java/C# например
потребовалось бы использовать всякие хитровывернутые структуры классов
AKA "паттерны проектировния", которые зачастую являются просто
напросто костылём для языков не имеющих динамический типизации и
динамических возможностей. Т. е. вместо одной строчки пишешь 3-5
связанных классов, которые нужны проcто чтобы преодолеть ограничения
языка. Я не отрицаю паттерны как таковые, но многие из них
действительно являются просто костылями (способом выживания) для
нединамических языков.

3. Встроенные структуры данных.
Показать, что это В РАЗЫ удобнее, чем всякие C++ шаблоны (зачастую
костыль для преодоления статической типизации), несчислимые
Java-классы для работы с данными (коих МОРЕ) и т. п. В Perl всего
навсего: скаляры, массивы, хеши. Всё! Этого хватает на все случаи
жизни. И никаких библиотек классов не нужно, никаких STL и т. п. Всё
встроено в язык.
Возможность использования языка как DSL.
Отсутствие встроенных сложных структур данных в Java выражается в
обильном применении там XML для постоянной сериализации /
десериализации всяческих структур данных.
Т.е. бесконечный XML там -- это просто ещё один костыль.
Причём покажите людям: что такое сериализация / десериализация в Perl
(XML::Simple как пример) и в Java (DOM, о боже...). Причем например
в/из YAML / JSON (широко используемые в мире в Perl) преобразование в
динамических языках проходит вообще взаимо-однозначно и
взаимообратимо, как очень просто и естественно. Кстати в XML нет
однозначного преобразования в/из встроенных структур даных -- есть
бесконечное множество вариантов конвертации. Одна из причин, а которую
не люблю XML.

4. Высокоуровневые возможности, встроенные в язык.
Встроенная удобная работа с массивами и хэшами (push / pop, shift / unshift).
Операции, обрабатывающие массив целиком (что неимоверно сокращает код).
Встроенные в язык регекспы, что на порядок удобнее использования
всяких внешних regexp-библиотек.

Всё это вместе вытекает в следующее:
- РАДИКАЛЬНОЕ сокращение объёма кода в динамических языках: приведите
примеры аналогичных проектов например на Java и на Perl / Ruby /
Python. На Java это десятки и сотни мегабайт, в динамических языках --
сотни килобайт и мегабайты. Т. е. на порядок меньше.
И это для ОДИНАКОВЫХ проектов, аналогичных по функционалу.
- Код в Perl более концентрированный, интеллектуальный, осмысленный.
"Священный". Код, который может менять только человек. С ним приятно
работать. Это всегда Challenge. Код в Java -- очень рыхлый, "тупой",
быдловатый. Это объект для бесконечного автоматического рефакторинга.
Доверить машине менять код... -- себя не уважать.
- Различие культур Perl (хакеры) и Java (быдлокодеры, которых можно
собрать много за небольшие деньги, чтобы делать быдлокод и которые
зачастую не принимают никаких высокоуровневых решений -- тупо
"кидируют" по заданной спецификации). Труд становится нетворческим,
механическим. Мозги "закостеневаеют".

В общем, это было действенно. Иногда за одно занятие люди радикально
меняли своё мнение по поводу языков.

Материалы моих лекций (которые я уже 2 года как забросил и не читаю),
всё ещё висят тут:
http://despair.pp.ru/

-- 
Walery Studennikov
http://www.reg.ru/


Подробная информация о списке рассылки Moscow-pm