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

Good dev knows

Логотип телеграм канала @gooddevknows — Good dev knows G
Логотип телеграм канала @gooddevknows — Good dev knows
Адрес канала: @gooddevknows
Категории: Технологии
Язык: Русский
Количество подписчиков: 2.75K
Описание канала:

Everything what the good dev shall know. Stories, hard skills, soft skills. Regularly.
Instagram: https://www.instagram.com/gooddevknows/
Questions: @PavloPoliakov

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

2.00

3 отзыва

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

5 звезд

0

4 звезд

0

3 звезд

1

2 звезд

1

1 звезд

1


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

2022-02-24 11:29:13 Моя страна атакована, мой город атакован, не хочу делать вид, что этот канал вне политики.

Сегодня Путин объявил войну Украине, мотивируя свои действия идеями "денацификации". Это полная чушь и не имеет ничего общего с реальностью. Когда я жил в Украине я ездил в Донецк и отлично проводил там время. Я ездил во Львов, говорил там по-русски, и отлично проводит там время. Народ Украины и власть, которую украинцы выбрали в ходе демократических выборов, хочет одного — жить мирно и счастливо.

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

Я знаю, что в этом канале много россиян. Посмотрите обращение президента Зеленского к россиянам (на русском с 02:03).

Всех призываю помочь фонду "Повернись живим". Это можно сделать тут:
* https://www.patreon.com/savelife_in_ua
* https://savelife.in.ua/donate/

Переживаю, но верю в будущее
6.9K views08:29
Открыть/Комментировать
2022-02-23 12:23:52 Mutation testing

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

Мы можем тестировать компоненты отдельно с помощью unit тестов, мы можем тестировать как все работает вместе, с помощью интеграционных тестов. Но сколько тестов нужно? Чем сложнее приложение, тем больше сценариев, как оно может работать — тем больше тестов можно написать. Все сценарии покрыть невозможно. Но можно усилить свой quality assurance процесс дополнительно. Один из таких вариантов — применять mutation testing .

Суть этого подхода проста. Специальная библиотека делает в вашем коде изменение (мутант) и запускаются тесты. Если ваши тесты упали, значит они убили мутанта . Если ваши тесты не упали, значит он выжил и нанес ущерб. Это что-то значит. Хотя бы следующее — либо изменение было сделано в мертвом коде, либо этот кусок кода не тестируется, либо ваши тесты плохо работают. Из этого уже можно сделать какие-то выводы и принять решения.

Какие изменения вносятся в код? Например, у вас в коде есть if(myValue == 50), мутант может выглядеть так if(myValue != 50). Мутант ведет себя как обычный баг.

Качество ваших тестов можно будет измерить ориентируясь на mutation score. mutation score = number of mutants killed / total number of mutants. Если mutation score низкий — нужно менять ваши тесты.

Что можно использовать:
* Stryker — для JavaScript, C#, Scala
* Pitest — для JVM языков
* Mull — для C или C++

Еще раз — тесты это классно. Их нужно писать. Если хотите контролировать, что ваши тесты действительно что-то проверяют, добавьте mutation testing.

#хардскиллы
154 views09:23
Открыть/Комментировать
2022-02-22 11:58:59 Написал лонгрид для VC о том, как я в 2019 изобрел тесты в Instagram.

Будет интересно почитать всем любителям пет-проектов. У вас есть какие-то? Расскажите в комментариях.

Еще есть кросс-пост на Хабре, для ваших апвоутов .
2.0K viewsedited  08:58
Открыть/Комментировать
2022-02-21 12:24:36 Как я промоутил без фактов

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

Тогда процесс был такой — тимлиды заполняют документы на членов команд, собирают с них фидбэк, дают свой и делают вывод — как проявил себя человек в этом полугодии. Вариантов было три — below expectation, meets expectation, overachieved expectations. Если человек overachieved, то ему выплачивался бонус , согласно контракту. Потом был митинг среди всех хэдов, где производилась калибровка, утрясались детали и утверждались результаты.

В моей команде, по моему мнению, был один человек below, два meets и один overachieved. Поговорим о последнем. На этого разработчика всегда можно было положиться, он брал на себя ответственность, разбирался с бизнес требованиями, предлагал улучшения, делал больше чем написано в тикете, было понятно чем он занят. В общем это был Хороший разработчик.

С этой информацией я, собственно, и подошел к калибрационному митингу. Это был первый подобный опыт для меня. На митинге мы быстро прошлись по below и meets — вопросов не было. Потом начали обсуждать overachieved. И тут меня спросили — а почему этот разработчик overachieved? Я рассказал про то же, что написал выше. Тогда меня спросили — а что конкретно сделал этот разработчик, как можно это измерить?

И тут я понял, что я в беде . У меня не было ответа на этот вопрос. Для меня было очевидно, что он работает отлично. Я думал, что и для других очевидно, а если не очевидно, то они поверят моим словам. К сожалению, у меня не было подготовлено конкретных примеров (а лучше еще и слегка преувеличенных). Я попытался что-то быстро вспомнить, но это был провал. При этом я наблюдал, как другие хэды предметно нахваливали своих подопечных, тех, кого я бы не оценил, как Хороших разработчиков.

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

Какой вывод можно сделать? Я делаю такой — нужно не забывать, что мы живем в информационном пузыре. Если что-то очевидно мне, это не значит, что это очевидно и другим. Если хочешь в чем-то убедить других, легче всего это делать, используя что-то, что можно измерить. Например, я мог сказать — разработчик N сделал рефакторинг пайплайна, теперь мы билдим проект за 5 минут, это сэкономило нам 20 часов в прошлом месяце. А его об этом даже никто не просил. Все нужно измерять, это пригодится.

#истории
1.7K views09:24
Открыть/Комментировать
2022-02-18 11:50:27 VAPID цели

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

Если мы хотим что-то сделать, то нужно поставить цель. А когда мы слышим про постановку цели в голову приходит одна аббревиатура — SMART. Цель должна быть Specific, Measurable, Attainable, Relevant, Time-Bound. Тогда шансы на успех повышаются.

Хорошо, мы теперь знаем (знали) как ставить хорошие цели, а что есть что-то наоборот? Как проверить, не поставили ли мы перед собой “плохую” цель? Решение есть. Недавно я узнал еще одну аббревиатуру — VAPID.

VAPID это:

Vague – Цель не ясна, шаги, которые нужно предпринять непонятны

Amorphous – Непонятно, что будет считаться достижением цели

Pie in the sky – Она очень амбициозна

Irrelevant – Цель сложно отнести к чему-то, что действительно важно для нас

Delayed – Не ясно когда планируется осуществлять намерение, это может произойти в любой момент

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

Пример VAPID цели — “давайте избавимся от технического долга”, “надо найти новую работу”.

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

#софтскиллы
772 views08:50
Открыть/Комментировать
2022-02-17 11:15:03 Новости

В начале этой недели стали доступны результаты IT Salary Survey December 2021. Особенность конкретно этого опроса в том, что его участники, преимущественно русскоговорящие экспаты.

Наблюдения следующие:

* Большинство экспатов переезжают в Берлин. Определенно там и вакансий больше и ЗП повыше.

* Зарплаты растут, сейчас медианная ЗП составляет 75.000€, когда я переезжал была 60.000€.

* Total compensation практически никогда не отличается от базовой зарплаты больше чем на 10%. В Германии по-прежнему не распространено давать стоки. Обычно бонус это какой-то ежегодный процент от ЗП.

* Большинство ответов из Берлина, 20% из всех ответов питонисты. Они что там все переезжают data science делать в Берлин?

* Фрилансеры зарабатывают прям много, но у них и рабочих часов в году больше, чем у обычных работников. 2000 vs ~1800.

Остальное посмотрите сами, интересные наблюдения велком в комментарии.

Спасибо организаторам за проведение опроса .

#новости
1.7K viewsedited  08:15
Открыть/Комментировать
2022-02-16 12:30:36 CIDR

Хороший разработчик работает с инфраструктурой. Кто-то чаще, кто-то реже, но все сталкиваются с этим. Часть инфраструктурных задач связана с сетью. Например, мы хотим создать новую VPC (Virtual Private Cloud) на AWS и разместить там наши виртуальные сервера. Когда мы создаем VPC, нужно указать пул IP адресов, которые могут участвовать в этой сети, для этого нас просят указать CIDR блок.

CIDR (Classless inter-domain routing) нотация позволяет нам компактно указать какие IP адреса мы выделяем. Например 10.10.10.10/24 говорит нам, что можно выделять IP с 10.10.10.0 по 10.10.10.255, то есть 256. Но почему так? Я постоянно забываю принцип, по которому из строки можно получить пул IP. Давайте разберемся, может после этого и я запомню.

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

Теперь про сам IP — IP это четыре байта байт.байт.байт.байт , каждый байт состоит из восьми бит, их можно представить как десятичное число. Байт=11000000 это 192. Таким образом, мы понимаем, что IP это четыре раза по 8 бит, то есть 32 бита.

10.10.10.10 = 00001010.00001010.00001010.00001010.

Теперь возьмемся за /24 , 24 в этом случае это количество бит, начиная слева, которые НЕЛЬЗЯ менять, когда мы хотим получить новый IP. Эти биты являются адресом подсети. Т.е. когда мы выделяем новый IP из этого блока, то мы работаем с такой схемой: 00001010.00001010.00001010.*. У нас осталось 8 бит, чтобы выделять новые IP. В эти 8 бит поместится ровно 256 разных значений.

Теперь другой пример, мы хотим, чтобы наша сеть была маленькой, чтобы в ней было максимум 8 IP. Как мы это сделаем? Зафиксируем больше битов! 10.10.10.10/29. Тогда мы можем выделать IP с 10.10.10.8 по 10.10.10.15.

Еще раз — когда нужно указать подсеть, мы используем CIDR. Если вы вдруг (опять) забыли, как это работает, то используйте онлайн калькулятор https://cidr.xyz .

#хардскиллы
1.4K viewsedited  09:30
Открыть/Комментировать
2022-02-16 12:09:03
Сколько IP в блоке адресов 10.10.10.10/16 ?
Anonymous Quiz
14%
16
2%
40000
47%
65536
13%
32768
24%
Что все это значит?
656 voters1.6K views09:09
Открыть/Комментировать
2022-02-14 11:46:54 Все стремится к энтропии

В каком-то источнике, я однажды прочитал, что в должностной инструкции Senior+ инженеров в Google указано, что часть их работы это “уменьшать хаос”. Сейчас, когда мне пришла идея этого поста, то я уже не смог найти источник, но это во мне срезонировало и я часто об этом думаю.

Мы разрабатываем информационные системы, это не только микросервисы или приложения, это еще и тесты, процессы, люди, железо. Весь этот механизм как-то пыхтит, скрипит, но работает. Но если его не трогать, то он точно когда-нибудь развалиться .

Существует даже физический закон “Закон неубывания энтропии” (беспорядка) — в изолированной системе энтропия не уменьшается. Информационную систему с внешними зависимостями сложно назвать стабильной. Поэтому, если перенести этот физический закон в наш абстрактный IT мир, то можно сделать вывод — если жизнь в нашей системе не поддерживать, то она точно сломается.

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

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

Примеры:
1. Заметил(а), что в README.md что-то уже не актуально? — удали
2. Заметил(а), что не хватает какой-то документации — добавь
3. Какой-то процесс не задокументирован? — напиши документацию
4. В Slack вашу команду о чем-то спросили? — ответь
5. Кто-то болел и потерял контекст? — созвонитесь и расскажите ему что произошло

Есть идиома "это последняя соломинка, которая сломает спину верблюду”. Одна из задач Хорошего разработчика это убирать эти соломинки, тогда спина нашего верблюда никогда не сломается.

Какие еще примеры приходят вам в голову?

#истории
1.6K viewsedited  08:46
Открыть/Комментировать
2022-02-12 11:23:51 ,

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

Сегодня хочу порекомендовать еще один канал, на который подписан сам — Нестыдная фасилитация. Канал ведут три Agile-эксперта — Саша, Женя и Оксана, они же — партнеры в проекте co-actors.

Я узнал об этом канале после подкаста Podlodka #217 — Фасилитация, который, в принципе, обязателен к прослушиванию.

В канале девушки регулярно пишут обо всем, что связано с принятием решений и эффективной работе в команде. Эти темы актуальны не только для Agile-коучей, но и если вы разработчик или тимлид. Например:
* Как создать базовые договоренности в команде
* Когда у команды нет идей, что это может значить?

Хороший разработчик не индивидуалист, он работает в команде, и нам важно знать, как работать в команде эффективно.

Подписывайтесь: https://t.me/no_shame_facilitation
1.6K viewsedited  08:23
Открыть/Комментировать