Выпуск 31. Сентябрь 2015
← Обзор CPAN за август 2015 г. | СодержаниеИнтервью с Алексеем Капрановым
Алексей Капранов (kappa) — Perl-программист со стажем, менеджер крупных проектов на Perl и не только
Как и когда научился программировать?
Начал что-то программировать в 1993 году, когда учился в 9-м классе. Это были Искры-1030 (советский аналог IBM PC XT, гениальные машины с хардверной клавишей рус/lat на клавиатуре и ручкой громкости у спикера) c GW-BASIC-ом. Там ещё надо было нумеровать строки. В отличие от многих ровесников у меня в жизни почти совсем не было не-интеловских машинок, таких как Спектрумы или БК-шки. Чуть-чуть зацепил УКНЦ, где нам преподавали Школьный Алгоритмический Язык. Очень, кстати, хороший. Я писал к нему небольшой компилятор в Parrot VM.
Увлёкся программированием очень быстро, начал ходить в олимпиадную группу, пересел на Турбо Паскаль. Тогда нас начали пускать за “двойки” с цветными экранами. Через год-два уже что-то там выигрывал.
А дальше я пошёл учиться на профессионального программиста в БГТУ. Ну и понеслось.
Какой редактор используешь?
Работаю в vim, но в последнее время в рамках личной программы расширения горизонтов живу в режиме alias vim = 'echo use emacs'
+ spacemacs. Получается, хотя и чертыхаюсь иногда. vi для меня родной.
Как и когда познакомился с Perl?
Уже в институте, опять же расширяя личные горизонты, пробовал разные операционки. Пожил пару недель на модной в те годы OS/2, плюнул, поставил FreeBSD 2.1.7 — Линукс тогда в Брянске найти было сложнее. FreeBSD меня полностью поглотила — в первую очередь своей открытостью к любопытному пользователю. Постоянного доступа в интернет не было, но и базовая система предоставляла настолько много всего, что хватило надолго. И там был Перл (правда, сначала четвёртый, который совсем без ООП). К третьему курсу я начал делать на Перле все институтские задания. В конце концов дошло до того, что и дипломная работа у меня состояла из десятка скриптов, соединённых через пайпы и inetd.
С какими другими языками интересно работать?
Следующий мой любимый язык после Перла — Лисп, причём не конкретная реализация, а всё семейство и сам принцип, когда в качестве исходного кода программист пишет сразу AST. Современный Лисп, на котором я иногда пишу, это Clojure, хотя в нём и чувствуется некоторое предательство в угоду практичности (например, ограничения в recur или отдельные контейнерные типы кроме списков).
Очень люблю чистый Си, но не C++. Считаю, что реализация ООП в C++ грязная, хотя и очень мощная. Её подчистили и довели до приличного вида только в Java.
Много кода написал на Яваскрипте.
В принципе, сейчас уже могу с удовольствием писать на чём угодно, если там есть анонимные функции.
Что, по-твоему, является самым большим преимуществом Perl?
Это один из вопросов, сильно привязанных к контексту сравнения. Я убеждён, что все конкретные технические преимущества за годы были повторены в других языках — начиная от очевидных регексов и заканчивая CPAN-ом. Перл же, во-первых, остался удобной комбинацией таких преимуществ (достаточно быстрый, достаточно мощный, отлично поддерживает Unicode, имеет культуру тестирования и обратной совместимости и так далее), а во-вторых нарастил себе уникальное сообщество.
Что, по-твоему, является самой важной особенностью языков будущего?
Название начинается на „J“, а заканчивается на „T“. Ближайшее будущее, мне кажется, это время полного доминирования JavaScript везде. Интересно, что у него нет никаких выдающихся особенностей, которые привели к такому положению вещей. Он просто выиграл в лотерею, когда стал ассемблером веб-страничек в Netscape Navigator-е.
Я не уверен, что развитие языков программирования будет продолжаться бесконечно. Мне кажется, что мы близки к порогу, когда программы будут не писаться последовательностью инструкций, а выучиваться на примерах. Выживут языки, на которых будут делать платформы обучения и сбора примеров. Но это длинный горизонт, за который заглядывать тяжело и бессмысленно.
Что думаешь о Perl 6?
Очень много всего передумал про Perl 6 за эти годы. Сейчас смотрю на него с лёгким светлым сожалением. Мне уже не предоставится случая использовать его в продакшене, это поезд ушёл. Но я точно буду писать на Perl 6 всякую мелочь, которую сейчас я делаю на Perl 5/Clojure. Однако, я понимаю, что без большого продакшена у Perl 6 не вырастет свой CPAN, без которого невозможно за полчаса накидать очередную домашнюю мелочь, какую-нибудь бэкапилку или веб-скрейпер.
Как проект Perl 6, конечно, абсолютно провалился. Интересно будет лет через 15 прочитать книжку о том, как так вышло, да ведь никто её не напишет. Надо Дэмиану под это дело Кикстартер завести.
Расскажи про первые годы Moscow.pm, первые воркшопы и конференции в СНГ. Есть ли будущее у специализированных конференций типа YAPC?
Я начал участвовать в оффлайновой перловой движухе после поездки в 2007 году на свой первый европейский YAPC в Вене. Ну как начал — просто помогал Андрею Шитову, который загорелся этим тогда же и начал активно воплощать идеи в действительность. Moscow.pm к тому времени существовала, но без регулярных мероприятий. Что было дальше, хорошо описано здесь: http://yapcrussia.org/. Я играл тут небольшую роль, помогал в разных местах, например с блиц-докладами. Как участник и докладчик я получал регулярной приток знакомств, мотивирующих идей и поводов сгонять в прекрасный Киев или даже в Европу. Кажется, что участие несколько раз помогало мне решать кадровые проблемы на работе.
Есть ли будущее у YAPC — безусловно. Даже по инерции эта тусовка будет продолжать собираться, а ведь там ещё и каждый год сколько всего нового появляется. Интересное слово «специализированных». Да, тематические конференции никуда не денутся, даже наоборот, будут появляться ещё более узкие тематики. См. MojoConf, DancerConf. Объём знаний постоянно растёт, а люди же не умнеют, поэтому им приходится суживаться.
Как учиться продвинутым программистам, у которых новые проекты не появляются даже каждый год?
На Курсере. Я попытался чуточку соптимизировать свой прошлый опыт с Курсерой — взял курс с очень интересной и новой для меня тематикой (Биоинформатика) и начал делать все задания на новом, хоть и знакомом мне языке (Clojure). Получилось тяжело, часов по 10-15 в неделю, но очень хорошо. Два зайца убиты точно, а может и больше.
Например, сейчас абсолютно всем программистам необходимо заниматься машинным обучением. Курсов полно, а язык можно использовать любой, так что рекомендую взять не Перл. Пойдёт тяжело, со скрипом, но разгонитесь, после Перла мозги быстрые и ловкие.
Если программирование это по большей части ремесло, почему возникают вопросы этики и свободы программ? Профессионально ли отказываться от «неэтичных» проектов?
Я не вижу никакой зависимости между свободой отказаться от плохого, неэтичного проекта и степенью «ремесленности» профессии. Это вопрос общей этики любой деятельности. Помогать программировать цензуру в Роскомнадзоре также плохо, как придумывать про неё законы. И также необходимо, если нет другого способа сохранить населению России доступ к мировому Интернету.
Судя по planetperl.ru, на русском о Perl пишут довольно мало. С чем это связано?
Я довольно неактивно слежу за новыми источниками, planetperl последние пару лет пополняется только читательскими усилиями, вполне возможно, что многое не охвачено. Но вообще популярность Перла среди новичков очевидно падает, и пишут о нём действительно всё меньше.
Победит(л) ли open source?
Так себе вопрос :) Open source как модель разработки ПО занял важное место в ряду других моделей. Станет ли весь софт открытым? Нет, безусловно не станет до тех пор, пока человечество не перейдёт к фазе всеобщего обязательного благосостояния.
Где сейчас работаешь? Сколько времени проводишь за написанием Perl-кода?
Я работаю в Яндексе техническим менеджером инфраструктуры Яндекс.Почты. В продакшене Яндекса ровно 0 строк моего кода. Гордиться тут нечем, но вот такой факт.
Стоит ли советовать молодым программистам учить сейчас Perl?
Да, стоит, но в ряду других необязательных языков. Люди разные, и мы точно по себе, по нашей тусовке знаем, что встречаются люди с головой, повёрнутой таким особенным образом, что им очень нравится Перл. Будет плохо, если молодой программист с именно такой головой не попробует этот язык, а будет мучаться с Питоном, Явой или C++.
Вопросы от читателей
Что лучше: быть программистом или менеджером?
Менеджером быть полезнее, а программистом легче. Что из этого лучше? Убеждён, что каждому следует попробовать обе ипостаси и принять решение на основе собственного опыта. Есть примеры отличных программистов-интравертов, которые внезапно обнаружили в себе талант управления людьми и стали гораздо счастливее. Обратных примеров не знаю.
Похож ли турецкий на Perl?
О, предвкушал такой вопрос. Турецкий язык — моё хобби. Сложный, богатый язык, совершенно инопланетянский, очень далёкий от всех индоевропейских языков. Шутка ли, рядом с турецким английский, испанский, русский, персидский и хинди — братья одной семьи.
Синтаксис постфиксный, зависимые слова всегда перед главным. Поэтому в предложении сказуемое всегда в самом конце, перед точкой. Благодаря такому синтаксису язык скорее похож на Лисп (префиксные и постфиксные языки друг к другу гораздо ближе, чем к инфиксным).
В турецком огромная, ветвистая система причастий/деепричастий и разных других глагольных форм, многим из которых нет аналогов в русском. Причастия используются там, где в русском и английском принято вводить вспомогательные предложения. Фраза типа: «человек, который стоял под деревом, когда я пробегал мимо, так как спешил на работу» на турецком будет состоять из нанизанных друг на друга отглагольных имён (что-то типа: «на работу моей спешки из-за, моего мимо пробегания во время, под деревом стоящий человек»). А это очень похоже на анонимную функцию, которая передаётся параметром в другую анонимную функцию, а результат, тоже являющийся анонимной функцией, вызывается ещё раз.
Сближает с Перлом обилие синонимов. Наверное основной источник богатства турецкого языка — зоопарк разных слов, обозначающих примерно одно и то же. Этому есть интересные исторические причины, например, Османская империя в бытность халифатом впитала два огромных словаря мусульманского мира — персидский и арабский. Позже, налаживая контакты с Европой, турки подружились с французами, и словарь западной цивилизации восприняли на французском. И наконец уже националисты Турецкой республики, начиная с Ататюрка, в борьбе за чистоту языка многим заимствованным словам изобрели и изобретают аналоги на основе древнетюркских корней. Ну вот как в России аэроплан называют самолётом, так и в Турции компьютер называют «знаниесчётчиком».
В результате, для турецкого очень верно TIMTOWTDI — можно выбрать набор подходящих синонимов для любого слова и получить либо очень официальный стиль, либо совсем разговорный, либо вычурно академический, либо произвольную дикую комбинацию. Красота.
MovableType еще можно пользоваться?
Можно, но в этом есть смысл только если уже имеется старый блог, а конвертацию базы делать неохота. Для новых сайтов MT я бы не рекомендовал. Там очередная итерация закрывания лицензий сейчас происходит, а собрать небольшую блогосистему из кирпичей с CPAN-а сейчас проще простого. Было бы кстати интересно сделать с нуля отображение блога напрямую из базы в формате MT.
Больше нравится вести свои открытые проекты или контрибьютить?
Второе. Руководство и управление, слежение и контроль — это тяжёлые занятия, я их могу делать, и даже хорошо, но только за зарплату или ради очень светлой цели. Помочь, подтолкнуть что-то внешнее, но открытое и полезное в роли программиста или аналитика мне проще.
Вопросы из Фейсбука
Кроме Perl, какой современный язык (или технология) наиболее достоин применения в онлайн-проектах?
Мне не нравится выбор глагола «достоин». Сейчас программы для интернета лучше писать на JavaScript, если уж идёт речь о рекомендациях. Стратегически такой выбор обеспечивает хороший приток кадров, приемлемую производительность (и труда, и вычислений), гарантию поддержки. Однако, если у вас есть талантливый разработчик на другом языке или вам надо что-то необычное, то выбирайте с ним другие технологии. То есть про JavaScript — это слабая рекомендация, легко перебиваемая сильными критериями. Начинать сейчас большой проект на будущее на Перле в отсутствие хотя бы заготовки команды — это приключение. Но нет ничего плохого в том, чтобы хотеть приключений.
А что из мира Perl за последние пару лет больше всего удивило/порадовало?
Порадовало — недавнее объявление Ларри Уолла о выпуске Перл 6 к грядущему Рождеству. Удивляло и удивляет — популярность Dancer; объявление о том, что бешеные японцы-организаторы YAPC::Asia перестают её делать; как некрасиво сломали smartmatch и given в 5.18.
← Обзор CPAN за август 2015 г. | Содержание