Заметки Андрея Романова

Пишу о жизни, учёбе и работе

Ctrl + ↑ Later

Мой опыт работы в Рамблере

Так вышло, что с 10 октября по 23 ноября 2016 года я работал фронтенд-разработчиком в отделе рекламных технологий Рамблера.

Впечатления от собеседования я описал в отдельной заметке.

Помимо меня в отделе было ещё семь фронтендеров: один джун, один тимлид и пять мидлов.

Я занимался поддержкой и развитием «Лета», системы для размещения баннеров на площадках RAMBLER&Co. Система была написана на ПХП, Реакте и Редаксе, ну и писалась она в довольно сжатые сроки (впрочем, так бывает всегда).

Про первый рабочий день

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

Бейдж-пропуск

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

Про работу

Нормально развернуть проект не получилось. Ну, формально получилось, но на деле локально не грузилось большинство картинок, потому что картинки хранились не в какой-нибудь общедоступной CDN, а непонятно где. Зачем-то прямо в репозитории хранились билд-файлы и композеровские пакеты, и всё это ломалось на каждый чих. С фронтендом всё тоже было не в порядке. В проекте не было Автопрефиксера! А команда, которая писала проект, никогда раньше не работала с Реактом и Редаксом, что вылилось в огромные компоненты длиной более чем в тысячу строк, в дебрях которых напрямую изменялось состояние и делались другие страшные вещи, о которых я рассказывать не буду, иначе вы сегодня не заснёте. Тестов почти не было (ну, была парочка на весь проект).

Кодревью чаще всего ограничивалось комментариями «ты здесь забыл убрать console.log». Сомневаюсь, что я писал настолько хороший код. В Иннове мой тимлид (спасибо, Антон) всегда оставлял комментарии не только про код, но и про решение в целом (архитектура, масштабируемость и все дела).

В целом от продукта оставалось неприятное ощущение — не только из-за кода, но и из-за дизайна и пользовательского опыта в целом. Орфографические и пунктуационные ошибки в интерфейсе были нормой. Чтобы их исправить, нужно было согласовывать обновлённый текст с менеджерами. Не было никакой стандартизации, кнопки были разных размеров, текст тоже, всё было хаотично разбросано по странице.

Дизайнер, как оказалось, в нашем отделе был один, а проектов в отделе было штук пять. И, как мне сказали, он не был способен к стандартизации, каждая страница у него получалась уникальная и неповторимая.

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

Про увольнение

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

Когда я сообщил о том, что собираюсь уходить, тимлид с техдиром долго уговаривали меня остаться и пытались понять, почему я ухожу. Я рассказал, что мне не понравилось и привёл в пример Яндекс и Авито, сказав, какие вещи там лучше. Кажется, я немного обидел техдира, когда он на вопрос «в Авито, по твоему мнению, специалисты опытнее наших?» получил ответ «да». Помимо прочего, мне предложили зарплату почти в полтора раза больше прежней, так что если вдруг захотите получать больше, сообщите начальнику, что собираетесь уволиться ;–).

Про условия работы в целом

Компания согласилась оплатить мой перелёт из Омска в Москву, что довольно неплохо. Правда по условиям трудового договора я был обязан вернуть деньги за билет, если проработаю в компании меньше года. В итоге выделенную на билет сумму просто вычли из моей последней зарплаты, ибо год я не проработал. Но и тут без фейлов не обошлось. Через какое-то время после увольнения мне позвонили и сказали, что вычли 10 000 ₽ (столько выделили на перелёт), а билет стоил 9 500 ₽, и, мол, мне нужно приехать в офис Рамблера и заполнить какую-то бумажку, чтобы получить обратно разницу.

В компании есть собственная библиотека, но воспользоваться ей мне не довелось.

Для сотрудников есть куча всевозможных скидок, их список хранится в большом гуглодоке. На деле оказалось, что половина скидок неактуальна, а большинство из них и вовсе не превышают 10%.

Каждому разработчику выдают для работы макбук и внешний монитор.

Брендированные печеньки

«Кофе, чай, печеньки» — не ведитесь на это. Печеньки бывали только с утра и расходились они буквально за полчаса. Зато однажды печеньки были с логотипом компании! Что касается чая и кофе, на нашем этаже была кухня с двумя кофемашинами и двумя чайниками. Кофемашины периодически нужно было очищать от кофейной гущи, а ещё в них заканчивалась вода и нужно было самому доливать её туда из огромной бутыли, используемой обычно в кулерах. Здесь, конечно, можно сказать «да ты совсем зажрался», но я просто сравниваю с Яндексом или Авито, в них почему-то о таких вещах беспокоиться не приходится.

Где-то я слышал про бесплатные завтраки. Они оказались скидочной картой в соседнее кафе номиналом около 120 ₽ (точно не помню), на это можно было вроде как купить кашу и напиток. Эти карты были одноразовые, так что если вы желали завтракать каждый день, нужно было каждый день утром идти в другой корпус, чтобы получить карту.

Рабочее место Опенспейс

Рабочее пространство — опенспейс без перегородок между рабочими местами. Просто столы в ряд и разработчики с обеих сторон.

Корпоративный английский был, но платить за него нужно было самому, а компания предоставляла определённую скидку. Ну и занятия велись в группах.

Митапы и конференции можно было посещать в счёт рабочего времени. Компания даже оплачивала билет на конференцию при обосновании необходимости посещения этой конференции.

Результаты

За время работы я исправил n-ое количество багов, отрефакторил кучу кода, запилил несколько небольших продуктовых задач и заложил основу для библиотеки реиспользуемых UI-компонентов. Библиотека компонентов была самой интересной задачей, о ней я расскажу подробнее в отдельной заметке.

Чему учиться в 20** году, если вы — фронтенд-разработчик

  1. Изучайте разные парадигмы программирования (императивное, функциональное, логическое, автоматное программирование). Не нужно следовать только одной парадигме — каждая из них может оказаться полезной в зависимости от задачи.
  2. Научитесь писать (и пишите!) тесты. Автоматическое тестирование:
    — намного дешевле ручного;
    — помогает выявлять баги ещё на этапе разработки;
    — вселяет в вас уверенность в своём коде;
    — поможет вам убедиться, что вы ничего не сломали очередным рефакторингом.
  3. Не изучайте новые фреймворки и библиотеки; изучайте подходы, лежащие в их основе.
  4. Изучайте структуры данных и связанные с ними алгоритмы: списки, графы (в частности деревья), битовые карты, хеш-таблицы. Это расширит ваш кругозор и вы станете видеть более эффективные и простые способы решения ежедневных задач.
  5. Учитесь думать о задачах в мире бизнеса, а не в мире разработки. Помните о том, что программистам платят за решение задач бизнеса, а не за количество написанных строчек кода. Думайте о бизнесе, прежде чем переписывать проект с нуля на очередном модном фреймворке. Думайте о бизнесе, когда нужно определиться со списком поддерживаемых браузеров — если клиенты бизнеса пользуются IE8, ваша работа поддержать его, а не выводить надпись «Ваш браузер устарел, обновитесь!!!».

Универсальный совет — изучайте фундаментальные, проверенные временем подходы и приёмы, а не меняющиеся каждые n месяцев инструменты.

О состоянии потока

Людвиг Быстроновский в одной из своих лекций сказал, что состояние потока — зло.

Человек в этом состоянии фокусируется на одной задаче, а всё кроме неё становится для него неинтересной ерундой. Время обедать — человек не хочет отвлекаться и ест что попало, параллельно продолжая решать задачу. Время идти домой домой — «ещё немного осталось, надо добить, здесь на пять минут», а пять минут растягиваются на несколько часов.

Возможные последствия этого — стресс, недосып, да и вообще забивание на всё, что не связано с потоком (семья и личная жизнь, правильное питание, здоровье и так далее).

Избежать этих проблем просто: каждой задаче нужно уделять небольшое количество времени, после чего обязательно делать перерыв. Людвиг уделяет каждой задаче не больше 15 минут в день (конечно этого мало, если начинать делать задачу за два дня до дедлайна, но он начинает заранее и занимается задачей каждый день не больше 15 минут).

Не злоупотребляйте потоком: живите нормальной жизнью, получая удовольствие не только от работы, но и от всего остального.

Пока, 2016

Как водится, пора подводить итоги года.

Омск и военкомат

В начале года стартап, в котором я работал, развалился, и я стал искать новую работу в Омске. Меня позвали в местный Сбертех, и их служба безопасности попросила какую-то справку из военкомата. Проблема была в том, что я в военкомате на учёте не стоял и даже не имел приписного удостоверения. Делать нечего, я подготовился и ближе к концу мая пошёл в военкомат вставать на учёт. Это было ошибкой, потому что в то же время мне пришло письмо из Яндекса о том, что я прошёл отбор в ШРИ и меня ждут в июле в Москве. К счастью, мне каким-то непонятным образом удалось решить все дела с военкоматом примерно за месяц, и я освободился до конца июня.

Школа разработки интерфейсов

В начале года был анонсирован набор в ШРИ Яндекса. Я без особой надежды сделал тестовое задание, отправил его и благополучно забыл об этом. Ближе к лету мне прислали приглашение, и в июле я уже был в Москве. Яндекс любезно оплатил всем иногородним участникам проживание в хостеле, и это было круто в плане постоянного общения с другими ребятами. Вообще, общение и совместная работа — пожалуй, самые ценные вещи, которые были за эти три месяца. Сама учёба тоже была очень полезна — я, наконец, разобрался с некоторыми темами, которые постоянно откладывал на потом. На втором этапе мы полтора месяца делали свой продукт в команде с дизайнером и менеджером. Изначально я хотел выстроить правильный процесс разработки и делать кодревью, но сжатые сроки всё испортили и в итоге мы просто фигачили код, комментируя и обсуждая всё устно по ходу дела. Зато мы успели сделать законченный продукт, которым даже можно пользоваться, пусть и с некоторыми неудобствами.

Переезд в Москву

Спустя два месяца учёбы в ШРИ я неожиданно для себя стал ходить по собеседованиям. В итоге я получил несколько оферов и выбрал Рамблер, так как он казался мне наиболее привлекательным из всех. По окончанию ШРИ я уехал в Омск на пару недель, и десятого октября я вышел на работу в Рамблер.

Работа в Авито

После выхода на работу в Рамблер я понял, что мои ожидания были чрезмерно завышены. Урок на будущее: прежде чем идти работать в какую-то компанию, стоит неформально пообщаться с кем-нибудь из её сотрудников. Я задумался о смене места работы, и тут мне очень удачно позвонили из Авито и пригласили на собеседование (а всё благодаря вам, Рашит и Яна, спасибо). Я прошёл все этапы (собеседования с руководителем отдела фронтенда, с тимлидами, с эйчаром) и в начале ноября получил офер, который с радостью принял. Забавно совпало, что из Рамблера я уволился в свой день рождения, 21 ноября. С 23 ноября я работаю в Авито, и ни одного плохого слова в адрес компании или сотрудников сказать не могу — всё круто!

Какие планы на 2017?

Пусть опубликованные здесь цели будут дополнительным стимулом к их выполнению:

— начну заниматься английским с преподавателем;
— переделаю приложение, сделанное в ШРИ, чтобы не было стыдно его показывать;
— оживлю Книжную полку фронтендера;
— пройду все курсы из профессии «Фронтенд-разработчик» на Хекслете;
— начну больше читать бумажные книги (хватит уже всё время в экраны пялиться) и, возможно, выкладывать сюда рекомендации книг;
— прорешаю СИКП хотя бы наполовину (попробую, но не уверен в этом).

Поиск работы фронтендером в 2016 году

Этой осенью я искал новую работу. Собеседовался в четырёх компаниях: в Иннове, Тинькофф Банке , Нетологии и Рамблере. Ну и напоследок успел пообщаться с ребятами из Яндекса. В этой заметке расскажу о своих впечатлениях и приведу все запомнившиеся задачи с собеседований.

Иннова

В Иннове я работал удалённо последние 10 месяцев. С компанией общался насчёт перехода с удалёнки в офис. Мне сразу сказали, что нужно будет пройти серию интервью с разными сотрудниками. В итоге я пообщался с тимлидом Фогеймера (это проект, над которым я работал в Иннове), с эйчаром и с кем-то из руководства (так и не понял, с кем).

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

+ крутые проекты и интересные задачи (по собственному опыту);
+ обучение английскому языку за счёт компании;
+ классный офис с летней верандой, располагается на Таганской: http://map.inn.ru/

– длинный процесс найма.

Нетология

Пожалуй, наиболее приятные впечатления остались от Нетологии. Первое собеседование было с двумя штатными фронтендерами и с руководителем отдела разработки. Ребята (фронтендеры) поспрашивали меня минут десять, а затем мы полчаса просто непринуждённо общались на тему технологий и разработки. Затем пришёл руководитель отдела, с которым мы отдельно поговорили о моём опыте и о Нетологии. После первой встречи мне дали тестовое задание. Суть задания — сделать на Реакте и Редаксе редактируемый список сотрудников. Я не стал заморачиваться с вёрсткой и сделал только логику, сопроводив это рассказом о моём прошлом опыте вёрстки и ссылками на выполненные работы. После выполнения тестового задания посетил ещё две встречи — одну с продуктологом, другую с одним из основателей Нетологии.

+ чуваки улучшают российское онлайн-образование;
+ офис на Тульской (одна станция до кольца);

– нет ДМС;
– длинный процесс найма;
– на время испытательного срока понижают оклад.

Тинькофф Банк

Довольно прогрессивный банк, делающий ставку на онлайн-продукты. Было одно техническое собеседование, но с большим количеством вопросов на знание JS. По вёрстке почти ничего не спрашивали, по штукам вроде Реакта тоже. После собеседования попросили прислать анкету для проверки меня службой безопасности банка. Работа в банке выглядит заманчиво, но есть пара нюансов. По некоторым данным, в банке с отделом фронтенда всё не очень хорошо (в плане менеджмента). Ну и говорят, что довольно большую часть работы банк отдаёт на аутсорс.

+ корпоративный фитнес-центр;
+ большой отдел разработки, есть у кого учиться;
+ хорошая зарплата;
+ короткий процесс найма;

– офис на Водном Стадионе, что не очень близко к центру;
– часть работы отдают на аутсорс.

Рамблер

Раньше я видел список вакансий компании, но мне казалось, что я до их уровня ещё не дорос. Довольно неожиданно мне написали оттуда с предложением пообщаться о работе. Была одна встреча, с двумя эйчарами и одним разработчиком. Сперва эйчары попросили рассказать меня о своём опыте (куда без этого), затем разработчик давал разные задачи. Затем мне вкратце рассказали о компании и о том, чем нужно будет заниматься. В компании сейчас активно используется Реакт, вроде как делается своя библиотека компонентов, ну и в целом развивается инфраструктура.

+ довольно большая компания с большим количеством сотрудников и разных проектов;
+ офис на Тульской;
+ корпоративный английский;
+ бесплатные завтраки для сотрудников (по непроверенным данным);
+ короткий процесс найма.

– не все команды занимаются интересными задачами, где-то довольно жёсткие сроки;

Яндекс

Собеседовался на стажировку, поэтому всё было не так сложно и страшно. Первая встреча была в офисе, с ребятами из команд Метрики и Поиска. По сути я пришёл на два часа, и ребята из каждой команды общались со мной по часу. Первый час я делал задания на знание JS. Второй час был посвящён разговорам о жизни и о технологиях, под конец ради интереса мне дали задание на знание вёрстки (единственный раз за все собеседования во всех компаниях). Примерно через неделю было два созвона по скайпу с теми же ребятами. На этот раз никаких заданий не было, а мне рассказывали о задачах и процессах в их командах.

+ крупная и известная компания;
+ серьёзные высоконагруженные проекты;
+ командировки в разные города;
+ n-ая сумма денег на бейджике для оплаты еды в близлежащих заведениях;

– высокий порог вхождения из-за БЭМ-стека.

Задания

Что выведется в консоль? Как добиться правильного вывода в консоль, не убирая setTimeout?

for (var i = 0; i < 10; i++) {
  setTimeout(function () {
    console.log(i); // ?
  }, 0);
}


Что выведется в консоль?

var a = b = {
  value: 1,
};

var b = {
  value: 2,
};

a.value = 3;

console.log(a.value); // ?
console.log(b.value); // ?


Что выведется в консоль?

var a = {
  v: 1,
};

var b = {
  v: 2,
};

function logValue() {
  console.log(this.v);
}

logValue.bind(a).bind(b)(); // ?


Что такое call, apply, bind, зачем они нужны.


Напишите полифил функции bind.


Дан массив целых чисел, найдите наибольшее из них.


Даны два массива целых чисел, найдите общие элементы.


Напишите функцию, принимающую на вход строку и проверяющую, является ли эта строка палиндромом. Приведите несколько вариантов решения.


Напишите функцию, принимающую массив произвольных слов и на выходе дающую двумерный массив анаграмм:

['стол', 'барокко', слот', 'кот', 'кошка', 'ток', 'коробка']
// ->
[
  ['стол', 'слот'],
  ['кот', 'ток'],
  ['барокко', 'коробка'],
]


Есть два класса: принтер с методом print() и сканер с методом scan(). Нужно получить класс МФУ, имеющий оба этих метода.


Напишите функцию, принимающую на вход время (в любом формате) и возвращающую угол между стрелками аналоговых часов.


Дано поле морского боя с размеченными на нём кораблями. Спроектируйте решение для подсчёта количества кораблей на этом поле.


Напишите функцию для сложения чисел, поддерживающую неограниченное количество вызовов:

sum(2)(3)(); // -> 5
sum(1)(2)(3)(4)(); // -> 10


Напишите функцию, которая принимает массив с неограниченной вложенностью и делает из него плоский массив:

[1, [2, [3, 4], 5], 6, [7]]
// ->
[1, 2, 3, 4, 5, 6, 7]


Чем поведение скрипта с атрибутом defer отличается от async?


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


Дан односвязный список. Напишите функцию, которая вернёт значение n-ого с конца списка элемента.

{
  value: 0,
  next: {
    value: 5,
    next: {
      value: 2,
      next: null,
    },
  },
};


Расскажите всё, что вы знаете о событиях в JS.


В соцсети выложили фото котят, под ним динамически добавляются комментарии. У каждого комментария есть кнопка «лайк», при нажатии на которую нужно отправлять запрос к АПИ. Как эффективно реализовать сценарий с нажатием кнопки?


Как расположить элемент по центру экрана с помощью CSS (назовите все известные вам варианты).


Опишите процесс отрисовки страницы браузером.

Ctrl + ↓ Earlier