Хватит говорить, что PHP мертв

NOTES 19.04.22 19.04.22 74
Бесплатные курсына главную сниппетов

Это не так. PHP не умер. Он жив, и до “конца жизни” ему еще очень далеко. На этом все. Как бы некоторые ни хотели, чтобы он исчез, этого не произойдет. По крайней мере, в обозримом будущем уж точно.


Эта статья пролежала в моей папке для неопубликованных достаточно долго. Время от времени я вносил правки то тут, то там, но все никак не мог определиться со временем публикации. Но вот релиз PHP 8 наконец показался мне подходящим моментом.

Каждый месяц мне попадаются статьи, комментарии, или твиты, в которых говорится, что PHP умирает, и нам пора прекращать его использовать. Если кто-то задает вопрос на каком-либо форуме или на Stack Overflow касательно изучения PHP, с вероятностью почти в 100%, кто-то ответит что-то вроде: “Зачем вам изучать PHP? Потратьте время на что-нибудь стоящее, например <здесь-должен-быть-ваш-замечательный-язык-который-не-php>”.

На протяжении последних 20 лет, помимо других языков, я писал код на PHP (на самом деле, может быть и дольше. Я точно не помню, когда я начал это делать), и большую часть времени я просто игнорировал эти высказывания. И все эти годы PHP “умирал”, и я должен был бросить его использовать уже очень давно. Я отнюдь не претендую на звание эксперта ни в одном языке, которые я использую, и в PHP есть еще много вещей, в которых мне не мешало бы разобраться, но снова и снова я возвращаюсь к нему.

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

Главная мысль, которую я хотел бы донести в этой статье: “выучить другой язык” — идея очень хорошая, но не потому, что “php умирает” — это просто неправда. Вы должны учить другие языки, потому что они будут полезны для вас как для программиста. Если бы PHP действительно умирал, то, конечно, у вас была бы еще одна (достаточно веская) причина двигаться дальше, но прямо сейчас, в данный момент, он не умирает.

Один из первых аргументов многих PHP-программистов, которым они будут парировать, отстаивая свой выбор, — это статистика, демонстрирующая, насколько PHP популярен в сети. Хотя эти цифры очень интересны, я склонен полагать, что они немного вводят в заблуждение. Было бы неправильно игнорировать тот факт, что львиной доле этой популярности PHP обязан WordPress. Любить его или ненавидеть, решать вам, но WordPress — причина, по которой мы все здесь. Но WordPress… такой… WordPress. У него много (действительно много) недостатков, но я знаю (и дружу с) множеством людей, которые создают много удивительных вещей — и зарабатывают большие деньги — с помощью WordPress.

PHP — это не WordPress. И, хотя WordPress увековечен в истории PHP, PHP лучше, чем WordPress — НАМНОГО лучше. В WordPress много чего не так, как и в PHP, но это не значит, что он не подходит для всех проектов. Я, вероятно, не стал бы писать свои веб-приложения на C++ (или, по крайней мере, он не стал бы ПЕРВЫМ среди языков, рассматриваемых для работы над этими проектами), но это не делает C++ плохим языком. Он просто не подходит для этой работы, точно так же, как я бы не стал использовать PHP для написания аппаратных драйверов или чего-то еще, связанного с ИИ. И дело просто в том, что это выходит далеко за пределы его специализации.

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

Изучение языка на самом деле не так сложно, и опытный программист может понять суть языка, посвятив ему всего одни выходные. Но это не значит, что этого достаточно, чтобы в полной мере знать язык. Знание языка программирования — это не только знание того, какая встроенная функция что делает, но и наличие достаточного опыта, чтобы знать, КОГДА и какие фичи использовать или как экосистема сочетается друг с другом.

Я знаю PHP, и также знаю, как настроить Nginx на сервере и как конфигурировать FPM или opcache; У меня достаточно знаний, чтобы сделать разумный выбор в отношении зависимостей; Я знаю, как безопасно развертывать PHP-приложения в рабочей среде, и мне известно о проблемах безопасности, которые могут возникнуть, если я не буду внимательно следить за тем, как я использую определенные языковые фичи. Это больше, чем просто “знание” языка. Как программисты, мы тратим много времени на изучение подобных вещей, которые часто даже не связаны с языками, которые мы выбирали.

Вот почему меня очень разочаровывает, когда другой программист говорит мне, что мой выбор языка — “отстой”. Я потратил 20 с лишним лет, совершенствуя свои навыки, но теперь какой-то человек заявляет, что мой выбор был неправильным?

Что ж, они ошибаются. С помощью PHP я сделал свою карьеру, которой я очень доволен. Я живу в хорошем доме, езжу на отличной машине, потому что потратил 20 лет на то, чтобы стать по настоящему успешным в этом деле.

Но я немного отвлекся. Эта статья должна была быть о том, что PHP не отстой.

Многие из кружка “мы ненавидим PHP и думаем, что он скоро умрет” говорят о ряде вещей, которые, по их мнению, делают PHP плохим выбором во всех отношениях. Некоторые из них мы слышим годами и они имеют отношение к старым версиям PHP (я не понимаю, почему все до сих пор так зациклены на PHP 4, я серьезно). Остальные претензии просто безосновательны и не соответствуют действительности. Это не разглагольствования на тему “мой язык лучше твоего”, и я искренне верю, что у каждого языка программирования есть определенная цель. Люди, которые приносят эти инструменты в мир (которые намного умнее меня), обычно делают это не без оснований. Языки программирования обычно не появляются случайно.

Итак, почему PHP?

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

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

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

Затем я узнал о WordPress. И, как и для любого другого человека, сидящего перед экраном компьютера с некоторыми базовыми знаниями PHP, WordPress перевернул мой мир. Это было круто, правда?

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

Вы установили WordPress... Затем добавили плагин и изменили тему... Потом внесли небольшое изменение в тему, чтобы она работала по-другому или выглядела немного иначе. Затем вы модифицировали плагин. Затем вы создали свою собственную тему. После чего вы задумались... А что еще я могу сделать?

Так я познакомился с PHP. Я не выбирал PHP, он выбрал меня. 20 прошло, а я все еще пишу на PHP. Конечно, больше не через WordPress, и мне нравится то, что я уже достаточно вырос как PHP-программист, чтобы со знанием дела написать эту статью.

“PHP слишком прост. Лучше выучи что-то посложнее”.

Одна из основных причин, по которой PHP так популярен, заключается в его повсеместном использовании. Его можно найти почти везде. Да даже самый обычный MacBook поставляется с предустановленным PHP (хотя похоже, что это изменится в будущей версии MacOS).

Писать на PHP с нуля не сложно. Обычно ничего особенного делать не нужно. Создайте index.php, поместите в него одну строку PHP-кода и загрузите практически на любую учетную запись общего хостинга:

<?php
    echo 'Hello, World!';

Начало положено. Начать работу с PHP очень просто, потому что вам не нужно думать о том, как заставить PHP работать. Это почти всегда уже сделано за вас.

Однако, представьте себе, что именно эта “простота использования” на самом деле является одной из претензий к PHP. Теория гласит, что если PHP настолько прост, то на PHP очень легко написать действительно небезопасный код.

Меня всегда это немного настораживало. Значит ли это, что языки, которые труднее использовать, с меньшей вероятностью будут использоваться для написания плохого кода? Я где-то читал, что около 70% патчей, которые Microsoft выпускает для Windows, предназначены для решения проблем с памятью, возникших из-за C++ (но не цитируйте меня, это не официальное заявление). Я сомневаюсь, что люди, которые пишут на C++ для Microsoft, любители, и я почти уверен, что они знают, что делают. Да, Windows намного сложнее, чем ваш типовой сайт с корзины покупок, но я думаю, что аргумент остается в силе. Я не согласен с тем, что простота использования PHP делает его потенциально опасным. Python хорошо известен за то, как он удобен для начинающих, но не имеет такой “потенциально опасной” репутации. Легко написать небезопасный код на ЛЮБОМ языке. Не язык делает код небезопасным, а недостаток знаний.

“Простота” — это не причина отговаривать новичков от изучения PHP, а, скорее, причина дать этим новичкам лучшие инструменты для принятия более взвешенных решений относительно кода, который они пишут. Это повод помочь им найти нужные ресурсы для изучения PHP. Мне очень повезло; и хотя я написал свою долю “небезопасного” кода, в моей жизни были люди (не всегда PHP-программисты), которые помогли мне понять, что можно улучшить.

PHP медленный

Что ж, это неправда. PHP работает настолько быстро или медленно, насколько написан ваш код. PHP — это скриптовый язык, поэтому сравнивать его с компилируемыми языками бессмысленно, но почему-то я даже видел, как люди сравнивают PHP с Rust или Go. Но это просто бессмысленно. Сравнение PHP с Python или Ruby, вероятно, понятнее, но “скорость” языка зависит от ряда различных факторов. Сам язык, да, но также его среда, какой код он выполняет, как настроен интерпретатор и т. д. Говорить, что PHP медленный без контекста, неправильно.

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

Можно встретить бенчмарки двух разных языков, выполняющих одно и то же, например, перебирающие миллион записей и выполняющие простые вычисления. Результаты часто отличаются миллисекундами. Иногда это используется, чтобы показать, что PHP работает медленно (или, в некоторых случаях, быстро). Если вы пишете программное обеспечение, в котором лишние несколько миллисекунд при циклическом просмотре миллиона записей были бы катастрофическими, то, возможно, вы задаете неправильные вопросы.

WordPress плох

Да, я согласен. Я не самый большой поклонник WordPress, особенно в наши дни, но я также готов признать, что без WordPress у нас, вероятно, не было бы того PHP-сообщества, которое существует сегодня.

Однако судить о языке по одному программному обеспечению - это неправильно. Это все равно, что сказать, что C++ — плохой язык, потому что вам не нравится Microsoft Windows.

PHP — это не узкоспециальный язык, а WordPress — это только часть истории PHP. Существует множество фреймворков и пакетов на любой выбор, если уж на то пошло. Laravel пророчат “снова сделать PHP крутым”, и я должен признать, что этот фреймворк, безусловно, один из моих любимых и он удобен для большинства проектов.

Хулить PHP, презирая WordPress, действительно несправедливо. Можно утверждать, что WordPress был отражением ограничений PHP, но это было давно, и с тех пор язык сильно вырос.

PHP не дотягивает до корпоративного уровня

Почему? Я действительно не понимаю, откуда это пошло. Но это серьезное заявление. Что делает язык “корпоративным” (enterprise ready)? Как определить, что один язык более корпоративный, чем другой? Java, вероятно, является одним из самых популярных языков в корпоративной среде, но это не потому, что Java сам по себе корпоративный. Причина в существовании платформы Java EE. Я не Java-разработчик, поэтому поправьте меня, если я неправ, но, насколько я понимаю, Java EE — это платформа, на которой создаются корпоративные приложения. Звучит как фреймворк, верно? Так что, возможно, вопрос должен звучать так: “Дотягивает ли <мой-любимый-php-фреймворк> до корпоративного уровня?”.

Для ответа на этот вопрос нужна целая отдельная статья. Я пытаюсь подчеркнуть, что PHP как язык настолько же “корпоративный”, как и любой другой язык. Это целиком и полностью зависит от того, как вы его используете.

Примечание: некоторое время назад я был частью небольшой команды, которая создала и развернула платформу управления событиями во внутренней сети одного из ведущих финансовых учреждений Южной Африки (я мог бы написать кое-что об опыте). Приложение было полностью написано на PHP и JavaScript. И в разгар пандемии Covid-19 система находилась под огромной нагрузкой, но справилась почти со всем. У нас было несколько заминок, но ничего такого, что нельзя было бы решить быстро.

PHP не масштабируется

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

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

Нельзя говорить о масштабируемости, не говоря об инфраструктуре. Если вы размещаете блог WordPress на простом виртуальном хостинге и внезапно переживаете десятки тысяч посещений… ну, это может быть проблемой, и ваш хостинг отправит вам неприятное электронное письмо или, по крайней мере, выставит вам больший счет, чем вы ожидали.

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

Иногда я думаю, что вопрос масштабируемости также несколько преувеличен. За 20 лет написания вещей на PHP я никогда не сталкивался с “миллионами запросов” в секунду. Даже близко. Большинство из нас не будут создавать новый Facebook, как бы мы не мечтали. На самом деле мы создаем гораздо более узкоспециализированные приложения. Мы работаем с конкретными отраслями, часто в определенных странах, и нам не приходится беспокоиться об обработке более нескольких сотен запросов в секунду. Для многих проектов, в которых мы участвуем, это большие цифры. Это не значит, что то, что мы делаем, не важно, это просто означает, что нам не нужно беспокоиться о таком масштабе. Масштабирование приложений для обработки миллионов запросов просто не является частью нашей рутины.

PHP уродлив

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

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

Я не говорю, что так называемые “красивые языки” — неправильный выбор, но это определенно не должно быть определяющим фактором. Java совершенно некрасив, но при этом является одним из самых популярных языков в мире. Просто глупо возражать против использования PHP из-за того, что он некрасив.

PHP, вероятно, не самый красивый язык, но я нахожу его вполне читабельным, когда он хорошо написан. И в PHP 8 есть несколько действительно замечательных инструментов, которые помогут сделать ваш код еще более “красивым”.

Я люблю PHP

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

Мне нравится, что с PHP легко начать работу, как и то, что он сложен и на самом деле нужно так много знать, чтобы считаться профессиональным PHP-программистом. Я люблю Symfony и Laravel и думаю, что люди, стоящие за ними, также ответственны за продвижение языка, как и основная команда PHP.

Но больше всего мне нравится быть программистом. Не только на PHP, но я люблю создавать вещи на любом языке, который мне приходится использовать. Мне нравится тот факт, что я могу указывать компьютерам, что делать, и что я сам этому научился. Я обязан этим PHP. Без PHP я не знаю, что бы я сейчас делал. Может быть, я был бы каким-то посредственным дизайнером, ненавидящим свою работу и свою жизнь (не в обиду дизайнерам, читающим это. У меня есть действительно талантливые друзья-дизайнеры, которым тоже нравится то, что они делают). Но вместо этого я делаю то, что люблю, используя язык, который мне нравится.

 

 

на главную сниппетов
Курсы