PHP: піти не можна лишитися. Лишитися
Отже, ви пишете на PHP.
Більше того, навіть прочитавши мою попередню статтю, ви все одно вирішили продовжити гризти кактус і лишитися в межах екосистеми і далі. Що ж, я вас не засуджую. Сам, зрештою, такий.
Натомість, зі своєї висоти
1. Вивчіть, нарешті, PHP
Ні, я серйозно. Враховуючи, як сильно змінилися стандарти за останні кілька років, велика частина PHP-девелоперів не дуже добре собі уявляє, що зараз являє собою їхня мова. Що таке генератори, чим лямбда відрізняється від кложури і для чого в 7.1 додали closurefromcallable.
Враховуючи новизну усіх цих премудростей, хороших книжок по них не так вже й багато, доводиться вчитуватися у дайджести і блоги. Проте з іншого боку, PHP не існує в замкнутому світі, і всі поняття давно існують в інших мовах і стеках технологій. Звідси випливає наступна порада.
2. Вивчіть, нарешті, програмування
Прочитайте банду чотирьох, програміста-прагматика і все, що ставлять у списки «10 кращих книжок з програмування всіх часів». Окрім, напевне, Кнута. Він там для галочки. Як Толстой у списках художки.
Взагалі, читання технічних книжок — дуже корисна звичка. Хоч і без практики будь-яке знання мертве, хороша книжка все одно залишить у вас в голові кілька розмитих образів і назв. Вони вам потім знадобляться, щоб знати, що взагалі гуглити.
Якщо чули десь термін — прочитайте, що він значить. Розберіться, нарешті, що таке той SOLID, про який всі говорять. Якщо ви досі не знаєте, чим абстрактний клас відрізняється від інтерфейсу чи як заборонити створювати об’єкт класу — з’ясуйте це раз і на все життя!
Розберіться в загальних рисах, як взагалі працює комп’ютер і мережа, що являє собою ООП і чому майбутнє (можливо) за функціональщиною. Для розваги взагалі бажано встрягнути у якийсь мережевий холівар. Бачили питання на Stack Overflow, де творець Docker з творцем Vagrant з’ясовують, що з них краще підходить для деплою і development environment? Почитайте, цікаво:). Якщо вам нудно, можете спитати в якомусь чаті, чи можна досягнути веб-скейлу без монги. Окрім купи лулзів, маєте шанс отримати корисні знання з інфраструктури.
Спробуйте олімпіадне програмування, якщо ще не пробували. Почати можна з codingame, а далі — як вийде. Можливо, сподобається і затягне всерйоз і надовго. Не те, щоб це вам знадобилося потім у роботі, але, наприклад, влаштуватися на наступну може і допомогти.
З цієї поради напряму випливає наступна:
3. Роздивіться навколо
Прочитайте кілька книжок по Джаві — Пехопешка рухається в її бік семимильними кроками. Напишіть кілька сервісів на Go або Scala. Коли ваш проект черговий раз хряпнеться під навантаженням, ви можете спробувати перенести ботлнек на окремий мікросервіс, додавши асинхронність. Повинно полегшати.
Розберіться, як деплоїти і оптимізувати вашу аппу. Часом проблеми зі швидкодією лежать зовсім не в коді, і, не знаючи теми, девопсам нічого не доведеш. З’ясуйте, чим Jenkins відрізняється від Teamcity і що нового приніс із собою Jenkins 2.
Пишете API — прочитайте про особливості REST і HTTP. Не пишете API — почніть їх писати, розділяючи моноліт хоча б на фронтенд і бекенд. Для того, щоб зрозуміти, що не так з вашим API, почитайте код мобільних додатків, що його використовують. Напишіть простенького клієнта і подивіться, в чому там можуть бути проблеми.
Словом, прочитайте попередню статтю і з миру по нитці нахапайтеся знань про навколишній світ. Коли наберетеся і повернетеся, настане час для наступної поради:
4. Розберіться, як написаний сам PHP
Почати можна з написання простенького розширення. Потім потрошки, маленькими порціями можна починати читати PHP internals. Не те, щоб ви відразу змогли написати свій RFC, але якщо вас затягне, є ймовірність, що ви отримаєте вплив на екосистему, перемістившись із користувача в творці. Невелика ймовірність, але є.
Якщо С вас лякає — спробуйте для початку Zephir. Я не впевнений у майбутньому цієї технології, але це може послужити своєрідним містком між PHP і C. Головне ж повірити у свої сили, а далі буде вже легше.
5. Зробіть коміт в крутий проект
Я навмисне уникаю загальних порад в стилі «контрибутьте в опен-сорс», бо загальних порад я і так вже тут надавав, а конкретики, як ви помітили, не так вже й багато. Тож ось вам вона.
В кожному проекті на гітхабі є вкладка «issues». Час від часу там з’являються реквести на якийсь функціонал, який основним розробникам додавати влом, але зрештою, вони б від нього не відмовилися. Це — ваш зоряний час.
Деколи це може бути зовсім дрібний мінорний баг або інтеграція якоїсь забутої Богом платформи. Головне, щоб ви приблизно знали, як це робити, і мали моральні сили примусити власників репозиторію ваш коміт прийняти. Це у вас, до речі, займе достатньо багато часу.
Якщо боїтеся, що вашу таску забере хтось інший — підпишіться на повідомлення або зайдіть на CodeTriage. Звідти вам будуть слати цілі дайджести або просто найцікавіші вижимки із активності проекту, щоб в будь-який момент ви могли кинутися на допомогу, вдягнувши свій супергеройський плащ.
Нагородою буде права колонка вашого профілю на гітхабі, який з часом може стати для вас хорошим доповненням, а деколи навіть і заміною резюме.
6. Заглибтесь у фреймворки
Саме так, у множині, тому що якщо ви вже зациклені на якомусь одному, варто вилізти на свіже повітря і кинути погляд вліво-вправо. Фанатієте від симфи — поставте собі ларавель і наступний проект зробіть на ньому. Не розумієте, як можна використовувати щось крім ZF — зробіть бенчмарк мікрофреймворків і подумайте тричі, чи потрібен вам цей екскаватор. Звикли до вордпресу? Поставте собі принаймні Drupal, а вже з нього переходьте на важкі наркотики.
Не вірите у фреймворки? Вони для вас занадто загальні та перегружені? Поставте Phalcon і насолоджуйтеся швидкодією.
Занадто прив’язані до фреймворків? Спробуйте не використовувати їх узагалі. Зберіть проект з нуля тільки на композеровських пакетах. О, до речі:
7. Напишіть свій пакет для композера
Причому зробіть усе серйозно: з тестами, системою версій і хорошим ізолюванням функцій. Підключіть до проекту скрутинайзер чи код клімат. Відпрофайліть на повну блекфаєром.
Переконайтеся, що кожна стрічка коду — повністю продакшн реді і може бути показаною і проекзаменованою сотням і тисячам програмістів, які будуть її використовувати. Заодно бажано перевірити безпеку, провівши кілька пенетрейшн тестів. Заодно дізнаєтесь, як їх робити.
Навіть якщо кількість завантажень вашого пакета не перевищить десяти, досвід, який ви при цьому отримаєте, важитиме набагато більше. А лінку на пакет можна додати, наприклад, у резюме.
8. Почніть писати тести
А якщо ви їх пишете, перевірте, чи робите це правильно. Роз’ясніть для себе, що таке TDD і чому в нього ніхто не вірить. Почитайте про PHPUnit, Behat/Codeception та інші способи автотестингу, аж до селеніума. Звісно, правильно, коли їх пише QA, але краще вже ви, ніж ніхто.
9. Виступіть на конференції або хоча б на мітапі
Це не так страшно, як здається. Якщо сумніваєтеся, походіть трохи на зустрічі найближче до вас і послухайте спікерів. Серед них явно буде така бездарність, що вас відразу переповнить рішучість. Тому що «гірше, ніж він, навіть я не зможу».
Підготовка до виступу дасть вам шанс глибше розібратися в якійсь темі, а якщо вам це випадково сподобається — у вашому житті з’явиться нове джерело гострих емоцій.
Ця порада, звісно, до PHP не має ніякого відношення, але не додати я її не міг. Сюди ж, до речі, можна додати написання текстів для технічного блогу чи сайтів на кшталт Хабру чи ДОУ. Текст писати навіть легше, ніж код, ось побачите.
І нарешті остання, головна порада для пехопешника:
10. Перестаньте вестися на тролів
Вони просто нам заздрять. Адже тільки у нас є $. А ще Фейсбук написаний на PHP. І взагалі, сімка — це вже нормальна мова програмування. Нічого спільного з четвіркою і всім таким. А ще кожен стек має свої переваги і недоліки, і демонізувати чи, навпаки, робити якийсь із них срібною кулею, це підхід, недостойний...
Ні, не працює? А якщо повторювати собі по кілька разів на день? Перед ранковою кавою? Ні? Ех... Піду поплачу, чи що...
P.S. Як завжди, ваша думка дуже важлива для нас. Якщо ви вважаєте, що написане — маячня, не оминіть розказати нам про це в коментарях. Якщо я щось забув — нагадайте мені про це. Якщо черговий раз бажаєте висловити думку про PHP... Що ж, просто підтримайте топовий коментар. Він все одно ж буде щось на кшталт «PHP — відстій!!!111». Я вас що, не знаю?