Как стать автором
Обновить
42
0
Алексей @jdev

Автор Эргономичного подхода, Kotlin/Backend техлид

Отправить сообщение

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

Уровень сложностиСредний
Время на прочтение12 мин
Количество просмотров12K

Среди особенностей моего подхода к разработке у моих заказчиков, коллег и студентов наибольшее сопротивление вызывает использование Spring Data JDBC, а не [Spring Data] JPA (де-факто стандарта работы с БД на платформе Java).

Изначально я собирался писать пост "Почему не JPA", но немного подумав понял, что ответ умещается в одно предложение: потому что JPA по своей природе (persistence context и dirty checking) не поддерживает неизменяемую модель данных - неотъемлемую часть функционального стиля программирования, который, в свою очередь, является неотъемлемой частью моего подхода к разработке. И это объективный факт.

Почему для себя я выбрал ФП, а не "нормальное" императивное программирование? На этот вопрос также можно ответить одним предложением: потому что функциональный стиль помогает мне снижать стоимость разработки для бизнеса и делать руководителей проектов счастливыми.

Уверен, многие не согласятся с истинностью утверждения "применение функционального стиля ведёт к снижению стоимости разработки". Поэтому я пока буду называть его Гипотезой и приведу факты, доказывающие её истинность.

Какие ваши доказательства?
Всего голосов 21: ↑18 и ↓3+15
Комментарии56

Рациональный подход к декомпозиции систем на модули или микросервисы. Практика

Уровень сложностиСложный
Время на прочтение12 мин
Количество просмотров4.8K

В своём прошлом посте я рассказал теорию своего подхода к декомпозиции систем на модули. Теперь пришло время проверить её на практике.

Кэмп - реальный проект, который стоил семизначную сумму для заказчика, выполнялся командой из 12 человек (включая двух бакэндеров) и сейчас запущен в промышленную эксплуатацию. Суммарно на выполнение проекта было затрачено 5500 человеко/часов, из которых 950 - на бакенд.

Что из этого получилось?
Всего голосов 12: ↑9 и ↓3+6
Комментарии2

Рациональный подход к декомпозиции систем на модули или микросервисы

Уровень сложностиСложный
Время на прочтение13 мин
Количество просмотров6.3K

Чего от разработки ПО хотят разработчики, продакты и владельцы бизнеса?

Одного и того же - побольше дофаминчика (гормон счастья), поменьше кортизольчика (гормон стресса). Притом источники и дофамина, и кортизола у них одни и те же. Дофамин вырабатывается, когда фичи выпускаются в срок и без багов, а кортизол - когда сроки срываются и вылазят баги и регрессии. Бизнесу будет ближе финансовая версия — срыв сроков и баги очевидным образом приводят к увлечению стоимости разработки. Что приводит к выбросу кортизола уже у владельцев.

Как обеспечить высокий уровень дофамина?
Всего голосов 13: ↑13 и ↓0+13
Комментарии7

Подходы к декомпозиции бэкендов информационных систем

Время на прочтение18 мин
Количество просмотров11K

Количество классов в реализации даже небольшой программы на один человеко-месяц исчисляется десятками. В средних программах на несколько человеко-лет счёт идёт уже на тысячи. А человек может одновременно оперировать 7-ю +/- 2 объектами. Поэтому все нетривиальные программы требуют декомпозиции своей реализации на более крупные блоки, чем классы - я буду называть такие блоки пакетами.

Сейчас наиболее распространены два основных подхода к декомпозиции систем: пакетирование по слоям и техническим аспектам (далее просто "по слоям" для краткости) и пакетирование на основе предметной области (представленное группой вариантов: пакетирование по фичам, пакетирование по компонентам, ограниченные контексты и пакетирование по агрегатам из предметно-ориентированного дизайна (DDD))

Однако ни один из этих подходов мне не подошёл в полной мере и я изобрёл…​ объектно-ориентированный подход к декомпозиции систем. Точнее, я изобрёл простую методику выполнения декомпозиции, а потом понял, что на выходе она даёт штуки обладающие свойствами объекта.

Но обо всём по порядку - сначала я рассмотрю критерии оценки подходов, распространённые подходы и почему они мне не подошли. А закончу пост представлением методики выполнения объектно-ориентированной декомпозиции.

Читать далее
Всего голосов 11: ↑10 и ↓1+9
Комментарии14

Абстрактные войны: public interface IAbstraction против абстракции

Время на прочтение12 мин
Количество просмотров3.6K

Почти 30 лет назад в классической книге по шаблонам проектирования Design Patterns: Elements of Reusable Object-Oriented Software, авторы сформулировали один из самых известных, но недопонятых принципов в истории программирования:

Program to an interface, not an implementation.

— Erich Gamma et. al, Design Patterns: Elements of Reusable Object-Oriented Software

Зачем "программировать в интерфейсы"?

Давайте разбираться
Всего голосов 8: ↑8 и ↓0+8
Комментарии14

Диаграмма эффектов: пример построения

Время на прочтение9 мин
Количество просмотров2.8K

Ведущие разработчики (ака техлиды, тимлиды, архитекторы) встречаются с целым рядом нетривиальных вопросов:

1) Как оценить трудоёмкость задачи?

2) Как обеспечить низкую сцепленность системы?

3) В каком порядке реализовывать части системы и как эффективно распараллелить работу?

4) И ключевой вопрос - а что вообще надо сделать-то?

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

Читать далее
Всего голосов 4: ↑4 и ↓0+4
Комментарии2

Диаграмма эффектов: спецификация v0.0.2

Время на прочтение10 мин
Количество просмотров1.6K

Идентичность информационной системы определяется тем, как она взаимодействует с внешним миром. Что, где и когда она сохраняет и запрашивает; что, куда и когда отправляет. Это я называю наблюдаемым поведением.

Можно переписать приложение с Java на Haskell, сменить слоёную архитектуру на шестиугольную, реляционную базу данных заменить документной, а пользовательский интерфейс перевести с серверной генерации HTML на React Native - если наблюдаемое поведение системы останется неизменным, то это будет просто очередная версия всё той же системы. Если же кардинально изменить её взаимодействие с внешним миром, то это будет уже другая система.

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

При всей значимости наблюдаемого поведения я не знаю ни одного общепринятого инструмента для его проектирования и визуализации. Поэтому изобрёл свой - диаграмму эффектов.

А при чём здесь эффекты?
Всего голосов 1: ↑1 и ↓0+1
Комментарии5

Эргономичный подход к разработке информационных систем v1.0M1

Время на прочтение8 мин
Количество просмотров1.5K

... или как писать программы, которые приносят больше положительных эмоций.

Работу над Эргономичным подходом я начал весной 2020 года. Причиной тому стал возврат к работе над стандартными для экосистемы Spring-а проектами после четырёхлетнего перерыва.

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

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

И вот что у меня получилось...
Всего голосов 2: ↑2 и ↓0+2
Комментарии0

Агрегаты

Время на прочтение16 мин
Количество просмотров15K

Я считаю, что именно агрегаты из Domain-Driven Design лежат в основе поддерживаемых информационных систем. Однако эта концепция малоизвестна за пределами DDD-сообщества и довольно сложна для понимания, поэтому я решил написать очередной пост посвящённый агрегатам. В основном для чтобы структурировать собственное понимание агрегатов и создать "методичку" для своих команд, но и широкой общественности, я надеюсь, этот пост тоже может быть полезен.

Что такое агрегат?
Всего голосов 17: ↑16 и ↓1+15
Комментарии4

Многоликий принцип единственности ответственности

Время на прочтение9 мин
Количество просмотров10K

Принцип единственности отвественности? Что именно вы имеете ввиду?

Читать далее
Всего голосов 15: ↑13 и ↓2+11
Комментарии8

Почему следует избегать использования JPA/Hibernate в продакшене

Время на прочтение11 мин
Количество просмотров31K

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

Читать далее
Всего голосов 28: ↑22 и ↓6+16
Комментарии31

Упрощаем работу с русскими текстами в Sublime Text 3 + Vintage

Время на прочтение3 мин
Количество просмотров6.1K

Если вы недавно начали: 1) пользоваться Sublime Text и/или 2) пользоваться плагином Vintage и/или 3) редактировать много текста на русском (или наоборот английском) языке с использованием ST3+Vintage, то скорее всего уже почувствовали какая боль связана с командами назначенными на символы пунктуации — "$", ";", ".", ",", """ и т.п. В небольшой заметке под катом я хочу предложить вам пару костылей, которые помогают эту боль в значительной степени облегчить.

Читать дальше →
Всего голосов 10: ↑10 и ↓0+10
Комментарии0

Физика Robocode

Время на прочтение5 мин
Количество просмотров14K
Данный материал изначально был подготовлен в качестве раздела статьи “Первые шаги в Robocode”, но я решил вынести его, т.к. он значительно увеличивал размер и без того большой первоначальной статьи и не является базовым и необходимым для осуществления первого шага. Если вы сразу заинтересовались вторым шагом или постепенно доросли до него, то прошу под кат.
Читать дальше →
Всего голосов 21: ↑20 и ↓1+19
Комментарии2

Первые шаги в Robocode

Время на прочтение10 мин
Количество просмотров37K
Я пишу эту статью по просьбам в комментариях к статье “Как я стал чемпионом Robocode” и продолжая начатое в ней дело по привлечению внимания к Robocode русскоговорящих разработчиков. Robocode — это игра для программистов, в которой задача заключается в разработке системы управления танком. Для затравки приведу несколько роликов, чтобы показать о чём вообще пойдёт разговор:


Читать дальше →
Всего голосов 25: ↑20 и ↓5+15
Комментарии23

Как я стал чемпионом Robocode

Время на прочтение5 мин
Количество просмотров5.2K
Я — Jdev, автор робота Tomcat, который в ноябре/декабре 2011 года был Королём Премьер Лиги общего зачёта Robocode (пруф) без единого поражения, сейчас занимает 3-е место из 911 в процентном зачёте и является героем моего повествования. Эту статью я решил написать для привлечения к этой игре внимания соотечественников, потому как одному защищать честь Российского флага становится уже тяжело (не считая двух моих роботов, лучший русский робот занимет 142-ое место). Рассказ я решил построить в виде журнала.
Читать дальше →
Всего голосов 48: ↑46 и ↓2+44
Комментарии37

Информация

В рейтинге
Не участвует
Откуда
Кольцово, Новосибирская обл., Россия
Дата рождения
Зарегистрирован
Активность

Специализация

Chief Technology Officer (CTO), Software Architect
Lead
От 350 000 ₽
Functional programming
Object-oriented design
Design information systems
TDD/BDD
Kotlin
PostgreSQL
Java Spring Framework
Linux
Git
Docker