Size: a a a

2018 September 12
FEDOR BORSHEV
Самый частый ответ на вопрос «почему вы не пишете тестов» — «ну, нам не дают времени, чтобы делать все хорошо».

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

Может ему просто дихотомию никто не смог объяснить?
источник
2018 September 14
FEDOR BORSHEV
Работа мечты: Резюме

Банальные советы про резюме:
Лучшее резюме — это гитхаб. Покажите работодателю сразу, как вы умеете отрывать жопу от кресла.
— Круче гитхаба может быть только профессиональный блог, в котором больше 5 заметок.
— В текстовом резюме перечисляйте только релевантный опыт: всем пофиг, как вы в 16 лет целое лето проработали эникейщиком в ООО «Вектор-Инвест».
— Пишите о результатах, а не перечисляйте должностные обязанности. Не «разрабатывал о поддерживал внутреннюю ЦРМ», а «интегрировал систему с Альфа-банком и SalesForce». Первое не говорит ни о чем, а второе вполне может оказаться созвучным с текущими проблемами работодателя.
— Напишите кратко о себе: чем вы отличаетесь от усреднённого коллеги из прошлого офиса? Что цените в работе? Чем можете быть полезны для будущей команды?

В маленьких компаниях такое резюме позволит вам сразу пробиться к CEO и CTO, и даст фору перед другими кандидатами.

#работамечты
источник
2018 September 17
FEDOR BORSHEV
​​Сервисы: mailjet.

У команды любого приложения, которое шлет больше, чем один вид транзакционных писем, есть вечная боль — верстка и редактирование шаблонов этих самых писем.

Сложность верстки состоит в том, что в мире существуют десятки почтовых клиентов, каждый из которых имеет свои, понятные только ему, стандарты отображения HTML. Outlook, gmail, thunderbird, Apple mail, Protonmail — по хорошему, каждое письмо нужно проверять в каждом из них.

Даже если вы каким-то чудом сверстали себе работающий шаблон, приходит вторая боль — чтобы поправить запятую в тексте, обычно приходится писать тикет в разработку. А там никто особо вашими запятыми не интересуется — у них там докер, нагрузки, прод упал и все такое.

Mailjet сразу решает обе эти проблемы: транзакционные письма у него собираются мышкой, прямо в интерфейсе. Чтобы отправить письмо через мейлджет, достаточно указать ИД шаблона, который собрал имейл-маркетолог, и прокинуть туда контекст — переменные, которые нужны в письме, вроде имени покупателя или номера заказа.

Для маленьких объемов mailjet бесплатен, тарифы для больших тоже вменяемые.
источник
2018 September 18
FEDOR BORSHEV
​​Я — старый фанат учета времени и, хотя и использую телефон по 20 минут в день, давно мечтал считать и это время тоже.

Мои прошлые попытки учитывать время на мобилке закончились на необходимости каждую неделю фотографировать какую-то дальнюю вкладку в настройках батарейки для Moment, так что я очень сильно обрадовался письму о мобильной версии RescueTime.

Казалось, что разработчики (ребята неторопливые, судя по интерфейсу из начала двухтысячных) напряглись и интегрировались с новой фичей iOS 12. Но нет, они просто записывают время, которое телефон включен, без деления на продуктивное и непродуктивное:

Note about iOS and the Productivity Pulse: Because we can only capture total screen time on iOS instead of individual applications, we don’t feel that time can accurately impact your productivity pulse. It would just be too much of a guess. Therefore, while your iOS time will show up in your reports under the total time, that time will not impact your productivity pulse.

Интересно, в чем ценность такой версии для пользователей RescueTime, единственная фича которой — измерять, насколько продуктивно вы проводите время за компьютером?

Буду ждать тех, кто первым интегрируется со встроенным учетом времени, и уйду, видимо, к ним.
источник
2018 September 21
FEDOR BORSHEV
Работа мечты: собеседование

Мне всегда странно слышать от знакомых программистов фразу «нервничал на собеседовании». Собеседование, по крайней мере у программистов — наименее важный этап устройства на работу. Вся работа уже сделана: вы уже где-то поработали с заявленными технологиями, показали свои работы и даже, возможно, выполнили тестовое задание.

Цель хорошего собеседования — понять насколько вы совместимы с новым рабочим местом: знаете библиотеки/языки, подходите к команде и процессам.

Если вы хорошо знакомы со стеком, технические вопросы долго не продлятся: человек напротив так же, как и вы, бережет свое время. Если не уверены глубине своих знаний в какой-то определенной области — просто говорите об этом сразу, разговор пойдёт гораздо легче.

Вторая серия вопросов — «личные». Это проверка на совместимость с командой. Где-то важна железная дисциплина, кто-то больше ценит неформальные отношение и ваше участие в жизни команды.

«Личные» вопросы — не экзамен, а именно проверка совместимости: есть команды, в которых вам будет комфортно работать, а есть те, из которых вы сбежите через месяц. Это как с кухней — если вы ненавидите острую еду, то зачем идти в китайский ресторан?

Ну и самое главное — не стесняйтесь сами задавать вопросы (желательно такие, на которые нельзя ответить «да» или «нет»). Собеседование — это знакомство с компанией, и ни в коем случае не экзамен.

Другие заметки: #работамечты
источник
2018 September 24
FEDOR BORSHEV
Не критиковать стиль кодирования

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

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

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

Ребята, вам не жалко времени? Ведь критиковать запятые — это же работа линтера. Настройте эталон, запихните его в CI, и введите простое правило: если CI прошел, значит стиль — хороший.

Если не можете договориться о том, как выглядит эталон — для вас есть ненастраиваемые линтеры вроде black для питона или prettier для js.

Мы в mtrl.ai вообще приветствуем любое новое правило линтера — главное, чтобы тот, кто его предлагает, самостоятельно привёл кодовую базу в соответствие с новыми стандартами.
источник
2018 September 26
FEDOR BORSHEV
О чем я пишу в этом канале:

— Рассказываю про софт-скиллы программистов: как отличить процесс от результата, сдавать работу с первого раза, работать быстро и почему важно успевать в срок.
— Делюсь опытом управления проектами:
как делать, чтобы планы сбывались;
какие фичи брать в работу, а какие — ни в коем случае; как избегать закона Паркинсона и не микроменеджить коллег.
— Иногда углубляюсь в специфичные вопросы: как писать понятный код; избавиться от говнокода, доставшегося в наследство; как объяснить важность тестирования коллегам и руководителю.
— Даю подсказки, как устроиться на работу мечты: оформить резюме, попасть сразу к СTO и пройти собеседование. #работамечты

Ну и конечно, я всегда готов взять на работу питонистов с любым уровнем знаний и фронтендеров (vue.js).
источник
2018 September 28
FEDOR BORSHEV
Страх ошибиться — самый большой враг хорошего кода

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

Ошибки программистов проходят через очень хороший контроль: автотесты, отделы QA, фиче-флаги.

Даже когда ошибка добирается до продакшена, у нас есть множество инструментов быстрого отката: k8s не заведет больной контейнер, дежурный инженер откатит непрошедшую миграцию. Если ни один инструмент не подошел, всегда можно просто накатить хотфинкс поверх выложенной кодовой базы.

Но, несмотря на внушительный набор инструментов, мы все еще боимся рефакторинга, «потому что может сломаться». На таких страхах вырастают неуклюжие, плохо пахнущие классы с копипастой, которые постепенно превращаются в легаси.

Давайте не бояться ошибок — мы не пилоты самолета, в конце концов. Хотя и пилоты занимаются на тренажере именно для того, чтобы ошибаться и отрабатывать исправление этих ошибок.
источник
2018 October 01
FEDOR BORSHEV
Выбрать фреймворк для нового проекта

Многие ребята, выбирая инструменты для нового проекта, начинают строить таблицы, сравнивая фичи. Серьезно обсуждают, что лучше — SFC во vue ил и CSS Modules в реакте.

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

А вот если вы начинаете коммерческий проект, то смотреть нужно совсем в другую сторону. Фичи — это состояние проекта _сейчас_. Подумайте лучше о том, каким будет ваш фреймворк _тогда_. Удержит ли он комьюнити? Успеет ли за быстроизменяющейся средой? Будет ли адекватное предложение на рынке труда?

Искать ответы на эти вопросы поможет интуиция, reddit и Google Trends.

И да, если вы выбираете фреймворк для фронтенда, то берите любой — все равно он протухнет через год.
источник
2018 October 03
FEDOR BORSHEV
Юнит-тесты и фронтенд

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

С юнит-тестами тоже все плохо — фронтовый код сложно разбивать на вменяемые куски, которые приятно тестировать. Спасает только TDD и хорошие библиотеки типа vue.js, которые сводят количество процедурного кода к минимуму.

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

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

Мы в mtrl.ai прямо запрещаем писать бизнес-логику на фронте. Если код в интерфейсе ходит в один эндпоинт, а в зависимости от результатов ходит в другой эндпоинт — это уже не очень хороший код. Если эндпоинта три — мы этот код не пропускаем.
источник
2018 October 04
FEDOR BORSHEV
Сделай это завтра

Тайм-менеджмент в технологической компании — сложная задача: работы всегда больше, чем можно успеть. На проблемы планирования часто накладывается наша эмоциональность — сложно отказать руководителю, который громко требует «пойти и работать». И почти невозможно отказать самому себе, когда хочется поделать фичу, которая только что пришла в голову, и «точно всем нужна».

Моя библиотека книг по тайм-менеджменту ограничена единственной Getting Things Done, поэтому я обрадовался, когда ребята из издательской студии Поле предложили написать рецензию на книгу Марка Форстера «Сделай это завтра», которая выходит у них в ноябре.

Книга приносит идеи, которые будут полезны не только менеджерам, но инженерам. К примеру, закрытые списки дел на день. Список закрыт, если под ним подведена черта, и в него нельзя ничего добавить. Все новые дела, которые появляются за день, нельзя вносить в сегодняшний список — только на завтра.

Моя любимая часть — про «видение». Марк Форстер рассказывает, как клево живется, когда у тебя есть четкая система, которая отделяет вещи, которые нужно делать от вещей, которые делать не нужно.

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

Конечно, книга не заменяет ГТД с его пустыми инбоксами, но хорошо дополняет. По предзаказу стоит 600 рублей.
источник
2018 October 05
FEDOR BORSHEV
Не тороплюсь смотреть код в конце спринта

Несмотря на принятую у нас систему positive review, бывает так, что мы все равно показываем друг другу код по публикации, а не после.

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

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

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

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

Так что если у вас осталась незавершенная работа на понедельник — уж выпихивайте как есть: завтра перепишете.
источник
2018 October 08
FEDOR BORSHEV
Два свободных дня

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

У нас это не так. Во-первых мы весьма адекватно управляем техдолгом (расскажу как-нибудь), во-вторых у нас есть система самолечения.

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

Обычно в это время мы занимаемся рефакторингом — делаем вещи, которые позволят нам более приятно и быстро работать в следующем спринте. Иногда берем срочные бизнес-требования, или начинаем большие проекты.

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

#техдолг
источник
2018 October 10
FEDOR BORSHEV
Быстрая коммуникация

Важный этап при внедрении новых коллег в нашу команду — отучить их от привычки к быстрой коммуникации.

В безумном мире люди привыкли звонить друг-другу или писать в чат «привет». У нас не так: мы все в разных часовых зонах, а в чатик кидаем только мемасики.

Помимо того, что асинхронная коммуникация позволяет нормально взаимодействовать в разных часовых поясах (у нас всего двое ребят в GMT+3), это еще и приводит голову в порядок: заставляет не задавать глупых вопросов и лучше планировать время.

Как я это объясняю новым ребятам? Просто игнорирую телеграм, а на почту отвечаю тогда, когда это удобно мне, а не им.
источник
2018 October 12
FEDOR BORSHEV
Кому проект для портфолио?

Ребята, я знаю, что среди вас есть много питонистов. У меня к вам предложение, которое прокачает ваше порфтолио.

У меня есть опенсорсный проект — @selfmailbot. Это бот для ГТД-гиков, который шлет заметки из телеграма в почту. Подробное описание — тут, исходники — на гитхабе, там python-telegram-bot и pytest.

Я собрал бота за несколько вечеров в качестве развлечения, но он оказался полезным — в день через него уходит до 100 сообщений.  Думаю, что бота стоит еще немножечко развить, к примеру научить его дешифровать голосовые заметки и высылать текст на почту.

К сожалению, я не найду на это времени, поэтому ищу питониста, который любит телеграм и опенсорс. В замен на контрибьюты вы получите жесткий код-ревью (по желанию) и проект со звездочками в профиле.

Если вам интересно — напишите на fedor@borshev.com, начните с примеров своих работ.
источник
2018 October 15
FEDOR BORSHEV
Вопрос: есть проект средних размеров с плохой кодовой базой. Как понять — рефакторить текущий или переписывать заново?

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

Ну ок, рассмотрим крайний случай, когда весь бизнес ушел на каникулы, а вы остались один на один с кодовой базой. Раз вы выбираете чинить или выбрасывать, значит технологии у вас еще не совсем протухли — если бы у вас была ERP-система на CGI и prototype.js, наверное вы вообще ничего бы не спрашивали.

А раз технологии современны, то вопрос сводится к оценке времени. Начните с того, что определите свою скорость — потратьте день на рефакторинг.

Сколько с такой скоростью потребуется времени на весь проект, чтобы успеть с запасом? Умножьте ответ на два, и решите, что получится быстрее — закончить начатую работу или начать с нуля. Оценку для проекта с нуля тоже не забудьте умножить.

Другие ответы — #вопрос. Задать свой — @fedor_borshev.
источник
2018 October 17
FEDOR BORSHEV
Правила пулл-реквестов

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

Сегодня я выкладываю наши правила составления пулл-реквестов — в противовес гигантским талмудам, их всего 5:

— Специализированный: решает одну задачу
— Краткость: больше 500 строк — плохо
— Унитарные коммиты — показывают последовательное решение задачи
— Привязан к задаче в трекере
— Называется понятно.

Во вложении ПДФ с примерами, можно внедрять у себя, если еще нет.
источник
FEDOR BORSHEV
источник
2018 October 19
FEDOR BORSHEV
Github и MS

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

Не понимаю, как такая движуха может не радовать. Лучшее, что может случиться с продуктом — хорошие люди: `Head of Product` и `Head of Marketing`. Они и в рынок правильный попадут, и фичи новые запилят такие, которые будут не просто развивать существующие привычки, а сделают что-то новое.

Превратить контроль версий в социальную сеть, сделать платформу для совместной работы программистов и роботов, обернуть набор unix-way скриптов понятным для гуманитария интерфейсом — это все задачи для людей с вѝдением. Это вам не мердж-реквесты пилить, вместе неработающим CI.

А видение (как и умение нанимать\мотивировать крутых людей) у MS есть, посмотрите:
источник
2018 October 22
FEDOR BORSHEV
Важное и срочное

Недавно в любимом Blinkist наткнулся на саммари «7 навыков» Стивена Кови вспомнил, что с помощью именно этой книги в первый раз осознал разницу между срочным и важным.

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

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

Важных и срочных задач обычно мало — к примеру горит здание или заболел ребенок.

Неважные и несрочные дела не стоят упоминания.

Фокус в том, что делать нужно только важные дела (ну и от пожара убегать конечно). Срочные, но неважные дела никому не нужны: никто не умрет, если вы проигнорируете телефонный звонок, не придете на пустую встречу или не ответите на новое письмо в ту же секунду.
источник