Обложка канала

Хекслет

3227 @hexlet_ru

Хекслет - это образовательная платформа для изучения языков программирования и является одной из ведущих онлайн-школ (второе место по популярности по данным карьерного портала Мой круг). Мы обучаем профессиям JS-frontend, JS-backend, PHP-программиста, Pyt

Хекслет

3 года назад
Открыть в
Кирилл, можешь написать о том как научиться выделять абстракции и декомпозировать задачи? Как лучше подходить к задаче, пробовать написать сразу, а потом рефакторить и пытаться выделить из монолита абстракции или сначала подумать подольше основательно и сразу выделять абстракции ? может какие-то книги или языки хорошо прокачивают в этом? Такой вопрос был в одном из комментариев к посту. Речь идет про написание фронтенда с помощью React. Действительно существует два подхода: снизу-вверх и сверху-вниз. Первый когда мы детально прорабатываем элементы системы, а потом соединяем их во что-то одно большое. Второй наоборот - сначала делаем общую картину, затем детализируем. Часто, желание сделать хорошо, приводит программистов к мысли, что код нужно сразу разделять на множество независимых частей, которые хорошо друг от друга отделены и могут использоваться независимо если понадобится. Звучит красиво, но на практике не работает. Почему? Причин этому довольно много, но есть одна главная. Дело в том, что программист всегда находится в режиме обучения. Новые задачи, новые сложности, новые сущности, новые абстракции, новые взаимодействия и так далее. Крайне редко заранее можно понять куда все повернет и как лучше будет организовать все это дело. Основной способ разобраться это получить реальный опыт, увидеть ограничения и на их основе все разложить по модулям/системам/компонентам/сервисам. Когда программист разбивают систему на куски не имея представления о вариантах использования, он перестает учиться. Проблема в том, что если мы сразу “выделили абстракции”, это значительно усложняет рефлексию на тему “а в ту ли сторону мы идем”. Все уже разбито и воспринимается как данность. И даже если мы поймем, что разбиение на куски прошло неудачно, нам все равно будет сложно. Монолит разделять намного легче, чем любую разделенную систему. Это легко видеть по открытым проектам на github. Почти всегда, когда кто-то начинает пилить новый фреймворк или тяжелую библиотеку, он делает их как единое целое прямо описывая “для простоты мы все храним в одном месте, когда фреймворк будет готов и мы поймем какая часть за что отвечает, мы разделим все это по независимым компонентам”.