Хуэй Синьчэнь — самый влиятельный технический эксперт по PHP в Китае, ключевой член команды разработчиков PHP, разработчик PECL и внешний консультант Zend Technologies. Ранее он работал в Yahoo и Baidu, а сейчас является главным архитектором департамента платформы и данных и главным PHP-консультантом в Sina Weibo. Хуэй Синьчэнь — ключевой разработчик PHP NG и один из основных разработчиков PHP 5.4 и 5.5. Как разработчик PECL он внёс вклад в несколько выдающихся проектов с открытым исходным кодом, включая Yaf, Yar, Yac и Taint, а также является мейнтейнером таких проектов, как APC, OPcache и Msgpack.

От новичка, ищущего в интернете руководства по PHP, до ключевого члена команды разработчиков PHP — Хуэй Синьчэнь ощущает весь этот процесс как «прокачку уровня путём победы над монстрами». PHP, как и Java, тоже называют языком для «синих воротничков», но, по его мнению, именно он является той колыбелью, которая способна воспитать больше программистов, а в эпоху, когда программировать может каждый, он непременно даст больше выдающихся людей, способных двигать технологический прогресс.

Вопрос: Как вы заинтересовались программированием?

Моей первой «программой», вероятно, была работа на обучающей консоли Subor. Позже я изучал компьютерные науки в университете, а в магистратуре отвечал за информатизацию кампуса. Я много занимался веб-разработкой, активно или вынужденно, включая сайты для многих второстепенных подразделений школы и поддержку университетского BBS. Если подумать, кажется, не было какого-то одного события или момента, когда я сказал бы, что полюбил программирование. Просто вхождение в эту отрасль казалось естественным, и это не вызывало у меня неприязни, поэтому я продолжал этим заниматься.

Вопрос: Как вы полюбили PHP? И как вы стали ключевым членом команды разработчиков PHP?

В то время, в аспирантуре, мне нужно было сделать сайт. Я понятия не имел, как это делается, поэтому стал искать в интернете и случайно наткнулся на учебник по PHP о том, как создать простой сайт. Я попробовал следовать ему и обнаружил, что установка, развёртывание (тогда не было централизованных инструментов развёртывания, хотя также было много руководств по развёртыванию LAMP), программирование и тестирование были очень удобными. Синтаксис также был очень похож на C, и даже многие имена API совпадали с именами в API libc. Так началась моя неразрывная связь с PHP.

Это было, вероятно, в 2011 году. Тогда я разработал Ap (предшествующий проект Yaf) для Baidu. Внутри Baidu его использовали довольно хорошо, поэтому я подумал о том, чтобы передать его в PECL. После некоторых изменений я переименовал его в Yaf (Yet Another Framework — название немного самоуничижительное, потому что уже существует много PHP-фреймворков). Я отправил письмо в список рассылки PHP. Поскольку мой английский был довольно плохим, процесс оказался довольно извилистым. К счастью, Pierre Joye мне очень помог, что позволило Yaf попасть в PECL.

Кроме того, до отправки Yaf я, вообще-то, всё время изучал исходный код PHP, поэтому отправил довольно много отчётов об ошибках и исправлений. Например, помню, однажды в полдень Rasmus (отец PHP) сказал в IRC, что нашёл ошибку, и примерно через пять минут я дал исправление.

Постепенно познакомившись с некоторыми людьми и заслужив доверие всех, я подал заявку. Затем я получил доступ с правом коммита к исходному коду ядра PHP, участвовал в непосредственной разработке PHP и исправлении ошибок и стал членом команды разработчиков.

Что касается статуса ключевого участника, он накапливался постепенно; на самом деле это был процесс взаимного доверия. Если твою работу признают другие, они будут уважать твоё мнение. Я постепенно познакомился с Дмитрием Стоговым, получил доступ к коммитам в основную часть Zend, отправил много исправлений ошибок в ядре и новых функций, а позже стал внешним консультантом в Zend, постепенно становясь Core Developer.

Звучит немного как прокачка уровня в битвах с монстрами, не так ли?

Вопрос: Что послужило поводом для разработки Yaf? Как Baidu поддерживал разработку Yaf в то время?

До Yaf всегда велись классические споры о том, использовать ли фреймворки: «Использование фреймворка снижает производительность, а отказ от фреймворка снижает эффективность разработки».

В то время внутри Baidu было много фреймворков, включая open-source, такие как Yii и ZF, а также некоторые, написанные отдельными командами. Одна из проблем заключалась в том, что библиотеки классов и часть вспомогательной инфраструктуры не могли взаимодействовать друг с другом.

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

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

Вопрос: Почему вы выбрали написание Yaf на C?

PHP написан на C, поэтому его расширения также пишутся на C. Таким образом, я выбрал C для написания Yaf.

Вопрос: Почему вы ушли из Baidu и пришли в Sina Weibo?

На самом деле причин было много. Например, в Baidu я уже достиг T7, и я меньше занимался бизнес-вопросами. Я чувствовал, что у меня не так много дел, и казалось, что я несколько трачу время впустую.

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

После прихода в Weibo я действительно столкнулся со многими вызовами, с которыми никогда раньше не сталкивался, и также почувствовал, что моим знаниям нашлось более широкое поле для применения.

Вопрос: за какую конкретно работу вы сейчас отвечаете в Sina Weibo?

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

За последние два года архитектура LAMP в Weibo стала более стабильной, а общая производительность выросла в несколько раз. У нас также есть собственное общее высокопроизводительное решение на базе LAMP. Поэтому объем работ по оптимизации LAMP несколько сократился. Сейчас наши основные усилия сосредоточены на исследованиях и разработке инфраструктуры, например на слое кэширующего промежуточного ПО, сервисах транскодирования, коммуникационных платформах и так далее.

Вопрос: принимал ли PHP 7 (PHPNG) потребности и болевые точки Sina Weibo при использовании PHP в качестве важной обратной связи?

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

Я очень одержим улучшениями производительности. Именно поэтому впоследствии я больше сотрудничал с Дмитрием Стоуговым, потому что он также особенно заботится о производительности.

Основная причина, по которой я забочусь о производительности, заключается в том, что я очень хорошо понимаю ценность, которую каждый 1% улучшения производительности может принести такой платформе, как Weibo — крупнейшей LNMP-платформе в Китае. Хотя общая производительность Weibo значительно улучшилась по сравнению с двумя годами ранее, я понимаю, что без ущерба для эффективности разработки дальнейшие улучшения могут зависеть только от улучшения производительности языка и среды. Эта часть также является требованием Weibo к PHP.

По сравнению с PHP 5.6, PHP 7 обеспечивает более чем 100% реального прироста производительности (QPS) на WordPress. Я верю, что в следующем году, после выпуска PHP 7, все сервисы на общей LAMP-платформе Weibo также смогут достичь 100% прироста производительности.

Вопрос: Каким был процесс вашего участия в разработке PHP 7 (PHPNG)? Как вы взаимодействовали с другими членами команды разработчиков?

PHPNG в то время был секретным проектом. Первоначально в нём участвовали только Дмитрий и я. Помню, это было ранней весной этого года. В то время проект JIT, над которым мы работали на основе PHP 5, был отложен, потому что результаты были неудовлетворительными, и все были довольно подавлены.

Дмитрий сказал, что у него есть идея: переработать ZVAL и уменьшить его размер, чтобы сократить потребление памяти. Затем мы вдвоём это обсудили. Поскольку на самом деле у нас каждый день появляются самые разные идеи, тогда мы просто подумали: «Хм, эта идея может сработать». Но мы не были очень уверены.

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

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

Позже, когда проект почти подошёл к завершению, мы обнаружили: «Эй, эта идея хороша, она работает». Затем мы сделали её публичной. После этого она стала обычной моделью сотрудничества: если у вас есть идея, отправьте RFC, отправьте патч, проголосуйте, все проверяют, а затем выполняется слияние.

Вопрос: Какие функции были добавлены или удалены в PHP 7 на данный момент? Как производительность будет дополнительно улучшена до релиза?

Их много. Помимо ветки PHPNG, в основном обеспечивающей улучшения производительности, у нас также есть поддержка AST (Abstract Syntax Tree), унифицированный синтаксис переменных, поддержка строк с 64-битной длиной, немного нового синтаксического сахара, а совсем недавно — Native TLS, среди прочего.

PHP 7 будет официально выпущен в октябре 2015 года. До этого у нас ещё есть несколько идей, которые можно попробовать, например, использовать zend_array для прямой замены Hashtable; например, сократить промахи iTLB, задав повторное секционирование и упорядочивание функций; например, внедрить некоторые оптимизационные техники JIT (вывод типов) в PHP в сочетании с некоторыми обработчиками опкодов для конкретных типов, чтобы ускорить работу; и, например, дополнительно улучшить локальность кода и данных, чтобы уменьшить промахи кэша, и так далее.

Конечно, у нас также есть проект JIT, который делается параллельно. Просто я беспокоюсь, успеет ли этот проект быть готовым к моменту выпуска PHP 7.

Вопрос: Пропустит ли новая версия PHP PHP 6 и перейдёт сразу к PHP 7? Почему?

Основная причина в том, что когда-то у PHP была версия для разработки под названием PHP 6, но позже эта версия потерпела неудачу и так и не была выпущена. Поэтому эта новая версия должна быть PHP 7.

Вопрос: Какова связь между Hack, языком, выпущенным Facebook, и PHP? Цель Hack — заменить PHP? Каковы соответствующие преимущества этих двух языков по сравнению друг с другом?

Особой связи нет; Hack — это не PHP. Что касается замены PHP, я полагаю, у них (Facebook) может быть такая идея, но это зависит от того, примет ли это сообщество или нет.

Я не особенно знаком с Hack, поэтому мне трудно что-то конкретно комментировать.

В: Некоторые считают, что из-за того, что PHP легко изучать и у него низкий порог входа, он привлёк людей, которые на самом деле не подходят для программирования. Что вы думаете об этом мнении?

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

Но благодаря тому, что у PHP низкий порог входа, он позволяет людям быстро увидеть результаты своего «программирования», что создаёт стимул положительной обратной связи для новичков и делает заинтересованных ещё более заинтересованными. И чем больше людей программируют, тем выше вероятность появления экспертов и людей, способствующих прогрессу технологий в целом.

Более того, языки программирования в будущем определённо будут двигаться в сторону удобства использования, ещё больше снижая порог входа в программирование. Возможно, однажды все смогут программировать, кто знает!

В: Как должна выглядеть структура знаний квалифицированного PHP-инженера?

Я помню старую поговорку: «PHP-инженеры — мастера на все руки». На самом деле эта поговорка относится не только к PHP-инженерам; она должна относиться ко всем инженерам.

Структура знаний должна быть очень широкой. Веб-разработка затрагивает довольно много технических областей. Помимо HTML, CSS, JS и SQL, вам также нужно знать некоторые распространённые методы настройки, обслуживания и устранения неполадок Nginx, Linux и MySQL. Вы должны немного разбираться во всём этом.

В: Помимо технических способностей, на что ещё вы обращаете внимание во время собеседований?

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

Вопрос: Чэнь Болэ, бывший вебмастер phpe.net, теперь продаёт мужские носки. Какие у вас планы на будущее? Вы всегда будете кодером?

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

Источник: http://www.ituring.com.cn/article/142454