# Понедельник 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
Ну ебаный насос....18:41
Это ващет должна быть нулевая стадия, вроде бы.
Иначе захер вообще было вот это всё, что до неё… twitter.com/i/web/status/1…
В @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 последнее что стоит делать это тесты*17:00
Для mvp фокус на happy path сценариях,… twitter.com/i/web/status/1…
Про эрланг. Эрланг я люблю всей душой. Но в букмейте нет ни строчки на нем (к счастью, наверное)
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…
Эрлангисты и сочувствующие (эликсир, да), пожалуйста, пользуйтесь. Она очень полезная 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 :) спасибо еще раз за него +)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/0Mfg17: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/…
# Воскресенье 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:27LFE - это скорее эрланг с лисповым синтаксисом, чем лисп. LFE - это Lisp-2
11:31Разница между Lisp-1 и Lisp-2 в том, что в Lisp-2 функции живут в отдельном неймспейсе, а в Lisp-1 в одном неймспей… twitter.com/i/web/status/1…
11:34Lisp-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…
BEAM - это не единственная реализация VM эрланга. Есть еще LING - ВМ эралнга, которая работает на голом Xen-е. Тако… twitter.com/i/web/status/1…
11:45это я, когда решил, что обойдусь в супермаркете без корзины12:55
Моя неделя подошла к концу. Надеюсь вам было интересно. Спасибо всем огромное за вопросы и за поддержку. Вы все суп… twitter.com/i/web/status/1…
19:16# Ссылки
other
- https://bookmate.com/upload
- https://coveralls.io/
- https://codecov.io/
- https://www.nomadproject.io/
- http://sputnik.ru/
- https://github.com/tank-bohr/bookish_spork
- https://github.com/bookmate/automatic-bassoon/
- https://github.com/bookmate/probable-giggle
- https://github.com/clojerl/clojerl
- https://groups.google.com/forum/#!msg/ror2ru/nUdIP6gkvmM/SElcpZjVw-QJ
- http://hex.pm/
- http://roem.ru/
- https://pca.st/0Mfg
- http://reia-lang.org/