tank_bohr

24 сентября 2018, Россия

# Понедельник 19 твитов

Всем привет. Я Лёша Никитин, мне 31 год. Работаю техническим директором в Букмейте. В разработке больше 10 лет. В о… twitter.com/i/web/status/1…

12:40

Есть несколько вещей, которые волнуют мое сердце. Это букмейт, разработка и эрланг. Про это и буду писать

12:40

Начнем с букмейта. Букмейт - это лучший способ читать и находить новые книги.

12:47

Бэкенд букмейта пишется на руби, джаве и колтлине.

12:47

Основной язык это руби. Больше всего кода написано на Rails. Хотя есть проекты на ванильных рубях. В последнее время пишем на dry-стеке

12:48

Бэкенд-разработчики букмейта большую часть времени делают код-ревью. Расскажу про код-ревью в букмейте

19:11

Я считаю, что код-ревью это гетто. Очень много времени тратится на ожидания когда кто-то посмотрит, потом сам ревью… twitter.com/i/web/status/1…

19:12

Я считаю, что его не должно быть совсем. Весь код должен писаться в парах, как завещали нам мудрецы. Но с парным пр… twitter.com/i/web/status/1…

19:13

Во-первых, парное программирование это безумно сложно. Оно заставляет разработчиков держать максимальный уровень ко… twitter.com/i/web/status/1…

19:14

Во-вторых, парное программирование, это безумно долго. Не потому что две головы напишут в два раза больше кода по о… twitter.com/i/web/status/1…

19:14

С парным программирование есть еще ряд заморочек. Код-ревью не так круто, но зато намного проще

19:15

Мы прошли три стадии код-ревью

19:15

Стадия первая, стилистическая. Запятая не на той строке. Отступ не консистентный, кавычки не те. Эта стадия закончи… twitter.com/i/web/status/1…

19:16

Стадия вторая, структурная. Вот здесь слишком метод большой, дублируется логика и т. п. Эта стадия закончилась, ког… twitter.com/i/web/status/1…

19:18

В добавок выкрутили требование к покрытию диффа в 100%. Таким образом непокрытый код перестал попадать в мастер. Вс… twitter.com/i/web/status/1…

19:18

И началась третья стадия, семантическая. Когда разработчики пытаются выяснить что же всё-таки делает код, зачем и в… twitter.com/i/web/status/1…

19:20

Это еще сильнее увеличило время ревью. Но зато позволяет вылавливать просто феерические факапы на самой ранней стад… twitter.com/i/web/status/1…

19:21

Всё что может делать программа, надо переложить на программу. Это довольно банальная мысль, но она важная. Использу… twitter.com/i/web/status/1…

19:26

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

19:28

# Вторник 13 твитов

Обязательный code review не нужен. Code review проводится только по просьбе автора, когда он чувствует необходимост… twitter.com/i/web/status/1…

Вот мы как раз обратное почувствовали. Нельзя ослаблять хватку. Это касается бэкенда, где код написаный однажды дол… twitter.com/i/web/status/1…

16:55
@backendsecret Ну тогда надо тред про то, как выбить такие огромные бюджеты на то чтобы вместо фич делать ревью.
18:40
Ну ебаный насос....
Это ващет должна быть нулевая стадия, вроде бы.
Иначе захер вообще было вот это всё, что до неё… twitter.com/i/web/status/1…
18:41
В @backendsecret умиляют регулярные ”мы всегда далаем code review".
Как будто это или достижение или какой-то приз… twitter.com/i/web/status/1…

code review это не достижение и не признак, и не гарант. code review - это гетто twitter.com/pismenny/statu…

20:02
@gleb_kosteiko @backendsecret если квалификация достаточная, то ревью это не то чем делятся в секретах.

потому чт… twitter.com/i/web/status/1…

Кстати ревью мне тоже запрещают делать. Смотреть можно, апрувить нельзя. Конфликт интересов. Мне важнее быстрее в п… twitter.com/i/web/status/1…

22:23
@backendsecret Давайте тогда про TDD и тесты. Вроде, это должен быть, как раз ваш кейс.

Есть два типа программистов. Те, которые считают, что можно программировать без тестов. И те, кто считают, что нель… twitter.com/i/web/status/1…

23:09

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

23:12

Я тоже отношу себя к таким. Но количество людей, которые не пишут и считают что и так можно, настолько большое что… twitter.com/i/web/status/1…

23:18

В бэкенде более или менее практика прижилась. Веб тестить просто. Надо лишь проверить, что на конкретный запрос ты… twitter.com/i/web/status/1…

23:20

Среди мобильных разработчиков почти никто не пишет. Некоторые и не знают про такую практику как юнит-тесты

23:23

И тестировать намного сложнее. Приложение живет. У приложения сложный стейт, сложный UI. Инструментов нормальных нет

23:24

Под iOS, например, нельзя полноценно разрабатывать через TDD. Чтобы запустить любой тест, XCode инициализирует все приложение

23:26

Есть два типа программистов. Одни считают, что юнит-тесты говно собачье и ничего толком не проверяют и нужно писать… twitter.com/i/web/status/1…

23:41

# Среда 13 твитов

Так. Я покушал. Погнали по серьёзки. Расскажу про бэкенд букмейта. Приоткрою калитку в самое сердце сервиса

15:05

Мы как и многие находимся в стадии вялового перехода от монолитной архитектуре к микросервисам. У нас есть парочка… twitter.com/i/web/status/1…

15:07

Мелкие постоянно добавляются, а большие вряд ли когда-нибудь перестанут существовать. Они со временем похудеют. Но… twitter.com/i/web/status/1…

15:09

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

15:10

Микросервисы общаются между собой по HTTP (когда надо синхронно) и через кафку (когда надо асинхронно)

15:13

Дал бог микросервисы, даст и докер. Контейнеры живут в номаде nomadproject.io Почему не кубернетис спросит… twitter.com/i/web/status/1…

15:15

На самом деле, когда мы решали втащить что-то подобное к себе, мы выбирали из 3-х систем. Кубернетис, номад и мезос… twitter.com/i/web/status/1…

15:19

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

15:21

Прелесть микросервисов в том, что их можно писать на любых языках. Но почему-то никто пока не решился бахнуть серви… twitter.com/i/web/status/1…

15:28

У нас нет тех. радара или списка разрешенных языков. Но есть здравый смысл

15:29
@backendsecret Что расскажешь про ваш опыт с Nomad?

Читатель из Гамбурга спрашивает про Номад. Номад очень даже норм. Он не такой гибкий как куб, но зато легко и быстр… twitter.com/i/web/status/1…

18:51

Есть у нас с ним одна проблемка. Ограничение ресурсов. Он нормально умеет ограничивать CPU, память и вроде даже дис… twitter.com/i/web/status/1…

18:53

Мы туда даже немного багов зарепортили. Не больше 10

18:54

# Четверг 35 твитов

Всем весёлого четверга. Про ревью, тесты и номад уважаемой публике скучно. Думал писать про процессы, но уже не уверен

16:44
@vvsevolodovich @backendsecret Для poc последнее что стоит делать это тесты*
Для mvp фокус на happy path сценариях,… twitter.com/i/web/status/1…
17:00

Про эрланг. Эрланг я люблю всей душой. Но в букмейте нет ни строчки на нем (к счастью, наверное)

17:19

Сейчас я поддерживаю маленькую библиотечку на эрланге для тестирования http-запросов. У неё 31 звёздочка. Для эрлан… twitter.com/i/web/status/1…

17:22

так как мне на разрешают писать код на работе, я веселюсь там

17:23
@backendsecret Это какая-то странная любовь... Опыт написания и промышленной эксплуатации решений на эрланге есть,… twitter.com/i/web/status/1…

Опыт тоже есть. Я работал в команде, которая делала бэкенд для поисковика sputnik.ru
Там был огромный… twitter.com/i/web/status/1…

17:27

Эрлангисты и сочувствующие (эликсир, да), пожалуйста, пользуйтесь. Она очень полезная github.com/tank-bohr/book…

17:28

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

17:29

Сначала он дружил их по http. Но в один прекрасный день он заставил эрланг прикинуться мускулем. Точно также как эт… twitter.com/i/web/status/1…

17:30

Это оказалось не так безумно как может показаться на первый взгляд. Тем более была либка (myproto). Максу, конечно,… twitter.com/i/web/status/1…

17:31

Я прекрасно себе представляю сколько рельсового кода он выкинул после этого и насколько все упростилось. На стороне… twitter.com/i/web/status/1…

17:31

Ссылка на оригинал groups.google.com/forum/#!msg/ro…

@erlyvideo еще может добавить или поправить

17:34
@backendsecret Больше подробностей! Больше техники! Больше хардкора!!!

в приличном обществе как-то не принято рассказывать про работу там )) twitter.com/AstarothAst/st…

17:41

Раз начали про эрланг, то надо и про эликсир. Эликсир удивительный. Прежде всего надо понимать, что эликсир не прив… twitter.com/i/web/status/1…

18:07

При чем это абсолютно иррационально. Синтаксис эликсира намного сложнее. Эрланг намерено придумывали предельно прос… twitter.com/i/web/status/1…

18:08

Но начали происходить удивительные вещи. За короткий промежуток люди наколбасили безумно много прикольных штук на э… twitter.com/i/web/status/1…

18:08

Появился hex.pm пакетный менеджер для эликсира и эрланга. Что пыталось делать эрланг-комьюнити до… twitter.com/i/web/status/1…

18:09

В то же время примерно появился rebar3. Rebar3 это космос по сравнению со всем что было до него. Супер-крутой. Просто охренительный

18:10

То есть волна эликсир-хипстеров расшевелила это эрланг болото и там, наконец, пошёл нормальный движ. Эликсир не при… twitter.com/i/web/status/1…

18:10
@backendsecret Конечно скучно, если говорить в духе: «тесты писать хорошо». А ты про секреты и хорошие практики нап… twitter.com/i/web/status/1…

А я могу кстати. Расскажу несколько ключевых моментов про то, как надо писать тесты twitter.com/musuk/status/1…

18:33

Юнит-тесты надо писать на функции. Берешь одну функции и проверяешь. Проверить ты можешь всего две вещи

18:41

"Чем больше тестов, тем лучше" - это очень неправильный тезис. Самая большая проблема в поддержке тестового набора… twitter.com/i/web/status/1…

18:46

Еще хуже, когда у тебя ломается сразу много тестов. Лишние тесты надо обязательно удалять

18:47

по-моему, публичное апи как раз и нужно тестировать twitter.com/pavelshtanko/s…

18:48

Хрупкость тестов это самый тонкий вопрос. Хрупкий тест это плохо. Здесь важно не переборщить, тест все же должен бы… twitter.com/i/web/status/1…

18:51

Поэтому очень важно соблюсти вот этот баланс между юнит-тестами (нехрупкими) и интеграционными (хрупкими, но более… twitter.com/i/web/status/1…

18:53
@backendsecret все так, просто не ясно, что такое `проверка побочных эффектов`.

Проверка побочных эффектов самое сложное место при написании юнит-тестов. В самом крайнем случае это вырождается в… twitter.com/i/web/status/1…

18:56
@backendsecret о, так это ты создатель bookish_spork :) спасибо еще раз за него +)

🧡twitter.com/damirca/status…n

18:59
Эликсир движняк привнёс, но именно эликсир в итоге эрланг и заболотит. Если ещё не. twitter.com/backendsecret/…
19:06
@backendsecret Расскажи что-нить про спутник

Да чего рассказывать-то. Позор это. Огромная толпа разработчиков. А среди них были очень крутые. Но так и не смогли… twitter.com/i/web/status/1…

19:39
@backendsecret Больше подробностей! Больше техники! Больше хардкора!!!

Ну я так сходу ничего особо интересного не припомню. Но если вдруг у уважаемой публики есть вопросы, с удовольствие… twitter.com/i/web/status/1…

19:43
@backendsecret То есть, изначально строили продукт, не нужный рынку.

Такое почти всегда бывает. Только успешный продукт понимает это на ранней стадии и начинает меняться, нащупывая пот… twitter.com/i/web/status/1…

20:01
@backendsecret Имо вы готовить code review не умеете. Оно должно быть быстрое, если сделает лучше, чем было - мержи… twitter.com/i/web/status/1…

Я объясню, почему никакой повар не может приготовить CR. Почему это гетто по определению. Потому что это в любом сл… twitter.com/i/web/status/1…

20:20

Единственный способ убрать ожидание совсем, это сделать continuous CR. А это парное программирование

20:20
@backendsecret Простите, а вы знаете кто такой джим коплейн и его точку зрения на это? Если еще нет, то рекомендую… twitter.com/i/web/status/1…
23:26

# Пятница 8 твитов

@backendsecret о да, эта штука у нас исправно работает. Через неё сейчас ходит питон, рельсы, что-то ещё. Даем дост… twitter.com/i/web/status/1…
11:25
Выложили запись самого первого (неопубликованного ранее) выпуска (пилота) - overcast.fm/+OLr9bNEUM t.me/TODOFIXME/25

мои коллеги @Re_VKolesnikov и Никита Мишарин делают нескучный подкаст про программирование twitter.com/_todofixme/sta…

11:53
@backendsecret Стек, инфраструктура, компоненты. Ну и почему не взлетел, связано ли это с разработкой или только с… twitter.com/i/web/status/1…

По инфраструктуре, на мой взгляд, там было довольно здраво. Было три основных компонентов. Краулер, индексер, непос… twitter.com/i/web/status/1…

13:29

поиск работал локально с одним индексом. Чтобы искать сарзу по многим индексам и нужен был наш бэк на эрланге. Он з… twitter.com/i/web/status/1…

13:32

Потом фронтенд с помощью хайповой технологии XSLT делал HTML, который видели немногочисленные пользователи

13:33

Эта архитектура мне нравилась. Она была не без проблем. Но мне нравилось, что компоненты были изолированы и занимались одной простой задачей

13:34
@backendsecret Стек, инфраструктура, компоненты. Ну и почему не взлетел, связано ли это с разработкой или только с… twitter.com/i/web/status/1…

Пр бюджеты можно почитать на roem.ru Никаких инсайдов у меня нет. Я был простой разработчик twitter.com/pavel_prischep…

13:36
@backendsecret Лёша - скромняга, не сказал, что был гостем третьего выпуска. pca.st/0Mfg
17:10

# Суббота 8 твитов

Тред про bookish_spork. Это вещь, которой я горжусь. Во-первых, она реально полезная. Она нужна была лично мне и ни… twitter.com/i/web/status/1…

17:50

Название придумал гитхаб. У меня беда с фантазией. А гитхаб сам предлагает названия для репозиториев. Так что почт… twitter.com/i/web/status/1…

17:52

Библиотека предназначена для тестирования. Покрытие самой библиотеки 95%. Тесты ходят на тревисе, покрытие отправля… twitter.com/i/web/status/1…

17:58

Да потому что могу! В личном проекте имею право пошалить

17:59

И сделать это кстати было непросто. Формат отчета о покрытии в эрланге бинарный и несовместим не с какими другими.… twitter.com/i/web/status/1…

18:01

Публикация пакета на hex.pm происходит тоже из трэвиса. Трэвис можно настроить на хук по тэгу. Как… twitter.com/i/web/status/1…

18:05

Забавно, что весь этот обвес (конфиги трэвиса, ребара, скрипты для публикации) по объему сопоставим с кодом. Библиотечка реально крохотная

18:09
Название придумал гитхаб. У меня беда с фантазией. А гитхаб сам предлагает названия для репозиториев. Так что почт… twitter.com/i/web/status/1…

Угадайте кто писал эти штуки в букмейте
github.com/bookmate/autom…
github.com/bookmate/proba… twitter.com/backendsecret/…

18:12

# Воскресенье 16 твитов

Напоследок расскажу несколько интересных фактов про эликсир и не только

11:00

Автор эликсира Jose Valim является кор контрибутором фреймворка Ruby on Rails. Для эликсир-ребят он пророк, но для… twitter.com/i/web/status/1…

11:02

Валим не совсем с нуля делал эликсир. За основу был взят вот этот язык reia-lang.org (по крайней мере лексер)

11:08

Вообще клепать языки на эрланге дело нехитрое. В эрланге есть leex (генератор лексеров) и yecc (генератор парсеров)… twitter.com/i/web/status/1…

11:19

Есть еще промежуточное представление эрланга (Core Erlang), в которое намного проще транспилировать ваш язык, чем в… twitter.com/i/web/status/1…

11:21

Роберт Вирдинг, будучи языковым задротом, сделал несколько BEAM-языков: LFE (это лисп), пролог и луа

11:23

Пролог это самое смешное. Если вам меньше 70 лет, то вы вряд ли много знаете про пролог. И именно поэтому синтаксис… twitter.com/i/web/status/1…

11:27

LFE - это скорее эрланг с лисповым синтаксисом, чем лисп. LFE - это Lisp-2

11:31

Разница между Lisp-1 и Lisp-2 в том, что в Lisp-2 функции живут в отдельном неймспейсе, а в Lisp-1 в одном неймспей… twitter.com/i/web/status/1…

11:34

Lisp-1 считается лиспом здорового человека, а Lisp-2 - это лисп курильщика. Кложа - это Lisp-1. Рочему же Вирдинг сделал Lisp-2?

11:36

Всё дело в том, что в эрланге функции с разным кол-вом аргументов это разные функции. Они не могут жить в одном ней… twitter.com/i/web/status/1…

11:37

Но на эрланге есть еще и реализация Lisp-1! Это язык Joxa. Стоит отметить, что ни ваш покорный слуга, ни кто-то ког… twitter.com/i/web/status/1…

11:38

Для полноты картины можно упомянуть, что есть еще реализации кложи на эрланге! github.com/clojerl/clojerl
Но про нее,… twitter.com/i/web/status/1…

11:40

BEAM - это не единственная реализация VM эрланга. Есть еще LING - ВМ эралнга, которая работает на голом Xen-е. Тако… twitter.com/i/web/status/1…

11:45
это я, когда решил, что обойдусь в супермаркете без корзины

pic.twitter.com/8hYAOTHlwN

12:55

Моя неделя подошла к концу. Надеюсь вам было интересно. Спасибо всем огромное за вопросы и за поддержку. Вы все суп… twitter.com/i/web/status/1…

19:16

other