Выпуск 17. Июль 2014

Обзор CPAN за июнь 2014 г. | Содержание

Интервью с Питэром Рэббитсоном (Peter Rabbitson)

Питэр Рэббитсон (ribasushi) — Perl-программист, наиболее известный как текущий разработчик DBIx::Class.

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

Сначала стандартная история — лет в 9 появился доступ к компьютеру — сначала на работе отца и у друзей, а потом в 11 и дома. Собственно программировать начал в 1992-м на Бейсике на шикарной ИЗОТ 1036С / ЕС1832 http://bulgariancomputers.freeservers.com/isot1036c/isot1036c_eng.html. Очень нравилось возиться с довольно простыми, но внушающими визуализациями на основе тригонометрии. Пытался делать что-то на Pascal и на Turbo-C, но продраться через управление памятью мне самому не удалось. Параллельно с этим получил первые навыки системного администрирования, вплоть до сооружения локальной сети с соседом по лестничной клетке путем сделанного вручную(!) 30-метрового провода для последовательной (COM) и параллельной (LPT) передачи файлов.

А потом мне стукнуло 13, и я забил на все что-либо связанное с программированием — интерес круто перешел на копание в сетевом оборудовании, знакомство с интернетом, попыткам освоить линукс (вначале довольно неуспешным) и не в последнюю очередь компьютерные игры.

Мой развод с программированием продолжался довольно долго — вплоть до 2002 года. В то время я работал заведующим на складе компьютерной техники. Собственник склада пытался выйти на рынок онлайн-продаж, пользуясь для отчета наличности двсякой ребеденью сомнительного качества. Почти каждый день что-то не стыковалось, постоянно или обнаруживались недостатки, или товар появлялся из воздуха. Я кипятился и пересчитывал все заново, пока мне это все не надоело и я не стал копаться как там все все-таки устроено. Системы общались чем-то CSV и еще XML. Знакомый админ посоветовал мне попробовать Perl, так как я уже знал немного Bash на уровне написания эквивалентов .bat-файлов… Остальное, как говорится, уже история. В 2004-м задал первый вопрос в рассылке perl.beginners и через месяц попал на IRC.

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

Получилось так, что на сегодняшний день я хорошо знаю только Perl и Bash. Да, я могу написать что-то элементарное на Python, на JavaScript или даже на C, но я не знаком с особенностями и «изюминками» этих языков. В будущем хочу по-настоящему (на уровне Perl) изучить C, но пока обхожусь одним языком.

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

В последние 11 лет (с тех пор как окончательно съехал с Windows) я пользуюсь исключительно mcedit: форк cooledit в поставке с MidnightCommander. Да, я так же пользуюсь самим MidnightCоmmander. Кроме очевидного плюса работы в знакомом не меняющемся окружении, неестественно синий экран привлекает ничего не подозревающих зевак на конференциях. Когда разговор быстро доходит до «И ты на этом пишешь!?», я уведомляю что 70% кода DBIx::Class на сегодняшний день сверстано в этом же синем окне и делаю фотографию в стиле «реакция зрителя на девушек со стаканом». Спешу заметить, что я не исключение, например, релиз-инжинеринг Perl 5.21.1 прошел исключительно с помощью nano (бежит за фотоаппаратом).

Я пробовал работать почти во всех редакторах, включая Vi(m), nano, notepad, notepad++, Kate, Eclipse, Komodo Edit и Komodo IDE, Padre… Вроде как только на Emacs-е не доводилось. Но мне гораздо удобнее пользоваться привычными инструментами, что я кстати советую любому программисту. По профессии нам и так приходится принимать чрезмерное количество непростых решений, можно обойтись без вечного вопроса о редакторе :)

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

Мне, наверное, влетит за то, что я не продвигаю «линию партии», но что правда, то правда: по-моему сильная сторона Perl не в CPANe, не в сети CPAN Testers, и не в CPANTS. Не в скорости разработки и не в свободе решить задачу несколькими способами. И даже не в сообществе, которое мне лично довольно дорого. Сильная сторона Perl — в его стабильности и в его повсеместности. Perl можно найти почти на любой платформе, начиная с динозавров z/OS (если не слыхали о EBCDIC — поинтересуйтесь) и заканчивая миниатюрным линуксом, впихнутым на флеш-карточку SD http://haxit.blogspot.de/2013/08/hacking-transcend-wifi-sd-cards.html. Причем грамотно написанное приложение будет работать совершенно одинаково на любом железе и без особых усилий на любой версии perl, включая версии более чем десятилетней давности. Если сделать шаг назад и присмотреться, Perl удалось сделать то, чего не удалось Java (несмотря на несоизмеримое наличие средств и кадров): священный Грааль «напиши раз — запускай где угодно» (write once — run anywhere). И по-моему не важно, что эта особенность Perl не особенно привлекательна для новичков и дает повод закатывать глаза поклонникам Modern Perl. Преимущество здесь, оно работает, и малое, но достаточное количество ключевых разработчиков готово за нее постоять. Так что на это можно и нужно рассчитывать.

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

Встроенная закулисная многопоточность. Не асинхронность, не корутины и не треды, а именно то, чего пытается добиться Perl 6 (хотя к сожалению об этом мало говорят). Я считаю что многопоточность — последний бастион концепций, не укладывающихся в головы большинства программистов. Наша профессия расправились с управлением памяти, абстрагировала ввод и вывод вплоть до потери разницы между локальным файлом и данными, блуждающими в сети, понаделала кучу абстракций как для элементарных 2D-приложений, так и для сногсшибательно реалистичных 3D-эффектов. Но на сегодняшний день все еще нет возможности построить цепь передачи данных между функциями типа «unix shell piping» и, взмахнув волшебным оператором, заказать, чтобы все это прогналось через свободные CPU и GPU ядра в системе. Мне кажется, что движок Perl 6 (точнее то, что лежит между грамматикой и VM) наиболее близок к постижению такого колдовства. Вот только если бы не умопомрачительный синтаксис Perl 6… но это уже совсем другая история :)

Как получилось, что стал развивать DBIx::Class? Как вообще управляются проекты такого масштаба?

В начале 2008 года я начал пользоваться DBIx::Class и довольно быстро наткнулся на проблему с дополнительной выборкой (prefetch). Несмотря на то, что мне было совсем непонятно, откуда ножки растут, я составил довольно грамотный тест «на потом» (TODO). Кроме этого было несколько патчей, чтобы поправить несколько надежно падающих тестов. Кода было не так уж и много, но Мэтт Траут (Matt «mst» Trout) на это все посмотрел и дал мне права на репозиторий. Я потрогал в двух-трех местах, и забросил все на лето. В конце августа потыкал снова тут и там, и… пошло поехало: с тех пор так и тыкаю. Со временем легких проблем становилось все меньше, а армия пользователей становилась все больше и больше. Это привело с собой новые требования к стабильности и осторожности внедрения новых фич, требования, сравнимые вроде как только с самим интерпретатором perl. Кстати о сложности проблем — на то, чтобы вернуться и полностью расколоть недоработку, которая собственно и привела меня к DBIC, у меня ушло (подергивая глазом) аккурат 5 лет — фича «свободная дополнительная выборка» (arbitrary prefetch) ушла на CPAN в апреле 2013-го года.

Насчет управления проекта — я и сам не знаю :) Я наверное что-то сделал не совсем так, ибо состав разработчиков на сегодняшний день: полтора человека. С другой стороны, пользователи вроде как довольны. Прошлым летом меня довольно сильно заели сомнения по этому поводу, и я написал статью «крауд-соурсинг самоуверенности» где я просто поставил вопрос «А нужен нам такой DBIC?» Получил сногсшибательное количество позитивных отзывов. Так что пока я не сдаюсь и даже пытаюсь вывести разработку на новый уровень. Что из этого получится — пока не уверен, но новости должны появится к концу этого месяца, или на худой конец до начала YAPC::EU 2014.

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

Чем занимаешься в p5p?

В плане разработки практически ничем. Я был назначен релиз-менеджером для Perl 5.19.5, но со временем сложилось так, что мне пришлось передать задачу Стиву Хею. Так что по сей день реального кода в Perl 5 у меня нет. Зато иногда я встреваю в «политические игры», проводящиеся в рассылке perl5-porters, когда мне кажется что все с разумными доводами вдруг сговорились и ушли дружно в отпуск. Хотя я делаю это довольно редко, по-моему, эффект какой-то есть. Как минимум, я могу приписать в свои заслуги предотвращение поломки поведения $@ во время DESTROY в 5.14 (там история сложнее чем кажется на первый взгляд), введения экспериментального флага для smartmatch (~~) в 5.18, и отказ принять первый вариант сигнатур функций (то что приняли под конец в 5.20 в разы более элегантно и продумано).

Расскажи про свою кампанию на Crowdtilt в 2013 году. И как в этом году удалось поехать на YAPC::NA?

Если смотрел фильм «Adaptation» — все случилось по той же идее. Я просто сел одним вечером и начал писать, как я решаю купить себе краудсорсный билет. Закончил, прочитал, проникся, переделал в правильную форму (прочитав несколько «конкурентных кампаний») и… поехали. Подробнее я описал, как все произошло в блоге, но все сводится к заключению: «Короче, Perl привлекает клевых людей. Не просто людей, с которыми приятно выпить кружку пива, а тех которые хотят выпить кружку именно с тобой». Если есть интерес, к следующему выпуску Pragmatic Perl могу перевести статью целиком на русский язык ;)

В этом году я никак не был богаче, но раскручивать кампания заново как-то… не дело. Я решил довольно давно, еще в феврале, что пора уступить место другим. Причем в последний момент Леон Тимерманнс (известный в основном своим участием в разработке Module::Build(::Tiny) и поддержкой системы PerlIO) действительно успешно опубликовал и закончил такую же кампанию.

Так как же мне удалось съездить еще раз. В апреле я разговаривал с Хенри Ван Штейном, создателем шикарной системы http://www.rapidapp.info/. Когда речь зашла о YAPC, он не только предложил лично оплатить всю поездку (размером кстати в $1500 - деньги немаленькие). Нет, он не отстал от меня, пока я не согласился приехать, несмотря на довольно неловкую для меня ситуацию, за что я ему бесконечно благодарен. В общем получается поддержка крупного проекта не такая уж бесперспективная штука ;)

Пересекаются ли глобальное и xСССР Perl-сообщества? Все дело в языке?

В основном дело, к сожалению, действительно в языке, причем я сам этого не подозревал, пока не приехал на YAPC::RU в 2012 году. Тем более досадно, что у хСССР-сообщества довольно много свежих идей, о которых в глобальном сообществе думают, но не говорят. В основном выделяется упор на производительность и низкое количество зависимостей. Кстати, та же проблематика в основном закрыто обсуждается и среди японского сообщества, и опять же вся проблема в языке. В общем всем бывшим соотечественникам могу сказать только одно — учите английский и читайте/пишите больше. Шума хронически не хватает.

Чем тебя привлекают Perl-конференции? Доклады, социализация или что-нибудь еще?

Ха! Ты отлично знаешь, что это вопрос с подвохом, наверное потому и задал ;) Как и большинство, я начал посещать конференции ради докладов и чтоб вживую познакомится со «звездами Perl», но это быстро переросло в «чтоб встретится и провести несколько вечеров с офигенными друзьями». К сожалению, я не могу ответить на вопрос точнее — надо приехать и попробовать самому. И потом, первое правило клуба Perl … :)

Где сейчас работаешь? Сколько времени проводишь за написанием Perl-кода?

На сегодняшний день пишу исключительно на Perl и довольно часто, но довольно редко что-либо за это получаю. В этом году у меня что то вроде полуотпуска, так как у меня случился довольно жестокий burnout, и заниматься программированием за деньги стало… непросто. Подрабатываю изредка для ShadowCat и вяло занимаюсь поддержкой в той же конторе, где научился по настоящему писать. Остальное время уходит на свободное ПО: в основном продолжаю медленно заниматься усовершенствованием DBIx::Class и подумываю над некоторыми пока сверхсекретными проектами… Кстати, если у кого валяются лишние биткоины — 1riba1Z6o3man18rASVyiG6NeFAhvf7rU ;)

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

Здесь два вопроса. Я честно не знаю, что посоветовать людям, которые идут в программисты с идеей хорошо заработать – у меня этого пока точно не получилось, да я особенно и не пытался. Могу сказать что Perl-а на так называемом DarkPan-е (закрытый перл-код на разных предприятиях) ужасно много, и вряд ли он скоро куда-нибудь денется. Так что заработать в будущем будет все легче и легче, было бы желание. На сегодняшний день C++ уже созрел таким же образом — достаточно взглянуть на зарплаты толкового сишника.

Одержимым молодым людям, которым немыслимо заниматься чем-то другим кроме программирования, у меня единственный совет – выбирайте, что учить следующим образом:

  1. Выберите языки по наличию ментора. У вас наверняка есть близкие знакомые специалисты, у которых можно спросить что угодно, когда угодно о том, что решено изучать. У каждого из нас есть такие знакомые, причем он или она будут в абсолютном восторге, что их попросили общаться на эту тему – просто узнайте чем они интересуются. Если знакомых все же нет – зайдите на meetup.com и заявитесь на любой вечер.
  2. Отсеяв несколько вариантов, посмотрите, что больше нравится на чисто эстетическом уровне. Здесь не важна перспектива, не важен хайп. Работать с языком вам, и если не суждено – всегда можно будет переключится на что-нибудь другое.

Так что если у вас есть крутые знакомые перловики – смело изучайте Perl. Если хаскелиты – ради бога учите Haskell. Если brainfuck или x86 assembler… наверное пора найти новых знакомых.

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

Сколько раз выступал с докладом «Замеры производительности это непросто?» и сколько еще это будет продолжаться?

Гы-гы-гы. С докладом выступал не так уж много – три раза в программе (GPW12, YAPC::RU12 и YAPC::EU13) и один раз на FOSDEM14, заменив больного докладчика. Кстати из за технических неполадок в последний раз получилось зачетное немое кино ;).

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

Помогает ли знание нескольких (человеческих) языков программированию?

Довольно трудно говорить о себе, так как сравнивать больше не с чем. Но в целом… это вообще отдельный длинный и сложный разговор. С одной стороны мне повезло в детстве – я вырос сразу на двух языках и в добавку довольно рано «расколол» английский. Но с другой стороны, для половины западной Европы такое детство ничем не удивляет. И чтобы все запутать — я лично не нахожу очевидной разницы между американскими/российскими (подавляюще единственный язык) и европейскими (как правило, 2+ языка) коллегами.

Знание языков на беглом уровне наверное меняет мировоззрение и неизбежно процесс мышления. Как минимум, с малых лет понимаешь что слова лишь идентификаторы, никаким образом не определяющие сущность того, к чему их прицепили. Помогает ли это программированию в частности… вряд ли. Зато почти уверен: что помогает писать злобным сарказмом ;)

У кого, где и за сколько так поставил свой неповторимый акцент?

В университете жизни, в кредит :) Английский я выучил в основном сам, долго до того, как мне пришлось на нем говорить (я также выучил, как держать и перелистывать одной рукой, другая была занята мышью, передвигая Роджера Уилко, Индиану Джоунса, Гайбраш Трепвуда, или на худой конец короля Грехема). Потом семья переехала в Америку и буквально выходя из самолета я заговорил на почти том же странном языке, схожим с английским. Первые лет пять мне совершенно не приходило в голову чего нибудь исправлять в произношении… и с тех пор так все и осталось. Сегодня мне говорят, что у меня шикарный итальянский акцент, хотя скорее я просто правильно размахиваю руками во время разговора :)

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


Обзор CPAN за июнь 2014 г. | Содержание
Нас уже 1388. Больше подписчиков — лучше выпуски!

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

Чат