Поради сеньйорів: як прокачати знання junior PHP

У рубриці «Поради сеньйорів» досвідчені фахівці діляться практичними порадами з джуниорами — загальні лайфхаки по навчанню, які книги та ресурси читати, які навички освоювати і багато іншого. У цьому випуску говоримо про PHP розробників.

Олександр Скакунів , PHP Architect, 14 років досвіду розробки PHP:

Головна проблема, з якою стикаєшся, коли починаєш вивчати PHP — психологічний тиск. Справа в непопулярності цієї мови в середовищі програмістів, принаймні, на словах. Можна почути багато неприємних епітетів, в основному зводяться до фрази: «Недоязык формошлепов для створення говносайтиков». Твоє завдання — не забувати, що «собаки гавкають, а караван іде». Наприклад, на РНР написаний такий проект, як «Фейсбук», і цей факт відразу ставить на місце любителів вибирати мову програмування за його модності.

Пс, сядь-но ближче, що скажу. Суто між нами: РНР — справді не найкраща мова в світі. Основних причин я назву дві — і тобі краще про них знати.

Перша проблема РНР — це неконсистентность, тобто схожі речі зроблені по-різному. Наприклад, одні імена функцій названі з підкресленням (str_replace), інші — без (strrev), а оператор «::» взагалі називається «Paamayim Nekudotayim»(це іврит, дитинко). Це пов'язано з тим, що мова розвивалася в різний час різними людьми, тому вийшов такий конгломерат різних підходів.

Друга проблема РНР — це робота з пам'яттю і швидкість. Наприклад, заявленим зручністю РНР є динамічна типізація (коли вираз «1» може бути за ситуації використано як рядок або число). І це ж змушує РНР програвати по швидкості більш суворим, статично типізованих мов.

Але є одне але. Кожен інструмент гарний для свого кола завдань. РНР — не виняток. Ця мова хороший для створення швидких прототипів веб-додатків, а це і потрібно бізнесу — швидко перевірити бізнес-гіпотези. Саме тому статистика DOU за реальної популярності мов програмування за 2017 рік показує, що РНР знаходиться на 4 місці і обганяє Python і Ruby (т. зв. «модні мови», хе-хе). Приклад — той же WordPress: хоча програмісти могли б написати код і краще, все ж на цьому движку працює чверть всіх сайтів в світі (якщо точніше, то 26% у 2016 році ).

На інтерв'ю тебе можуть запитати щось низькорівневе, типу «як обернути рядок». Але одна справа співбесіду, а інша — реальна робота. На чистому низкоуровневом РНР давно ніхто не пише (хоча на самому початку навчання це краще все-таки зробити, щоб зрозуміти матчастину). Поступово переходь на готові рішення, наприклад, фреймворки (особисто я рекомендую Symfony): так тобі буде легше відокремити дизайн від бізнес-логіки (мухи окремо, котлети окремо), плюс використовувати готові рішення, написані іншими розумними людьми, щоб ти цим користувався. Так ти зможеш зосередитися на справді важливих речах (бізнес-завдання), а не на те, який формат даних приймає той чи інший API.

До речі, про API скажу окремо — вивчи, як зручно і швидко створювати, документувати і покривати тестами. І тоді ти, один РНР-програміст, зможеш робити бекенд для цілого відділу mobile-розробників: вендорів телефонів багато, а backend у всіх один. А не задокументируешь свій API (я маю на увазі публічну документацію, особливо де можна погратися з API) — увязнешь в параметрах. Не покриєш тестами — побудуєш друшляк.

І потім, коли вже матчастину буде освоєна, переходь на більш високий рівень абстрагування — вивчи основні патерни проектування, прочитай «Чистий код», і, якщо хочеш стати зовсім джедаєм, то і «Domain Driven Design». Так поступово ти станеш «language agnostic developer», тобто програмістом, якому не важливо, на синтаксисі мови писати. Важливо навчитися «дистилювати знання» нечітких вимог замовника готовий алгоритм. «Тоді, мій син, ти будеш Людина».

Андрій Федик , Senior Software Engineer в Intetics, 14 років досвіду розробки PHP:

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

Команда

Команда — це ваше все. Наздоганяти простіше, ніж бігти попереду всіх. Якщо вам важко йти вперед, і ви знаєте про свої проблеми з мотивацією, шукайте сильну команду, все просто! Самі не помітите, як підете вперед семимильними кроками. Причому раджу починати з великих компаній — там навчання ефективніше. Але, якщо ви поки що не відповідаєте запитам великої компанії, почати можна з маленькою, але не засиджуйтеся там. А ще — діліться знаннями зі своєю командою, вона, в свою чергу, буде ділитися з вами. Виходить взаємовигода. Ну і не забуваємо про оптимізацію робочого місця — не витрачайте свою енергію (мыслетопливо) на рутинні завдання, постарайтеся їх автоматизувати (найпростіше — налаштуйте у хромі search engines, або з %S або без). Чим менше рутинних завдань, тим більше мозок працює над основними завданнями.

Теорія

Самоучкам дуже рекомендую фундаментальні книги. Якщо лінь читати — робіть аудіокниги (можна txt перевести в голос) або дивіться відеолекції. Ось підбірка, яку я раджу:

Причому тут важливо не просто відкрити, прочитати і забути. Робіть помітки, свого роду конспекти. Якщо щось незрозуміло чи складно, вислухайте, а потім перефразуйте. Знайдіть найкращий для себе варіант навчання. Ще я дуже рекомендую слухати подкасти. Нижче добірка, з якою раджу почати:

Досвід

Тепер про найважливіше — про досвід і спеціалізації. Чесно — до років досвіду ставлюся нейтрально. Можна за рік з сильною командою і складним проектом серйозно зрости. А можна і десять років сайти-візитки на PHP писати, що особливого досвіду не дасть. До нас в компанію проходили люди з меншою кількістю років в резюме, але за спиною у них було більше реального досвіду.

Також не уявляю PHP без JS — це вам така відмітка, що не варто зациклюватися тільки на PHP. Розширюйте кругозір, дивіться по сторонам, виходьте за межі «зони комфорту» у плані завдань. Не робіть тільки те, що вам кажуть — вчите щось нове, що вам цікаво, звертайте увагу на інші завдання, які можуть вам дати в майбутньому. Не дозволяйте мізкам простоювати, вивчайте нове (навіть якщо якісь знання не лежать у вашій предметної області). Треба тримати руку на пульсі — читати статті, слухати подкасти (я краще сприймаю на слух, але знову ж шукайте свій варіант).

І ще раз — не лінуйтеся! Відмовки придумати можна завжди, але також завжди можна знайти спосіб зайнятися освітою. Я, наприклад, навчаюся в основному в маршрутці по дорозі з дому на роботу і навпаки. Лінь йти до мети — лежіть у напрямку до мети!

Олександр Махомет , Product Architect в Upwork, 14 років досвіду розробки PHP:

Хорошим варіантом буде влаштуватися на роботу в команду досвідчених PHP розробників, зі складними сучасними проектами та з можливістю перебувати під менторством одного з колег. У таких польових, реальних умовах ви максимально швидко отримаєте знання і досвід. На жаль, це буває нелегко. Конкуренція для рівня Junior досить висока. Та й відрізнити хорошу компанію від «не дуже» буває не просто.

Альтернативним варіантом є особистий розвиток, власне, воно в будь-якому разі має бути. Розглянемо кілька варіантів.

По-перше, програмування на PHP — це в першу чергу програмування, тому має сенс ознайомитися з загальними парадигмами і підходами. З класики це праці Martin Fowler , GOF , Robert Martin , Steve McConnel . Читати цих хлопців — це не «Гри престолів» дивитися (не так захоплююче), але поступово з фундаментальними речами знайомитися варто. На GitHub (якщо ви не в курсі, що таке Git, теж в список to do на вивчення) є великий список безкоштовних книг , програмування на PHP зокрема.

PHP істотно змінився за десятиліття, а в інтернетах багато застарілих туториалов. На щастя, не потонути в цьому величезній кількості інформації для новачків допоможе ресурс phptherightway . У ньому зібрані актуальні бест практики для PHP розробників, причому там зачіпається не тільки PHP, але і суміжні тематики, наприклад, питання розгортання (deployment). Є навіть частково перекладена українська версія цього ресурсу, але я настійно рекомендую працювати з першоджерелами, інакше у вас буде неповна і неточна інформація. Знання англійської мови хоча б на рівні читання — must have. Вивчення або прокачування англійської мови буде хорошою інвестицією в кар'єру розробника.

Далі можна сходити на offline-курси, зазвичай це платно. Їх в Україні є мінімум кілька. На жаль, у мене немає інформації, які з них якісні, тому конкретні назви приводити не буду, вивчайте рейтинги на DOU і в інтернеті. Якщо пощастить з викладачем, це буде ефективніше, ніж самостійне навчання.

Ще бувають online-курси, і тут одну хорошу посилання я все-таки залишу. Це курси від hexlet (навчання частково платне, частково безкоштовне).

Будьте в тренді. Слідкуйте за змінами, новими статтями та інструментами у світі PHP. Вам допоможуть два дайджесту: DOU PHP Digest і Habrahabr PHP Digest . Матеріали цих дайджестів покривають більшу частину того, що відбувається в PHP світі.

Читайте блоги і твітери передових PHP розробників. В PHP зараз ера фреймворків, варто знати, хто такі і що таке Fabien Potencier (Symfony Framework ), Taylor Otwell (Laravel Framework ), Matthew Weier O phinney (Zend Framework ). Розберіть за полочком код якогось фреймворку, наприклад, Symfony, спробуйте написати свій.

Прийміть участь в open source проект, почніть свій або приєднуйтеся до існуючих. Це дасть цікавий досвід роботи над open source проектом, знайомства з ключовими розробниками цих проектів, можливість перейняти їх досвід. Бонусом прийде визнання в співтоваристві і позитивна оцінка роботодавцями.

Ходіть на PHP митапы. В Україні і зокрема в Києві проводяться як великі і платні конференції, наприклад, PHP Fwdays , так і безкоштовні зустрічі, наприклад, PHP Friends Club , Symfony Cafe та інші. На таких зустрічах можна послухати доповіді, але найголовніше — поспілкуватися з більш досвідченими колегами, поставити питання спікерам, до яких у звичайному режимі достукатися складно.

Успіхів! :)

Сергій Камолов , Senior Software Developer в PROBEGIN, 10 років досвіду розробки PHP:

Перефразовуючи Марка Твена, можна назвати два найважливіші моменти у житті PHP розробника: рішення почати працювати з PHP та рішення перейти на Ruby. Це, звісно, жарт, але ще кілька років тому кар'єра єра PHP розробника виглядала саме так. Хіба що замість Ruby могла бути будь-яка інша мова програмування.

Із самого початку PHP вважалася мовою з найнижчим порогом входження, що, з одного боку, зумовило її стрімку популярність, а, з іншого, породило дещо зневажливе ставлення з боку представників інших мовних «філософій», адже розпочати кар'єр єру з PHP було набагато простіше, аніж, скажімо, з Java або .NET. Ще кілька років тому мінімальний перелік вимог на посаду Junior PHP Developer, окрім знання самої мови, обмежувався базовими знаннями HTML та MySQL, а знання JavaScript додало неабияких переваг серед інших кандидатів.

Зараз ситуація інша, адже змінилися і сама мова PHP, і рівень завдань, які вона вирішує. Навіть сам Расмус Лердорф, винахідник PHP, годиною дивується, якого розвитку набуло його творіння. Якщо проаналізувати сучасний рівень вимог до кандидатів-початківців, то тут вже і знання з ООП та патерного програмування, досвід роботи з різними фронтенд-фреймворками, компіляторами та препроцесорами, SQL та NoSQL базами даних. А базові навички адміністрування Linux-систем тепер просто must have, як і розуміння ряду принципів, що формуються у зарозумілі слова із великих латинських літер (SOLID, KISS, DRY). І це ми навіть не дійшли до вимог щодо володіння самою мовою PHP, рівень знання якої має відповідати кільком рокам практичного досвіду. Звідси і виникає головне питання: як розпочати свою кар'єр єру в якості PHP розробника і як залишитися затребуваним фахівцем у галузі, де рівень вимог і технологій змінюється так стрімко і непередбачувано, як курс долара в нашій державі.

Перше, і, мабуть, найголовніше — це знання основ. І не стільки знання основ самої мови PHP та супутнього стеку, як розуміння принципів написання якісного коду як такого. Адже більшість проектів вимагають саме командної роботи, і володіння загально прийнятими практиками дозволяє створювати якісний продукт. Розвинути такі навички допоможуть:

Друга — це практичний досвід. Але тут важливо розуміти, що досвід може бути як корисний, так і не дуже, особливо з огляду перспектив у майбутньому. Як, наприклад, тривалий досвід роботи лише з певною CMS чи застарілим фреймворком. Якщо врахувати, що за темпами появи нових трендів PHP відстає лише від JavaScript, можна зробити висновок, що за деякий час такий досвід може виявитися абсолютно не потрібним. Тому дуже важливо слідкувати за трендами та тенденціями у галузі веб-розробки. Створення додаткових проектів чи навіть просте проходження «туторіалів» дозволить залишатися затребуваним, навіть якщо основний проект все ще працює на PHP 5.3. На щастя, кожен популярний фреймворк має гарну документацію та добре організовані спільноти для обговорення нагальних проблем.

Третє — де шукати інформацію про тренди? Можна, звісно, скористатися сервісом GoogleTrends , альо тут великий ризик дізнатися, що розробка на Python має набагато кращі перспективи. Можна переглядати різні рейтинги фреймворків на технічних сайтах чи блогах, але об єктивну оцінку знайті там важко, бо кожен, як то кажуть, хвалити своє болото. То де ж шукати об'єднання єктивність? На допомогу приходити DOU із розділом «Робота» (головне не переплутати із розділом «Зарплати»), адже, переглядаючи відкриті вакансії, можна дізнатися, що попит на знання Symfony 2 набагато перевищує попит на, здавалося б, сучасніший Symfony 3, а Full Stack Web Developer — це не міф, а реальна вакансія.

Четверте — вчитися на успішних прикладах. Здібності до програмування — це, звичайно, добре, але вони майже нічого не варті без вміння шукати якісну інформацію та здатності переймати чужий досвід. На жаль, деякі початківці починають створювати свої власні фреймворки та СМЅ, намагаючись самостійно розробити продукт, кращий за результат роботи цілої спільноти висококваліфікованих фахівців. Тім годиною перспективність будь-якого розробника-початківця залежить від його відкритості до запитань та здібностей аналізувати чужий код.

Найкраще, звісно, шукати відповідей у більш досвідчених колег — вони і вкажуть правильний напрямок, і «носом ткнути» у провалені тести, а ще ніщо так не збиває пиху, як код-рев'ю проведене тімлідом. Якщо ж такої можливості немає — тут вже тільки Google, тільки хардкор, тобто Хабрахабр. Хоча краще одразу налаштовуватися на пошук інформації в англомовному сегменті інтернету — більше шансів отримати якісну відповідь. Хоча бувають і винятки: так, наприклад, найбільшими дописувачами на відомому StackOverflow є саме початківці, а, отже, і якість інформації там відповідна. Дуже корисно переглядати проекти на GitHub з великою кількістю контриб'юторів, особливо коли потрібно вирішувати архітектурні питання. Головне розуміти, що використання чужих напрацювань — значно краще, ніж створення велосипеда самотужки. Вісь, наприклад, підбірка кращих рішень на будь-які випадки життя: Awesome PHP .

Наостанок, якщо ви вже розробник-практик, можете похвалитися кількома завершеними проектами і навіть почали розглядати вакансії на посаду Middle або й Senior, то прийшов час відповісти самому собі на просте запитання: Why You're a Bad PHP Programmer .

Ігор Петрович , Deputy Production Director в CoreValue, 10 років досвіду розробки PHP:

PHP — це мова, яка добре підходить для старту кар'єр кур'єри в ІТ незалежно від того, як ви потім захочете розвиватись. Кожна мова має певні сильні та слабкі сторони. Існує багато дискусій про слабкі сторони PHP, такі як витоки пам'яті, масштабованість та швидкість, проте є більша неочевидна проблема, яку я виявивши з власного досвіду. Через низький поріг входу та специфіку PHP багато розробників починають свій професійний шлях саме з цієї мови, альо з годиною смороду не розвиваються і не вчаться писати правильний код.
Загальні рекомендації
Моя порада для новачків-розробників: важливіше навчитися правильно програмувати, ніж вивчити синтаксис. Ви повинні зосередитися на загальній практиці програмування, а не тільки на самій PHP.

Вісь декілька важливих елементів в нашій галузі, які ви можете недооцінювати на старті кар'єр кур'єри, але вам необхідно працювати над ними:

1. Структури даних. Я бачив надто часто, що люди не знають доступних структур даних і коли їх використовувати. Це призводить до низької продуктивності та поганого кодом. Так само як шаблони проектування, структури даних — це елементи, які допоможуть вам вирішити конкретні проблеми.

2. Алгоритми. Потрібно спрощувати обчислювальну складність алгоритмів для підвищення продуктивності. Часто розробникі використовують алгоритми, надані сторонніми бібліотеками, не розуміючи, як вони працюють. Навчаючись в університеті, я витратив якийсь час на алгоритмічне програмування. Брав участь у конкурсах ACM ICPC, завдяки чому досяг кращого розуміння алгоритмів і їх обчислювальної складності. Не потрібно перемагати у цих конкурсах, потрібно просто брати участі. Навіть якщо ви навчитеся вирішувати лише частину завдань, будете краще розуміти тему.

3. SQL. На великих проектах зазвичай є спеціаліст, який обробляє запити баз даних, особливо складні. Але якийсь час вам потрібно буде це робити самостійно. Згодом вам доведеться розібратись і зрозуміти роботу ORМ. Наприклад, як там формуються SQL запити. Іноді краще писати ці запити самостійно, ніж покладатися на ORM.

4. Шаблони. Зосередьтеся на тому, коли ТРЕБА їх використовувати, а коли НЕ треба. Повторно перечитуйте шаблони шкірного разу, коли думаєте, що досягнули нового рівня, адже кожного разу ви будете розуміти і сприймати їх по іншому. Ваша ціль — досягти рівня, коли ви зможете автоматично розпізнати чи потрібно використовувати певні шаблони.

5. «Як працює веб» на рівні, який комфортний для вас. Ви повинні почати з основ і поступово заглиблюватися в кожну тему. Деякі важливі з них:

a. Як запити надходять із вашого браузера на сервер і як дані повертаються.
b. Cookies/Sessions
c. SSL/HTTPS

6. Принципи, яких рекомендовано дотримуватися:

7. Англійська. Вам потрібен хороший рівень англійської, щоб правильно розуміти завдання та щоб комунікувати з клієнтами.
Конкретна порада PHP

При розробці на PHP надзвичайно рідко ві будете використовувати чисту PHP. Як правило, ви будете розробляти, застосовуючи один з таких підходів:

  1. Фреймворки (такі як Symfony, Lavarel, ZF, Yii).
  2. CMS (наприклад, WordPress, Drupal, Typo3).
  3. Платформи (наприклад, Magento).

Для розвитку PHP можна опановувати будь-який з вищезазначених варіантів. Тим не менш існує певна крива навчання для шкірного з цих підходів, тобто ефективність в одному стеку технологій не означає ефективність в іншому. Але не поспішайте вивчати їх усіх одразу, вибирайте один за покликом серця. Зазвичай розробникі спеціалізуються не у всіх.

Щодо літератури, існує багато книжок із загального програмування, алгоритмів, патернів тощо. Багато було рекомендовано в попередніх серіях статей DOU для інших технологій. Я можу порадити такі сайти для початку:
1. php.net/manual/en
2. www.phptherightway.com

P. S.: Наприклад, мені достатня було лише документації від офіційного php.net , щоб отримати PHP сертифікацію.


Підписуйтесь на наш Telegram-канал для джуніорів , щоб не пропустити цікаві вакансії, стажування, курси, статті.

Опубліковано: 23/11/17 @ 11:47
Розділ php Блоги

Рекомендуємо:

Що на сайті потрібно закривати індексації, навіщо і як це робити
Ігри розуму: український математик про красу науки, нелюбов до ІТ та безперспективність повернення
DOU Проектор: Domivka Coliving — спільна оренда житла для IT-шників
Salesforce для початківців в IT: як я стала розробником за півроку
Front-Еnd дайджест #27: Angular 5 і Chrome Dev Summit 2017, поради Едді Османі, як Grammarly пише своє розширення