PHP / [Перевод] The MicroPHP Manifesto

в 14:55, , рубрики: microphp, php

Распространенное мнение о появлении панка, состоит в том, что панк был реакцией на крайности современного рока, в частности прогрессивного рока того времени. Реальность, безусловно, намного сложнее, но я подозреваю, что доля правды в этом есть. Рок-н-ролл в поздние 60-е и 70-е, похоже, был областью “Золотых Богов”, недоступной простому смертному. Контраст между группами типа Rush и Black Flag был огромен.

Шутки ради, давайте взглянем на ударника группы Rush Нила Пирта. Вот его барабанная установка:

<img src="https://www.pvsm.ru/images/d3ac586ee5e8f58acdaae3a1c0b815fd.jpg"/>

А вот Black Flag, на выступлении в Лос-Анджелесе в 1979:

PHP / [Перевод] The MicroPHP Manifesto

Группу Black Flag целиком можно уместить на площади, занимаемой барабанной установкой Нила Пирта. И они все-равно будут продолжать исполнять улетные вещи и зажигать по полной.

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

<?php chdir(dirname(__DIR__)); require_once (getenv('ZF2_PATH') ?: 'vendor/ZendFramework/library') . '/Zend/Loader/AutoloaderFactory.php'; ZendLoaderAutoloaderFactory::factory(array('ZendLoaderStandardAutoloader' => array()));  $appConfig = include 'config/application.config.php';  $listenerOptions = new ZendModuleListenerListenerOptions($appConfig['module_listener_options']); $defaultListeners = new ZendModuleListenerDefaultListenerAggregate($listenerOptions); $defaultListeners->getConfigListener()->addConfigGlobPath('config/autoload/*.config.php');  $moduleManager = new ZendModuleManager($appConfig['modules']); $moduleManager->events()->attachAggregate($defaultListeners); $moduleManager->loadModules();  // Create application, bootstrap, and run $bootstrap = new ZendMvcBootstrap($defaultListeners->getConfigListener()->getMergedConfig()); $application = new ZendMvcApplication; $bootstrap->bootstrap($application); $application->run()->send(); 

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

Это не значит, что этот подход плох, как таковой. Но когда я вижу это, у меня возникает инстинктивная негативная реакция. Мой мозг орет:
FUCK.
THAT.
SHIT.

(не смог подобрать лучших слов – прим. переводчика)

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

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

В мире PHP их представляют Slim, Epiphany, Breeze, Limonade, и другие. Для дополнительного функционала я беру легковесные библиотеки, которые помогают мне решить поставленные задачи. Четкость и краткость – это то, на что я обращаю внимание в первую очередь.

Еще одна важная деталь, на которую я смотрю, когда использую чужой код — обязательства. Обычно у меня нет времени на полный аудит кода библиотек, поэтому здесь нужно в какой-то степени доверять тому, кто писал этот код. И с каждой новой зависимостью количество кода, которому нужно доверять, растет. Нужно знать о наличии ошибок и уязвимостей и о том как они будут обработаны. Будут ли анонсы в списке рассылки? Сколько времени потребуется для исправлений и не сломают ли они обратной совместимости? Должен ли я буду обновлять все мои зависимости, если я обновлюсь до следующей версии PHP. Все это строится на предположении, что автор будет иметь время и желание исправлять эти ошибки. Если нет, то вы только что добавили кучу технического долга в ваш код.

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

Вот вывод cloc для клона репозитория symfony2 HTTP Kernel component:

Mon Dec 26 19:42:23 EST 2011 coj@PsychoMantis ~/Sites > cloc HttpKernel       94 text files.       93 unique files.       12 files ignored.  http://cloc.sourceforge.net v 1.53  T=0.5 s (164.0 files/s, 18736.0 lines/s) ------------------------------------------------------------------------------- Language                     files          blank        comment           code ------------------------------------------------------------------------------- PHP                             72           1175           3440           4290 Bourne Shell                    10             56            155            252 ------------------------------------------------------------------------------- SUM:                            82           1231           3595           4542 ------------------------------------------------------------------------------- 

Вот то же самое для фреймворка Slim:

Mon Dec 26 19:42:27 EST 2011 coj@PsychoMantis ~/Sites > cloc Slim       54 text files.       51 unique files.       13 files ignored.  http://cloc.sourceforge.net v 1.53  T=0.5 s (82.0 files/s, 17752.0 lines/s) ------------------------------------------------------------------------------- Language                     files          blank        comment           code ------------------------------------------------------------------------------- PHP                             31            660           4473           3280 Bourne Shell                    10             56            155            252 ------------------------------------------------------------------------------- SUM:                            41            716           4628           3532 ------------------------------------------------------------------------------- 

и для фреймворка Epiphany:

Mon Dec 26 19:42:30 EST 2011 coj@PsychoMantis ~/Sites > cloc Epiphany       83 text files.       70 unique files.       31 files ignored.  http://cloc.sourceforge.net v 1.53  T=0.5 s (102.0 files/s, 5246.0 lines/s) ------------------------------------------------------------------------------- Language                     files          blank        comment           code ------------------------------------------------------------------------------- PHP                             40            218            309           1632 Bourne Shell                    10             56            155            252 HTML                             1              0              0              1 ------------------------------------------------------------------------------- SUM:                            51            274            464           1885 ------------------------------------------------------------------------------- 

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

Это не значит, что это плохо. Это не значит, что это неверный подход. Но, для меня, безусловно, этот подход неверен. И я думаю, я такой не один.

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

Я не хочу быть Нилом Пиртом. Я хочу быть Грегом Джинном.

Поэтому я написал это. Такой себе «micro PHP manifesto», если хотите. Я планирую использовать это как путеводитель в моей PHP-разработке. Возможно, вы тоже найдете для себя в этом что-нибудь полезное.

Я PHP-разработчик

  • Я не разработчик Zend Framework или Symfony или CakePHP
  • Я думаю, что PHP достаточно сложен

Мне нравится делать маленькие вещи

  • Мне нравится делать маленькие вещи, имеющие простые цели
  • Мне нравится делать вещи, которые решают проблемы
  • Мне нравится делать маленькие вещи, которые работают вместе для решения больших проблем

Я хочу писать меньше кода, а не больше

  • Я хочу писать меньше кода, а не больше
  • Я хочу управлять меньшим количеством кода, а не большим
  • Я хочу поддерживать меньшее количество кода, а не большее
  • Я должен обосновать каждый кусок кода, который включаю в проект

Мне нравится простой, читабельный код

  • Я хочу писать понятный код
  • Я хочу иметь легко проверяемый код

Сайт манифеста: microphp.org/
О авторе манифеста: funkatron.com/about.html

Замечания и поправки к переводу приветствуются.

Автор: truezemez


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js