Как научиться проектировать ПО?

Приветствую. Я программист, выросший на ТЗ-шках, прописанных за меня.
Хочу научится планировать разработку программ самостоятельно, иначе я сразу берусь писать код и в итоге долго блуждаю в дебрях. Знаю про этапы "задачи-функционал-прототипы-макеты-api-код", но не понимаю границу между ними. Например, не хочется много времени тратить на интерактивные прототипы, когда давно пора начать писать код, и наоборот - писать код с недоработанным прототипом.
  • Вопрос задан
  • 572 просмотра
Пригласить эксперта
Ответы на вопрос 5
sergey-gornostaev
@sergey-gornostaev
Седой и строгий
Главным инструментом проектирования
программного обеспечения является мозг
человека, хорошо знакомого с принципами
проектирования. Это не технология.

© Крейг Ларман

Проще говоря, это придёт только с опытом. Несколько ускоряет процесс чтение соответствующей литературы (например дяди Боба) и возможность поработать в большой компании на больших проектах.
Ответ написан
@nexus478
Проектирование приложений можно условно разбить на 2 уровня:
1. Уровень проекта.
Сюда входит понимание того, как приложение должно выглядеть в целом и из каких компонентов состоять, а также по каким принципам оно собирается взаимодействовать с внешним миром (если есть такая необходимость). Компоненты зависят от выбранной архитектуры - в случае монолитного приложения вам требуется понимать, как разбивать его на слои и в чем ответственность каждого слоя; в случае микросервисов вы также должны понимать, как очерчивать зоны ответственности и определять протоколы взаимодействия между ними.
В вашем случае я думаю вряд ли микросервисы будут актуальны (они для больших проектов), поэтому у вас скорее всего будут небольшие монолитные приложения.
Книги о том, как проектировать приложения на общем уровне:
1. Роберт Мартин. Чистая архитектура - очень короткая и простая книга, рекомендую начать с неё.
2. Эрик Эванс. Предметно-ориентированное проектирование (принципы + стратегические шаблоны).
3. Мартин Фаулер. Архитектура корпоративных приложений (часть 1).

Уровень 2. Уровень модулей (классов).
Когда вы спроектировали компоненты, из которых состоит ваше приложение, теперь надо спроектировать их внутренности - то есть разбить на более мелкие и конкретные модули. Тут вам пригодятся принципы объектно-ориентированное проектирования, принципы SOLID, паттерны.
Книги по уровню 2.
1. Банда четырех. Приёмы объектно-ориентированного проектирования. Паттерны проектирования. Тут важно не только сами паттерны, но принципы, по которым они строятся. Концентрируйтесь на принципах.
2. Роберт Мартин. Принципы, паттерны и методики гибкой разработки на языке C#. Тут более подробно рассматривается объектно-ориентированный дизайн и принципы SOLID в сравнении с его "Чистой архитектурой".
3. Эрик Эванс. Предметно-ориентированное проектирование (тактические шаблоны).
4. Мартин Фаулер. Архитектура корпоративных приложений (часть 2).
5. Стивен Макконел. Совершенный код (сконцентрируйтесь на понимании Главного Технического Императива!).

Этих книг вам будет достаточно, чтобы ориентироваться в проектировании приложений, всё остальное решает практика. Рисуйте схемы, концентрируйтесь на ответственности компонентов и их интерфейсах, учитесь отбрасывать ненужные детали реализации.
Ответ написан
Ranwise
@Ranwise
может подойдут книги типа

Agile оценка и планирование проектов, Кон Майк - 2018
Постигая Agile. Ценности, принципы, методологии, Э.Стеллман, Д.Грин - 2018
Ответ написан
AlexZaharow
@AlexZaharow
Программист. Javascript, Java!
Для этого надо немного:
1. Запороть проект, а может и не один, чтобы понять, что не ведёт к решению.
2. Извернуться ужом, но найти решение, когда никто не может решить проблему, чтобы научиться рассчитывать только на свои силы и не верить остальным, что чего-то сделать нельзя.
3. Научиться иметь чёткое видение решения, чтобы знать, на каком этапе вы находитесь, когда решаете задачу.
Ответ написан
@dmitriylanets
Может здесь что то будет полезно https://github.com/dimaxz/Lectures?files=1
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы