Как наработать навык декомпозиции задач?



@AlTerV

Дано: Хочу перейти внутри компании в разработку (Java, backend).

Проблема: отсутствуют навыки декомпозиции и решения задач, не развито алгоритмическое и логическое мышление. Когда вижу задачу, то не знаю, с чего начать решение задачи и чем закончить. Не умею решать задачи. Хочу это исправить.

Вопрос: можете посоветовать какую-нибудь литературу по алгоритмизации и структурам данным, а также по основам программирования (программировать я пока не умею, а баловство в институте за навык не считаю, ибо там были безделушки)? Как я отметил выше, не умею решать и декомпозировать задачи. Вот смотрю на задачу, а с чего начать и чем закончить — не знаю. Раньше просто списывал (в школе, в институте) и ничему так не научился. Хочу это исправить и искоренить напрочь этот недуг.


Решения вопроса 0


Ответы на вопрос 6



@mayton2019

Программирование — это как плаванье. Ты сколько книжек не читай — все равно программистом не станешь.
Ты просто должен сесть и начать программировать. Прыгнуть в воду и плыть.

По поводу декомпозиции. Обычно такой вопрос возникает когда кода много или когда задача большая.
Эта декомпозиция идет параллельно со знанием таких частей ООП как Single-Responsibility, и структурных
шаблонов проектирования
. Начни это применять и декомпозиция сама собой пойдет.

Чаще заказывай code-review своего кода и слушай советы старших коллег. Даже если обидно и стыдно.
Слушай. Записывай и потом применяй.

По поводу Алгоритмов и Структур данных. Почитай Никлауса Вирта. Он как раз такую книгу и написал.



@GavriKos

Мне кажется, этот навык приобретается как раз в ходе изучения программирования. Когда начинаешь реально с основ и мелочей. Но — надо понимать, что не факт что у вас это в принципе получится. Я например рисовать не умею, и какую литературу я бы не читал — просто это не мое и все.

А что сейчас за должность, раз не разработчик?



@yesbro

С декомпозицией все просто. Для начала берешь любую задачу из жизни и думаешь какие шаги нужно сделать что бы ее решить. Когда это станет просто, то переходишь к программированию. Лучше всего взять какой-то готовый небольшой проект и сам себе ставишь задачи, сначала очень простые(!!!), потом сложнее(добавить метод, добавить что-то еще, изменить логику и прочее). Не начинаешь программировать пока по шагам не напишешь себе что надо делать. В процессе разработки смотришь насколько твой план расходится с реальностью. Запоминаешь, учитываешь в следующий раз.

Для получения навыка решения алгоритмических задач есть куча соответствующих сайтов — начинаешь с самых простых уровней.

Для развития логического мышления изучи формальную логику и так же решай задачи.



@Vitaliy_pro

Дополню также, что бывает проблема в постановке и формулировке задачи. Для начала нужно понять «требования» — что должно получиться в итоге. Здорово, когда эти требования и хорошо описанную задачу дают, но бывает приходится собирать всё самостоятельно, как мазайку.
Я бы начал с понятной формулировки самой задачи, требований к ней и понимания для чего она делается глобально. И оттуда уже начинал прописывать/прорисовывать схему конкретной работы, которую нужно выполнить, чтобы ничего не упустить.

Насмотренность тоже хорошо помогает. Можно почитать / посмотреть решение задач в вашей сфере другими специалистами на ютуб/сайтах/в книжках, и со временем «отложатся» какие-то проверенные методы похода и решения задач.



@Dementor

Вопрос глобально не имеет однозначного ответа. Сколько людей — столько и будет вариантов, причем все верные.

Хочу отметить, что абстрактная декомпозиция никому не нужна (даже вредна, поскольку тратит бесценное время). Нужно уметь видеть в постановке задач доступные для тебя «кирпичики» и работать только с ними, пока они функционируют с удовлетворительным качеством.

Для примера пусть тебе нужно дёрнуть REST-функция с некоторого интернет сервера. Если у тебя есть библиотека, которая позволяет тебе сделать все на уровне «указал сервер», «указал метод», «указал параметры» и «получил результат», то зачем декомпозировать дальше на уровень реализации протокола HTTP, на работу с сокетами, ломать голову над маршрутизацией пакетов данных или вообще уходить на уровень управления сетевой картой с помощью прерываний?

Вторая мысль, на которой хочу остановится — не нужно делать чужую работу. Часто задачи на разработку дают уже максимально декомпозированные (есть целый класс мемов противопоставления навороченного собеседования и реальной примитивной работы в ИТ). Обычно программисты не общаются с заказчиком — там целая прослойка менеджеров для ограничения «аппетитов» и аналитиков для составления максимально подробной задачи. Но и «подробная задача» не сразу попадает на выполнение — часто сначала она оказывается на столе у системного архитектора, который уточняет доступный стек и разрешенные фреймворки. Потом задача попадает к техлиду, который дополняет ее своими практическими советами и ссылками на релевантные проекты.

Не обязательно, что программиста «кормят с ложечки», но если вы не программист 1С, то один-на-один с задачей вас никогда не оставят!!!

И последняя мысль — нужно меньше думать, а больше делать! Если сесть читать Кнута и Вирта, то голова будет забита бесполезной чепухой, которой можно хвастаться перед друзьями, но которую невозможно использовать ни при создании репозиториев в Spring Data, ни при описании активити в твоем мобильном приложении — внезапно окажется, что нужно было читать не беллетристику, а курить мануалы по Spring и Android.

Только практика, практика и еще раз практика!!! Далее количество перейдет в качество и ты уже сам будешь проводить вебинары на тему развития навыков декомпозиции.



@index0h

отсутствуют навыки декомпозиции и решения задач, не развито алгоритмическое и логическое мышление.

Определите сущности, которыми будете пользоваться. Например, нужно сделать чат. Какие сущности данных у вас могут быть? Наверное Пользователь, от имени которого будут отправляться Сообщения. Сообщения будут отправляться в Каналы. У каждой сущности есть какой-то свой набор данных.

Далее определите действия, что вы можете сделать с этими сущностями. Под эти действия заводите сервисы.

Понимание того, как лучше будет приходить с опытом, причем не только вашим личным, но и командным.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *