Цельнометаллический программист¶
«В моей школе ... нет ни врат, ни тайных принципов. В пяти положениях меча нет никакого внутреннего смысла».
Миямото Мусаси, «Книга пяти колец».
Golang¶
Go не является ни «волшебной палочкой», ни «серебряной пулей», как его иногда пытаются презентовать фанаты. Даже Google, создатель Go, отнюдь не переводит безоглядно все свои сервисы на Go, до сих пор широко используя C++.
Но — есть сферы (и их немало), которым Go соответствует почти идеально. На мой взгляд, оптимальное местоположение golang на карте современных языков программирования — быстрый, масштабируемый бэкенд, утилизирующий мощности облака, условно говоря, на 95 %. С одной стороны, golang не дотягивает до 99 %, подвластных C++, но ускоряет разработку и менее требователен к квалификации программиста; с другой стороны, уверенно обгоняет бэкенд, написанный на Python.
Дистилляция возможностей языка и избавление от синтаксического сахара привело к тому, что так долго, но безуспешно декларировал Python («должен существовать один — и, желательно, только один — очевидный способ сделать это») и, как следствие, к истончению когнитивной прослойки между разработчиком и конкретными решаемыми проблемами.
Сеть¶
Стек TCP/IP — сетевая модель передачи цифровых данных.
Сетевая модель OSI — еще одна попытка найти общий сетевой знаменатель.
Архитектура ПО¶
При оценке архитектуры стоит исходить из простого, прозаического соображения — лучше та архитектура, которая минимизирует расходы на разработку программного обеспечения и максимизирует эффективность программиста. Чем меньше (в разумных пределах) корова кормлена и чем больше она доена, тем лучше коровник.
При оценке суммарной стоимости разработки кода не следует забывать про жизненный цикл ПО, поэтому не зазорно сделать какой-нибудь быстрый наколенный MVP с неясными перспективами более «грязным», чем софт с уже наработанной пользовательской базой и сформированным планом развития. Но, разумеется, при этом надо держать в голове стратегию перехода из состояния «грязно и быстро» в «чистенько и надолго», не исключающей после одобрения концепции рынком возможности выкинуть весь уже написанный код на помойку.
Как метко подметил Роберт Мартин в «Чистой архитектуре», каждая парадигма программирования ничего нам не даёт и не разрешает, но ровно наоборот — отнимает и ограничивает. Структурное программирование отнимает у нас оператор goto, объектно-ориентированное программирование отбирает возможность косвенной передачи управления (иными словами, запрещает указатели на функции), функциональное программирование накладывает ограничение на присваивание.
Каждый архитектурный принцип делает примерно то же самое, только в мини-масштабе — не так жестко, как парадигмы, но всё же в той или иной мере ограничивает свободу действий программиста, формуя код по заранее одобренному лекалу и преследуя всё ту же цель — уменьшить расходы, поднять эффективность.
Чистая архитектура. К архитектуре ПО относится множество разноплановых понятий разного калибра, включая, например, относительную мелочь, вроде правил именования переменных (особенно на этом настаивает DDD, Domain-Driven Design). Чистая же архитектура относится к фундаментальным, макро-архитектурным принципам, задавая направление всей дальнейшей разработке.
SOLID — самый известный набор трюков для проектирования ПО на базе ООП.
CQRS — принцип разделения запросов и команд.
CI/CD¶
GitHub Actions — автоматизация рутинных действий при обновлении репозитария на GitHub.
codifycamera.com © Авторские права CC BY-NC-SA 4.0 2024 — ∞ Михаил Емельянов, war4one@gmail.com