Как стать автором
Обновить

Аватар программист, или Гегель — ты был прав ч.1

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров1.9K

"Противоположности не просто противостоят друг другу — они взаимно дополняют и переходят друг в друга, создавая движение." - Гегель, из "Науки логики" (упрощенно)

Предисловие

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

Дисбаланс и его последствия

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

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

Программирование требует уникального сочетания аналитического и творческого мышления. Разработчики сталкиваются с задачами, которые часто можно представить как поиск в дереве решений: от выбора алгоритма до отладки кода. Мои наблюдения показывают, что программист бывает склонен использовать один из двух подходов к решению задач: поиск "в ширину" (breadth-first search, BFS), когда рассматриваются множественные гипотезы, и поиск "в глубину" (depth-first search, DFS) последовательное и вдумчивое исследование.

Научные основы

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

1. Исследование Виктора Знакова (2019) (ссылка на общий труд) показало, что аналитическое и холистическое мышление влияют на скорость и стиль принятия решений. Аналитики (склонные к DFS) лучше справляются с индивидуальными задачами, углубляясь в детали, тогда как холистики (ближе к BFS) эффективнее в командной работе, рассматривая проблему с разных сторон. Это может объяснять, почему некоторые программисты предпочитают "широкий" поиск решений, а другие "глубокий".

2. Герберт Саймон и К. Каплан (1990) описывали решение задач как "поиск бриллианта в темноте", подчеркивая роль гипотетического поиска. В программировании это проявляется в построении ментальных деревьев решений, где каждый узел — гипотеза, а ветви — возможные пути решения. Опытные программисты лучше структурируют такие деревья, выбирая между BFS и DFS в зависимости от задачи.

Практические примеры: Логика дебага

1. Классическая логика DFS дебага

Ситуация

У меня в ошибке написано X. Я пойду в то место, где эта ошибка выбрасывается. В этом месте делается использование функции Y. Она взята из библиотеки Z. Я вижу, что в библиотеке Z функция Y возвращает X. Хотя я ожидаю иное. Проверить документацию этой версии этой библиотеки...

Проблема

Мы понемногу закапываемся. И совсем не исключено, что "докопаемся" до места. Но есть шанс уйти в цикличный дебаг, потратив кучу времени на разбор чужой библиотеки. А может быть проблема найдётся шагов за 8?

Вариант решения

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

2. Классическая логика BFS дебага

Ситуация

У меня в ошибке написано X. Я пойду в то место, где эта ошибка выбрасывается. В этом месте делается использование функции Y. Она как-то не так работает, а может я могу с помощью другой функции получить результат? А может быть вообще другую библиотеку использовать? Эта библиотека, она вообще во многих местах используется, может заменить на другую, или просто подключить другую? А может быть вообще это ошибка только в этой версии и уже выпустили исправление? Или версию постарше взять, может ошибка только недавно появилась?

Проблема

Мы не закапываемся, как в прошлом варианте, но мы рискуем оказаться слишком поверхностными и невдумчивыми, блуждая, перебирая варианты.

Вариант решения

Определить минимальную глубину погружения при изучении гипотезы. Не позволять себе переходить к новой, пока проверка не зайдёт на глубину X, "заземляем воздух".

Заключение

Алгоритмика мышления — это база. Воздух дает свободу и креативность, земля — надежность и глубину. Работая над алгоритмикой мышления, вы становитесь лучше как специалист, со временем компенсируя слабые стороны своей предрасположенности, какой бы она не была.

Какой стиль ближе вам? Поделитесь в комментариях своими примерами.

В следующей статье мы погрузимся в единство и борьбу огня с водой, а пока на этом всё.

Увидимся в следующий четверг. Cridendo Vides!

Теги:
Хабы:
Всего голосов 5: ↑2 и ↓3-1
Комментарии8

Публикации

Ближайшие события