Отже, ви пишете на PHP. Любите жартувати про те, що долари є тільки у вас, при кожній нагоді нагадуєте, що «Facebook написаний на PHP» і стомлено пояснюєте, що сімка — це вже справжня мова програмування. Чесно-чесно.
Проте на будь-які пояснення потрібен час, а випадкові знайомі програмiсти, почувши сумнозвісні три літери, чомусь дуже швидко розчиняються в повітрі. Так само опоненти по онлайн-дискусії, заглянувши на профіль в лінкедіні, кидають «все ясно...» і відповідати чомусь перестають.
Ви прекрасно розумієте, що PHP розвивається чи не найбурхливіше з усіх дорослих технологій, а свої проблеми є у кожного стека (подивіться хоча б на JavaScript!)... Але плисти проти течії важко, і в один момент ви вирішуєте, що все, далі так жити не можна. Пора переходити у «вищу лігу».
Ця стаття має на меті дати вам приблизний огляд альтернативних шляхів розвитку PHP-девелопера. Я впевнений, що тут на DOU є люди, котрі пройшли практично кожен із шляхів, описаних у статті. Запрошую їх до доповнення і заперечення тезисів. Має бути цікаво.
Принцеса Ява, або Святий Ентерпрайз
Якщо говорити про серйозні технології, першою на думку приходить всюдисуща Java. На ній пишуть для великих організацій і банків, програмісти завжди хваляться найбільшими зарплатами, і навіть при тому, що кожного року на ринок висипає нова тисяча джуніорів, потреба в спеціалістах все одно лишається високою. Влаштуватися, як не дивно, вдається практично всім.
Крива розвитку. Всім відомо, що, починаючи з останніх версій п’ятірки, PHP поволі стає на шлях ентерпрайзу, і якщо ви писали на якійсь Симфі чи Ларавелі, об’єктно-орієнтований шлях Джави вас особливо не злякає. Напружувати буде строга типізація всього і всюди, і постійні ексепшни джава-машини, які не зрозуміло, як правильно ловити, і зовсім не ясно, як потім фіксити. Зате явно сподобаються бібліотеки для різних трюків, які мав реалізовувати мертвонароджений Spl.
Після четвертої-п’ятої прочитаної книжки є всі шанси зрозуміти патерни проектування. Заодно, щоправда, зрозуміти і те, що вони нікому не здалися. Але це вже зовсім інша історія.
Переваги. Хороший Java-програміст ніколи не залишиться без роботи. Достатньо висунути з вікна резюме, і на нього відразу злетиться ціла юрба молоденьких рекрутерок, готових на все заради підписання контракту. Робота, зазвичай, стабільна і з хорошими бонусами. Компанія буде робити все можливе, щоб втримати вас на місці, в тому числі, і в зарплатному сенсі. Можна купити більше сиру і лінз до зеркалки. Ляпота.
Недоліки. На відміну від вебу, фріланс-роботу на Джаві знайти доволі непросто. Доведеться йти в якусь контору, причому бажано на повний робочий день. З огляду на те, що джуніорів на нормальні проекти ніхто брати не хоче, рік-два доведеться потерпіти в якісь шарашці, зі значним пониженням грейду.
Ще вам, швидше за все, доведеться забути про всілякого роду стартапи. Системи, які ви будете розробляти, будуть складними, стабільними і, здебільшого, шалено нудними. Написавши за рік-два готовий проект, готуйтеся до десятирічного сапорту. Життя довге і, кажуть, до пенсії можна встигнути викотити соту, ювілейну версію софту для автомату з продажу кави. Яке-не-яке досягнення.
«Блаженні вбогі духом», або empty-stack developer
Східні філософії кажуть, що для того, щоб пізнати нірвану, треба спочатку відмовитися від усіх земних амбіцій. Перехід з PHP на JavaScript — дія того самого розряду, адже джаваскриптери — це чи не єдині, кого лишається зневажати пехопешникам. Часто єдина думка, що могла зігріти довгими ночами дебагу, була про те, що «в Джаваскрипті все ще гірше». І це, якщо чесно, і справді так.
JavaScript ніколи не планувалося робити серйозною мовою. Його творець признавався, що написав його за десять днів, і сам здивувався раптовій популярності свого дітища. З того часу всі, кому не лінь, намагаються перетворити JavaScript в нормальну мову, але виходить якась незрозуміла муть. Тим не менше, якщо ви прийшли в PHP з боку фронтенду, повернення в рідні пенати може навіть викликати у вас приємну ностальгію.
Крива вивчення. Якщо ви колись писали кілька рядків на jQuery, базу ви вже знаєте. Стосовно глибоких знань... Існують дослідження про те, що в мозку є спеціальний відділ для розуміння базових принципів JavaScript. Він дістався нам напряму від рептилій і ні в вербальну, ні в навіть графічну форму, це знання не конвертується. Допоможе тільки досвід: кров і піт, нецензурна лайка і розбиті об голову клавіатури. Якщо стане зовсім туго, можна згадати, що основним суперником JavaScript був VBScript. Тобто, могло бути і гірше.
Переваги. Нода, незважаючи на недавні фейли, показує достатньо непогані результати і погрожує забрати у PHP серйозний шмат ринку. Враховуючи, що з боку фронтенду впевнено наїжджають всілякі Ангуляри, а HTML5 дає можливості портувати DOOM, Джаваскрипт може серйозно розширити свою нішу «динамічних формочок» до «всього, що відбувається в вебі», і пропустити цей поїзд було б як мінімум необачно.
Недоліки. Клеймо фронтендера може бути навіть неприємнішим за титул PHP-програміста, і вас постійно будуть просити наверстати шаблон або підправити лого в фотошопі. Можливо навіть частіше, ніж написати код чи спроектувати архітектуру. Якщо CSS і pixel-perfect — це не ваше, в JavaScript краще не потикатися. Я серйозно.
Програмування заднього кінця, або скалабіліті убер алєс
Якщо ви доста непогано розібралися в архітектурі, знаєте чим GET відрізняється від HEAD, а latency від bandwidth, є сенс подивитися на інші серверні стеки. Найсильнішими гравцями на даний момент є Scala і Go. З огляду на те, що в першій не продихнути від колишніх джавістів, і вакансії зазвичай подвійні (Java/Scala), переходити з PHP на Scala видається не найкращим варіантом. Проте Go з цієї точки зору — просто казка.
Крива вивчення. Скажу чесно — щось із ваших знань вам таки знадобиться. Частково. Наприклад, оператор if. А ще функції є і там, і там. Якщо починати копати глибше, мозок доведеться трохи переламати.
Перехід до функціональності замість ітеративності в Scala і надмірна, я б навіть сказав «агресивна», простота Go даються на початках нелегко. Чого тільки варта відсутність опціональних параметрів або неявні інтерфейси.
Але з часом, після кількох тисяч рядочків коду, всі недоліки раптом стануть перевагами, і ви не зможете собі уявити, як можна було писати такий бидлокод, як раніше. Або ні.
Переваги. Враховуючи, що технології доста нові, десятирічних сіньйорів, як в Джаві, тут не водиться. Вакансії на сіньйорів зазвичай містять пункти «5 років досвіду в програмуванні» і «at least one project on Go (commercial or personal)». Це означає, що погравшись на гітхабі з якоюсь бібліотечкою, спокійно можна переходити в новий стек без пониження грейду і тайтлу. Справжнім сіньйором ви відразу не станете, але де вони є, ті сіньйори Go? В гуглі?
Недоліки.Молоді, трендові технології мають властивість час від часу здуватися з голосним пшиком. І якщо PHP найближчі років десять точно ніщо не загрожує, тренди, що стали модними занадто швидко, так само швидко можуть цього статусу позбутися. До того ж, унаслідок своєї молодості, ці стеки часто не мають всієї необхідної інфраструктури, якою може похвалитися PHP. Спитайте гоферів, як вони дебажать. Сміятися краще не треба — поб’ють.
Parseltongue програмування, або де мої дужки, прінт?
Пітон, по суті своїй, завжди сприймався як простенька мова, без особливих можливостей. Щось подібне до Паскаля: так, повчити діток програмування.
Але Youtube, Reddit, Instagram і Uber недвозначно довели, що великі проекти на ньому писати можна і треба. Девелопери Реддіту розповідали, як переписали весь код на Пітоні за один тиждень, причому 80% проекту було написано за вікенд.
Простоту оцінили і вчені. Стільки наукових бібліотек, як на Пітоні, нема в жодній мові. Тому якщо ви збираєтеся заглибитися в машинне навчання — особливих альтернатив у вас практично нема. Ну, хіба ще Lua, але екзотику ми зачепимо трохи пізніше.
Підходить Пітон і для вебу. Якщо перше, про що ви подумали після цієї репліки, було Django, раджу краще подивитися в бік Flask. Мені особисто він видається простішим і стабільнішим.
Крива вивчення. Ви вже знаєте Пітон. Ви просто про це не підозрюєте. Базові речі піднімаються за два дні, а тиждень вправ на leetcode додасть усе інше. Звісно ж, читаючи серйозний проект, ви час від часу натикатиметеся на дивні речі, яких ніколи не бачили, але документація і стек оверфлоу дадуть відповіді в два кліки. Словом, ви вже знаєте пітон. Чесно.
Переваги. Вам буде набагато простіше дихати без усіх цих фабрик сінглтонів та іншої лабуди. Ви навчитеся кожну думку виражати максимально чітко і просто, без генераторів коду і нашарувань безглуздих патернів проектування. У вас буде шанс потрапити на цікаві, наукомісткі проекти і навіть час від часу робити світ кращим (привіт, наприклад, NASA або CERN). Тому, якщо у вас лишився незакритий гештальт з університету — саме час пригадати усі ті персептрони і мурашині алгоритми, про які ви крізь сон чули щось із останніх рядів аудиторії. Плюс тисяча до самооцінки, до речі.
Недоліки. Кожне спрощення має свою ціну. Відсутність нормального ООП з усіма його заморочками може деколи серйозно напружувати. Динамічна типізація теж не грає на руку стабільності, і баг часом доводиться ловити довго і нудно. Але до цього ви вже в PHP звикли, чи не так?
Незважаючи на успіх гігантів, нових проектів на Пітоні не так вже й багато. Стартап радше вибере PHP або Рельси, ентерпрайз подивиться в бік Джави або Плюсів, і в один момент ви можете опинитися в ситуації, коли вакансій, по великому рахунку, не так вже й багато. Зарплата за межами топів теж особливо не вирізняється: за PHP в середньому вища, але явно не настільки, як в Джаві.
Ну і звісно без пониження грейду перейти на сіньйора буде важко. А враховуючи, що на всіх курсах «Вайті в айті» починають тепер з Пітона — можуть виникнути проблеми і з мідл вакансіями. Якщо вибрали цю дорогу, ґав ловити вже не вийде.
Дорогоцінні камені, перетворені на пісок
У свій час Ruby завдяки рельсам стала чи не найпопулярнішим вибором для стартапів. Приголомшливий успіх пригнав у технологію купу народу, більшість із них там і залишилася, навіть після карколомного падіння. Сапортять той один відсоток стартапів, що вижили, і час від часу намагаються прорватися в Твітер, який повільно, але впевнено перековбашує свій монорельс на JVM.
В цьому розділі я не буду писати багато, бо мій досвід з Ruby закінчився багато років тому на спробі пофіксити плагін для Redmine. З того часу я не дуже прихильно до нього ставлюся, тому, якщо хтось може поділитися досвідом і підводними каменями переходу, буду дуже вдячний.
Мертві страуси і хардкор
С++ недавно випустив чергове оновлення. Тепер базової документації стало повноцінних півтори тисячі сторінок. Якщо запитати хардкорних плюсовиків, які можуть бути проблеми у переході з PHP, вони будуть довго сміятися. А потім, якщо не надірвуться, порадять ніколи і ні при яких обставинах туди не соватися. І будуть в цьому абсолютно праві.
Крива вивчення. Навряд, чи я можу сказати тут щось осмислене, адже в мене все відбувалося у зворотному порядку: коли мене стомили постійні проблеми з пам’яттю і абсолютно неочевидна поведінка стандартних бібліотек, коли я задовбався 90% часу виділяти на дебаг типів даних замість реалізації бізнес логіки, я плюнув і пішов ваяти сайти по сто баксів за штуку і без проблем для нервової системи.
Тому занурення в плюси людини, яка вміє писати тільки на PHP, я уявляю собі слабко. Напевне, це буде схоже на кошмар. Або на розмову китайця з угорцем без перекладача. Покивають і розійдуться, без особливої шкоди одне для одного.
Переваги. Плюси — це круто. На плюсах можна писати ігри, браузери і навіть операційні системи. Якщо ти пишеш на плюсах, ти можеш спокійно перейти на будь-що інше, окрім, напевне, Асемблера. Хоча і на Асемблер, напевне теж. Адже без його вставок навряд чи вийде написати щось справді хардкорне. На плюсах пишеться саме серце сучасної технології. Я б навіть сказав — її душа.
Ще ви зможете писати код для всілякого роду девайсів і роботів, і коли скайнет поневолить людство, десь там між бібліотеками може навіть знайтися кілька ваших стрічокрядків коду!
Недоліки. Внаслідок абсолютно ідіотського рішення вивчати програмування в університетах на прикладі плюсів,С++ джуніор — це ягода того самого поля, що і джуніор Java. Проштовхнутися між ними буде доста важко. Досвід з PHP перевагою тут зовсім не буде, радше навпаки.
Також є великий шанс потрапити на «мегацікавий» проект в стилі написання і підтримки кодеків до відеоплеєра. Цікаво перший місяць, а далі починається смертна нудьга і постійне копання в перевантаженій технічними даними документації. Словом, задоволення на любителя. Але, якщо любитель саме ви — вперед!
Яблука, роботи і розбиті вікна
Бум мобільних девайсів спричинив різке зростання потреб у мобільних девелоперах. Бульбашка доткомів переросла у бульбашку додатків (не можу примусити себе сказати «застосунків»), і остання лопатися поки не збирається. Можна встигнути застрибнути на поїзд, котрий рухається, або в прірву, або в щасливе майбутнє. Як пощастить.
Крива вивчення. Андроїд пишеться на Джаві, тож зауваження ті самі, що і в першому розділі. На Обжектіві я писав мало, тому більше чекаю на ваші коментарі, але суб’єктивне відчуття мені нашіптує, що розібратися з ним повинно бути теж неважко. До того ж, завжди є всілякого роду фонегапи, де можна наваяти усе на Джаваскрипті і зробити вигляд, що так і має бути. Перспектива таких підходів, тим не менше, — достатньо сумнівна.
Переваги. Кількість смартфонів на землі зростає з шаленою швидкістю, і комунікують із сервісами вони в основному через додатки. Без роботи ви явно не залишитесь. Почати писати код можна і самому: ліцензія розробника під iOS коштує сто баксів на рік, а у випадку з Android достатньо взагалі одного девайсу. Склепаний за кілька десятків вечорів черговий трекер фінансів може послужити вам непоганим портфоліо, і на роботу можна йти уже впевненим мідлом, на зарплату пехопешного сіньйора.
Це якщо хочеться йти на роботу. Мобільна розробка — це одна з небагатьох ніш, де програміст може досі заробити гроші напряму в користувачів і навіть має шанс на шалені прибутки у випадку аномалій на кшталт Флапі Бьорд.
Недоліки. Ніша, якою б вона широкою не була, лишається все ж нішею. Будь-які сподвижки в розробці мобільних сайтів можуть дуже швидко урізати ринок як мінімум вдвоє. Популярність платформи теж не вічна — подивіться, що сталося з віндофонами.
Разом з тим основний функціонал вашої системи все одно буде лежати на сервері, і вам доведеться або розбиратися і з ним теж, або надіятися на адекватність колег. Враховуючи наївність другого підходу, вивчення хорошого бекендового стека явно не завадить. Але з іншого боку, ви вже знаєте PHP!
Шаманські наспіви серверних
Посада DevOps — достатньо новий винахід. Якщо коротко, це щось середнє між сисадміном і розробником інфраструктури. В стилі: «Я не програміст, але якщо не можу знайти потрібного софту, я його просто пишу». Якщо ви приділяли достатньо часу деплою вашого PHP проекту, і вам це сподобалось, ця дорога — для вас.
Крива вивчення. Вік живи, вік учись. Інакше ніяк. Технології тут застарівають навіть швидше, ніж у всіх інших сферах, тож ніс по вітру доведеться тримати постійно. Вмієте задокерити проект і налаштувати папети на вагранті — цього буде достатньо для початку. Далі — rtfm. Проте, перед тим, як починати, навчитися виходити з vim усе ж доведеться.
Переваги. Занудьгувати тут не вийде. Доведеться одночасно менеджити цілий зоопарк технологій, тому розбиратися доведеться у кожній із них. Водночас, у критичні моменти треба вміти пофіксити білд, не піднімаючи паніку і не видзвонюючи попиваючого мохіто на Багамах програміста.
В періоди спокою, тим часом, можна без особливих наслідків сидіти на фейс... займатися самоосвітою, і ніхто з цього приводу нічого тобі не скаже.
Недоліки. Почати напевне варто з того, що девопсів програмістами вважають не тільки лиш всі. Точніше мало хто так вважає. Набагато частіше доводиться носити ярлик сисадміна і перевстановлювальника вінди для бухгалтерії. Є ймовірність, що доведеться таскати серверні стійки на дев’ятий поверх. Добре, якщо вони влазять у ліфт. А якщо ні?
Відповідальність за стабільність системи тепер повністю на ваших плечах. Чекайте дзвінків посеред ночі, на вихідних і посеред відпустки. Стабільна робота всіх систем, натомість, ніяких бонусів не принесе. До хорошого звикають швидко.
Вкладка «інше», або ранні послідовники
Найпростіший спосіб добитися успіху в певній сфері — почати цікавитися нею з самого початку. Кожного місяця у світі народжується щось нове, і невелика кількість цих немовлят в недалекому майбутньому ввірвуться на ринок, розмітаючи конкурентів, як ангуляр з реактом винесли усі джаваскриптові фреймворки.
Більше того, технології можуть набути популярності навіть після десятиліть тихого існування на задвірках айті світу. Тому, якщо ви обожнюєте Lua чи Rust, чи Kotlin, або фанатієте від Хаскеля з Кложурою, не спішіть зраджувати собі, переходячи на щось модне. На вашій вулиці теж може бути свято. Світ міняється дуже швидко, хто був нічим, стане всім. Ну і, звісно навпаки.
Звісно ж, я пропустив багато інших технологій і напрямків, у які ще можна податися. Наприклад, як ви помітили, я не сказав зовсім нічого про С чи С#. Справа у тому, що я намагався писати тільки про те, з чим стикався хоча б побіжно (про С в контексті написання модулів для PHP я розповім у наступній статті). А все інше — доповните ви в коментарях. Всі ж тут вірять в опен-сорс, чи не так? :)
Замість висновків
Філологи кажуть, що для того, щоб справді зрозуміти рідну мову, треба вивчити одну-дві іноземних. Це прекрасно працює і для мов програмування. Перестаючи сприймати кожен концепт вашого улюбленого стеку, як даність, починаєш відразу розуміти глибинну суть базових принципів, і, як наслідок, починаєш писати кращий код. Тому спробувати нове варто навіть тим, хто переходити нікуди не збирається. Зайвим не буде точно!
На цьому, напевне, все. Як я вже казав, чекаю ваших зауважень, заперечень і агресивної критики в коментарях. Якщо мене не загризуть тролі, в наступній статті я спробую дати кілька порад тим, хто вистояв, і міняти стек не захотів.
Не перемикайтесь!