Артем Палий, Software Engineer в DA-14 Software Development (https://da-14.com/) - ИТ компания которая занимается веб и мобильной разработкой используя JavaScript технологии. Специализируется на React Native и Angular, считает, что для разработчика не зазорно пройти курсы актерского мастерства.

https://www.facebook.com/seonetartem
https://twitter.com/seonetartem
https://github.com/seonetartem

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

Как ты пришел к IT?
Впервые о программировании я услышал в институте, нам преподаватель за один урок рассказал основы PHP и mySQL. В Харькове я пошел в «ШАГ», и был одним из 3-4 студентов, кто не бросил обучение. Дипломная работа была по PHP, и мне казалось, что я разбираюсь в PHP, пока на первой работе не столкнулся с фреймворками.
После «ШАГ» устроился в компанию, а проект был с Zend Framework, и поэтому он оказался очень сложным и трудоемким. После университета пришлось много учить, чтобы компенсировать нехватку знаний важных для реальных проектов

Ты раньше писал мобильные приложения?
Первый опыт работы на mobile был опять же в компании, где я начинал. Работал с платформой Titanium Studio. Платформа предназначена для iOS и Android и была актуальным инструментом в 2011 году. Да, лаги были, все плевались на него. Но так как в то время маки (iMac/MacBook - примечание редактора) были довольно дорогими, мы поднимали хакинтош. Хакинтош грузился у меня с ошибками, конечно, тоже трюки были с этой системой. Под нее нужна была определенная версия звука и видео карты. Но сейчас также, если хакинтош поднимаешь, то нужно много чего фиксить.

«Мне было интересно, как это работает, поэтому я делал в основном руками, чтобы понимать, что где находится»

Сколько языков программирования ты знаешь?
Помимо PHP и JS, немножко пробовал Python, Java, Objective-C, Swift.
Когда-то учил Objective-C, даже на курс записался. Это дикая штука, меня она до сих пор пугает - когда нужно проинтегрировать или подключить плагин, лезешь в какие-то файлы и вручную прописываешь его. А в React Native можно линковать по своим правилам, и он добавляет нужные строчки, подключает библиотеку. Но мне было интересно, как это работает, поэтому я делал в основном руками, чтобы понимать, что где находится.
Например, смотришь мануальную установку даже того же Facebook SDK, ну и вручную там прописываешь строчки, добавляешь, импортируешь файлы. Вот я иногда открываю файл мэйн, в котором 2-3 метода и пытаюсь понять, где название метода в Objective-C.
A в React Native либо ты CRNA(create-react-native-app) ставишь, либо Expo используешь. Если точнее, то Expo подходит для простых приложений, когда не нужно специфических фич и можно обойтись стандартными решениями. Но если тебе нужно что-то кастомное, чего нет в плагине в Expo, ты делаешь eject и опять же продолжаешь как на обычном React Native проекте работать.

«React Native - для MVP-ишки вообще идеально»

React native - сейчас это выход из ситуации, чтобы не брать на проект iOS или Android разработчиков?
Смотря для какого проекта. Вот есть большие проекты, а есть MVP (minimum viable product - примечание редактора). Для MVP-ишки вообще идеально - не нужно интегрироваться с какими-то новыми фичами. Возможно, даже есть плагины, но если плагина нет, то все равно надо либо приглашать iOS или Android разработчика, либо нужно самостоятельно разбираться.

Насколько знание фронтэнд от React пересекается со знанием React Native?
Очень тесно. То есть архитектура вся почти такая же, специфика во внутренней реализации компонентов в основном - это отдельные теги и стили.

В чем разница подходов в веб разработке React и мобильной React Native?
Наверное, в UX, как пользователь взаимодействует. Пользуясь сайтом, мы привыкли мышку использовать, а в мобильных приложениях «тапы» и тому подобное. При работе с клавиатурой вообще не заморачиваешься на вебе - клавиатура у тебя не присутствует на экране, если у тебя нет виртуальной. Иногда я только встречал виртуальную клавиатуру, когда вносишь CVV карточки. В мобильной разработке самые большие сложности были именно при работе с клавиатурой. Самое распространенное, когда ты «тапаешь» на какой-то инпут (Прим. ввод данных) у тебя всплывает клавиатура, которой не можешь управлять, потому как она открывается поверх всего и может перекрывать все поля для ввода данных, особенно если их много. Есть частичные решения, но не всегда они подходят.

Ты бы делал мессенджер на React Native?
Обычный мессенджер я, наверное, на React Native и сделал бы. Если это простая реализация по вводу текста. Есть опыт разработки чата на React Native, который также содержал динамический контент, картинки, кнопки, потому необходимо было переделать всю логику, и в этом была сложность. Существует плагин и коллега, который потом также работал над этим проектом, форкал (Прим. fork) его. И то, потом все равно находились баги. В React Native основная проблема в том, что часто выпускаются новые версии. Но плюс в том, что ты всегда можешь «забрать» у девайса его размеры, в вебе же наоборот - у тебя все должно подстраиваться под размеры окна.

С публикациями React Native приложений в сторах были какие-то проблемы?
Были, разумеется. Для iOS мы стандартно используем XCode, для Android - Android Studio. Все необходимо подписывать сертификатами. Были сложности с тем, чтобы настроить сертификаты, приходилось «грохать» все и по новой генерировать. Я переживал, что могу навредить iOS приложению в целом, но потом прочитал, что сертификат предназначен только для доставки приложения в App Store.
Есть еще веб ресурсы и инструменты, такие как: HockeyApp, Fastlane, которые помогают с билдами. Они помогают автоматизировать рутинную работу, например автоинкремент билдов, потому что иначе стор (Прим. Apple Store) не даст залить его, будет ошибка о том, что уже такой существует. Можешь генерировать сертификаты плюс добавить интеграцию с любым мессенджером, чтобы ты знал, прошел или нет билд. Допустим, на моей машине билд занимает 10-15 минут.
Также были проблемы, когда нам реджектил приложение App Store. Не соответствовал резолюшн тому, что должно было быть по правилам. Суть была в том, что в xCode есть возможность отключить поддержку iPad. Так как клиенту не нужны были iPad, я ее отключил в XCode. И ошибка пришла о том, что на iPad в режиме iPhone не соответствует разрешение и поплыла верстка. Исправил потом эту ошибку и больше проблем не было.

На сколько быстрее React Native разработка в сравнении нативной разработкой?
Если брать специалистов одного уровня по опыту, то субъективно на 30%.
Но я не пишу на native, мне сложно сказать. В случае с нативной разработкой на iOS & Android работают два разных разработчика. Им нужно больше согласований. Ты и так знаешь свою логику. Пишешь, а потом просто поправляешь верстку.
Сложности могут быть только, когда push notifications настраиваешь, для iOS отдельный сертификат, у Android - свои настройки, свои нюансы. Например, Android (в отличие от iOS) по умолчанию бейджи не поддерживает, библиотеку необходимо устанавливать отдельно.

Вот с такой сложной React Native разработкой, как ты делаешь эстимейты для проектов, есть ли у тебя какая-то формула?
В чем-то еще осталось «вебовское» мышление, когда ты видишь фичу и знаешь, как оценить ее в часах. Но в мобильной разработке из-за особенностей верстки, я умножаю субъективно на 1.5 раза.
Еще нужно учитывать то, что React сам по себе модульный и ты можешь выделять какие-то типовые задачи, которые чаще всего встречаются, и на них можно сэкономить время. Например, логин через Facebook - фича очень простая и редко меняется. Максимум, что ты можешь сделать - это перекрасить кнопку или как-то формат поменять.
Специфика мобильной разработки еще в том, что клиент будет постоянно хотеть весь функционал в актуальном состоянии, которое необходимо будет апдейтить регулярно. При веб разработке все гораздо проще - пока сервер поддерживает версию, сайт будет продолжать работать. Разве, что с PHP бывают проблемы, когда, например, сервер не будет поддерживать версию 5.4. и т д.

«Я бы не жалел ни о чем. Все, что было, - это опыт»

Три совета себе 23-летнему, можно мне или разработчикам.
Я бы не жалел ни о чем. Все, что было, - это опыт. Советов нет, но, может, общие мысли. Все познается в сравнении. Те люди, кто пришел в ИТ сферу, как на первое рабочее место, могут быстро перегореть и даже пробовать другие направления. Но есть те, кто уже опробовал на себе не технические профессии, а потом пришел в ИТ. Например, поработали в McDonalds или какой-то госструктуре. Они гораздо больше ценят свою новую профессию и понимают важность того, что надо обучаться и вкладывать в свое развитие.

Как выбираешь тему для доклада?
Предпочитаю готовить доклады, опираясь на свой опыт, им интересно делиться.
Первый мой доклад был про Angular 2+. О том, как мы начинали проект, как мигрировали, как все настраивали. Второй доклад, с которым я выступал в Виннице и Николаеве, был о том, как перестроить свое мышление с веб разработки на мобайл, - как переходить с Angular на React Native.

Как прокачивать hard skills?
Брать и пробовать, только так. Самый простой способ - это пойти на курсы. Только курс надо тоже адекватный выбрать. Советовал бы читать отзывы, но идти на определенного преподавателя, о котором ты уже можешь что-то знать. Еще вариант, когда нанимают специалиста, который в частном порядке приходит в компанию и обучает. Нам когда-то в компанию приглашали профессора, который алгоритмы читал. Но не зашло, потому что не было применения. На курсах ты можешь основы узнать, но специалистам мидл уровня может быть скучно на таких занятиях. А если что-то хардовое, то часто не набирают людей. Пытался как-то записаться в Харькове на UX, но они год никого не могли набрать на курс, потому что был сложный контент, который бы не потянули новички, а остальные, видимо, считали, что сами прокачаются на проекте.

Как прокачивать soft skills?
Записываться на курсы, например, актерского мастерства.

«Плюс курсов актерского мастерства в том, что в процессе обучения избавляешься от своих комплексов»

То есть разработчику идти на курсы актерского мастерства?
Ну да, ораторское, актерское. Плюс актерского в том, что в процессе обучения избавляешься от своих комплексов. Если тебе сложно взаимодействовать с людьми, то эти курсы тебе помогут. Ты там дурака будешь клеить и это очень сильно раскрепощает. Помню себя в университете, я был стеснительным очень и мне было сложно даже в кабинет зайти, например, деканат, чтобы что-то спросить. А потом ты попадаешь в среду, когда понимаешь, что за тебя это никто не сделает. А курсы могут создать подобную среду, когда ты делаешь что-то принудительно, но со временем приобретаешь полезные навыки.

Какая польза человеку, который ходит на конференции?
Общение, новые знакомства и плюс возможность услышать о том, с чем ты не работаешь. Потому что, в основном, если работаешь на одном проекте, то ты четко двигаешься в одном домене (предметная область - примечание редактора). У тебя мозги заточены на что-то определенное и сложно переключаться на другие технологии.

«Невозможно знать все - каждый день что-то новое выходит, не смотря на это развиваться - необходимо»

Какой у тебя челленж на данный момент?
Развиваться. Недавно услышал термин от Елены Жуковой о синдроме самозванца. По этой версии, например, убеждаешь себя в том, что ты - мидл и еще есть, чему поучиться, даже если тебя квалифицируют, как синьора. Невозможно знать все - каждый день что-то новое выходит, не смотря на это развиваться - необходимо. Вот мне не нравятся эти понятия - «Senior ‘Framework’ Developer». Это чаще встречается в компаниях, где регулярно тестируют и определяют «ранги». А по факту, на собеседованиях неоднократно сталкивался с тем, что таким senior разработчикам сложно мыслить не в рамках CMS или фреймворка. К примеру, самостоятельно создать SPA (single page application) на незнакомом стэке им будет очень сложно и необходимо постоянно контролировать их работу и подсказывать. И так бывает.