3 февраля 2010 г. 10:54 пользователь Andrew Shitov <[email protected]> написал: > Дано: > Аудитория начинающих программистов, которые еще не сделали выбор > своего основного языка. > > Задача: > Показать им прелести перла. > > О чем бы вы сказали в первую очередь?
В своё время читал курс "Перспективные информационные технологии" в универе и моя задача была как раз "распрограммировать" мозги студентов, которым долго и упорно вдалбливали 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 mailing list [email protected] | http://moscow.pm.org
