Выпуск 19. Сентябрь 2014

Обзор CPAN за август 2014 г. | Содержание

Интервью с Куртисом “Ovid” По

Куртис По (Ovid) — Perl-программист, рекрутер, автор книги Beginning Perl, автор популярного блога про жизнь иммигранта.

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

Впервые я научился программировать в 1982 году, когда учитель геометрии разрешил мне поиграться с компьютерами в лаборатории, хотя они и были для старших учеников. Я выучил BASIC и к 1984 году написал относительно полноценный (для того времени) графический редактор для TRS-80, но графика была настолько малого разрешения, что любая картинка занимала несколько экранов (и файлов) и можно было сдампить их на матричные принтеры. Студенты в компьютерной лаборатории проводили много времени за моим редактором. Через пару лет я начал писать текстовую игру (для развлечения, у меня до сих пор не было работы в качестве программиста). Помню, что парсинг моего тестового предложения занимал восемь секунд на BASIC. Этим предложением было “hit the skeleton with the sword, take his ring and then walk north and touch the alter”. Чтобы это как-то ускорить, я выучил assembler, а затем и C. К сожалению, так как я жил в небольшом городишке, и у меня не было диплома, с 1988-го я программировал лишь изредка. В 1998-м я впервые получил свою первую работу в качестве программиста. С тех пор этим и занимаюсь.

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

Я использую vim, но это только из-за мышечной памяти, а не потому что я считаю, что vim обязательно лучше или хуже других редакторов. Я был вынужден выучить vim на моей первой Perl-работе в 2000-м году. Я ненавидел этот чертов редактор и постоянно смотрел туториал. На сегодняшний день у меня очень сильно кастомизированное vim-окружение, это круто, но сильно усложняет парное программирование, потому что я передвигаюсь по коду настолько быстро, что другие разработчики не могут угнаться за тем, что я делаю. Или я правлю строчку кода, и внезапно запускаются тесты, не выходя из vim. Или я вбиваю <leader>rb, и внезапно весь мой проект компилируется. Или выделяю несколько строчек кода, и бам — выделяется метод! Я очень быстр в рефакторинге и вычищении кода, но это в основном благодаря утилитам, которые я встроил в vim.

Любопытен тот факт, что мощность моей настройки vim может быть минусом в дебатах «текстовый редактор или IDE». Я не считаю себя особенно талантливым в vim, но, несмотря на это, иногда больно наблюдать как им пользуются другие разработчики. За годы моего опыта я понял, что большинство программистов так и не научились им правильно пользоваться. Поэтому в стандартном IDE, несмотря на раздутость (я смотрю на тебя, Eclipse) и множество особенностей, которые никогда не используются, разработчики могут делиться фишками, указав какой-нибудь шорткат или настройку в меню. Мое окружение настроено так, как я программирую, и этим тяжело делиться или как-то объяснить. Оно оптимизирует меня, но не оптимизирует массы. Я подозреваю, что IDE лучше с этим справляется. Я даже пробовал сделать урезанную версию моего vim-конфига, потому что многие просили им поделиться, но в итоге это превращается в какую-то кашу.

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

В 1999-ом году я работал COBOL-программистом в страховой компании и там познакомился с одним Unix-администратором. Он мне все уши прожужжал про эту новую штуку “Perl”. Я пытался решить одну задачу с помощью COBOL, где нужно было преобразовать CSV-файл из NT-системы в формат с фиксированной шириной, который бы принимался COBOL. У COBOL много слабостей, и работа с тестом одна из них. Код был длиной в 150 строк, но все потому, что автор не понимал как работает функция unstring. Мне удалось уменьшить код до 80 строк. Чисто из любопытства я попробовал Perl и получил файл в 10 строк понятного кода, и это с обработкой ошибок. Когда тот Unix-админ уволился, чтобы начать свою компанию, я с радостью перепрыгнул с COBOL на Perl.

По иронии судьбы многие Perl-программисты пишут на Perl как на С, но я начал писать как на COBOL (это слишком длинная история). Perl-сообщество научило меня, как по-настоящему программировать. Я за это очень благодарен.

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

Моим любимым будет JavaScript. Например, написание таких вещей как вращающаяся 3D-карта звездного неба приносит мне много удовольствия, и это в той области, где Perl не сильно подходит. Мне также нравилось писать на Python и Ruby, но к сожалению, в моем резюме Perl находится настолько долго, что компании, которые предлагают мне контракты, не будут платить мне столько, сколько я могу заработать с Perl.

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

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

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

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

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

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

Как тебе опыт написания Beginning Perl? Что мотивировало больше всего?

Когда Wiley (издательство — прим. перев.) в первый раз связалось со мной по поводу книги, я хотел отказаться. Моя жена Лейла только что родила, мы переехали в Амстердам, жизнь была хаотична. Однако Лейла настояла на том, чтобы я написал книгу, сказав, что позаботится о нашей дочери. Это было адом для нас обоих. Я провел восемь месяцев за написанием, по-моему, самой большой Perl-книги, написанной одним автором. Мой технический редактор, chromatic, выполнил героическую работу по нахождению разного рода проблем в книге, но к сожалению, опечатки все равно прокрались. Я все еще очень доволен книгой, и критика была отличная, но было бы хорошо, если бы у меня было немного больше времени для исправления всех опечаток.

Хочу рассказать небольшую инсайдерскую историю, которую, я думаю, никогда никому не рассказывал. В одном из первых черновиков я пошутил про терроризм (в книге по программированию!), и мой редактор спросил, считаю ли я, что это уместно, если учесть современный политический климат. Я просто ответил «да». Вообще, я обычно уступаю редактору право решать, но в этот раз я настоял на своем. Вскоре после этого редактора назначили на работу с другой книгой, и, хотя мне сказали, что это была всего лишь внутренняя реорганизация, я до сих пор думаю, не обиделся ли он на мое чувство юмора настолько, что не хотел больше со мной работать. Это дает мне возможность вспомнить о Мэри Джеймс, Маурен Спирс и Сан Ди: трех замечательных людях в Wiley, которые работали со мной над книгой. Если бы не они, сомневаюсь, что у меня получилось бы сохранить здравый рассудок. Не могу говорить за других людей, но я бы с радостью поработал с Wiley еще раз.

Популярны ли до сих пор книги о Perl, если брать во внимание количество продаж?

Все зависит от того, что понимать под «популярны». Я вполне доволен продажами своей книги, кроме того я знаю, что она продается лучше, чем некоторые другие. Но несмотря на это, есть некоторое сокращение рынка книг о Perl. Так как я много занимаюсь консалтингом и тренингом в http://www.allaroundtheworld.fr/, я вижу, что Perl до сих пор популярный язык и новые проекты и компании постоянно возникают, но есть предубеждение, что Perl не настолько силен как раньше. Думаю, что это сильно вредит книжному рынку.

Какие были причины для написания еще одного модуля для тестирования в Perl? Как он отличается от других?

Я написал много из них, но, думаю, имеется в виду Test::Class::Moose. Изначально я его написал как замену древнего модуля Test::Class от Адриана Ховарда. К сожалению этот модуль начал проявлять свой возраст, тогда как Test::Class::Moose разработан как современный xUnit-фреймворк. Меня сильно удивило, что все больше и больше компаний начинают его использовать, настолько он мощный. Как только вы с ним освоитесь, его просто использовать, и он действительно готов к использованию в серьезном деле.

Из коробки тесты запускаются быстрее, легко распараллеливаются (включая простоту написания алгоритмов для распараллеливания), вы получаете отчеты, возможность реорганизации тестовых наборов (запуск только тех тестов, над которыми вы работаете), утилиты для миграции с Test::Class, запуск тестов в разных контекстах (спасибо Дэйву Рольски!), и полная интеграция с Moose для мощного ООП-тестирования. До сих пор помню, как однажды показывал модуль в одной компании, и они сразу же согласились его использовать, когда увидели, как просто можно запускать подмножества тестов в зависимости от требований заказчика.

Несмотря на это, я много раз игрался с идеей написания Testament. Это был бы преемник Test::Class::Moose, который бы решал две самые большие проблемы: он бы изменил мнение людей, что он только для кода, написанного с помощью Moose, и он позволил бы компании решать, какие тестовые модули они хотят включить в поставку, вместо того, чтобы использовать Test::Most по умолчанию.

Почему считаешь, что у людей должен быть опыт жизни и работы в разных странах? В чем преимущества иммиграции?

Легче ненавидеть того, кого не знаешь. Я сейчас живу во Франции и должен сказать, что большинство стереотипов о французах просто неправдивы. Они не высокомерны. Они не ленивы. Они не грязны. Они радушные, духовно богатые люди с фантастичной культурой и глубокой любовью к хорошей еде и вину (и, к сожалению, бюрократии). Вообще, я жил в пяти странах, и каждая из них отличается от того, что думают о ней извне. Главное, с чем вы сталкиваетесь, если знакомитесь с местными, что люди — это просто люди. Мы не американцы, французы, японцы, иракцы или что-либо подобное. Мы люди. Когда вы пожили в стольких странах, во скольких жил я, вы узнаете, что большинство людей по своей природе хорошие, и, к большому сожалению, новостные репортажи о плохих вещах формируют общественное мнение.

Иммиграция — это одна самых стоящих вещей, которые человек может переживать, особенно если вы долго живете в стране, где язык сильно отличается от вашего. Даже если мы фундаментально одинаковы, в зависимости от культуры это по разному проявляется. Когда вы переживаете это лично, вы начинаете понимать, почему люди такие, какие они есть. Я искренне рекомендую!

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

Для рекрутеров слишком низкий пород входа. Все что нужно, это сказать «Я рекрутер» и бац! — ты рекрутер. Это понижает и качество, и цены. Компании тратят очень мало на рекрутинг, а затем жалуются, когда получают плохой результат. Рекрутеры, в свою очередь, обычно ищут ключевые слова, без понимания о нужной позиции, на которую ищут кандидата, затем пропихивают резюме компаниям. И все по новой.

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

Вообще, в начале мы проводим интервью с компанией. Когда мы готовы, мы начинаем интервьюировать кандидатов. Вначале мы фильтруем резюме. Если они прошли через этот фильтр, мы обычно проводим технический тест — большинство кандидатов отсеивается на этом этапе — и далее мы проводим тестирование их нетехнических качеств, используя так называемое «труктурированное интервью». К сожалению, такие интервью неизвестны рекрутинговым компаниям, но в отличие от обычного интервью (что не сильно отличается от случайного шанса найти хороших кандидатов), структурированное интервью является отличным предсказателем успешности или неуспешности кандидата. Оно требует времени для изучения, управления, оценки, но когда мы передаем кандидата компании, их финальное интервью обычно сводится к «захочу ли я посидеть в баре с этим человеком?» с гораздо меньшим риском.

Также хочу добавить, что это отлично работает в нашей специализации с международным рекрутингом. Если ваша компания находится в небольшом городе, как например, Партен во Франции, вам будет довольно сложно привлечь французов для работы. По факту, даже несмотря на то, что Франция — это часть Европейского Союза, граждане союза, переезжающие во Францию, обычно хотят в такие города как Париж, Бордо или Ницца. Кто хочет переезжать в глушь? Но компания в Партене, которая открыла себя для глобальный рынок труда, теперь переполнена кандидатами, которые хотят жить во Франции, даже если это небольшой город. Это то, где мы можем пригодиться: мы рассказываем компании, как работает иммиграция, как они могут помочь своим работникам, как работают Голубые карты в ЕС, как справляться с переездами, и мы также проводим рекрутинг таким образом, что кандидаты, переезжающие во Францию, уже готовы к интеграции, и к тому же отлично подходят компании. Это очень много работы, но я сам иммигрант, мне это очень нравится, и мне нравится видеть, как другие реализуют свои мечты жизни за границей.

Что думаешь о будущем Perl?

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

На сегодняшний день Perl — все еще один из самых быстрых динамических языков, с отличной поддержкой юникода и процветающим сообществом. Есть две вещи, которые исторически нам вредили: отсутствие сигнатур методов/функций и отсутствие приличного ООП-ядра. С Perl 5.20 у нас отличные сигнатуры. А Рикардо Сайнс сказал, что если появится приличный MOP (метаобъектный протокол), он добавит его в ядро.

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

Несмотря на это, наш маркетинг в течение последних лет, воодушевил многих в сообществе. И сейчас пришло время выйти за сообщество.

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

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

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

Напишешь еще одну книгу о Perl? Или, возможно, о другом языке или технологии?

Сейчас не знаю, у меня планов пока нет. Я думал, что было бы весело написать «Perl для криминала», объясняя как начинающему программисту использовать Perl для улучшения эффективности криминального синдиката. Это обязательно будет замечено, но, наверное, не так, как мне хотелось бы. Я так занят своей компанией, своей ролью мужа и отца, а книги приносят так мало дохода, что это вряд ли произойдет.

Как найти работу за рубежом?

Это займет слишком много текста, поэтому хочу направить всех на мою страницу “Start Here” на моем блоге про иммиграцию.

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


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

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