Выпуск 24. Февраль 2015
← Обзор CPAN за январь 2015 г. | СодержаниеИнтервью с Нилом Бауэрсом (Neil Bowers)
Нил Бауэрс (Neil Bowers) — британский Perl-программист, инициатор соревнования CPAN Pull Request Challenge
Как и когда научился программировать?
В 1980-м мой учитель физики купил в класс ZX-80 (компьютерный комплект, доступный только в Британии). Через некоторое время в школе появился Commodore Pet, и я начал с ним играться. Тот уже учитель физики повез нескольких из нас в Лондон, где я купил свою первую книгу о программировании (в основном про игры, похожие на Hunt the Wunpus («Охота на Вампуса» — прим. ред.)) на BASIC.
Через некоторое время у меня появился первый компьютер, Vic-20. Это было началом моей зависимости.
Назвать точную дату, когда именно я научился программировать, конечно, невозможно. Мы постоянно учимся, но все-таки же есть некоторые вехи и ключевой опыт, на который я могу сослаться. Например: на кафедре компьютерных наук я провел целое лето, портируя программу по проектированию интегральных схем с Unix на VMS, чтобы работать на имеющихся у нас графических терминалах. Мне очень помогал доктор с кафедры (спасибо, Нил!). Я выучил C, make, вообще, что есть софт, графические терминалы, проявил настойчивость и научился задавать вопросы.
Какой редактор используешь?
Я пользуюсь vim.
Моим первым настоящим текстовым редактором был SOS, которым я пользовался на первом году обучения в университете на компьютере DEC-10. В конце года я получил аккаунт на системе BSD Unix и познакомился с vi. После SOS это было потрясающе. Я также пользовался Eve и EDT, но по возможности хотелось использовать vi.
Время от времени я пробую новые текстовые редакторы, был у меня продолжительный опыт с emacs в 90-е, но когда мне требуется серьезное реадактирование, всегда использую vi.
Я очень смеялся, когда читал интервью с RJBS, где он сказал, что он «не Vim-фанатик и не эксперт». На QA-хакатоне в прошлом году я сидел рядом с ним, работая над тестами PAUSE. Ушел я с мыслью: «ничего себе, мне надо подтянуть свои навыки vim» и затем даже купил книгу. Лучше мне ее прочесть до следующего хакатона :)
Когда и как познакомился с Perl?
В конце 80-х — начале 90-х я много занимался обработкой текста, писал скрипты на awk и sed, также как и мой товарищ в отделе. Он наткнулся на Perl и сказал, что нам стоит попробовать. О, эта была жесть.
Я переехал в Нью-Мексико и работал над системой визуализации и обработки графических данных, написанной на C, она должна была работать на как можно многих вариантах Unix. У нас было множество машин, в том числе и арендаторов. Когда я начал там работать, у них была система сборки, написанная на шелл-скриптах. Я переписал ее на Perl 4, и мне это очень понравилось. С того момента я стабильно все больше и больше писал на Perl.
С какими другими языками нравится работать?
Много времени я провел за программированием на Javascript в то время. Иногда мне нравилось. В разное время мне нравилось писать на C, Postscript, Inform и ассемблере, не сколько из-за языка, а из-за задачи, которую я решал.
Perl всегда казался тем языком, который соответствовал моему образу мышления. Я почуствовал то же самое, когда познакомился со Scala, но писал на нем не много, и, возможно, это просто увлечение.
Многие Perl-программисты участвовали в онлайн-курсах по программированию, и видя их твиты, мне и самому захотелось поучаствовать. Я игрался с Haskell, Clojure, Rust и Go. Кто-то должен запустить соревнование по языкам: ежемесячная случайная задача на случайном языке!
Что, по-твоему, является самым большим преимуществом Perl?
Наверное, ответ, которого все ждут, это CPAN и сообщество вокруг него.
Лично мне с помощью Perl удается наиболее эффективно выражать себя, хотя это может быть просто опыт.
Но что действительно делает меня эффективным в Perl это CPAN. Причем это может быть на разных уровнях абстракции от раздутого фреймворка до отдельной функции в библиотеке. Когда на выходных я писал скрипт для соревнования Pull Request, мне нужно было рандомизировать массив. Я легко мог бы написать это и сам, но подумал «наверное, что-то должно быть в List::Util», и действительно, там была функция shuffle()
.
Среди многих рейтингов/графиков на твоем сайте, о каком из них стоит людям узнать побольше?
Это не совсем рейтинг или график, но я бы сказал, что о списке модулей, которым требуются сопровождающие.
Открытый код написан и сопровождается в основом в свободное время. Интересы людей, их мотивация и время угасают по естесственным причинам. Многие в порыве для удовлетворения какой-то потребности пишут модуль, загружают его на CPAN, затем занимаются чем-то другим. Позже у других людей появляется аналогичная потребность, но теперь над модулем нужно поработать, прежде чем он начнет функционировать.
Если вы хотите познакомиться с CPAN, с системой и сообществом, но у вас нет идей для написания собственного модуля, поищите дистрибутив, которому нужно внимание и который вам нравится, и принимайтесь за работу.
Как только вы закончите, подозреваю, что у вас уже появятся идеи для релиза собственного модуля.
Думаешь, CPAN нуждается в модерации?
Ха! Да, нуждается. Вообще, мне кажется, что модерация может принимать несколько форм:
Полное удаление дистрибутивов с CPAN. Тут нужно быть осторожным, потому что нет способа узнать, используется ли кем-то этот модуль, кроме ситуации, когда он используется другим модулем. Но есть очень старые дистрибутивы, которые годами не используются. И с достаточно длинным циклом депрекации, есть множество новых дистрибутивов, которые также можно безопасно удалить.
Депрекация модулей, в особенности, когда есть дистрибутивы, выполняющие ту же задачу, но лучше. Депрекация модуля это хорошая штука, когда дистрибутив больше не сопровождается, но его нельзя удалить (пока что), потому как есть другие дистрибутивы, зависящие от него (и не забывайте про DarkPAN). Хороший пример — Any::Moose; он депрецирован, но есть множество дистрибутивов, которые его используют. Надеюсь, что они постепенно перейдут на Moo или Moose.
Улучшение документации модулей. Очевидно, что третьи лица могут улучшать документацию, присылая патчи или pull-запросы. AnnoCPAN был попыткой решить эту проблему, но пока он не встроен в такие сервисы как MetaCPAN, он никогда не взлетит. С GitHub у меня появилась лучшая возможность предложить улучшение документации.
Качественное содержание секции SEE ALSO в документации вашего модуля может быть одним из лучших способов помочь людям найти нужное, потому как это, например, улучшает поиск на MetaCPAN.
Сгенерированные сообществом метаданные или аннотации. На данный момент это возможность добавить модули в Избранные, но можно также добавить теги и другие метаданные из самих дистрибутивов. Хорошая идея Рейтинг CPAN, но даже если вы улучшите однажды низко оцененный дистрибутив, очень сложно изменить его рейтинг (например, добавляя негативные отзывы, относящиеся к предудыщему релизу). Такого вида аннотации могут категоризировать «лучшее из CPAN» без написания еще одного CPAN.
Сходимость. В то время как есть множество модулей с одинаковым функционалом, нет очевидного «лучшего» модуля: у каждого свои сильные стороны, например. Иногда, но не всегда, будет полезнее взять лучшие части разных модулей для написания одного «лучшего» модуля (с надеждой, что он будет основан на существующем модуле, а не представлять собой совершенно новый). Не совсем понятно, в чем тут мотивация для авторов, так как отдельные модули были написаны для удовлетворения каких-то текущих потребностей. Показательный пример: я пытался сделать что-то подобное вместе с Олафом Алдерсом (интервью, — прим. ред.) основываясь на одном из моих сравнений модулей, но мы оба постоянно отвлекались на другие проекты.
Инфраструктура и документация также требует модерации. Сейчас стало ясно, что людям не так-то просто начать писать модули для CPAN. Легко написать код, но превратить его в хороший CPAN-модуль совсем не тривиально.
Заимствование идей из других языков и утилит. В глобальном смысле мы этого не умеем.
Что такое соревнование CPAN Pull Request? Как можно присоединиться?
Это соревнование 2015 года для мотивации людей на участие в CPAN и еще большее вовлечение в «сообщество». Если вы зарегистрируетесь, то первого числа каждого месяца я отправляю вам email со случайно выбранным CPAN-дистрибутивом (у которого также есть репозиторий на GitHub).
У вас есть один месяц для написания хотя бы одного pull-запроса. Если захотите, можно сделать и больше. Идея в том, чтобы сделать что-то полезное для дистрибутива, будь то исправление ошибки, улучшение документации, соответствие современным CPAN-соглашениям или улучшие покрытия тестами, например.
Все это основывается на следующих идеях, которые у меня появились после участия в соревновании 24pullrequests.com:
Каждый CPAN-дистрибутив можно улучшить с пользой для CPAN. Следуя этой мысли, это может быть и депрекация модуля. Выбор репозиториев в 24pullrequests был сложным. Поэтому я просто случайным образом буду выбирать вам модули. Один модуль в день это слишком много работы. Один в месяц звучит более реально. Я выставляю оценки CPAN-дистрибутивам в соответствии с их запущенностью, и выбираю те, у которых эта оценка наивысшая.
Я надеялся, что людям понравится одновременно знакомится с инфраструктурой и улучшать качество CPAN.
Чтобы присоединиться, отправьте мне свой GitHub-аккаунт: neil at bowers dot com. Также сообщите свой PAUSE-аккаунт, если он имеется, чтобы я не назначал вам ваши же модули.
Ожидал ли ты, что CPAN PRP станет таким популярным? Какие планы?
Вообще не ожидал. В прошлом я пытался проводить несколько CPAN-соревнований, и основываясь на том опыте, ожидал около дюжины регистраций. На данный момент зарегистрировано 372 участника! Было три волны регистраций: первая, когда в ноябре я написал в своем блоге, что привлекло 20 участников. Затем в сочельник я написал пост на blogs.perl.org и получил еще 50 регистрация. Затем перед Новым годом я запостил на Hacker News, и регистрации поперли!
Теперь есть IRC-канал и список рассылки, где участники помогают друг другу, например, с идеями, что делать, а также как пользоваться GitHub, Travis и т.д. Это очень позитивный канал, так как каждый пытается делать то же самое. К тому же есть естесственный самоотбор. Возможно, мы все психи?
Я ожидаю около сотни тех, кто отвалится в течение месяца, но на сегодняшний момент энергии очень много, и многое делается. Мне это доставляет удовольствие и немного пугает.
Что дальше? Я работаю над усовершенствованием схемы ранжирования дистрибутивов. Когда участники получают свое задание, их email содержит список предлагаемых идей, с которых можно начать. Чем больше вариантов мы предлагаем людям, тем больше вероятность того, что они за что-то возьмутся и сделают pull-запрос.
Вначале у меня были планы начать второе соревнование, но текущее отнимает много времени. Второе соревнование будет побуждать людей выкладывать CPAN-дистрибутивы на GitHub. Если вы это сделаете (и в метаданных дистрибутива будет присутствовать репозиторий), то дистрибутив будет участвовать в первом соревновании в следующем месяце.
Где сейчас работаешь, сколько времени проводишь за написанием Perl-кода?
Я работаю в компании, которая называется Cogendo, мы ее основали с моим другом, когда нам нечем было заняться.
Я много пишу на Perl (и Javascript), но, как и в других небольших компаниях, также занимаюсь множеством дополнительных вещей. Я программирую практически каждый день, также занимаюсь администрированием, проектированием, поддержкой и т.д.
Стоит ли молодым людям советовать сейчас учить Perl?
Зависит от того, что понимать под «молодым».
Моему сыну семь лет и он немного увлечен Logo. Пока что я не буду пытаться учить его Perl, но, скорее всего, попытаюсь с другими языками. Мне кажется, что детям лучше знакомиться с менее сложными языками, что проще и легче в обучении.
Пока что он думает, что компьютеры предназначены для Minecraft и flash-игр.
Вопросы от читателей
Когда будет CPAN-отчет за 2014 год?
Ха! Надеюсь, что скоро. Я планировал написать его где-то в начале года, но в то время началось PR-соревнование. Теперь, когда у каждого есть задание на февраль, надеюсь, что у меня появится время для отчета.
Когда я только получил вопросы на это интервью, я подумал: «О, все будет готово прежде, чем я отвечу на эти вопросы!». Хм. Похоже, что я не сильно продвинулся.
Будет также небольшое изменение в отчете этого года. Мне кажется, что стоит быть осторожным в статистике, которую предоставляешь в качестве топ-списка, так как она может побуждать людей на нежелательное поведение.
Да и неплохо, сохраняя новизну, каждый год делать что-то новое.
Насколько длинный список модулей для обзора, и когда появятся собственно обзоры?
Прежде чем я назову число, должен объяснить: когда я понимаю, что есть несколько модулей, который делают почти одно и тоже, я думаю «это потенциальный обзор», и добавляю в свой список на trello (веб-сервис, — прим. ред.).
У меня есть несколько обзоров в процессе написания и несколько в виде простого списка модулей, другие же просто на trello.
Общий список содержит 22 обзора. Следующий обзор будет посвящен моулям типа Exporter. Я описал почти 40 модулей, даже делал доклад на лондонском Perl-воркшопе в прошлом году. Я постоянно отвлекаюсь. Смотрите ответ на предыдущий вопрос :-)
Какой, по-твоему, самый лучший способ внести свой вклад в Perl-сообщество?
Поучаствовать в соревновании Pull Request и сделать как минимум 11 pull-запросов до конца года! :-)
Лучшим способом внести свой вклад это помочь другим людям конкретными вещами, особенно новичкам. Когда вы помогаете другим, сами многому учитесь. Я многое узнал занимаясь PRC: люди задают вопросы, и я часто думаю: «О, этого я не знаю. Но было бы полезно узнать».
Если вы хотите сделать нечто большее, займитесь сопровождением CPAN-дистрибутива. Отполируйте его и, возможно, передайте дальше.
Если вы не хотите сопровождать дистрибутив, поработайте над менее «веселыми» частями разработки и подержки CPAN: улучшите документацию, почините вредный баг, или увеличьте покрытие тестами. Получить такой pull-запрос будет приятным сюрпризом для автора.
И напишите об этом. Поделитесь своим опытом и воодушевите других.
Одной из вещей, которые радуют меня в PR-соревновании, это атмосфера дружественности и готовности помочь друг другу.
← Обзор CPAN за январь 2015 г. | Содержание