Про хлеб с маслом, хороший код и истоки ITSupportMe: наш PHP отдел

В начале был PHP и PHP был ITSupportMe… Шутки шутками, но именно этот отдел — старейший в компании, а еще один из самых многочисленных, организованных и самобытных. За годы совместной работы эти ребята накопили столько совместных идей, историй и инсайтов, что мы просто не можем скрывать их больше от вас. Итак, встречайте, наши PHP-шники!

А помогут нам разобраться, что к чему, наши крутые собеседники старожилы ITSupportMe, профи своего дела и просто интересные люди — Константин Литвинов, Евгений Шмыговский и Виктор Штанзе. И как это часто бывает с профессионалами, первый вопрос приводит нас к…

О PHP замолвите слово

Многим известно выражение, что PHP — один из немногих языков программирования, владея которым, можно заработать себе на хлеб, $ало и воду. Согласны?

Константин Литвинов: Ну, да. Иногда даже на масло с икрой :) А вообще это простой язык. Есть две крылатых фразы (кто знает, поймет): во-первых, что это язык домохозяек, а во-вторых, очень часто говорят «так исторически сложилось», в других языках я не встречал такого выражения. Сам PHP уже не молодой и берет свое начало со времен, когда сайты делались статическими на html. Он и был задуман для того, чтобы простой человек мог себе сделать динамический сайт. То есть когда ты регистрируешься, и после тебе прилетает «Здравствуйте, Константин» — и все твои данные динамически подгружаются. Сейчас это все в порядке вещей, а тогда это был настоящий прорыв. Плюс PHP не компилируемый, а интерпретируемый, что проще. Можно заниматься отладкой во время девелопмента. Вносишь какие-то изменения в коде, выполняется запуск скрипта — и  эти нововведения сразу принимаются, не нужно ждать, когда у тебя тесты пройдут, приложение соберется, как с Java языком, например, или Delphi, С и т. д. Он прост в понимании, прост во вхождении, многие студенты осваивают PHP одним из первых.

Виктор Штанзе: Да, я хорошо помню, как примерно в 2005 году началась активная волна с фрилансом. И тогда одна моя одногруппница неплохо зарабатывала для студента: днем универ, а вечерочком у нее под бутылочку пива хорошо заходили эти самые фриланс проекты на PHP. Притом человек проучился всего два курса, получил, считай, азы программирования, а PHP она в тот момент уже освоила и лабала на нем очень так конкретно.
В общем, тут главное, чтобы была какая-то логика, представление желательно об ООП — и в освоении этого языка у тебя никаких проблем не будет.

В интернете можно найти много критики PHP, вернее, не столько самого языка, сколько некоторых людей, которые на нём пишут. Что посоветуете PHP разработчику, чтобы тот был достойным представителем своего рода?

Константин Литвинов: В простоте этого языка есть свои подводные камни, конечно. Можно накосячить много в чем. Я помню свои этапы эволюции: сначала начинаешь развиваться, используя какие-то CMS-ки, после этого переходишь на фреймворк, и когда ты уже понимаешь первый, второй, третий фреймворк, начинаешь на нем писать, работать и зарабатывать деньги, то уже не хочется возвращаться на CMS, но иногда поностальгировать можно. Тут каждый сам себе выбирает.
А насчет  плохого кода... когда ты что-то пишешь, и потом через полгода-год возвращаешься к тому, что сделал, читаешь — и если тебя все устраивает в том, что ты когда-то написал, значит, ты не растешь. А если ты видишь, что это г...окод, значит, ты вырос. То есть плохой код неизбежен. Главное — идти дальше.

Виктор Штанзе: Фишка в том, что если ты знаешь только PHP, то, считай, ты только на хлеб себе и заработаешь. Потому что в данный момент на чистом PHP ничего толкового не сделать. То есть тебе обязательно нужно знать какие-то фреймворки, понимать какие-то свои нюансы, которыми обладает каждый из них, тебе нужно будет учить какие-то дополнительные технологии: twig и т.п. Знание всего этого позволяет тебе котироваться как специалисту и быть востребованным. Ну, а если ты знаешь только PHP — сорян, чувак, этого уже мало, это уровень школьника. Та же банальная работа с базой требует от тебя знаний не только PHP, но и знаний SQL того же самого. Да, ты сможешь сделать простую выборочку, но когда начинаются какие-то большие сложные выборки, огромная база, в которых нужно понимать, как по индексам набирать и все остальное — для этого нужно углубляться в предметную область, поэтому одной только пыхой не отделаешься.

Евгений Шмыговский: PHP — это один из инструментов веб-разработки. А дополнительных технологий, инструментов, фреймворков сотни, плюс постоянно появляются новые, веб динамично изменяется. Одного знания PHP недостаточно. Чем больше ты знаешь о всевозможных технологиях, сопряженных с веб-разработкой, тем более ценный ты специалист.

Виктор Штанзе: Классно переходить на PHP с языков, где присутствует строгая типизация. Тогда ты понимаешь, с чем ты работаешь, ты привыкаешь к тому, что у тебя одна переменная должна быть строкой, вторая — числом и т.п. — и ты работаешь в этом контексте, иначе у тебя компилятор сразу ругнется. PHP этого не делает. В нем есть приведение типов просто так называемое, оно не такое, конечно, дурное как в JavaScript. PHP более мягкий, более лояльный язык, поэтому он закрывает глаза на некоторые ошибки.

Евгений Шмыговский: Хотя сейчас PHP идет в сторону строгой типизации, что есть в других языках. Потому что, когда много людей вовлечено в процесс разработки, читают код, важно, чтобы все они четко понимали друг друга и не оставалось недосказанности.

Виктор Штанзе: Я думаю, что Zend ведут PHP к тому, чтобы превратить его из какого-то серверного языка, который на начальных уровнях был довольно-таки простым, в полноценный язык, который умел бы почти все, как та же самая Сишка. Это было бы очень классно. Если бы PHP мог самостоятельно орудовать памятью и знал бы, как это все дело делать — вообще было бы шикарно, как мне кажется. Ты представляешь, что такое пыха, которая следит за тем, сколько памяти она жрет? Пыха, у которой есть гарбич коллектор и которая после выполнения зачищает после себя все следы и высвобождает память и все такое. Ну, это из серии «если бы…». Админы бы просто пищали от удовольствия, сколько сразу оперативки высвобождается. Короче, будет классно, если PHP станет еще круче, чем Сишка.

Евгений Шмыговский: Ну, опять же, PHP однопоточный, то есть он не может сохранить свое состояние. Запустился — выполнился — очистился — закрылся. Каждый раз заново. В Java, скорее всего, по-другому: там приложение, которое постоянно работает и, соответственно, со временем может забивать память. Но это уже совсем другая история.

С чего начинается ITSupportMe

Это правда, что PHP — одно из старейших направлений в компании?

Константин Литвинов: Да, с отдела PHP все началось. А вот когда все началось — уже никто, наверное, и не вспомнит. Андрей (обращаясь к Андрею Куликову), ты каким пришел? Третьим, четвертым? Семь лет белорусскому офису, в общем, ну, и нашему отделу, получается, тоже.

Каким образом вы координируете такое большое количество людей?

Константин Литвинов: Ну, смотри, с год назад мы нанимали специалиста, коуча по скраму. И вообще Леша (предыдущий тимлид) пришел с идеей сделать Nexus Scrum — это такой фреймворк, надстройка над стандартным скрамом. Когда у тебя много команд, то нужно их как-то правильно координировать. Но там идея не задалась по началу. В результате я уже перенял эту мысль, почитал, мне понравилось, в итоге мы уже месяцев восемь как это все построили — связи между командами, специфику взаимодействия внутри и т.д. — все это придумано до нас, мы велосипеда не изобретали. Просто взяли, чуть-чуть подредактировали — и используем. Ведь скрам не диктует какие-то моменты, которым нужно следовать от и до, а предоставляет, скажем так, скелет, на основании которого ты работаешь. Из таких вещей, которые мы с Женей Шмыговским адаптировали и что-то свое привнесли: мы немного изменили ITSM по работе, перепилили scrum dashboard, buildlog, и вот уже закончили prioritization — теперь тоже можно команды объединять на какие-то определенные проекты, и соответственно, на основании капасити этих команд и проектов можно уже приоритезировать задачи внутри.

Виктор Штанзе: Например, основные средства координации в нашей команде Charlie — стендапы, синки. Стендап — это процедура, пришедшая к нам из скрама, когда человек в течение пары минут отвечает на три вопроса: что я делал вчера, что я буду делать сегодня и есть ли у меня проблемы. Да, мы, как сектанты, становимся в кружок и каждый день в одно и то же время выполняем этот ритуал. В 10.45. Этот стендап хорош тем, что проговаривая всю схему действий, ты настраиваешься на работу. Ну, и это небольшое средство контроля, конечно.
Синк (sync — от англ. synchronize) — продукт собственного производства, такой сидячий стендапчик. Ты говоришь, чем ты занимаешься и какие у тебя планы до конца дня. Мы проводим его в середине рабочего процесса. Например, в начале дня у тебя были планы, а в середине ты рапортуешь: все ли у тебя хорошо идет, может, тебе надо обсудить что-то, попросить совета или помощи. Если ты завис на каком-то таске, бился над ним полдня и мозг был слишком загружен, чтобы оторваться и сказать: «Ребята, есть трабла», то синк — это лишний повод, чтобы это сделать. Он уже никак не относится к аджайл или скраму, это уже чисто наша хотелка, которая вышла из наших ретроспектив. Так мы работаем эффективнее. Синк идет в более произвольной форме, зачастую содержит какие-то технические детали.
Когда ты засинкиваешь все в конце спринта, существует большой риск не успеть справиться с глобальной задачей. Поэтому есть смысл синхронизироваться каждый день, чтобы держать руку на пульсе — и не придется мчаться потом навстречу локомотиву, поджав ягодицы, с  криком: «Я успею закрыть этот спринт!»
Зачем тянуть до последнего, если мы можем синхронизироваться в том, что мы сделали для спринта, например, сегодня, каждый день — и таким образом процесс разработки становится еще более прозрачным, все проблемы поднимаются раньше и решаются быстрее. И, конечно, это помогает немного отвлечься на пару минут, если ты, например, был загружен.

Об организации и самоорганизации 

Когда начинается и заканчивается рабочий день у отдела? Есть ли какие-то нюансы в распорядке?

Константин Литвинов: Распорядок как у всех в компании. Есть, конечно, такое понятие, как свободный график, но у меня немножко другой подход к нему. Да, я знаю, что некоторые выбирают себе определенные часы пересечения, допустим, все в команде присутствуют с 12 до там 3, а в остальное время как хочу так и хожу, главное — отработать 8 часов. Но я к этому не очень положительно отношусь, хотя да, свободный график есть, но у нас он не совсем свободный, а просто смещен. Народ оформляет дополнительное соглашение, и допустим, если я хочу приходить в 8 часов и работать до 5–6 вечера — ок, но только ты постоянно ходишь по этому графику. Ты можешь даже для каждого дня недели прописать определенный график, допустим, в понедельник с 10, во вторник с 11, в среду там с 9 и так далее. Это тоже нормально, просто, ориентируясь на этот график, я всегда знаю, когда человек на работе. Ну а в остальном все ходят с 10.30. Я лично никогда себе не беру отдельный график, хотя у меня двое детей, прихожу как все и ухожу как все. Иногда ребята задерживаются на работе, но я этого не приветствую. Как говорила одна из моих руководительниц на одной из моих прошлых работ, если ты не справился с поставленной задачей за рабочий день, то ты плохой работник. Надо все успевать.

Евгений Шмыговский: У нас аналогичная ситуация. Все, в принципе, приходят и уходят в одно время. Есть один человек, у которого тренировки, и он в какие-то дни приходит и уходит немного пораньше, но это частный, не особо выделяющийся случай.

На выходных отдыхаем?

Константин Литвинов: Работаем. Над собой. Программисты не отдыхают. Ну, как, отдыхают и не отдыхают одновременно. Есть и тимбилдинги, есть и просто отдых с семьей, есть и посидеть чуток покодить для себя.

Какие в отделе традиции?

Евгений Шмыговский: Раньше была хорошая традиция — гусей писать (наказывать сотрудника, забывшего залочить компьютер, смешной записью в общем чате от его имени, например, «Я люблю гусей»).

Константин Литвинов: Да тут от команды зависит. У нас, по сути, один отдел Bravo, состоящий из 4 команд, плюс Charlie Жени — и в каждой команде свои разработчики, тестировщики и бизнес аналитики со своими тимбилдингами и другими интересными событиями.

Виктор Штанзе: Charlie, например, не матерится. А все почему? Потому что не так давно решили вместе, что будем за каждый мат штрафовать сами себя на 50 копеек. Деньги шли в наш общий фонд. Мы себе тогда такой пуфик купили... Женя очень долго противился и доказывал, что есть еще и литературные слова: «Семерых ощенила сука…» — все цитировал он. В общем, это было тяжело примерно неделю. У всех счетчик долгов в копилочку все тикал и тикал, а потом как-то полегче стало внезапно, а затем и надобность в штрафах пропала за неимением преступных намерений — и мы недавно прекратили этот эксперимент.

Евгений Шмыговский: Мы еще штраф за опоздание вводили, опять же не с целью наказать, а с целью дисциплину что ли ввести, точнее самодисциплинироваться. Это не был запрет, все единогласно решили и подписались под этим, несмотря на то, что люди знали, что у них есть проблемы с приходом на работу точно в срок. И вот там мы уже знатно копилку команды пополнили, ведь за каждую минуту опоздания — рубль.

(Кстати, именно эта самая копилка во многом и помогла воспитанникам Гомельского приюта получить в подарок от ITSupportMe новенький телевизор https://www.itsupportme.by/news/18)

Виктор Штанзе: Все это почерпнуто у американцев. Я как-то прочитал историю мэра Джулиани, узнал о его теории разбитых окон — и вдохновился.