Федор Борщев

Кручу гайки. Пишу матом о книгах, саморазвитии и об управлении проектами. Настраиваю ин-хаус разработку в стартапах.

Пацан сказал — пацан сделал

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

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

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

Пацан сказал — пацан сделал

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

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

Программистам: три варианта развития миддла

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

Их на самом деле всего три: ничего не делать, стать синьором или податься в управление.

Ничего не делать

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

Голован: чувак, который отлично умеет ничего не делать

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

Синьор

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

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

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

Жизнь в большой компании

Хороший синьор учит параллельные технологи. Синьор-бекендер учит фронтенд, синьор-рубист учит Голанг. Все учат devops, CI, автоматизацию тестирования и еще кучу всего. Ребята с широким кругозором нужны везде.

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

Тимлид\Менеджер

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

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

Скрам-доска: инструмент любого потного менеджера

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

Хороший тимлид разбирается в устройстве бизнеса. Причем не только бизнеса своей компании, а понимает как в принципе зарабатываются деньги. Умеет ставить задачи, которые достигают результата в виде денег, а не галочки в Джире. Строит системы из людей и процессов, которые решают эти задачи. Умеет разговаривать с пользователями, отличая полезные фичреквесты от бесполезных.

А там уже до CTO недалеко.

Итого

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

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

Не кидайся ссылками

2018 год и свой огородик

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

Теперь анализаторы логов заменила Гугль-аналитика, сисадминов заменил докер, и появилось отдельное слово для обозначения невиртуальных серверов — bare metal. Однако я до сих пор встречаю компании, которые ставят себе «анализаторы логов» — корпоративный гитлаб вместо гитхаба, локальные версии дженкинса вместо серкла, свои хостинги, почтовые сервисы, трекеры задач и пр.

Слева — свой огород, справа — заемная инфраструктура

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

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

За 500$ в месяц можно накупить пачку корпоративных аккаунтов у всех нужных сервисов и, ни разу не заходя в консоль, построить инфраструктуру мечты для небольшой команды. В заемной инфраструктуре ничего не сломается, потому что она живет в облаке и обслуживается специальными (и дорогими) дядьками.

Неужели ваше время стоит дешевле?

Топ-даун и прогрессивный джипег для программистов

Правило Парето гласит, что 80% времени программиста тратится на 20% требований. К примеру, на любом современном фронтенд-фреймворке работающую корзину в интернет-магазине можно запилить за день — можно будет добавить/удалить товар и отправить заказ.

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

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

Инженеры называют этот подход top-down, дизайнеры — прогрессивным джипегом.

Как сделать Instant View для любого сайта

Илья Бирман сетует, как криво в телеграме устроен Instant View. Насчет кривости я не согласен — он просто для гиков. Ниже я подробнее расскажу почему это не криво, а так же отвечу на вопрос Ильи как сделать, чтобы Instant View появился на вашем сайте.

Instant View отличается от AMP или Яндекс-Турбо тем, что требует меньше всего усилий от паблишера — чтобы сайт начал моментально загружаться в телеграме, не нужно вносить никаких изменений в коде страницы. Достаточно написать шаблон, который преобразует уже существующую разметку в соответствии с требованиями телеграма, и отправить его на http://instantview.telegram.org. Шаблоны хранятся на сервере телеграма.

Получается, что шаблон для Instant View может сделать кто угодно, и вовсе не обязательно, чтобы это был владелец сайта. Так и произошло в случае с Ильей — за него шаблон уже сделал Филипп Колсанов.

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

Две ссылки на одну и ту же статью, одна с Instant View, другая — без.

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

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

Редактирование шаблона Instant View

Получаем ссылку, которую нам предлагают отправить в телеграм. Это ссылка на сервис t.me, которая содержит адрес вашего сайта и идентификатор шаблона. По такой ссылке всегда открывается шаблон Instant View, и никакого конкурса ждать не нужно. Сервису t.me мы передаем два параметра — адрес страницы и идентификатор шаблона.

Универсальная ссылка Instant View

По этому образцу и нужно формировать ваши ссылки: https://t.me/iv?url=<страница>&rhash=<ид шаблона>. К примеру, для этой заметки ссылка будет вот такой: https://t.me/iv?url=https://borshev.com/instant-view/&rhash=5ef08d16e14be6. Если ее отправить другу в телеграм, то он увидит кнопку Instant View.

В «Лайклях» ссылку на Instant View можно задать через параметр data-url:

Добавить Instant View в likely

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

Проверь через два дня

Многим программистам (и менеджерам) не хватает простого навыка — проверить через два дня.

  • Сделал кнопку — проверь через два дня, нажимают ли ее вообще? Что видят, когда нажали?
  • Сделал интеграцию — проверь через два дня, сколько пришло данных? Пришли ли вообще?
  • Сделал новое уведомление — проверь логи. Что уходит пользователям? А много вообще ушло?

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

Лучше через два дня самому узнать, что фича не работает, чем через неделю узнать то же самое от пользователей. Или не узнать вообще.

Кто должен проверять через два дня, если задачу делали впятером? Конечно ты.

Плато продуктивности

Обычно уровень работоспособности выглядит так: ∿∿∿∿. Подъёмы чередуются со спадами. На подъёме хорошо заниматься творчеством, на спаде — рутиной: закрывать долги, отвечать на письма, общаться с коллегами. Если на спаде сделать творческую работу, ее скорее всего придётся переделывать — вы проснетесь утром и поймёте, что результат никуда не годен.

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

Программист делает твою (да-да, твою) задачу

Работа с некачественным кодом сильно выматывает — вместо фокуса на цели приходится разбираться, о чем же думал «тот парень» (и тот, кто его подгонял). В таком режиме волна продуктивности превращается в болото: ∿∿—\____. Хочется уволиться и пойти работать машинистом метро.

Нормальная загрузка программиста похожа на плато: ——————. На плато нет всплесков вроде срочных задач и эмоциональных подъёмов. Но нет и болота с унылым разгребанием долгов. Программист на большом проекте — это марафонец.

Фавиконка и логотип телеграма

Как жить с тачбаром

Я не знаю ни одного человека, который был бы доволен тачбаром на новых макбуках.

Основная моя претензия к тачбару — зависимость от контекста. Тачбар отвлекает всегда — в бразуере, в редакторе кода, в почте. Особенно злит, когда работаешь с текстом, думаешь о смысле, а у тебя перед глазами мельтешат варианты замены слов или кнопки с ненужными действиями. Я гораздо быстрее нажму хоткей или наберу слово до конца, чем перенесу руки с клавиатуры на тачбар. Хоткеи и набор — действия автоматические. А к тачбару привыкнуть невозможно — он всегда разный.

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

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

Сделать сразу: отключить зависимость от контекста

Заходим в настройки клавиатуры: Apple → System Preferences → Keyboard, и выбираем в селекторе «Expanded Control Strip»:

Apple → System Preferences → Keyboard

В таком случае вы получаете обычный набор сенсорных клавиш, который всегда перед глазами. И больше ничего не прыгает!

Тачбар, похожий на клавиатуру старых маков

Посерьезнее: избавиться от случайных нажатий

После двух месяцев в попытках привыкнуть не нажимать на верхнюю панель, я начал копать дальше. В первую очередь, я попробовал освободить зоны, в которых ложные нажатия происходили чаще всего. Это делается через ту же панель настроек клавиатуры: Apple → System Preferences → KeyBoard

У меня получилось так:

Слева и справа пустые места — сюда я чаще всего нажимал случайно.

Слева и справа пустые места — сюда я чаще всего нажимал случайно.

Совсем для гиков: извлечь пользу

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

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

Тачбар без сенсорных зон

При нажатии Option появляются элементы управления яркостью и громкостью:

Элементы упрваления громкостью и яркостью (BetterTouchTool)

Клево, что тачбар в роли дополнительного дисплея позволил сэкономить место в трее, там теперь так:

Пустой трей в OS X

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

Better Touch Tool — 1

и снять вот эту галочку:

Better Touch Tool — 2

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

Как вывести трек — написано здесь. Если не разберетесь — пишите, дополню статью.

Дисклеймер: лонгрид Вастрика я читал.