kamyshev.code
1.77K subscribers
40 photos
565 links
Архитектура, код, софт-скиллы и всё остальное. Вопросы, пожелания, комментарии — @igorkamyshev

https://kamyshev.me
Download Telegram
​​Простота

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

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

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

#проектирование
История: когда нужно пожертвовать скоростью ради простоты

Я написал систему, довольно простую по сути. У пользователя есть задачки, он может двигать их по разным статусам. Кроме этого, в системе было предусмотрено много дополнительной функциональности — синхронизация задачек с Трелло, уведомления о смене статуса через электронные писема и СМС, etc.

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

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

В итоге, я просто переписал этот кусок кода, и теперь пользователь ждет пока выполнятся все дополнительные штуки. Ответ занимает 1 секунду.

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

#кейс #проектирование
Публиковать еще истории из рабочего опыта?
anonymous poll

Да – 269
👍👍👍👍👍👍👍 98%

Нет – 6
▫️ 2%

👥 275 people voted so far. Poll closed.
Конфигурация приложений — один из самых важных аспектов разработки. Это место, где постоянно происходят утечки секретных данных, тормозится процесс внедрения непрерывной доставки, случаются сложно отлавливаемые рантайм‑ошибки. Забота об этом — необходимость при разработке любого приложения.

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

Конфигурация Node.js приложений

К Node.js относится только предпоследний абзац, так что читать можно и людям из других технологий.

#удобство_разработки #js
Другое программирование

Современный мир пропитан данными — это самая большая ценность. И круто уметь с ними работать. Даже если нет желания полностью посвятить себя этому, важно иметь хотя бы общее представление.

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

В SkillFactory запускается очередной поток специализации Data Science. Это год плотного обучения, куча практики и отличные преподаватели. Я убежден, что осваивать новое нужно под присмотром опытных специалистов, и этот онлайн курс — отличная возможность.

#партнерский_материал
3 месяца назад публиковал заметку о том как обращаюсь с публикацией npm-пакетов. Два месяца назад осознал, что это все еще требует непозволительно много времени на поддержку.

Тогда я сделал @solid-soda/scripts — пакет инкапсулирующий в себе все проверки. Там статический анализ кода и стилей, форматирование, проверка сообщений к коммитам и их генерация, создание релизов.

Процесс публикации и поддержки пакетов сильно упростился. Обновил заметку.

Процесс подготовки npm-пакета

#процесс
​​Другое программирование

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

В Otus есть крутой курс «Нейронные сети на Python» — довольно сложный и обширный. Для его прохождения нужно иметь начальные знания в Python, линейной алгебре, началах анализа и теории вероятностей. Проверить свой уровень можно во вступительном тесте.

15 мая (сегодня) в 20.00 МСК они проведут открытый урок «Учим нейронную сеть копировать почерк». Внутри будет разбор одной из финальных задач прошлого набора курса — порождение рукописного текста с заданным почерком.

#партнерский_материал
Чиним img

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

Крутой доклад Дмитрия Махнёва «Чиним img» как раз об этом — причины такого поведения фотографий и пути решения.

#фронтенд
​​Локальная разработка

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

Есть простой способ избавиться от этой боли — ngrok. Эта штука позволяет моментально получить URL для вашего локального компьютера, SSL в комплекте.

Для нужд локальной разработки вполне достаточно бесплатной версии.

#удобство_разработки
Товарищ подсказал еще одно аналогичное решение — localtunnel. Выглядит даже проще.

https://localtunnel.me/
Еще один подобный сервис — serveo

https://serveo.net/
DRY — не повторяй себя. Этот принцип часто понимается неверно.

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

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

Тематическая статья — Ошибочное понимание принципа DRY

#проектирование
Я слушаю очень много подкастов. Некоторые из них связаны с программированием.

+ ДевШахта — много про софт-скиллы, много про Node.js.
+ Мысли и методы — о непривычном в программировании. Вопросы вычислимости, связи информатики и вселенной.
+ Новости 512 — еженедельные экстра-короткие новостные выпуски.
+ Пятиминутка React — не только React, а скорее фортенд в целом. К сожалению, не выходит с декабря прошлого года.

И еще парочка, они классные, но я перестал их слушать.

+ Frontend Weekend — интервью с разработчиками, чаще фротендерами, но не всегда.
+ Радио-Т — длинные выпуски, обсуждаются новости и статьи.

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

#рекомендации