Распространенное мнение о появлении панка, состоит в том, что панк был реакцией на крайности современного рока, в частности прогрессивного рока того времени. Реальность, безусловно, намного сложнее, но я подозреваю, что доля правды в этом есть. Рок-н-ролл в поздние 60-е и 70-е, похоже, был областью “Золотых Богов”, недоступной простому смертному. Контраст между группами типа Rush и Black Flag был огромен.
Шутки ради, давайте взглянем на ударника группы Rush Нила Пирта. Вот его барабанная установка:
![](https://habrastorage.org/r/w780q1/storage2/1c4/24b/9eb/1c424b9eb41f567117d2ecec42ce837c.jpg)
А вот Black Flag, на выступлении в Лос-Анджелесе в 1979:
![](https://habrastorage.org/r/w780q1/storage2/032/28c/b2b/03228cb2b7ab3f3795b9e1f4128b4773.jpg)
Группу Black Flag целиком можно уместить на площади, занимаемой барабанной установкой Нила Пирта. И они все-равно будут продолжать исполнять улетные вещи и зажигать по полной.
За несколько последних лет, дух PHP, видимо, пошел по пути Нила Пирта. Огромное количество работы, сделанной огромным количеством умных людей, превратилось в сложные и многословные решения. Куча файлов, куча вложенных директорий и куча правил. Я часто вижу PHP-библиотеки/компоненты, которые выглядят так:
И все это, только лишь для того, чтобы запустить ваше приложение.
Это не значит, что этот подход плох, как таковой. Но когда я вижу это, у меня возникает инстинктивная негативная реакция. Мой мозг орет:
FUCK.
THAT.
SHIT.
(не смог подобрать лучших слов – прим. переводчика)
Я не могу делать этого. Я этого не хочу. И я не думаю, что мы должны, делать это так, чтобы создавать всякие клевые штуки.
Подход, который я практикую в последнее время, заключается в том, чтобы начинать с как можно более легковесной основы, с микрофреймворка.
В мире PHP их представляют Slim, Epiphany, Breeze, Limonade, и другие. Для дополнительного функционала я беру легковесные библиотеки, которые помогают мне решить поставленные задачи. Четкость и краткость – это то, на что я обращаю внимание в первую очередь.
Еще одна важная деталь, на которую я смотрю, когда использую чужой код — обязательства. Обычно у меня нет времени на полный аудит кода библиотек, поэтому здесь нужно в какой-то степени доверять тому, кто писал этот код. И с каждой новой зависимостью количество кода, которому нужно доверять, растет. Нужно знать о наличии ошибок и уязвимостей и о том как они будут обработаны. Будут ли анонсы в списке рассылки? Сколько времени потребуется для исправлений и не сломают ли они обратной совместимости? Должен ли я буду обновлять все мои зависимости, если я обновлюсь до следующей версии PHP. Все это строится на предположении, что автор будет иметь время и желание исправлять эти ошибки. Если нет, то вы только что добавили кучу технического долга в ваш код.
Поиск легковесных библиотек, которые не тянут за собой кучу зависимостей, намного сложнее чем должен быть. В основном, я думаю, что это связано с тем, что разработчики сейчас более заинтересованны в разработке под конкретный фреймворк. Некоторая работа была проделана, чтобы сделать зрелые фреймворки менее монолитными и многие разработчики в Твиттере советовали попробовать компоненты Symfony, как вариант. К сожалению, оказалось, что у нас слишком разные представления о легковесности.
Вот вывод cloc для клона репозитория symfony2 HTTP Kernel component:
Вот то же самое для фреймворка Slim:
и для фреймворка Epiphany:
Когда в компоненте больше файлов и строк кода, чем во всем моем базовом фреймворке, я не могу назвать это легковесным.
Это не значит, что это плохо. Это не значит, что это неверный подход. Но, для меня, безусловно, этот подход неверен. И я думаю, я такой не один.
Я не хочу быть прог-рок-звездой и писать претенциозные рок-оперы. Я хочу играть офигительно мощные аккорды в панк-рок группе, которая делает шоу в домике без сцены и раскачает вас так, что вы пойдете и создадите собственную группу. Таким кодером я хочу быть.
Я не хочу быть Нилом Пиртом. Я хочу быть Грегом Джинном.
Поэтому я написал это. Такой себе «micro PHP manifesto», если хотите. Я планирую использовать это как путеводитель в моей PHP-разработке. Возможно, вы тоже найдете для себя в этом что-нибудь полезное.
Я PHP-разработчик
Мне нравится делать маленькие вещи
Я хочу писать меньше кода, а не больше
Мне нравится простой, читабельный код
Сайт манифеста: microphp.org
О авторе манифеста: funkatron.com/about.html
Замечания и поправки к переводу приветствуются.
Шутки ради, давайте взглянем на ударника группы Rush Нила Пирта. Вот его барабанная установка:
![](https://habrastorage.org/storage2/1c4/24b/9eb/1c424b9eb41f567117d2ecec42ce837c.jpg)
А вот Black Flag, на выступлении в Лос-Анджелесе в 1979:
![](https://habrastorage.org/storage2/032/28c/b2b/03228cb2b7ab3f3795b9e1f4128b4773.jpg)
Группу Black Flag целиком можно уместить на площади, занимаемой барабанной установкой Нила Пирта. И они все-равно будут продолжать исполнять улетные вещи и зажигать по полной.
За несколько последних лет, дух PHP, видимо, пошел по пути Нила Пирта. Огромное количество работы, сделанной огромным количеством умных людей, превратилось в сложные и многословные решения. Куча файлов, куча вложенных директорий и куча правил. Я часто вижу PHP-библиотеки/компоненты, которые выглядят так:
<?php
chdir(dirname(__DIR__));
require_once (getenv('ZF2_PATH') ?: 'vendor/ZendFramework/library') . '/Zend/Loader/AutoloaderFactory.php';
Zend\Loader\AutoloaderFactory::factory(array('Zend\Loader\StandardAutoloader' => array()));
$appConfig = include 'config/application.config.php';
$listenerOptions = new Zend\Module\Listener\ListenerOptions($appConfig['module_listener_options']);
$defaultListeners = new Zend\Module\Listener\DefaultListenerAggregate($listenerOptions);
$defaultListeners->getConfigListener()->addConfigGlobPath('config/autoload/*.config.php');
$moduleManager = new Zend\Module\Manager($appConfig['modules']);
$moduleManager->events()->attachAggregate($defaultListeners);
$moduleManager->loadModules();
// Create application, bootstrap, and run
$bootstrap = new Zend\Mvc\Bootstrap($defaultListeners->getConfigListener()->getMergedConfig());
$application = new Zend\Mvc\Application;
$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
Замечания и поправки к переводу приветствуются.