Никаких особых медицинских диагнозов мне не ставили, но мои умственные способности крайне ограниченны. Даже те задачи на Leetcode, которые попроще, вызывают у меня затруднения. Когда я читаю о самом обычном алгоритме консенсуса, у меня кипит
Как же я выхожу из положения?
Я использую наиболее легкий мейнстрим-язык программирования из всех доступных (Go), а также самые базовые возможности Python. Пишу простой (хотя иногда весьма тяжеловесный) код, который несложно осмыслять и поддерживать. Избегаю глубоких абстракций и всегда предпочту композицию наследованию или примесям. К дженерикам прибегаю только при крайней необходимости. По возможности отдаю предпочтение плоским структурам данных.
Внешние зависимости я ввожу по минимуму (в идеале вообще обхожусь без них). Проектирую модули с понятными API (и не употребляю слово «понятный» в том значении, которое ему придает Роберт Мартин), но почти никогда не перевожу их в микросервисы. Пользуюсь JSON-over-HTTP и ни в коем случае не GraphQL. Я не пожалел времени на то, чтобы изучить SQL, и активно его использую. Для устойчивости применяю самые базовые паттерны: таймауты, автоматические выключатели и обратное давление.
Стараюсь сводить количество компонентов ПО к минимуму. В идеале только само приложение, SQLite или PostgreSQL для хранения данных, а также Docker, приправленный shell, для развертывания. Nginx/HAProxy – по мере необходимости. Никаких API-шлюзов, никакого сегментирования, никаких распределенных кэшей, никаких очередей сообщений, никаких NoSQL/NewSQL/Graph/всевозможных баз данных, никакого обнаружения сервисов, никакой федерации, никакой ориентации на облако, никаких лучших практик уровня FAANG.
Чтобы разобраться в legacy-коде, я рисую графики зависимостей и диаграммы последовательности. Оставляю комментарии, чтобы напомнить себе в будущем, почему та или иная функция делает то, что делает, или зачем нужна определенная if-ветвь. Составляю документацию, стараясь сделать ее лаконичной и простой для чтения. Пишу примеры – очень много примеров. Некоторые из них даже интерактивные.
Программы, которые я создаю, вроде бы работают нормально. На программиста из Google они большого впечатления, конечно, не произведут, но своим пользователям и бизнесу служат исправно. Так что в каком-то смысле я научился управляться со своей глупостью.
Автор: InlyIT