Интервью для Pragmatic Perl

Осенью 2014 года журнал Pragmatic Perl брал у меня интервью. Перепечатываю с небольшими правками.

17 Dec 2014


Интервью в 21 выпуске Pragmatic Perl: ссылка

Елена Большакова (Liruoko) — Perl-программист, математик по образованию, соавтор проекта http://perltrap.com.

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

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

Летом услышала рассказ одной девочки, как она писала программу для рисования маятника, и как это было сложно. Хотя казалось бы, что такого? Уравнение движения известно из физики.

В десятом классе (уже в другой школе) были компьютеры и начался Бейсик: line, circle, goto. Ага! — теперь я тоже могу делать мультики. Осталась после уроков и запрограммировала качающийся маятник. Кстати, самым сложным оказалось подобрать интервалы перерисовки кадров, чтобы картинка не моргала.

С этого момента программировать стало интересно, вроде как читать Жюль Верна.

После школы — факультет ВМиК МГУ, и там все было серьезно: алгоритмы, структуры данных, оценки сложности, доказательства корректности, методы оптимизации. У меня был собственный sql-сервер, компилятор C-подобного языка в байт-код и его интерпретатор, шелл, Элиза-подобная программа-собеседник. В общем, все было очень здорово.

Но к пятому курсу меня посетила идея, что программирование — слишком сиюминутное занятие: сегодня ты программируешь протокол X под архитектуру Y, а завтра протокол устарел и архитектура мертва. А мне хотелось вечности. И я пошла в аспирантуру на мехмат, «делать математику». Кстати, доказала красивые результаты и защитила диссертацию.


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

A. Vim. Он везде есть и одинаково удобен и при локальном использовании, и на удаленных серверах.

Кстати, а почему не спрашиваете про клавиатуру? Для комфортной работы с текстом хорошая клавиатура важна почти так же, как хороший редактор. У меня две любимые клавиатуры: IBM Model M и Code Keyboard.


Q. Как и когда познакомились с Perl?

A. Когда была в аспирантуре, знакомый системный администратор рассказывал про свои скрипты и про Perl — язык, похожий на человеческий. Язык, в котором одно и то же можно написать по-разному, и где можно сказать: сделай или умри.

Потом однажды весной наткнулась в Википедии на перловый однострочник, в котором коротким регулярным выражением, состоящим почти из одних единиц, выводился бесконечный список простых чисел. Вот это да! Хочу знать больше. Тот же знакомый сисадмин (к тому времени мы поженились) подсунул Camel Book. Книга очень понравилась с первых страниц, я решила, что это мое, и написала резюме в Яндекс. Тем же летом я вышла на работу в Директ, Perl-разработчиком.


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

A. Нравится C — он прямой и честный. Еще очень забавный Forth: супер-минималистичный, но при этом настоящий промышленный язык, не brainfuck какой-нибудь.

Но на самом-то деле мне интересно не с языками работать, а задачи решать. Сейчас мне хватает достойных задач, а вообще было бы интересно заняться чем-нибудь с формальными грамматиками. Или со статистикой. Еще очень увлекательная область — вероятностные структуры данных.


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

A. Perl очень пластичный и выразительный, идеально подходит для трансляции мыслей в машинно-читаемый формат. И на нем очень легко начать писать. Я слышала такой рассказ от коллеги: «Друг поставил Perl на компьютер, я наугад написал ‘print “hello”’ — а оно заработало. Так я и попался».

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

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


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

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


Q. Что думаете о будущем Perl?

A. Судьба Perl зависит от сообщества, то есть и от нас с вами. Это большая ответственность, но это и здорово!


Q. Помогает ли математическое образование в программировании?

A. А что мы считаем «математическим образованием»? Вызубрить тысячу теорем, сдать пятьдесят зачетов и тридцать экзаменов, а потом забыть все, как страшный сон? Такое образование по системе «знал, сдал, забыл» не то что бы помогает. Но оно работает как отбор: смог? осилил? Значит, силён.

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

Знаете, у компьютерщиков в запасе всегда есть негодные оправдания: «Работает ведь! Так что неважно, насколько аккуратно сделано, эффективно ли, надежно ли». У математиков же нет никаких машин, которые бы воспринимали доказательства. Хочешь утвердить новый результат — убеди людей, как три тысячи лет назад, как у древних греков. Вот эту культуру обсуждения, поиска слабых мест, контраргументов полезно освоить и разработчику.


Q. Вас всегда можно увидеть на различных Perl-мероприятиях, чем они вас привлекают?

A. Интересно слушать людей из других компаний и проектов.

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

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


Q. Расскажите про http://perltrap.com.

A. Давным-давно мне попалась книжка Стива Уэллина «Как не надо программировать на C++». Там приводятся фрагменты программ, и в каждом есть проблема — иногда более заковыристая, иногда менее. К каждой проблеме дается серия подсказок, обычно довольно ехидных, и наконец объяснение.

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

Книга Уэллина дает отличную возможность попрактиковаться в таком критическом чтении. Это интересно и полезно — и для самоконтроля, и для код-ревью.

Потом, уже в Яндексе, я подумала, что с удовольствием читала бы такую книгу-задачник про Perl, только ее почему-то никто не писал. Если никто другой, тогда, может быть, я? К тому же нашлись коллеги, которым тоже понравилась идея, мы зарегистрировали имя, сделали сайт и стали выкладывать задачи. Вот и все.


Q. Как известно, вы работаете в Яндексе уже продолжительное время. Сколько времени проводите за написанием Perl-кода?

A. Меньше, чем хотелось бы.

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

По крупному счету все хорошо, но бывает, я чувствую себя как в анекдоте: «Дома говорю, что иду на работу, на работе пишу, что задерживаюсь, а сам в парк на скамеечку, достаю ноутбук, и программирую, программирую…»


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

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

На уровне коротких однострочников Perl нужен всем, наравне с grep-ом и make-ом. Пример однострочника, мочь сочинить который полезно каждому: perl -lane '$sum{$F{3}} += $F[1] END{print "$_ $sum{$_}" for keys %sum}'

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


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

Q. Будут ли еще модули на CPAN?

A. Если буду писать что-то общественно-полезное — буду выкладывать.


Q. Согласны ли со мнением, что вы «самый крутой перловик Яндекса»? :)

A. А почему только Яндекса? ^_^

Если серьезно, я считаю своей самой сильной стороной юзабилити command-line-инструментов, я умею делать так, чтобы разработчики и администраторы ошибались реже. А еще я могу брать что-нибудь сложное — программу, систему, идею, текст, процесс — и делать эту вещь проще. Вот!


Q. Почему перестали преподавать?

A. Это не так. Просто перешла от серийного обучения в аудитории к штучному кураторству над стажерами в Яндексе. И еще пишу статьи для PragmaticPerl ^_^


Q. Как устроиться работать в Яндекс?

  • Во-первых, захотеть.
  • Во-вторых, отправить резюме.
  • В-третьих, хорошо показать себя на собеседованиях.

Первые два пункта просты: если нет желания — то и говорить не о чем, а резюме — механическая работа. Что касается собеседований… В разных командах и для разных позиций требования отличаются, но определенно полезно логически мыслить, уметь работать над задачей, которая не решается с первого взгляда, чувствовать сложность алгоритомов, понимать unix-like-системы – форки, процессы, сокеты, все такое. Не помешают базы данных.

Удачи!


Спасибо журналу «Pragmatic Perl» за приглашение, это было неожиданно и приятно.

Вопросы задавал Вячеслав Тихановский