Выпуск 8. Октябрь 2013

Обзор CPAN за сентябрь 2013 г. | Содержание | Perl Golf

Интервью с chromatic

chromatic — автор книги Modern Perl, участвовал в разработке Perl 6 и Parrot, автор многих популярных модулей на CPAN.

Когда и как начал программировать?

В который раз?

Как и многие мои сверстники в штатах (белые дети из среднего класса, выросшие за городом), в первый раз я увидел компьютер в начальной школе. Мне было пять или шесть лет. Это был Commodore 64. В те дни компьютеры поставлялись с документацией и BASIC, и в документации было описано как писать простые програмы на BASIC практически на первых страницах. (Страница 32 — только что проверил. Первые несколько страниц рассказывают, как подключить телевизор или монитор и как работает клавиатура.)

В конце концов я уговорил родителей купить для семьи компьютер.

Когда я был в старшей школе, мои интересы изменились и я больше проводил времени, играя музыку, чем программируя, но в колледже я попытался заняться C++ (не пошло) и Java (пошло немного лучше) и на первой в своей карьере работе я написал несколько программ для отдела, занимающегося принтерами в HP, и нашел это самым увлекательным среди всего, чем я занимался.

Какой редактор используешь?

Vim.

Когда и как познакомился с Perl?

Java была новой и интересной, когда я начал работать в HP, но я работал с HP-UX и Linux (Red Hat 4 или 5, кажется). Java на Linux была сильно позади в то время, но там хотя бы была базовая поддержка Swing.

Второй серьезный проект, над которым я работал, должен был отправлять email списку клиентов об обновлениях сетевой службы поддержки принтеров. Я набросал на коленке bash-скрипт на версии, которую поддерживал в то время HP-UX 9. Он был длиной в десять строк. Затем мне пришлось портировать его на Java, потому как отделу нужно было запускать его на Windows NT. В том время Java была еще молодой. У нее не было большого количества библиотек. Для отправки email нужно было писать много кода для подключения к SMTP-серверу и отправки правильных заголовков и прочего. Нужно было написать больше кода для инициализации Java-библиотек, чем написать всю задачу на shell.

Я начал искать другие языки. Мой брат учился и работал с телекоммуникациями в университете в то время, и многое автоматизировал с помощью Perl. Я купил второе издание Camel book, прочел ее от корки до корки, и понеслась.

С какими другими языками приятно работать?

Haskell, за его систему типов, которой можно пользоваться (а также за то, что он поощряет написание небольших кусков кода, которые разумно взаимодействуют).

Scheme, за возможность построить хорошую систему из небольших годных компонентов.

Хотелось, чтобы и Go понравился, но для меня он пока не был достаточно полезным.

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

Какое, по-твоему, самое большое преимущество Perl?

Бесцеремонность. Можно дать Perl кому-то с небольшим опытом программирования и он или она сделают что-то гораздо быстрее, чем вы можете ожидать. Он или она скорее всего напишут какую-то жуть — развитие дисциплины в програмировании требует времени и опыта — но прагматизм Perl это большое преимущество.

Какими, по-твоему, особенностями должны обладать языки будущего?

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

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

Ты многое вложил в экосистему и инфраструктуру Perl. Что является причиной этому?

Я хочу упростить свою жизнь. Хорошие тесты у CPAN-модулей означают, что я могу доверять CPAN-модулям больше, чем раньше. Наличие простых и хороших абстракций для таких вещей как email или ОО-разработки означает, что я могу выполнить свою работу лучше, затратив меньше сил, чем раньше.

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

В течение своей работы над Perl 6 ты занимался ролями. Являются ли они основой современного ООП? Это «серебряная пуля» или «еще один способ прострелить себе ногу», если говорить о реальных больших и сложных проектах?

Если читать современные ООП-уроки, плохие будут объяснять, что наследование, это основая ООП. Это глупо. Полиморфизм — это основа ООП.

(Полиморфизм — важная часть в программировании. Если вы не научились работать с объектами, разнящимися в мелочах, но одинаковых в главном, у вас будет много проблем. Люди часто не учатся работать с массивами, потому что хотят именовать перменные $recipe1, $recipe2 и $recipe3. И только когда они осознают, что могут работать с переменными как с элементами массива @recipes, они начинают понимать силу программирования.)

Во время разработки ролей я доказывал, что нам нужно решить две проблемы:

  1. как определить достаточно концептуально похожие поведение и состояние, что они могут быть полиморфными;
  2. как делиться кодом без навязывания метода как это делать (делегирование, наследование, композиция, копипаста, роли).

Авторы оригинальной статьи о Smalltalk Traits пытались решить похожие проблемы, поэтому, я думаю, мы были на правильном пути.

Можно ими злоупотреблять? Да. Можно ли «прострелить себе ногу»? Конечно. Являются ли они базовыми для хорошего ООП-проекта? Зависит от проекта.

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

Почему тестирование важно?

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

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

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

По прошествию уже более десяти лет соответствует ли Test::Builder современным практикам в тестировании?

В том что он делает — да. В том как он выглядит внутри? Нет. Надеюсь, что Test::Builder 1.5 или 2.0 наконец выйдет и подчистит код.

Что побудило тебя написать книгу Modern Perl?

Perl требовалось короткое введение, которое бы не притворялось, что покрывает весь язык. Я подумал, что объяснение философии языка, как использовать perldoc, необходимость CPAN и для чего использовать и для чего не использовать язык, было бы полезным.

Почему решил сделать книгу свободно доступной?

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

Планируется ли обновление книги, совместно с эволюцией Perl?

Я хочу выпустить новое издание до конца текущего года.

Что случилось с perl.com? Кажется, что не было никаких обновлений с января.

Не так просто найти авторов, а я не хочу быть единственным автором (как это нам знакомо — прим. ред.).

У тебя несколько бизнесов. Чем в основном занимаешься сейчас?

На данный момент я консультирую один стартап в медицинской индустрии.

Каким видишь будущее Perl?

Надеюсь, что такие проекты как MOP Stevan Little и сигнатуры функций Peter Martini войдут в ядро языка.

Сомневаюсь в проектах, который хотят перенести Perl на новый движок, во всяком случае без исправления ситуации с XS.

CPAN продолжит расти.

Не знаю, что произойдет с рекламой Perl. (Некоторые люди называются это «маркетингом».)

Perl продолжит помогать моим клиенам и проектам получать правильные ответы.

Есть ли место для Perl 6?

Если он найдет что-то, что он делает лучше других существующих языков, то возможно.

Стоит ли советовать молодым программистам изучать Perl?

Это зависит от того, что они хотят написать. Вчера я разговаривал с ученицей старших классов, которая хочет изучать компьютеры, у нее есть опыт работы с HTML и она хочет выучить JavaScript. Нужен ли ей Perl? (Есть ли простой Windows-дистрибутив, который, используя магию Plack, позволяет разворачить Perl-программы так же просто как и PHP-программы, но не требует использования CGI.pm? Возможно.)

Вопросы от читателей

На PerlMonks у тебя в качестве аватара футболка Perl 7. Что думаешь о дискуссиях вокруг Perl-версий?

В ретроспективе, возможно, название следующей версии Perl 6 в 2000 году было не очень удачным — но это не изменится, если только Ларри не захочет этого, поэтому мы застряли с Perl 5.«что-то там» в обозримом будущем.

Что думаешь о ситуации вокруг smart match?

У Perl 5 всегда была идея, что переменные должны быть полиформными, в то время как операторы — мономорфными. Другими словами, если вы видите $a + $b, то вы знаете, что это сложение (неважно, что находится в $a и $b), и если вы видите $a . $b, то вы знаете, что это конкатенация (неважно, что находится в $a и $b).

Со smart match все иначе, и каждый раз, когда вы отходите от изначального дизайна языка, вам необходимо осторожно учесть все плюсы и минусы. Smart match похож на способ решить несколько проблем одновременно. При отсутствии четкого множества мономорфных типов переменных, вы не можете посмотреть на код и сразу же понять, что происходит.

Такая же проблема и у each() на ссылках; вы не можете понять, когда each $foo вернет ключи и значения хеша или индексы и значения массива.

Откуда берешь энергию для регулярных статей о программировании в своем блоге?

Я всегда был писателем, и как любое регулярное упражнение, это развивает мышцы (буквально и фигурально).

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

Было сложно после нескольких лет бросить разработку Perl 6?

И да, и нет.

Мне уже продолжительное время это не доставляло удовольствие по многим причинам. Самым большим было, наверное, мое разочарование, что после девяти лет работы над не очень интересными вещами, такими как исправление сегфолтов и оптимизации, до сих пор ничего не было готовым для использования в работе.

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

С другой сторой, если ты над чем-то работаешь девять лет, у тебя возникает чувство привязанности. Я горд некоторой работой, которую мы сделали, и я многому научился, но если бы мне сказали в 2001 или 2002, что будет в 2013, я бы потратил свои силы на что-то другое.

На этот урок я потратил очень много времени и сил. Я чувствовал себя виноватым, что это навредит Parrot, если меня там не будет, чтобы чинить баги и писать код. Но затем я осознал, что ни для кого Parrot не был полезным, поэтому, наверное, это и хорошо. Если проект не может выжить, когда теряет разработчиков — если он не используется для чего-нибудь продуктивного или он никого не волнует — то, наверное, ресурсы затрачиваемые на него, стоит приберечь для чего-то другого. Несомненно, это было мое личное понимание.

Я потратил практически десятилетие, работая над этими проектами, поэтому я считаю, что сделал все возможное, чтобы они были успешными. Если кто-то другой хочет продолжить мою работу, код открыт. Но ни один из этих проектов не стоит уже моего времени или энергии, и я комфортно себя чувстую, объявляя это. Если вы видите себя в похожей ситуации, то любой, кто пытается навязать вам чувство вины, если вы думаете о вещах поважнее разработки продукта, от которого у вас нет никакого дохода, поступает совершенно несправедливо. (Даже если это вы себя накручиваете.) Вкладывание своего свободного времени и таланта в свободное ПО это дар, и это такой дар, который вы имеете право отменить.

Нравятся Perl-конференции?

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

Вячеслав Тихановский


Обзор CPAN за сентябрь 2013 г. | Содержание | Perl Golf
Нас уже 981. Больше подписчиков — лучше выпуски!

Комментарии к статье