Как 1С-программисту улучшить качество кода и проектирование с помощью книг по общей теории программирования?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Как 1С-программисты, мы постоянно стремимся к повышению своей квалификации и качества создаваемого кода. Часто, погружаясь в специфику платформы, мы можем упустить из виду фундаментальные принципы, которые лежат в основе любого программирования. Начинающий 1С-разработчик задался вопросом, стоит ли читать книги по общей теории программирования, такие как «Совершенный код» Стива Макконнелла, и как применить полученные знания в 1С. Разберем этот вопрос подробно и выясним, какие общие книги и концепции будут полезны для каждого 1С-программиста.

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

Универсальность принципов программирования и их применимость в 1С

Ключевым моментом, который следует усвоить, является то, что применимость методик определяется не языком программирования, а владением этими методиками на уровне абстракций. Язык программирования, будь то 1С, Java, C# или Python, – это лишь конкретная реализация для решения задачи. Одну и ту же задачу можно реализовать на разных языках, и качество этой реализации будет зависеть от понимания базовых принципов.

Несмотря на то, что 1С не является классической объектно-ориентированной платформой в строгом смысле слова, и синтаксис ее языка отличается от общепринятых, мышление, развитое при изучении общей теории программирования, позволяет нам находить элегантные решения, повышать читаемость и модульность кода, а также улучшать его производительность и поддерживаемость. Давайте рассмотрим, какие конкретные области знаний и книги нам помогут.

1. Повышение качества кода и проектирование: фундаментальные руководства

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

«Совершенный код» (Code Complete) Стива Макконнелла

Эта книга – настоящая библия для разработчика. Несмотря на то, что она была написана давно и примеры в ней даны на других языках, ее принципы абсолютно универсальны. Мы можем быть уверены, что польза от нее будет колоссальной. Автор рассматривает все аспекты создания высококачественного программного обеспечения: от проектирования и написания чистого кода до отладки и тестирования. Вот почему она так важна для 1С-разработчика:

  1. Построение классов и подпрограмм: Хотя в 1С нет понятия "классов" в традиционном ООП смысле, принципы организации кода в функциях и процедурах общих модулей, модулей менеджеров и модулей объектов объектов метаданных абсолютно соответствуют рекомендациям Макконнелла. Мы учимся создавать небольшие, сфокусированные на одной задаче процедуры и функции, что способствует читаемости и повторному использованию.
  2. Именование: Книга учит давать осмысленные имена переменным, функциям, параметрам. Это напрямую применимо к 1С. Например, вместо Пер или Зн, мы должны использовать ПеременнаяДляОбработки или ЗначениеПараметраЗапроса, чтобы код был понятен без дополнительных комментариев.
  3. Обработка ошибок: Принципы оборонительного программирования, обработки исключений и проверки входных данных, подробно описанные в книге, помогут нам писать более надежный код. В 1С это реализуется через блоки Попытка...Исключение, проверки на Неопределено, NULL или пустые значения перед использованием.
  4. Структурирование данных: Макконнелл уделяет внимание выбору правильных структур данных. В 1С это означает осознанный выбор между Массив, СписокЗначений, Структура, Соответствие, ТаблицаЗначений, ДеревоЗначений в зависимости от задачи. Понимание производительности каждой из них позволяет нам оптимизировать обработку данных.
  5. Рефакторинг: Методы улучшения существующего кода без изменения его внешнего поведения также применимы в 1С. Мы можем рефакторить громоздкие процедуры, выделять общие части в функции, переименовывать переменные для ясности, что особенно важно в больших конфигурациях.

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

«Чистый код: создание, анализ и рефакторинг» Роберта Мартина (Дяди Боба)

Еще одна фундаментальная книга, которая учит нас, как писать код, который будет легко читать, понимать и поддерживать. Хотя примеры приводятся на Java, основные идеи о функциях, классах, именовании переменных, комментариях и форматировании кода универсальны. Для 1С-разработчика принципы "чистого кода" означают:

  1. Чистые функции: Создание функций и процедур, которые делают только одно и делают это хорошо. Это идеально ложится на структуру общих модулей в 1С, где каждая экспортная функция должна иметь четко определенную ответственность.
  2. Осмысленное именование: Имена должны быть легко произносимыми, быть поисковыми и раскрывать намерение. Например, ПолучитьСписокНоменклатурыДляОтчета вместо ПСНДО.
  3. Отсутствие дублирования: Выявление и устранение повторяющегося кода путем вынесения его в отдельные функции или общие модули.
  4. Комментарии: Книга учит писать код так, чтобы комментарии были минимальны и использовались только там, где код сам по себе не может выразить намерение.

Применение этих принципов значительно упрощает работу в команде и снижает количество ошибок в больших и сложных конфигурациях.

«Шаблоны проектирования» (Design Patterns: Elements of Reusable Object-Oriented Software) «Банды Четырех» (Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес)

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

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

2. Фундаментальные знания: алгоритмы, структуры данных, ООП, SQL

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

Алгоритмы и структуры данных

Понимание основ алгоритмов (поиск, сортировка, хеширование) и структур данных (списки, деревья, графы) критически важно для любого программиста. Оно помогает нам не только эффективно решать задачи, но и понимать производительность кода. Несмотря на то, что 1С предоставляет высокоуровневые инструменты для работы с данными (например, Массив, Соответствие, ТаблицаЗначений), знание того, как эти инструменты работают "под капотом", и способность выбрать наиболее подходящий алгоритм для конкретной задачи, является большим преимуществом. Например:

  1. Выбор структуры данных: Если нам нужно быстро искать элементы по ключу, мы выберем Соответствие вместо Массив с последовательным перебором, понимая, что поиск по хешу в Соответствии значительно быстрее.
  2. Оптимизация циклов: Знание того, как работают алгоритмы, позволяет нам избегать вложенных циклов с большой сложностью, если это возможно, или минимизировать количество операций внутри циклов.
  3. Понимание производительности: Мы сможем анализировать, почему тот или иной участок кода работает медленно, и предложить пути оптимизации, будь то изменение структуры данных или переработка алгоритма.

Например, при работе с большим Массив'ом для поиска элемента:


// Медленный поиск в большом массиве
Для Каждого ЭлементМассива Из МойМассив Цикл
    Если ЭлементМассива = ИскомоеЗначение Тогда
        // Нашли
        Прервать;
    КонецЕсли;
КонецЦикла;

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


// Быстрый поиск с использованием Соответствия
МоеСоответствие = Новый Соответствие();
Для Каждого ЭлементМассива Из МойМассив Цикл
    МоеСоответствие.Вставить(ЭлементМассива, Истина);
КонецЦикла;

Если МоеСоответствие.Получить(ИскомоеЗначение) <> Неопределено Тогда
    // Нашли
КонецЕсли;

Такой подход демонстрирует, как понимание структур данных может радикально изменить производительность кода в 1С.

Объектно-ориентированное программирование (ООП) и принципы SOLID

Хотя платформа 1С имеет свою специфическую модель объектов, понимание классических концепций ООП (инкапсуляция, наследование, полиморфизм) и принципов SOLID (Single Responsibility, Open/Closed, Liskov Substitution, Interface Segregation, Dependency Inversion) поможет нам лучше проектировать модули, снижать связанность кода и делать его более гибким. Мы можем найти подходы к реализации этих принципов в контексте 1С:

  1. Инкапсуляция: В 1С это достигается использованием общих модулей с ограниченным набором экспортных процедур/функций, а также скрытием внутренней реализации в модулях объектов. Например, в модуле объекта мы можем иметь приватные функции, которые выполняют внутреннюю логику, доступную только из самого объекта.
  2. Наследование: Прямого наследования в 1С нет, но мы можем использовать композицию (один объект включает в себя другой) или расширения конфигурации, которые позволяют добавлять функциональность к существующим объектам, не изменяя их.
  3. Полиморфизм: Может быть реализован через использование общих интерфейсов (например, набор экспортных функций с одинаковыми именами в разных общих модулях) или через подписки на события, когда разные обработчики реагируют на одно и то же событие по-разному.
  4. Принцип единой ответственности (SRP): Каждый общий модуль или функция должны отвечать только за одну четко определенную задачу. Например, один модуль для работы с данными номенклатуры, другой – для формирования отчетов.
  5. Принцип открытости/закрытости (OCP): Мы должны стремиться к тому, чтобы наш код был открыт для расширения, но закрыт для модификации. В 1С это достигается за счет использования расширений, подписок на события, а также хорошо спроектированных API общих модулей.

Книга Гради Буча "Объектно-ориентированный анализ и проектирование с приложениями" является классикой в этой области и может дать глубокое понимание ООП, которое, хотя и требует адаптации, но очень ценно для 1С.

SQL и теория баз данных

Понимание реляционных баз данных, нормализации, индексов, транзакций и оптимизации запросов SQL крайне полезно. Даже если 1С скрывает большинство деталей работы с СУБД, знание SQL позволяет нам писать более эффективные запросы в языке запросов 1С, понимать причины низкой производительности и оптимизировать взаимодействие с данными. Изучение принципов OLTP СУБД (системы обработки транзакций в реальном времени) поможет нам лучше понимать, как данные хранятся и обрабатываются, что особенно важно при работе с большими объемами данных в 1С.

  1. Язык запросов 1С: Он является диалектом SQL. Понимание базового SQL (SELECT, FROM, JOIN, WHERE, GROUP BY, ORDER BY, HAVING, UNION ALL) позволяет нам писать сложные и производительные запросы в 1С, включая использование конструктора запросов и консоли запросов.
  2. Оптимизация запросов: Знание того, как работают индексы, и как платформа 1С использует их, помогает нам строить запросы, которые эффективно используют СУБД. Например, понимание, когда нужно использовать ЛЕВОЕ СОЕДИНЕНИЕ, а когда ВНУТРЕННЕЕ СОЕДИНЕНИЕ, может существенно повлиять на результат и производительность.
  3. Нормализация данных: Хотя структура метаданных 1С предопределена, понимание принципов нормализации помогает нам принимать правильные решения при проектировании дополнительных регистров сведений или при работе с произвольными таблицами данных.

Например, знание SQL помогает при анализе работы запросов 1С и их оптимизации. Рассмотрим простой пример, где мы хотим получить данные из нескольких таблиц.


// Запрос 1С, который выиграет от понимания SQL
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |    ДокументПоступлениеТоваровУслуг.Ссылка КАК Документ,
    |    ДокументПоступлениеТоваровУслуг.Контрагент КАК Контрагент,
    |    ДокументПоступлениеТоваровУслуг.СуммаДокумента КАК Сумма,
    |    Контрагенты.ИНН КАК ИННКонтрагента
    |ИЗ
    |    Документ.ПоступлениеТоваровУслуг КАК ДокументПоступлениеТоваровУслуг
    |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
    |        ПО ДокументПоступлениеТоваровУслуг.Контрагент = Контрагенты.Ссылка
    |ГДЕ
    |    ДокументПоступлениеТоваровУслуг.Дата МЕЖДУ &НачалоПериода И &КонецПериода";

Запрос.УстановитьПараметр("НачалоПериода", НачалоМесяца(ТекущаяДата()));
Запрос.УстановитьПараметр("КонецПериода", КонецМесяца(ТекущаяДата()));

Результат = Запрос.Выполнить().Выгрузить();

Понимание, что ЛЕВОЕ СОЕДИНЕНИЕ вернет все документы поступления, даже если у них нет контрагента (или ссылка на контрагента некорректна), в то время как ВНУТРЕННЕЕ СОЕДИНЕНИЕ (СОЕДИНЕНИЕ) вернуло бы только те документы, у которых контрагент существует, является ключевым для получения корректных данных и избежания ошибок. Также, знание о том, как индексы влияют на скорость выполнения ГДЕ и СОЕДИНЕНИЕ, позволяет нам эффективнее использовать поля Дата и Контрагент.

Булева алгебра и теория множеств

Эти фундаментальные математические дисциплины формируют основу логики, используемой в программировании. Понимание булевой алгебры помогает нам эффективно работать с логическими операциями (И, ИЛИ, НЕ, XOR), что важно для построения сложных условий в операторах Если, в запросах, в алгоритмах фильтрации. Теория множеств, в свою очередь, лежит в основе работы с коллекциями данных, операций объединения, пересечения, разности, что напрямую применимо к работе с Массив'ами, СписокЗначений и результатами запросов в 1С.

3. Стандарты разработки 1С и их связь с общей теорией

Не забывайте про Стандарты разработки 1С, доступные на ИТС. Это не книга по общей теории, но очень важный документ, который непосредственно влияет на качество кода в 1С. Эти стандарты включают рекомендации по именованию, структурированию кода, комментированию, обработке ошибок и многим другим аспектам, которые перекликаются с принципами "Совершенного кода" и "Чистого кода", но уже адаптированы под специфику 1С. Изучение и применение этих стандартов поможет нам писать код, который соответствует лучшим практикам 1С-разработки и легко поддерживается другими разработчиками.

4. Для общего развития и мотивации

Иногда полезно отвлечься от чисто технических книг и почитать что-то, что вдохновляет и заставляет задуматься о профессии программиста в целом. Айзек Азимов "Профессия" — это научно-фантастическая повесть, которая рассматривает вопросы образования, призвания и места человека в мире технологий. Это не техническая книга, но она может дать ценную пищу для размышлений и помочь сформировать мировоззрение программиста.

Заключение: развитие "программистского мышления"

Чтение этих книг и изучение упомянутых тем, даже если они не напрямую связаны с синтаксисом 1С, поможет нам развить "программистское мышление", которое универсально и применимо на любой платформе. Это позволит нам не просто писать код, а проектировать эффективные, надёжные и поддерживаемые решения, что является показателем высокого уровня квалификации программиста.

Не бойтесь выходить за рамки 1С-специфичной литературы. Истинный профессионал в любой области постоянно ищет способы улучшить свои фундаментальные навыки. Приступайте к чтению "Совершенного кода" и других упомянутых книг, адаптируйте их принципы к 1С, и мы уверены, что вы заметите значительное улучшение в качестве и архитектуре вашего кода.

← На главную