Просмотров: 11158

Русские в PHP Core Team: “Язык растет подобно кораллу”


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

Итак, сегодня на мои вопросы отвечают ведущие разработчики из PHP Core Team — Андрей Змиевский (Andrei Zmievski), Стас Малышев (Stas Malyshev), Илья Альшанетский (Ilia Alshanetsky).

PHP core team group лидеры русские разработчики пхп веб программирование суксь пэхэпешники безопасность взлом хак интервью

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

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

Если же говорить об истории моего прихода в программирование, то я начал ещё в школе, с калькуляторов Б3-34 и с программ, опубликованных в журнале «Техника — Молодёжи». Хотя поначалу это нельзя было назвать программированием — я в основном просто вносил программы, напечатанные в журнале, в память машины и смотрел, что получается. Но потом мне захотелось самому научиться заставлять эту сложную (по тем временам) машину делать то, что я хочу, и я стал разбираться — самостоятельно и с помощью старших — как же это всё работает. Участвовал в кружках, просиживал часами в библиотеке за чтением иностранных журналов, писал программы для своего удовольствия, а потом — и за деньги. Оказалось, что заставлять компьютеры приносить пользу мне нравится, и к моей большой удаче, такое умение пользуется неплохим спросом сегодня на рынке труда.

Перечислить всё, что на меня повлияло на этом пути, будет трудно, но самый большой эффект на меня, наверное, оказали книги, в частности работы Эдсгера Дейкстры, Фредерика Брукса («Мифический человеко-месяц») и Алана Купера (The Inmates Are Running the Asylum — в русском переводе «Психбольница в руках пациентов»).

АЗ: Уже 5 лет я живу в Сан-Франциско и считаю, что это самый красивый город в Америке. Работаю в компании AppDynamics. Хоть это относительно и молодой стартап, у нас уже где-то 110-120 сотрудников. Самые разные фирмы по всему миру используют наш продукт для мониторинга своих бизнес-систем и для быстрого нахождения проблем. Есть у нас и крупные клиенты, например, такие как Netflix, Priceline и другие.

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

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

Очнулся только тогда, когда этот центр уже закрывался, в 10 часов вечера. К тому времени родители уже обзвонили всех моих друзей, учителей, и т.д. в поисках меня, но к счастью — наткнулись на меня возвращающегося с центра. Мне за это тогда сильно попало, но, оглядываясь назад, я понимаю: сколько себя помню, я всегда писал программы и жил в этом отчасти виртуальном мире, поэтому моя теперешняя профессия — это просто продолжение увлекательного путешествия начатого ещё в детстве.

ИА: Я живу и работаю в Торонто, Канада.

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

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

PHP Илья Альшанетский @iliaa Илья Альшанетский Альшанецкий Ilia Iliya Alshanetsky PHP core team group лидеры русские разработчики пхп веб программирование суксь пэхэпешники безопасность взлом хак интервью guru master fudforum
Илья Альшанетский (Ilia Alshanetsky)

Я настолько активно стал пользоваться PHP 3, что постепенно стали появляться собственные наработки, расширявшие его возможности, которые стал регулярно предлагать в IRC-канале его создателю Расмусу. Патчей и исправлений от меня было так много, что ему это быстро надоело, и он дал мне прямой CVS-доступ к репозиторию проекта. С тех пор было очень много чего написано и сделано, мне даже довелось быть релиз-менеджером (PHP release master) для его популярных версий 4.3, 5.1 и 5.2.

Кстати, параллельно с этой активностью было много консультационной работы для внешних коммерческих заказчиков, для которых в частном порядке решались подчас очень неординарные проблемы с производительностью, масштабируемостью и безопасностью их собственных проектов созданных на PHP. В одной из таких консультаций я так глубоко погрузился в их проект, что в итоге стал партнером этой компании (Centah Inc.) и получил в ней должность CIO, где и работаю в настоящий момент.

Как вы попали в PHP Core Team, какой путь для этого прошли?

АЗ: Позвольте, отвечу на своём примере, но сначала немного истории. Я начал работать с PHP где-то в 1998 году, тогда это был PHP 3, одна из ранних версий. Мы переписывали большой проект с другого языка на PHP, и мне нужно было найти поддержку теперь уже почти забытого формата WDDX. Я не нашёл такой библиотеки, но мне очень понравилось что у PHP была отличная документация и API, поэтому я решил написать своё расширение. Когда закончил, сразу отправил его в почтовую рассылку PHP. А они неожиданно для меня решили добавить его к следующему релизу языка.

Впоследствии мне дали доступ к CVS, и я стал чинить баги, писать больше разных функций и т.д. К концу 1999 г. я был одним из самых активных членов группы, и тогда Расмус Лердорф предложил организовать первый съезд разработчиков PHP в Израиле, чтобы обсудить будущее языка, и включил меня в эту рассылку. Так что никакого голосования не было, просто так получилось, что я сразу попал в PHP Core Team.

PHP Rasmus Lerdorf Расмус Лердорф PHP core team group лидеры русские разработчики пхп веб программирование суксь пэхэпешники безопасность взлом хак интервью guru master
Расмус Лердорф (Rasmus Lerdorf), создатель PHP

Такое доверие и открытость мотивировали меня работать больше и больше над кодом PHP. После WDDX я работал над session-модулем, потом написал кучу функций для работы с массивами, затем решил, что PHP надо иметь регулярные выражения подобные Perl, поэтому создал PCRE модуль. К тому времени PHP 4 уже давно вышел, но я меня очень раздражали некоторые проблемы с тем как работали (или вернее не работали) объекты и классы. По этому поводу у меня были долгие переписки с Andi и Zeev, которые создали Zend Engine, и из этого вылилась принципиально новая поддержка Object-Oriented Programming в тогда новом PHP 5.

После этого я работал в основном над кодом для extension API и самим Zend Engine, также сделал новый tokenizer-модуль. С 2003 года я работал в Yahoo! вместе с Расмусом, и там я запустил проект по поддерже Unicode в PHP, но это — большая история для другого раза...

Что, по вашему мнению, есть такого в PHP, что сделало его столь популярным?

АЗ: Так получилось, что в данный момент я пишу проект на C++ и Python, так что отвечу исходя из этого сравнительного опыта, смотря как бы с этой «другой колокольни».

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

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

СM: Один из главных уроков, мне кажется, состоит в том, что безопасность кода — это не качество, которое можно привить внешне, независимо от остального кода. Забота о безопасности должна быть повседневной частью работы, с самой первой минуты, начиная с дизайна и до выпуска готового продукта. В PHP было предпринято несколько попыток добавить средства безопасности «извне» — но опыт показал, что эти попытки, без постоянной бдительности со стороны программиста, обречены на провал. Платформа может только помочь ему следить за безопасностью кода, но не может гарантировать эту безопасность без усилий с его стороны.

Поэтому главный совет будет следующим — никогда не доверять никаким внешним данным, или данным, контроль над которыми возможен извне. 99% проблем в безопасности происходят оттого, что допущения, сделанные о входных данных, оказываются неверными, и когда впоследствии происходит атака, то код ведёт себя не так, как это задумал сам разработчик. Поэтому развивайте у себя привычку спрашивать себя всегда — «что, если этот параметр изменить неожиданным образом? Что, если этот аргумент применить не так, как предполагалось?» И тестируйте свой код соответственно.

Следующая моя рекомендация — вместо проверки «нет ли в данных чего-то недозволенного», превентивно преобразуйте данные так, чтобы они были гарантировано такими, как надо. Так будет гораздо проще избежать ошибок. Также не полагайтесь на то, что заботу о безопасности возьмут на себя другие части кода — так, например, если вы делаете динамический запрос к базе данных, всегда самостоятельно убеждайтесь, что параметры и запрос генерируются и фильтруются таким образом, что sql injection невозможна — даже если вы уверены, что данные где-то ещё фильтруются (например, на уровне фреймворка). Тогда, если внешний код изменят таким образом, что в вашу процедуру вдруг попадут нефильтрованые данные, уязвимости всё равно не возникнет.

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

ИА: Если речь заходит о безопасности, три основных вызова для веб-приложений уже с десяток лет остаются по-прежнему актуальными и опасными. Несмотря на свою известность, стоит ещё раз напомнить их, потому что реальная жизнь учит, что этот материал не усвоен как следует широкими массами разработчиков. Это cross-site scripting (XSS), cross-site request forgery (CSRF) и SQL injection (SQLi) — они виновны в абсолютном большинстве успешных атак против PHP-приложений и не только.

Что касается большей специфики PHP, я бы также выделил весьма распространенные разновидности внедрения кода (code injection), например: из-за неправильно используемых операторов include/require , вызовов eval() и использование ’e ’ флага для регулярных выражений.

Также распространены уязвимости на базе недостаточной проверки файлов при их загрузке в доступные извне папки, что в сочетании с неправильными настройками веб-сервера часто приводит к печальным последствиям. И последнее, на что я бы хотел обратить самое серьёзное внимание начинающих разработчиков — это безопасность работы с сессиями, которые часто выступают в качестве паспорта пользователя при организации доступа в каждом конкретном приложении. Очень важна аккуратная работа с сессиями: по-настоящему случайная генерация id для сессий, все необходимые проверки и ограничения доступа и так далее.

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

АЗ: Ранее нами уже было много сказано и написано о том, почему в PHP появились те или иные, якобы неудачные функции, почему он отстаёт от других языков в определённом аспекте, и так далее.

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

  1. У него никогда не было и не будет «главного дизайнера» или так называемого благожелательного диктатора, как например у Python с Guido van Rossum или у Perl с Larry Wall;
  2. PHP очень сильно ориентирован на поддержку обратной совместимости.

В силу важности и злободневности этой темы, рассмотрим эти пункты немного поподробнее.

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

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

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

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

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

По второму пункту, одна из главных философий PHP — не ломать код который у пользователей уже давно и успешно работает, а если ломать — то по очень, очень веским причинам. Если посмотреть на количество PHP-кода в мире, половина его до сих пор состоит из PHP 4 или 3. Это реально и широко используемый код, который долгие годы используется во многих сайтах без особых проблем, особенно это распространено у небольших клиентов типичных для провайдеров виртуального хостинга.

PHP Андрей Змиевский Andrei Zmievski @a PHP core team group лидеры русские разработчики пхп веб программирование суксь пэхэпешники безопасность взлом хак интервью guru master
Андрей Змиевский (Andrei Zmievski)

Да, многие горят желанием как-то починить или «подчистить» язык, чтобы он был более изящным, последовательным, без заметных бородавок или уродств. Как, например, эта вечная проблема порядка параметров в таких функциях как strpos() и in_array() . Починить это очень легко, но это создаст жесткий разрыв в обратной совместимости, а значит, что все у кого есть код написанный по старому образцу — будут замкнуты на старые версии и не смогут выполнить апгрейд без больших проблем.

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

В основном, люди хотят улучшить язык по своим определённым эгоистическим или альтруистическим причинам, но они забывают о том, какие волны раздражения поднимутся, если мы начнём ломать такие важные вещи налево и направо. Так что PHP растёт подобно кораллу: разные колонии сосуществуют друг с другом, наращивая новые части на старые в каких-то направлениях, при этом происходят некоторые мутации, где старые части отмирают и отпадают время от времени, и никогда нельзя предсказать, на что этот коралл будет похож через несколько лет.

Закрывая эту тему, многие озвученные обвинения в адрес PHP являются следствием лишь одного: здесь нет чёткого плана развития.

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

Можете привести какие-нибудь запоминающиеся примеры ваших проектов на PHP, которые иллюстрируют особенности разработки на этом языке?

ИА: У меня было множество интересных для меня задач, над которыми мне довелось поработать на PHP. Для примера приведу лишь два, по-своему показательных проекта.

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

И моя задача формулировалась очень просто — я должен был создать максимально быстрое приложение, которое анализировало ситуацию и за доли секунд первым выставляло бы заявку на покупку с требуемой ценой. Я использовал для написания такого приложения именно PHP, главным образом в силу простоты реализации на нём работы с XML и прямой работы с сокетами.

Интересно, что в этом «состязании» участвовало несколько роботов от разных компаний, в том числе написанных на новомодных ныне языках, с удовлетворением могу отметить, что мой работал всё-таки быстрее. Также уместно показать на этом примере, как иногда происходит развитие самого PHP: для реализации этого коммерческого заказа мне не хватало нескольких внутренних функций в языке, таких как time_nanosleep() и time_sleep_until() , поэтому я написал их самостоятельно именно для этой задачи, а впоследствии они были добавлены в PHP Project для всеобщего пользования.

Другой интересный опыт заключался в переписывании уже работающего промышленного интернет-приложения с Java (JSP) на PHP. Для меня это было очень серьёзный вызов, гораздо более интересный, нежели создание аналогичного приложения с нуля. Задача была сохранить все существующие API, интерфейсы и функциональность, при этом добиться большей производительности и масштабируемости по сравнению с Java. Следует также упомянуть, что у этого сайта была приличная база пользователей и серьёзная нагрузка. Мне доставило особое удовольствие, как маленькая команда из PHP-разработчиков во главе со мной, смогла быстро и качественно склонировать этот достаточно сложный сайт, и я считаю, что главная причина этого успеха — это простота языка сама по себе.

Оглядываясь назад на изначально сложные для понимания исходники и концепции исходного Java-приложения, этот опыт заставил меня понять главное: PHP не зажат жестко в рамках какой-то одной парадигмы программирования, это скорее удобный инструмент для быстрого прикладного программирования.

Более общий и заключительный вопрос: каково будущее Web, куда движется эта среда, какие технологии будут наиболее востребованы завтра? Может для вас, как опытных веб-разработчиков более очевидны эти тренды?

СM: Я не чувствую себя настолько удачливым или информированным, чтобы делать далеко идущие прогнозы, но несколько направлений, кажущихся мне интересными, могу указать. В первую очередь, это HTML5 и его новые возможности — canvas, сервисы хранения информации на стороне клиента, микроданные, редактирование на стороне клиента, геолокация — всё это существенно обогатит возможности будущих веб-приложений.

PHP Стас Малышев @smalyshev Stas Malyshev stanislav Станислав PHP core team group лидеры русские разработчики пхп веб программирование суксь пэхэпешники безопасность взлом хак интервью guru master
Стас Малышев (Stas Malyshev)

С другой стороны, мне кажется, это также поддержит уже существующую тенденцию выносить презентацию данных на клиентскую сторону, в Javascript, и оставлять на стороне вебсервера лишь логику. Т.е. программисты на серверной стороне будут уделять меньше внимания HTML и прочим презентационным технологиям и больше — технологиям передачи данных — таким, как сервисы в архитектуре REST.

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

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

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

Действующие лица:


Андрей Змиевский Andrei Zmievski @a PHP core team group лидеры русские разработчики пхп веб программирование суксь пэхэпешники безопасность взлом хак интервью

Андрей Змиевский, один из кураторов PHP Project, разработчик Zend Engine, создатель проектов PHP-GTK и Smarty, соавтор популярного учебника PHP Developer’s Cookbook, автор реализаций Unicode и OOP в PHP. В свободное время увлекается спортом, пивоварением на дому, готовкой. Очень любит много читать и путешествовать.

Стас Малышев @smalyshev Stas Malyshev stanislav Станислав PHP core team group лидеры русские разработчики пхп веб программирование суксь пэхэпешники безопасность взлом хак интервью

Стас Малышев, участник PHP Project с 2000 года, релиз-менеджер версии PHP 5.4, участник многих OpenSource-проектов. В свободное время увлекается интеллектуальными играми (спортивная версия «Что? Где? Когда?», «Брейн-ринг») и айкидо.

Илья Альшанетский @iliaa Илья Альшанетский Альшанецкий PHP core team group лидеры русские разработчики пхп веб программирование суксь пэхэпешники безопасность взлом хак интервью

Илья Альшанетский, эксперт в области безопасности и один из старейших разработчиков PHP, глава PHP Quality Assurance Team, релиз-менеджер версий PHP 4.3, 5.1, 5.2, создатель форумного движка FUDforum, активный участник множества OpenSource-проектов. Популярный лектор и автор многочисленных статей на тему безопасности веб-программирования.

~

p.s.: Обещаю, что в новом 2013 году выложу ещё множество своих VIP-интервью с ведущими мировыми разработчиками, — пусть какая-то конкретика пока будет секретом.

Игорь Савчук ©  Системный Администратор, 2012
twitter.com facebook.com vkontakte.ru odnoklassniki.ru mail.ru ya.ru pikabu.ru blogger.com liveinternet.ru livejournal.ru google.com bobrdobr.ru yandex.ru del.icio.us

Подписка на обновления блога → через RSS, на e-mail, через Twitter

Оставьте комментарий!

Не регистрировать/аноним

Используйте нормальные имена. Ваш комментарий будет опубликован после проверки.

Зарегистрировать/комментатор

Для регистрации укажите свой действующий email и пароль. Связка email-пароль позволяет вам комментировать и редактировать данные в вашем персональном аккаунте, такие как адрес сайта, ник и т.п. (Письмо с активацией придет в ящик, указанный при регистрации)

(обязательно)


⇑ Наверх
⇓ Вниз