Legacy Code


Гео и язык канала: не указан, не указан
Категория: не указана


Канал - сборище ссылок, видосов и заметок, которые я счел полезными

Связанные каналы

Гео и язык канала
не указан, не указан
Категория
не указана
Статистика
Фильтр публикаций


Надо, но сейчас не до этого. Впрочем, как и всегда










Теория ограничений

Если хочешь добиться цели, то делай только то, что способствует достижению цели. То что ты хочешь сделать не способствует достижению цели? Тогда выкидываем.


Репост из: Архитектура ИТ-решений
Ну что, айтишнички криворукие, есть ли у вас план Б? Я не знаю, живо обсуждаемое в telegram-каналах приложение https://t.me/itsorm/1576, действительно, от оперативного штаба Москвы или нет, но есть ряд детских глупостей, от которых отлично помогает ИТ-архитектура. Надо её просто иногда применять. Попробую перечислить пару вещей:

1) Никогда не пишите приложения. Особенно клиентские, особенно мобильные (да и фронтальные, те что на js в браузере, тоже не пишите), особенно если нет времени, тем более если вам масштабироваться до нескольких миллионов за несколько дней. Начинайте с протокола взаимодействия: Alice->Bob…, ну сами знаете

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

2 ) Нет приложения, нет проблемы омниканальности. Сегодня локально проверяем, а вечером логи на сервер грузим для поиска злоупотреблений, завтра в браузере, послезавтра по mail-у шлём и ответ полчаса ждём, через полгода приложение напишем, ну если ещё захочется, разумеется

3) Фичи никому не нужны. Всегда надо делать только базовый функционал. Кстати, реальное назначение MVP не гипотезы тестировать, а отгонять от продукта идиотов с дополнительными требованиями (это шутка, почти). Типа:
- А почему ты не хочешь биометрию встроить?
- Я?! Не хочу? Да я всё что угодно встрою! Хоть блокчейн с машинлёрнингом, хоть ГОСТовские алгоритмы, реализованные только под виндоуз, но потом, в целевой архитектуре, так сказать. А пока у меня MVP, отвалите!

Ну, а для тех кому всё это сложно даётся простой совет: архитектора позовите, будет хоть на кого потом всё свалить


И снова про дзен минимального использования труда и средств


Я пока не достиг того уровня дзена, чтоб использовать минимальный набор вещей для создания проекта, но я к этому стремлюсь


Репост из: ✙rozho)))k✙🇺🇦
Инфраструктура для людей 1

Подавляющее большинство современных инструментов управления инфраструктурой сделаны не для людей. Имея на руках кучу отличных технологий и карт-бланш, из-под рук “творцов” всё равно выходят уродливые пародии на Do Nothing Machine(https://www.youtube.com/watch?v=Bp4tGTNNi1I), которыми потом приходится пользоваться несчастным инженерам.

По идее, с течением времени уровень абстракции должен повышаться, а сложность управления — уменьшаться. Когда выстрелила Lambda и serverless-движение, то казалось что вот он — конец громоздким архитектурам и серверам. Увы, на деле всё не так просто и Lambda стала еще одним инструментом для узкого круга задач.

Меня сильно огорчает это положение вещей. Большинству проектов нужно всего ничего:

- Балансировщик-гейтвей с SSL-терминацией

- Эфемерные сервера приложений и минимальный service discovery между ними

- Крон, выполнение кода по расписанию

- Managed базы данных (реляционные и нереляционные) с бекапами, копированиями, автоматическим масштабированием

- Объектное хранилище (S3) и CDN для него

- Очереди (SQS и всевозможные *MQ)

- Чтобы всем этим можно было управлять по API

- Blue-green (red-black) deployment, клонирование окружений, canary releases

- Все это в одном месте и чтобы запускалось одной кнопочкой

Всё. Этим набором (а то и меньше) можно закрыть почти всё что угодно. Конечно, вдобавок надо еще мониторинг физических и бизнес метрик, централизованное логирование, фаерволы и всё остальное из 12-factor application набора, но то уже плюшки, поначалу можно жить и без них. Но для того, чтобы всё это настроить, завести и потом поддерживать, надо приложить титанические усилия. Большинство держит для этой чёрной работы специального человека или целый отдел.

К сожалению, индустрия идет по пути культа больших компаний и пытается скуксить (“натянуть наоборот”) решения, выросшие из потребностей гигантов, на свою маленькую проблему. У нас появляются кубернетесы, но кубернетес из коробки слишком сложен(https://github.com/kelseyhightower/kubernetes-the-hard-way) поэтому давайте сделаем еще десяток инструментов для упрощения кубернетеса: minikube, k3s, kind, еще черти что, для конфигурации возьмем Б-го мерзкий YAML а для гибкости навернем туда разнообразных шаблонизаторов и сделаем компиляцию одного ямля в другой. На одном из проектов, где я сейчас работаю, все крутится в кубере. Даже с учётом того, что мы используем GKE, окружения не сильно сложные и все деплоится через helm, у меня просто лютейше подгорает от всего этого. После пары месяцев работы над инфраструктурными задачами я совершенно перехотел заниматься тем, что называется DevOps. Пустите меня обратно в коробочку, откуда я могу выдавать код, который “работает на моей машине”, а дальше делайте с ним что хотите. Я бомблю каждый день от невероятной сложности всего происходящего и до меня теперь на самом деле дошла шутка про Senior YAML Engineer. Мне кажется, люди могут лучше.

(если у вас есть комментарии и возражения, например о том что все на самом деле хорошо, то обязательно оставляйте его у меня в блоге: https://www.rozhkov.me/post/infrastructure-for-a-people/)


Репост из: Господин Архитектор
Возникает вопрос, а что важнее всего для заказчика в разработке?

Это очень простой вопрос, и ответ очень простой. Заказчику от разработки -- неважно, внутреннему или внешнему -- важна СКОРОСТЬ. Можно усилить: по сути, больше ничего не нужно. Да даже сама разработка (продуктовую, имею в виду) и ее приемы -- она исключительно про скорость.

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

Микросервисы? Чтобы можно было взять те команды, которые есть в наличии, и писать на том, на чом умеют; сладкие сказки про масштабирование и прочий шрот уже сверху придумали, потому что по-честному такую сложную и ненадежную машинерию ни один инженер не взвалил бы на себя (вспомните soa: а теперь там на порядки больше единиц развертывания). Лучше всего микросервисы масштабируются только по одному измерению: количеству людей в разработке.

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

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

Специализация в разработке? Ну вы поняли.

Хорошая разработка это скорость, и ничего более. Скорость сегодня, скорость завтра, скорость когда ее ждут. Все остальное -- только топливо для этой скорости.


Собеседование работодателя, ver. 1

Звонок от HR:
- есть ли project manager и product manager?
- есть ли разработчики от мидла и выше и их количество
- как часто пересматриваются зарплаты
- можно ли работать из дома?
- как дела обстоят с опозданиями?
- просить задавать вопросы, которые действительно пригодятся в работе, а не задачи на алгоритмы. Мотивировать тем,что у них улучшится процесс найма, у меня не тратится время на бессмысленные и беспощадные вопросы. Надо говорить заранее, на уровне общения по телефону, чтоб они успели подготовиться к собеседованию
- можно ли некоторые плюшки обменять на деньги?



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

За фидбеком и добавлением новых вопросов писать @miras_ka


Собеседование работодателя

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




Testing Microservices, the sane way

https://medium.com/@copyconstruct/testing-microservices-the-sane-way-9bb31d158c16

Статья про грабли, на которые вы наступите во время тестирования микросервисов


Testing Strategies in a Microservice Architecture

https://martinfowler.com/articles/microservice-testing

Доклад от Мартина Фаулера и Тоби Клемсона про то, как можно тестировать микросервисы


Event Modeling

https://eventmodeling.org/posts/what-is-event-modeling/

Статья про то, как огранизованно вести все доставляемые фичи, правильно их декомпозировать и четко разграничить обязанности команды. По сути это описание того, как применить Domain Driven Development в создании продукта. При этом монолиты написанные на DDD потом легче разбивать на микросервисы.


Оптимизация Node.JS приложения

https://m.habr.com/ru/post/414541/

Вжуууух и ускоряем приложение на Node.JS. Параллельно замеряем, смотрим - где, что и сколько выполняется.

Спойлер - в первую очередь обновитесь до последней версии ноды. Приложение у вас не сломается(потому что в исходниках ноды запариваются об обратной совместимости), но станет быстрее - возможно от 10% до нескольких раз

Fun story:

Был у меня как-то скрипт на ноде - там по сути надо было правильно заполнить Excel таблицу. То есть: собрать данные с разных мест, соотнести эти данные с правильной строкой в таблице и заполнить недостающие данные.
И внутри него у меня было 2 массива по 200 строк данных - я сначала тупо написал цикл, который проходится по массиву и находит нужную строку из таблицы. Там была одна особенность в коде - для удобства maintain-a этого кода я решил отделить код вставки данных в новую таблицу от всего остального кода. Так как у каждой колонки была своя логика заполнения данных, то я пришел к выводу, что один файл с кодом(модуль) - это то, как заполнять именно эту колонку в табличке. Много колонок - много модулей, если нет модуля заполняющая эту колонку - значит ее еще не заимплементили. Тогда люди всегда будут понимать, как вообще эта табличка заполняется и что именно заполняется в этой табличке.
Проблема: теперь у меня не 200 вызовов функции поиска строки, a NumberOfRows * NumberOfColumns вызовов. Ну, я такой думаю: все время делать поиск по массиву - это очень долго(обычный цикл, О(n^2) на время исполнение), давай уж перепишу на HashMap - буду стучаться по ключу и поиск будет занимать О(1).
Тужился-пыжился, за 2 часа написал код на HashMap, был горд и доволен собой - пока не решил посмотреть время исполнения кода. Оно просто не отличалось. Естественно я негодую, расчехлил тулзу для генерации Flamegraph моего приложения, погонял старый и новый код через него. Выяснилось, что с самого начала мой код на циклах изначально занимал мало времени всего кода - разрабы Node.js и V8 видимо поняли,что если массив не меняется, то результат выборки по массиву можно мемоизировать - по сути это тот же самый HashMap как in-memory cache(ключ - входные параметры функции, значение - результат этой функции), следовательно O(1) на поиск.

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


How to build a plugin system on the web and also sleep well at night

https://www.figma.com/blog/how-we-built-the-figma-plugin-system/

Статья про то, как на фронтенде сделать безопасную систему плагинов. Чуваки из Figma реально постарались на славу.

Спойлер: в 90% случаев вам хватит тэга


Как мы тестируем фичу от ТЗ до пост-продакшена и сохраняем дружеские отношения внутри команды

https://habr.com/ru/company/2gis/blog/449942/

Статья про то, как 2ГИС сделали систему доставки новых фич, чтоб по пути ничего не забыть и в лишний раз не дергать людей. Статья не про код, а именно про Project Management

Показано 20 последних публикаций.

16

подписчиков
Статистика канала