Получи случайную криптовалюту за регистрацию!

Cross Join - канал о разработке

Логотип телеграм канала @crossjoin — Cross Join - канал о разработке C
Логотип телеграм канала @crossjoin — Cross Join - канал о разработке
Адрес канала: @crossjoin
Категории: Технологии
Язык: Русский
Количество подписчиков: 1.45K
Описание канала:

Канал о разработке Антона Околелова. Мысли, новости, вопросы.
По вопросам рекламы @antonokolelov

Рейтинги и Отзывы

3.67

3 отзыва

Оценить канал crossjoin и оставить отзыв — могут только зарегестрированные пользователи. Все отзывы проходят модерацию.

5 звезд

0

4 звезд

2

3 звезд

1

2 звезд

0

1 звезд

0


Последние сообщения 6

2021-04-21 22:16:53 Кратко о канбан-методе, сумбурный набор тезисов.

1) Канбан-метод и канбан, который в Тойоте - это два разных канбана.

2) Канбан-метод, в отличие от скрама, не является набором конкретных жестких правил и инструментов. Это скорее набор принципов и рекомендуемых практик

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

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

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

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

5) поэтому вторая обязательная практика - это ограничение количества задач, одновременно взятых в работу (wip-лимит). У десяти программистов всего десять голов, они не могут делать 100 задач одновременно. Стоит поставить разумный лимит на количество одновременно выполняемых работ, это существено уменьшит lead time, существенно увеличит предсказуемость поставки и даже улучшит самочувствие разработчиков и лидов. Программисты не будут переключаться с задачи на задачу, лид будет полностью понимать, что происходит в его отделе.

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

7) Так как обычно задача больше ждет чего-то, чем программируется, важнее отслеживать, кто кого блокирует, чем кто быстрее программирует. Поэтому стоит делать ежедневный митинг на 5-10 минут для выявления блокеров.

8) Визуализация может быть на нескольких уровнях. На одной доске продуктовые задачи, приносящие ценность, на других досках отдельные задачи в каждой из тех команд.
И там, и там должны быть свои WIP-лимиты.

9) WIP- лимиты вообще не зависят от размера задач. Это количество одновременно разрабатываемых задач, только и всего. Не путать со скрамом и списком задач на спринт.

10) идеально использовать "вытягивание". Т.е. только когда освободилось место (задач в работе меньше, чем WIP-лимит), брать новую задачу у продактов. Но в реальности продакты не могут работать "по вызову" и собираются время от времени, чтобы сформировать небольшой список актуальных задач, из которых разработчики будут брать задачи, когда освободятся руки. Размер этого буфера зависит лишь от частоты, с которой продакты собираются и изменчивости рынка
785 viewsAnton Okolelov, edited  19:16
Открыть/Комментировать
2021-04-16 07:47:42 Полное (даже слишком) описание фич Postgresql 14.

Никакой революции нет, но возможно какие-то отдельные вещи, связанные например с партициями или рекурсивными CTE вам могут пригодиться

https://m.habr.com/ru/company/postgrespro/blog/550632/
794 viewsAnton Okolelov, edited  04:47
Открыть/Комментировать
2021-04-09 11:22:43 Байкшеддинг
Если вам кажется, что частенько на совещаниях излишне долго обсуждаются незначительные мелочи, а по-настоящему важные вещи быстро пропускаются, то вам не кажется. У этого есть даже название.

«Эффект велосипедного сарая» — bike-shed.

«Эффект велосипедного сарая» или «закон тривиальности Паркинсона» был сформулирован Сирилом Норткотом Паркинсоном в 1957 году. Он привел в пример совещание на атомной электростанции, на котором большую часть времени участники потратили на обсуждение мелких и простых для понимания вопросов, таких как цвет велосипедного сарая, а не конструкции самой электростанции. Как объяснил инженер Карл Фогель, «время, потраченное на обсуждение пункта, обратно пропорционально его сложности и важности».

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

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

Вот и получается, что люди интуитивно или по своей лени идут по более простому пути. Хоть это и контрпродуктивно

Что с этим делать?
Знать об этом явлении. Всегда об этом помнить. Стараться вовремя возвращать на путь важных и продуктивных обсуждений себя и помогать вернуться другим.

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

Однако сознательность и дисциплина помогут сначала конкретному человеку, а педагогика и просвещение со стороны этого человека помогут всему коллективу.

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

Покажите этот пост коллегам, которые страдают байкшеддингом.
772 viewsAnton Okolelov, 08:22
Открыть/Комментировать
2021-04-08 10:02:36 Ночью не спалось что-то, в голову лезли мысли про тестирование.

Вот есть, например, код (допустим микросервис с http-эндпоинтами), и к нему написаны какие-то тесты. Уверен ли я, что тестов достаточно? Могу ли я серьёзно отрефакторить код и быть уверенным, что ничего не поломал?

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

Но с другой стороны, покрывать всё тестами на 100.0% (например, анализируя через мутационное тестирование) - слишком дорого. Действительно, зачем покрывать ветки кода, где, например, в случае ошибки при отправке тела ответа сервера, в лог пишется какой-то текст. Ну пишется и пишется, что там тестировать. Особенно, если это некритичная часть системы.

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

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

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

Таким образом, всякая херня не будет тестироватсья никогда - и слава богу. А сверхважные денежные куски кода будут покрыты тестами на 146%

Вот такие у меня эротические фантазии по ночам
802 viewsAnton Okolelov, 07:02
Открыть/Комментировать
2021-04-07 04:17:39 Андроид делает ставку на Rust

https://9to5google.com/2021/04/06/android-rust-language-support/
695 viewsAnton Okolelov, 01:17
Открыть/Комментировать
2021-04-05 22:06:33 Благодаря дженерикам в Go наконец-то можно будет написать универсальную для всех типов (ну, почти) функцию поиска элемента в списке. Что-то типа такого:

func find[T comparable](s []T, w T) int {
for i, v := range s {
if v == w {
return i
}
}
return -1
}

Мелочь, а приятно
698 viewsAnton Okolelov, edited  19:06
Открыть/Комментировать
2021-04-03 21:19:36 Говорят, что гугл проводил исследование, что умение в алгоритмы хорошо коррелирует со способностями к обычным рутинным задачам программиста. Нет ли у кого-нибудь ссылки на это исследование? Ибо это многое меняет.
828 viewsAnton Okolelov, 18:19
Открыть/Комментировать
2021-04-01 10:20:45 У меня есть одни слова от автора @ZeroBias эффектора на тему почему появился effector и какие его плюсы.

Децентрализованность, декларативность, эффективность. Требовался инструмент, позволяющий управлять данными в сложных приложениях без опасности раздуть монолитный центральный стор, с явным control flow, нормальной типизацией и емким апи.

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

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

Принцип работы должен by design исключать необходимость в reselect, оповещая об изменениях только тех, кому они необходимы. Это позволяет не задумываться о том, что у тебя будет триггериться всё приложение если ты захочешь вынести стейт модалки из реакта. По совместительству это означает что приложения избавлены от проблем с перфомансом, возникшим у react-redux при переходе на контекст.

Возможность, место, и способ вынести любую требуемую бизнес-логику из view, максимально упрощая компоненты.

Независимость от спорных концепций — никаких декораторов, никаких зависимостей от реакта/rxjs либо необходимости юзать классы или прокси — ничего из этого не требуется для управления состоянием приложения и поэтому api библиотеки использует только функции и простые js объекты.

Предсказуемость api. Небольшое число базовых принципов переиспользуются в различных кейсах, снижая нагрузку на юзера и повышая узнаваемость. Зная как работает .watch в событиях, можно догадаться, что делает функция .watch у стора.

Приложение строится из комбинации базовых элементов и возможности строить новые.
Нет никакого смысла стремиться выдать всё за стрим, за редьюсер или за обсервабл, в приложении требуются они все, и библиотека предлагает решение чтобы управлять структурой данных, а не скрывать её.
947 viewsAnton Okolelov, 07:20
Открыть/Комментировать
2021-03-30 07:24:53 Самый большой список источников для изучения языка Rust (книги, статьи, видео, подкасты, блоги, стримы, упражнения и тд)

https://loige.co/where-to-go-to-learn-rust-in-2021/
824 viewsAnton Okolelov, edited  04:24
Открыть/Комментировать
2021-03-29 12:05:08 Вчера в репозиторий php попало сразу 2 бекдора, причем от имени создателя PHP Расмуса Лердорфа и небезызвестного core-разработчика Никиты Попова.

Подозревают, что сервер git.php.net скомпроментирован.

В итоге решили отказаться от собственного гит-репозитория, и перейти полностью на Github (раньше гитхаб был лишь зеркалом)
829 viewsAnton Okolelov, edited  09:05
Открыть/Комментировать