Как 1С-программисты, мы постоянно стремимся к повышению своей квалификации и качества создаваемого кода. Часто, погружаясь в специфику платформы, мы можем упустить из виду фундаментальные принципы, которые лежат в основе любого программирования. Начинающий 1С-разработчик задался вопросом, стоит ли читать книги по общей теории программирования, такие как «Совершенный код» Стива Макконнелла, и как применить полученные знания в 1С. Разберем этот вопрос подробно и выясним, какие общие книги и концепции будут полезны для каждого 1С-программиста.
Мы видим, что стремление к совершенствованию кода и улучшению архитектуры своих решений – это естественный шаг для любого разработчика. И хотя платформа 1С имеет свою уникальную архитектуру и язык, многие общие принципы программирования не просто применимы, но и критически важны для создания качественных, поддерживаемых и эффективных решений.
Ключевым моментом, который следует усвоить, является то, что применимость методик определяется не языком программирования, а владением этими методиками на уровне абстракций. Язык программирования, будь то 1С, Java, C# или Python, – это лишь конкретная реализация для решения задачи. Одну и ту же задачу можно реализовать на разных языках, и качество этой реализации будет зависеть от понимания базовых принципов.
Несмотря на то, что 1С не является классической объектно-ориентированной платформой в строгом смысле слова, и синтаксис ее языка отличается от общепринятых, мышление, развитое при изучении общей теории программирования, позволяет нам находить элегантные решения, повышать читаемость и модульность кода, а также улучшать его производительность и поддерживаемость. Давайте рассмотрим, какие конкретные области знаний и книги нам помогут.
Для улучшения качества кода и навыков проектирования существуют несколько классических произведений, которые обязательны к прочтению.
Эта книга – настоящая библия для разработчика. Несмотря на то, что она была написана давно и примеры в ней даны на других языках, ее принципы абсолютно универсальны. Мы можем быть уверены, что польза от нее будет колоссальной. Автор рассматривает все аспекты создания высококачественного программного обеспечения: от проектирования и написания чистого кода до отладки и тестирования. Вот почему она так важна для 1С-разработчика:
Пер или Зн, мы должны использовать ПеременнаяДляОбработки или ЗначениеПараметраЗапроса, чтобы код был понятен без дополнительных комментариев.Попытка...Исключение, проверки на Неопределено, NULL или пустые значения перед использованием.Массив, СписокЗначений, Структура, Соответствие, ТаблицаЗначений, ДеревоЗначений в зависимости от задачи. Понимание производительности каждой из них позволяет нам оптимизировать обработку данных.Мы должны быть готовы к тому, что для джуна, имеющего опыт только в 1С, чтение этой книги может быть более продуктивным после получения некоторого опыта в ООП-языках. Это поможет легче транслировать часть информации на 1С и справиться с "ломкой отсутствия ООП", как было отмечено в обсуждении.
Еще одна фундаментальная книга, которая учит нас, как писать код, который будет легко читать, понимать и поддерживать. Хотя примеры приводятся на Java, основные идеи о функциях, классах, именовании переменных, комментариях и форматировании кода универсальны. Для 1С-разработчика принципы "чистого кода" означают:
ПолучитьСписокНоменклатурыДляОтчета вместо ПСНДО.Применение этих принципов значительно упрощает работу в команде и снижает количество ошибок в больших и сложных конфигурациях.
Эта книга представляет собой каталог проверенных решений типичных проблем проектирования. Хотя 1С не является классическим ООП-языком, многие паттерны можно адаптировать. Понимание этих шаблонов помогает нам структурировать код, повысить его гибкость и расширяемость. Например:
Если Тогда ИначеЕсли, мы создаем функцию, которая по типу возвращает нужный объект.Оповестить()/ОписаниеОповещения для реализации слабосвязанных взаимодействий между частями системы.Изучение шаблонов проектирования значительно расширяет наш арсенал инструментов для решения сложных архитектурных задач в 1С.
Помимо книг по качеству кода, существуют базовые области знаний, которые являются краеугольными камнями любого программирования.
Понимание основ алгоритмов (поиск, сортировка, хеширование) и структур данных (списки, деревья, графы) критически важно для любого программиста. Оно помогает нам не только эффективно решать задачи, но и понимать производительность кода. Несмотря на то, что 1С предоставляет высокоуровневые инструменты для работы с данными (например, Массив, Соответствие, ТаблицаЗначений), знание того, как эти инструменты работают "под капотом", и способность выбрать наиболее подходящий алгоритм для конкретной задачи, является большим преимуществом. Например:
Соответствие вместо Массив с последовательным перебором, понимая, что поиск по хешу в Соответствии значительно быстрее.Например, при работе с большим Массив'ом для поиска элемента:
// Медленный поиск в большом массиве
Для Каждого ЭлементМассива Из МойМассив Цикл
Если ЭлементМассива = ИскомоеЗначение Тогда
// Нашли
Прервать;
КонецЕсли;
КонецЦикла;
Вместо этого, если мы знаем, что нам потребуется частый поиск, мы можем использовать Соответствие, где ключом будет искомое значение:
// Быстрый поиск с использованием Соответствия
МоеСоответствие = Новый Соответствие();
Для Каждого ЭлементМассива Из МойМассив Цикл
МоеСоответствие.Вставить(ЭлементМассива, Истина);
КонецЦикла;
Если МоеСоответствие.Получить(ИскомоеЗначение) <> Неопределено Тогда
// Нашли
КонецЕсли;
Такой подход демонстрирует, как понимание структур данных может радикально изменить производительность кода в 1С.
Хотя платформа 1С имеет свою специфическую модель объектов, понимание классических концепций ООП (инкапсуляция, наследование, полиморфизм) и принципов SOLID (Single Responsibility, Open/Closed, Liskov Substitution, Interface Segregation, Dependency Inversion) поможет нам лучше проектировать модули, снижать связанность кода и делать его более гибким. Мы можем найти подходы к реализации этих принципов в контексте 1С:
Книга Гради Буча "Объектно-ориентированный анализ и проектирование с приложениями" является классикой в этой области и может дать глубокое понимание ООП, которое, хотя и требует адаптации, но очень ценно для 1С.
Понимание реляционных баз данных, нормализации, индексов, транзакций и оптимизации запросов SQL крайне полезно. Даже если 1С скрывает большинство деталей работы с СУБД, знание SQL позволяет нам писать более эффективные запросы в языке запросов 1С, понимать причины низкой производительности и оптимизировать взаимодействие с данными. Изучение принципов OLTP СУБД (системы обработки транзакций в реальном времени) поможет нам лучше понимать, как данные хранятся и обрабатываются, что особенно важно при работе с большими объемами данных в 1С.
SELECT, FROM, JOIN, WHERE, GROUP BY, ORDER BY, HAVING, UNION ALL) позволяет нам писать сложные и производительные запросы в 1С, включая использование конструктора запросов и консоли запросов.ЛЕВОЕ СОЕДИНЕНИЕ, а когда ВНУТРЕННЕЕ СОЕДИНЕНИЕ, может существенно повлиять на результат и производительность.Например, знание SQL помогает при анализе работы запросов 1С и их оптимизации. Рассмотрим простой пример, где мы хотим получить данные из нескольких таблиц.
// Запрос 1С, который выиграет от понимания SQL
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДокументПоступлениеТоваровУслуг.Ссылка КАК Документ,
| ДокументПоступлениеТоваровУслуг.Контрагент КАК Контрагент,
| ДокументПоступлениеТоваровУслуг.СуммаДокумента КАК Сумма,
| Контрагенты.ИНН КАК ИННКонтрагента
|ИЗ
| Документ.ПоступлениеТоваровУслуг КАК ДокументПоступлениеТоваровУслуг
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
| ПО ДокументПоступлениеТоваровУслуг.Контрагент = Контрагенты.Ссылка
|ГДЕ
| ДокументПоступлениеТоваровУслуг.Дата МЕЖДУ &НачалоПериода И &КонецПериода";
Запрос.УстановитьПараметр("НачалоПериода", НачалоМесяца(ТекущаяДата()));
Запрос.УстановитьПараметр("КонецПериода", КонецМесяца(ТекущаяДата()));
Результат = Запрос.Выполнить().Выгрузить();
Понимание, что ЛЕВОЕ СОЕДИНЕНИЕ вернет все документы поступления, даже если у них нет контрагента (или ссылка на контрагента некорректна), в то время как ВНУТРЕННЕЕ СОЕДИНЕНИЕ (СОЕДИНЕНИЕ) вернуло бы только те документы, у которых контрагент существует, является ключевым для получения корректных данных и избежания ошибок. Также, знание о том, как индексы влияют на скорость выполнения ГДЕ и СОЕДИНЕНИЕ, позволяет нам эффективнее использовать поля Дата и Контрагент.
Эти фундаментальные математические дисциплины формируют основу логики, используемой в программировании. Понимание булевой алгебры помогает нам эффективно работать с логическими операциями (И, ИЛИ, НЕ, XOR), что важно для построения сложных условий в операторах Если, в запросах, в алгоритмах фильтрации. Теория множеств, в свою очередь, лежит в основе работы с коллекциями данных, операций объединения, пересечения, разности, что напрямую применимо к работе с Массив'ами, СписокЗначений и результатами запросов в 1С.
Не забывайте про Стандарты разработки 1С, доступные на ИТС. Это не книга по общей теории, но очень важный документ, который непосредственно влияет на качество кода в 1С. Эти стандарты включают рекомендации по именованию, структурированию кода, комментированию, обработке ошибок и многим другим аспектам, которые перекликаются с принципами "Совершенного кода" и "Чистого кода", но уже адаптированы под специфику 1С. Изучение и применение этих стандартов поможет нам писать код, который соответствует лучшим практикам 1С-разработки и легко поддерживается другими разработчиками.
Иногда полезно отвлечься от чисто технических книг и почитать что-то, что вдохновляет и заставляет задуматься о профессии программиста в целом. Айзек Азимов "Профессия" — это научно-фантастическая повесть, которая рассматривает вопросы образования, призвания и места человека в мире технологий. Это не техническая книга, но она может дать ценную пищу для размышлений и помочь сформировать мировоззрение программиста.
Чтение этих книг и изучение упомянутых тем, даже если они не напрямую связаны с синтаксисом 1С, поможет нам развить "программистское мышление", которое универсально и применимо на любой платформе. Это позволит нам не просто писать код, а проектировать эффективные, надёжные и поддерживаемые решения, что является показателем высокого уровня квалификации программиста.
Не бойтесь выходить за рамки 1С-специфичной литературы. Истинный профессионал в любой области постоянно ищет способы улучшить свои фундаментальные навыки. Приступайте к чтению "Совершенного кода" и других упомянутых книг, адаптируйте их принципы к 1С, и мы уверены, что вы заметите значительное улучшение в качестве и архитектуре вашего кода.