В процессе разработки программного обеспечения часто возникает вопрос: нужно ли заранее проектировать структуру кода и устанавливать строгие правила, чтобы облегчить работу команды? Недавний диалог между разработчиками Азазелем и Сашей проливает свет на этот вопрос и предлагает интересный взгляд на организацию процесса разработки.

Предложение Азазеля: структурировать и стандартизировать

Азазель предложил идею, которая кажется логичной и полезной:

  1. Облегчить навигацию по проекту

    • Обсудить файловую структуру: как грамотно разбить код на файлы.

    • Описать структуру каждого отдельного файла: где и что описывать.

    • Составить документацию со схемами классов.

  2. Определить требования к каждому объекту кода

    • Требования к переменным.

    • Требования к методам.

    • Место хранения этого всего.

Цель - упростить будущую работу, привести её к какому-то стандарту, чтобы избежать хаоса и непонимания.

Ответ Саши: код как лучшая документация

Саша поделился своим опытом и взглядом на ситуацию:

  • Он считает, что излишнее проектирование и создание большого количества правил не всегда облегчает разработку, а скорее наоборот затрудняет её.

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

  • Чем больше комментариев, тем выше вероятность, что код можно написать понятнее.

  • Общие правила могут вырабатываться естественным образом в процессе взаимодействия команды.

  • Важно больше общаться, читать и обсуждать код друг друга, что способствует обучению и выработке общих стандартов.

  • Саша сравнил этот процесс с обучением нейросетей: каждый проект формирует уникальную «нейронную сеть» знаний и опыта, поскольку у каждого разработчика свой опыт и стиль и соединяясь они образуют нечто общее.

  • Legacy, столкновения разных подходов и опыта - неизбежны, как неизбежны и последующая адаптация и рефакторинг проекта.

Итог и рекомендации

  • Не обязательно заранее создавать жёсткие правила и проектировать всё до мелочей. Иногда это может усложнить процесс и снизить гибкость. И всегда это оттягивает решение настоящих задач что стоят перед разработчиками.

  • Лучший способ — это постоянное взаимодействие и обмен опытом внутри команды. Совместное чтение и обсуждение кода помогает выработать понятные и удобные решения.

  • Если хочется структурировать работу, можно набросать черновой вариант, чтобы понять направление движения. Это может быть сделано индивидуально или совместно, даже на простом листе бумаги. Цель - добиться такого понимания, чтобы можно было двигаться дальше. Не обязательно понимать всё, да скорее всего и невозможно.

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

Заключение

Если код не понятен - то стандарты и документация не сделает его более понятным, просто добавится непонятное описание для непонятного кода написанного по непонятным стандартам. Всё это не является волшебной таблеткой что сделает код понятным.

(На тему понимания как такового, можно написать отдельно целую статью. Если в двух словах: чтобы понять что‑то нужно хотеть это понять и делать шаги в этом направлении.)

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

P.S. Все совпадения и случайны и неслучайны одновременно :-)

P.P.S. Лучшая документация - это товарищ который этот код написал. Если товарищ соскочил с проекта, то и документация написанная товарищем не особо поможет, ибо не обеспечивает актуальности и понятности. Потому берегите товарищей и сохраняйте контакты :-)

Комментарии (6)


  1. Emelian
    08.09.2025 11:06

    1. Облегчить навигацию по проекту

    Обсудить файловую структуру: как грамотно разбить код на файлы.
    Описать структуру каждого отдельного файла: где и что описывать.
    Составить документацию со схемами классов.

    Можно выбрать другую концепцию, например, для «приплюснутого» Си:

    1. Всё есть классы.

    2. Классы образуют иерархию.

    3. Каждый класс это пара файлов, типа, *.h и *.cpp.

    4. Составить диаграмму классов и общий алгоритм их взаимодействия, в рамках:

    – Менеджера потоков;

    – Менеджера событий;

    – Менеджера видов (дочерних окон).

    1. Определить требования к каждому объекту кода

    Требования к переменным.
    Требования к методам.
    Место хранения этого всего.

    Лучше, создать внутренний корпоративный документ по технологии программирования и формату оформления кода. Ну, и действовать в его рамках, в том числе, при создании документации.

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


    1. thank_accept Автор
      08.09.2025 11:06

      Можно


  1. Apoheliy
    08.09.2025 11:06

    Если код не понятен - то стандарты и документация не сделает его более понятным, просто добавится непонятное описание для непонятного кода написанного по непонятным стандартам.

    Вы это пробовали, или просто поверили на слово условному инфоцыгану "Саше"?

    Почему интересуюсь?:

    Изучал код межпоточной синхронизации в линуксе (где какой барьер памяти, кто кого "видит" до или видит после). И знаете, у меня сложилось странное впечатление:

    • Если изучать модели памяти и синхронизации ТОЛЬКО по коду, то понимание получается довольно слабым.

    • Если в дополнение к коду почитать и документацию с разбором пары примеров (в линуксе прикладывается файл с описанием и примерами) то становится НАМНОГО ПОНЯТНЕЕ!

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


    1. thank_accept Автор
      08.09.2025 11:06

      Справедливое уточнение.

      Поверьте Саше - для проектов которые "в разработке", это так.

      И добавьте документацию, если проект вышел в релиз и перешел в состояние "на поддержке". (Это отдельная от разработки задача - написать хорошую документацию человеческим языком)

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

      Тут вопрос целесообразности. Саша подсветил, что во многих случаях - писать документацию не целесообразно. Тем более в наше время, когда всё это делает AI практически на лету.


  1. balezz
    08.09.2025 11:06

    Больше похоже на размышления gpt чем на личный опыт


    1. thank_accept Автор
      08.09.2025 11:06

      Статья скомпилирована нейронкой по моей переписке, (что указано в названии), и прошла мою редактуру. Так что сходство с gpt не удивительно :)

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