Документировал ли код?

Ответ

Да, постоянно. В Node.js проектах я использую JSDoc для документирования функций, классов и модулей. Это стандарт де-факто, который интегрируется с IDE и позволяет генерировать документацию автоматически.

Пример JSDoc для сервиса:

/**
 * Сервис для работы с пользовательскими сессиями.
 * @class
 */
class SessionService {
  /**
   * Создает новую сессию для пользователя.
   * @param {string} userId - Уникальный идентификатор пользователя.
   * @param {Object} metadata - Дополнительные метаданные сессии.
   * @param {string} metadata.userAgent - User-Agent браузера.
   * @returns {Promise<Session>} Объект созданной сессии.
   * @throws {InvalidUserError} Если пользователь не найден.
   */
  async createSession(userId, metadata) {
    // ... реализация
  }
}

Для REST API я настраиваю автоматическую генерацию спецификации OpenAPI (Swagger) с помощью библиотек вроде @nestjs/swagger для NestJS или swagger-jsdoc для Express. Это дает актуальную интерактивную документацию для фронтенд-разработчиков и тестировщиков.

Для сложных модулей или библиотек я обязательно пишу README.md с примерами использования, описанием архитектурных решений и инструкциями по запуску.

Ответ 18+ 🔞

Да ты что, серьёзно спрашиваешь? Ну конечно, постоянно, ёпта! В Node.js-проектах без этого — никуда. Я JSDoc вставляю везде, где только можно, для функций, классов и модулей. Это ж, бля, стандарт такой, который в IDE встроен и документацию сам генерирует. Удобно же, в рот меня чих-пых!

Вот, смотри, как для сервиса обычно выглядит:

/**
 * Сервис для работы с пользовательскими сессиями.
 * @class
 */
class SessionService {
  /**
   * Создает новую сессию для пользователя.
   * @param {string} userId - Уникальный идентификатор пользователя.
   * @param {Object} metadata - Дополнительные метаданные сессии.
   * @param {string} metadata.userAgent - User-Agent браузера.
   * @returns {Promise<Session>} Объект созданной сессии.
   * @throws {InvalidUserError} Если пользователь не найден.
   */
  async createSession(userId, metadata) {
    // ... реализация
  }
}

А для REST API — это вообще отдельная песня. Я настраиваю так, чтобы спецификация OpenAPI (она же Swagger) сама генерировалась. Беру @nestjs/swagger для NestJS или swagger-jsdoc для Express — и вуаля. Получается свежая, интерактивная документация, на которую фронтендеры и тестировщики могут тыкать, не отвлекая меня по пустякам каждые пять минут. Вы ходите по охуенно тонкому льду, если API задокументировано криво — потом сами же и расхлёбывайте.

Ну и для особо замороченных модулей или своих библиотек — это святое. Пишу README.md с примерами, объясняю, какого хуя архитектура такая, даю инструкции по запуску. А то без этого потом сам от себя охуеешь через полгода, когда придётся в этот код лезть.