Выпуск 29. Июль 2015
← Обзор CPAN за июнь 2015 г. | СодержаниеИнтервью с Дэвидом Голденом
Дэвид Голден (David Golden) — автор многих модулей на CPAN, текущий разработчик официального драйвера MongoDB
Когда и как научился программировать?
Кажется, мне было девять лет, когда в нашем классе появился TRS-80, и я начал пробовать BASIC. Вскоре у меня дома появился собственный TI-99/4A, на котором я продолжил программировать на BASIC. Я уверен, что в том время мне это казалось чем-то серьезным, но я даже не представляю, чем я занимался.
В старших классах я программировал на Pascal и начал на C. В университете я много работал с C, а затем на последнем курсе начал пробовать C++ и Java.
Какой редактор используешь?
В университете я познакомился с emacs, потому что все мое окружение им пользовалось, но он никогда не был чем-то большим; я ничего не кастомизировал и не программировал.
В конце девяностых я стал играться с Linux, для настройки мне нужен был vi. Я устал от того, что мне приходилось каждый раз вспоминать, как им пользоваться, и я решил использовать vim как основной редактор на Linux. В конце концов я пересилил себя и установил gvim на Windows на моем ноутбуке.
Vim мне особенно подошел, потому как я иногда испытываю боли в руках, а в vim их можно почти не двигать; я полностью отключил стрелки на клавиатуре, и использую CTRL-[
практически с той же частотой, что и esc
.
Когда и как познакомился с Perl?
Я познакомился с Perl в конце девяностых, когда администрировал свой собственный микропровайдер для друзей и семьи, это был Linux, подключенный к одной из первых DSL-линий в США. Я пытался расшифровать программу “logwatch”, и с тех пор меня не оторвать.
В ранние годы я проводил много времени на Perlmonks. Читая, а затем и отвечая на вопросы, я преодолел фазу новичка.
Использование Perl на Windows вовлекло меня в CPAN Testers (хотелось упростить отправку ответов о сломанных модулях на Windows). С тех пор я все больше погружался в Perl-разработку и затем в ядро.
С какими другими языками интересно работать?
Большинство моей работы я пишу на Perl, C и shell. Я испытываю любовь и ненависть к C. Часто программировать на нем невыносимо, но возможности, которые он дает по представлению данных и их обработке, вновь возвращают мою любовь.
Сейчас я увлечен Go, хотя в основном у меня была возможность только поиграться. Он подходят для моего мозга практически так же как и Perl, а скорость (по сравнению с Perl), модель распараллеливания и статическая компиляция решают некоторые слабости Perl, которые меня раздражают.
Что, по-твоему, является самым большим преимуществом Perl?
Мне кажется, что доминантным преимуществом Perl является его возможность из «спичек и желудей» собрать программу. Он отлично масштабируется от однострочников, небольших скриптов до небольших систем, всегда можно решить с тем же опытом задачу большую и маленькую.
В некоторых случаях (но не во всем) я думаю, что философия TIMTOWDI (есть больше одного способа сделать это — прим. перев.) сильно недооценена и ведет к постоянным эволюциям идей.
Например, однажды я объяснял людям не из Perl-сообщества, что ООП в Perl реализуется с помощью фреймворков, как в других языка занимаются веб-программированием. Нужен полноценный фреймворк? Берите Moose. Нужно что-нибудь полегче? Берите Moo. Есть какие-то специальные требования? Отлично, есть десятки ООП-фреймворков на выбор.
Десять лет назад никто не знал про типажи и роли. Теперь это доминантная особенность ООП в Perl. Этого нет в языках, где «все включено». Это появляется, когда люди пытаются изобретать велосипеды, когда язык их не предоставляет.
Также должен добавить, что больше не считаю CPAN сильным преимуществом Perl, во всяком случае в относительном смысле. Он до сих пор очень полезен, но у многих языков такое же количество библиотек. Стартапы предоставляют API вначале для «популярных» языков, а затем уже для Perl (если вообще такое случается), поэтому Perl обычно отстает в библиотеках для неожиданно ставших популярными сервисов.
Что, по-твоему, является самой важной особеностью языков будущего?
Это может звучать заезжено, но, мне кажется, что «мастшабируемость» — самая важная вещь, но в разных направлениях.
Мне думается, что люди часто слишком фокусируются на масштабируемости в пределах одной системы, в частности на распараллеливании на многоядерных и многопроцессорных системах.
Но думаю, что масштабируемость в пределах нескольких нод будет также важной. Под «облаком» уже многие понимают фермы, и популярность контейнеров будет только продвигать этот тренд быстрее.
Поэтому мне кажется, что у языков с разделяемой памятью выигрывают языки с хорошо спроектированной моделью передачи сообщений. Хотя они и теоретически одинаковы, на практике, как мне кажется, разработчикам гораздо легче работать с сообщениями между несколькими нодами.
Также выигрывают языки с фермо-ориентированной разработкой. Статическая сборка или простота развертывания будет ключевым преимуществом.
Другой интересной стороной мастшабирования являются люди. У некоторых языков есть репутация (оправданная или нет) удачного (или неудачного) применения для больших команд. Лучшие языки должны быть одинаково хороши как для одного разработчика, так и для большой команды.
Что думаешь о Perl 6?
Мое мнение не сильно изменилось с моего февральского поста:
Мне до сих пор не особо понятно, что является «киллер фичей». Если Perl 6 будет намного быстрее Perl 5 (в абсолютной производительности или в распараллеливании), то он будет достаточно знаком разработчикам Perl 5, которые смирятся со сложностью изучения языка в обмен на производительность.
Но я не вижу ничего такого, что было бы интересно другим сообществам или новичкам. Объем и сложность языка слишком удручают. Для контраста, Go — небольшой, крайне своевольный язык — стал широко популярен в определенных нишах. Он решает некоторые серьезные проблемы и привлекает как энтузиастов статических, так и динамических языков.
Мне кажется, что разработчики Perl 6 должны найти несколько ключевых особенностей языка, которые действительно имеют преимущество над другими. Не «хитрые фишки» — в продолжение возможности делать сложные вещи просто в обычной жизни.
Ты поддерживаешь так много модулей. Как это возможно?
Во-первых, я пишу много модулей! Я развил в себе привычку писать все как многоразовые, независимые библиотеки. Это заставило меня автоматизировать весь процесс разработки модуля.
Например, у меня есть одна шелл-функция, которая строит скелет Dist::Zilla и создает публичный и приватный репозитории. Это позволяет мне перейти от идеи к реализации за несколько секунд.
Во-вторых, я стараюсь автоматизировать все, что могу и для минимазации времени, которое я трачу на рутинную работу, и для предотвращения повторяемых ошибок. Использование Dist::Zilla для этого радикально изменило то, как я выкладываю код. Все, что мне требуется для выкатки модули, это убедиться, что файл Changes имеет актуальную версию. Все на автопилоте, включая версии модулей, тестирование перед релизом, генерацию Pod-документации, git-теги и прочее.
Также я использую утилиту git-hub от Инги (Ingy döt Net), которая помогает управлять комментариями и pull-запросами целиком из командной строки. Я могу выкачать pull-запрос, выполнить rebase, протестировать его, закрыть pull-запрос с комментарием и выкатить новую версию с помощью Dist::Zilla за несколько минут не выходя из терминала.
Кто написал первую версию HTTP::Tiny, почему был нужен этот модуль?
Еще в 2010 г. несколько людей на p5p обсуждали проблему, что Perl 5 не может запустить CPAN по HTTP без зависимости от таких командных утилит как curl или wget. Мы подумывали о добавлении HTTP::Lite в ядро, но у него было несколько зависимостей, и он выглядел не очень поддерживаемым.
В ответ на это Кристиан Хансен (Christian Hansen) написал первый черновой вариант HTTP::Tiny. Задачей было получить HTTP-клиент, который был бы достаточным для работы CPAN.pm по HTTP и способным скачать LWP.
После первого чернового варианта я начал помогать работой над API и рефакторингом внутренностей. Большинство кода все еще от Кристиана, даже если git blame выдает меня, но это из-за рефакторинга.
У нас было отличное сотрудничество. Мы стараемся обсуждать все важные изменения перед их реализацией, и мне кажется, что это сохранило хороший баланс между возможностями и минимализмом. Я был очень удивлен (приятно), что этот модуль для некоторых стал альтернативой LWP.
Как думаешь, стоит ли в ядро включить больше ::Tiny-модулей?
Не только потому что они ::Tiny. Оригинальной идеей ::Tiny-модулей было то, что они выполняют 90% работы, используя 10% размера/памяти некоторых популярных модулей и зависят только от ядра Perl. Они задумывались для простой установки, поэтому они не обязательно должны быть в ядре.
Почему важны QA-хакатоны?
Большинство проблем в мире сборки Perl и тестирования тяжело решаемы в небольшие свободные промежутки времени, которые выпадают разработчикам в их ежедневной жизни. Или им нужно время для сосредотачивания, или нужно собрать нескольких людей для обсуждения как что-либо сделать. QA-хакатоны дают возможность и время разработчикам встретиться и двигаться дальше.
Я много пишу о том, как и почему работают QA-хакатоны в своих ежегодных опусах.
(Если вы хотите поддержать QA-хакатон в следующем году, вы можете пожертвовать на хакатон 2015 г., и средства перейдут на следующий год.)
Как участник p5p, что ты думаешь о stableperl?
Скажу от своего имени, не от имени p5p, я несколько разочарован, что опасения, которые привели к его созданию, не могли быть решены стандартным способом.
Но несмотря на это, я считаю это проект отличным экспериментом. Как, например, и rperl, любой эксперимент вокруг Perl 5 говорит о том, что есть спрос в сообществе на что-то, чего не дает Perl 5. Если у форка будет продолжение, это серьезный сигнал о том, что нужно пользователям.
Где сейчас работаешь, сколько времени проводишь за написанием Perl-кода?
Я работаю в MongoDB, где занимаюсь разработкой MongoDB Perl-драйвера. Это значит, что практически 100% моего времени я пишу на Perl (или XS).
В течение последнего года я работаю над Perl-драйвером следующего поколения, который является практически полностью переписанным оригинальным драйвером с улучшенной согласованностью, совместимостью, портируемостью и надежностью. Если верить git blame, то я ответственнен за 90% всего кода!
Я планирую выпустить релиз-кандидата в течение нескольких недель, поэтому если вы используете MongoDB, обратите внимание.
Стоит ли молодым программистам сейчас советовать учить Perl?
Мне кажется, что мы должны советовать учиться программировать, а язык не так важен, как важен получаемый опыт.
Когда я учился программировать, зеленый текст на черном фоне был крутой штукой, поэтому терминал-ориентированное программирование было довольно привлекательным. Сегодня, однако, ожидания современных детей гораздо выше, и они будут хотеть опыта в графической среде в качестве первого языка.
Для более взрослых, у меня смешанные чувства насчет динамического языка в качесте обучения, так как он может скрывать некоторые важные фундаментальные вещи, которые нужно знать. Но, возможно, это мое предвзятое мнение, так как я начинал с Pascal и C.
До сих пор работаешь с Perl на Windows?
Когда я работал консультантом, у меня был рабочий Windows-ноутбук, и я его использовал как ежедневную Perl-платформу. Те мучения в конечном счете привели меня к CPAN Testers и помощи Адаму Кеннеди в создании Strawberry Perl.
Но как только у меня появилась возможность получить бесплатную виртуальную машину, я переключился на Linux в моей ежедневной работе с Perl. Большинство моих программ все еще учитывали сущестование Windows, но я перестал толкать камень на Windows-гору.
Теперь в работе с MongoDB я вынужден сохранять Windows-совместимость, поэтому мне приходится снова работать с Windows. Мне очень понравилась утилита berrybrew от Дэвида Фаррела, так как она облегчила тестирование на разных версиях Perl.
В какие игры играешь?
В основном сейчас я играю в настольные и карточные игры (оффлайн-игры). Недавно довелось попробовать Seven Wonders, и мне очень понравилось. Дома я в основном склоняюсь к играм, в которые играют мои дети. Часто это Ticket to Ride, также моим детям нравится Uno.
← Обзор CPAN за июнь 2015 г. | Содержание