Как составить алгоритм действий документа

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

Статья написана под лозунгом «Нет ничего практичнее хорошей теории!» Концепцию управления документами автор осмысливает и развивает примерно с 80-х годов, когда профессиональное сообщество начало изучать и обсуждать законодательство зарубежных стран об управлении документацией. Концепцию и методологию управления документами и в организационном, и в информационном аспектах автор реализовала на практике в двух проектах создания корпоративной информационной системы – сначала в банке «НИКойл», затем – в Финансовой Корпорации «УРАЛСИБ», а в настоящее время пропагандирует и применяет ее во многих проектах разработки систем электронного документооборота, консультантом которых является.

Непосредственный повод для написания статьи – решение крупнейшего коммерческого банка, имеющего социальное значение и являющегося лидером рынка, о полном переходе на безбумажный документооборот в процессе издания внутренних документов, являющихся правовыми актами. Было принято волевое решение руководителей о скорейшем применении исключительно электронной формы распорядительных документов и документов коллегиальных органов управления. Но при этом в информационной системе (СЭД) остаются ненастроенными механизмы создания электронных документов-оригиналов и их подписания уполномоченными должностными лицами, за должностями которых и должна быть закреплена электронная подпись того или иного вида.

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

В подобных ситуациях мы рекомендуем коллегам:

  • Во-первых, всегда помнить, что официальным документом (существующим в любой форме) может быть признан документ, оформленный и удостоверенный в установленном порядке. Т.е. здесь важны как соблюдение правил оформления, так и компетенция / полномочия должностного лица, подписавшего документ.
  • А во-вторых, знать и доводить до сведения руководителей, что документы, технологии работы с ними и документальный фонд находятся в зоне ответственности руководства организации, так называемого «топ-менеджмента», как говорится в стандартах новой серии ИСО 30300, и «чудес» в делопроизводстве не бывает.

Серия стандартов ИСО 30300 – стратегический уровень управления документами

В ноябре 2011 г. были опубликованы два первых стандарта новой серии (семейства) стандартов ИСО 30300:

  • ISO 30300:2011 Information and documentation – Management systems for records – Fundamentals and vocabulary;
  • ISO 30301:2011 Information and documentation – Management systems for records – Requirements.

Серия ИСО 30300 предназначена для создания в организациях систем управления документами на стратегическом уровне, на уровне ответственности и в зоне принятия решений руководства. Стандарты этой серии разрабатываются на таких же методологических и концептуальных основах, как и стандарты серий ИСО 9000 и ИСО 14000, связаны со стандартами на другие системы управления (например, со стандартами на систему управления рисками, информационную безопасность) и, конечно же, отражают мировой опыт «лучших практик». Если требуется получить информацию о том, как работают с документами в зарубежных странах, как решаются проблемы, связанные с документами, каков уровень «зарубежного» делопроизводства, то прежде всего следует изучать стандарты ИСО, т.к. именно в них в обобщенном виде содержатся сведения о современном (уже достигнутом в некоторых странах и желаемом в других) уровне понимания значения работы с документами и оптимальных требованиях к ее организации.

Первые два стандарта серии ИСО 30300 являются документами высокого уровня, относятся к категории организационно-методических стандартов, поскольку дают представление о системе управления документами. В стандартах закрепляется, что на уровне решений, принимаемых руководством организации, находятся:

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

Внедрение системы управления документами повышает эффективность бизнеса, его капитализацию, так как в современном мире информация и документы рассматриваются как серьезный актив. Частью системы являются процессы, методы и средства управления документами. Причем под процессами в системе управления документами понимают прежде всего технологии, алгоритмы, накопленный опыт и лучшие практики внедрения требований стандарта ИСО 15489 в организационном аспекте. Но следует учесть, что понятие «система управления документами» используется также для наименования ИТ-системы, т.е. инструмента, который должен поддерживать работу как с бумажными, так и с электронными документами.

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

Алгоритмы управления документами на операционном уровне

Управление делами (служба управления документами) организует и контролирует реализацию процессов управления документами, выбирая оптимальные методы и средства на уровне технологии работы с документами. Обычно в инструкциях по делопроизводству организаций, когда составляется раздел о работе исполнителей с документами, управление делами закрепляет традиционно сложившийся алгоритм работы. Этот алгоритм является отчасти «исполнительским», фиксирующим действия исполнителя по составлению и оформлению проекта документа, взаимодействие исполнителей, руководителей и структурных подразделений в процессе согласования, а также совместную деятельность уполномоченного должностного лица и управления делами в процессе придания документу юридической силы. В общем виде алгоритм может быть представлен следующим образом:

Пример 1. «Исполнительский» алгоритм действий при работе с проектами документов

  1. Действия исполнителя, а также зоны его ответственности:
    • изучение законодательных и иных нормативных правовых актов, регламентирующих предметную область, в которой необходимо издание/составление и оформление документа определенного вида;
    • анализ внутренних нормативных документов организации, регламентирующих ее деятельность в данной предметной области или в данном направлении, вопросе деятельности;
    • анализ ранее изданных/действующих документов по конкретному/данному вопросу (документов всех видов и разновидностей, оценка степени их актуальности, исполнения, причины неисполнения и т.п.);
    • подготовка проекта документа определенной разновидности (отражение в нем конкретной цели создания документа, правильное оформление реквизитов, выбор оптимальной для данной управленческой ситуации структуры текста);
    • направление проекта документа на процедуру согласования, контроль за соблюдением сроков согласования, внесение изменений в проект или отклонение замечаний, подготовка новых версий проекта в случае необходимости и т.п. действия, обеспечивающие качественную разработку проекта управленческого решения;
    • получение в результате процедуры согласования готового для подписания проекта документа, оформленного в установленном порядке.
  2. Действия исполнителей, руководителей и структурных подразделений в процессе согласования:
    • изучение проекта документа и оценка рисков сформулированного в нем проекта управленческого решения в рамках закрепленных зон ответственности;
    • подготовка замечаний, предложений, новых формулировок для включения в проект документа или новой версии проекта;
    • оформление результатов согласования в установленном порядке с помощью визы.
  3. Действия руководителя и управления делами (службы управления документами):
    • подписание проекта документа (оформление идентификационного реквизита «подпись») или утверждение документа (проставление подписи уполномоченного должностного лица в грифе утверждения; дата утверждения также должна быть оформлена руководителем своей рукой);
    • оформление идентификационных реквизитов «дата» и «индекс» (номер) документа.

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

  • принадлежность документа к системе или подсистеме документации (например, составляется организационный, распорядительный или справочно-информационный документ);
  • срок действия документа (указанный в самом документе как срок исполнения или неопределенный, поскольку документ содержит правовую норму или долговременно действующее правило поведения);
  • срок хранения (постоянный, временный свыше 10 лет или менее, устанавливаемый на основе перечней документов со сроками хранения и номенклатуры дел);
  • формуляр и типовой формуляр документа (имеется в виду применение утвержденных в организации унифицированных типовых форм документов);
  • требования к тексту документа (к структуре текста и языковым средствам выражения определенной управленческой ситуации с использованием типовых или трафаретных текстов, если применяются унифицированные типовые формы).

Актуальность данного алгоритма в настоящее время подтверждают требования ГОСТа Р ИСО 15489-1-2007 «Система стандартов по информации, библиотечному и издательскому делу. Управление документами. Общие требования», который устанавливает, что выбор материального носителя информации зависит от сроков хранения документов, а при проектировании системы управления документами следует выбирать подходящую среду хранения и носители информации, средства физической защиты информации, процедуры обработки и системы хранения.

Таким образом, в алгоритме управления документами срок хранения документа является точкой выбора формы документа (электронной или бумажной) и определяет дальнейшие действия по созданию документов. Конечно же, на этот выбор также должны влиять бизнес-процесс и назначение / цель создания документа, срок его действия.

При проектировании конкретной информационной системы мы рекомендуем учитывать данную методологию решения вопроса о выборе носителя / формы документа в соответствии с «лучшими практиками», отраженными стандартом ИСО 15489, и обеспечивать создание документов постоянного срока хранения прежде всего в бумажной форме, т.к. доказательный срок хранения документов на бумаге при соблюдении необходимых условий – более 100 лет, а доказательного срока хранения электронных документов более 30 (плюс-минус 5–7) лет пока не существует.

Сделаем выводы

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

Если документ, создаваемый в информационной системе, имеет постоянный срок хранения или временный (свыше 10 лет), то:

  1. В электронной форме проводятся его подготовка, согласование, внесение изменений, сохранение версий и т.п. В результате полностью готовый проект документа (вместе с листом согласования, который может быть распечатан, а может быть использован и в электронной форме) распечатывается и представляется на подпись уполномоченному должностному лицу.
  2. На бумажном проекте документа проставляется подлинная подпись (условно – «синяя») соответствующего руководителя!
  3. Управление делами регистрирует подписанный документ, проставляя на нем дату и индекс, используя данные информационной системы, которая «предлагает» очередные дату и индекс по соответствующим счетчикам. Документ в бумажной форме всегда является доказательством, выполняет правовую функцию.
  4. Уполномоченный сотрудник управления делами своей электронной подписью (установленного вида и статуса, например, простая ЭП для отметки о заверении копии) подписывает проект документа, существующий в информационной системе в электронном виде, одновременно с подписанием системно оформляются дата и индекс электронной копии документа, которая получает статус «действующий» документ.
  5. Полученная заверенная электронная копия документа (оригинал которого существует в бумажной форме) может направляться исполнителям, транслироваться во внешнюю среду на сайт (сам документ/копия, его фрагменты или только заголовок), по ней осуществляется коллективная работа, контроль исполнения и другие необходимые делопроизводственные операции (например, в форме отчета из информационной системы по электронным копиям могут формироваться журналы регистрации, акты, описи, справки и т.п.).

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

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

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

Если же документ, создаваемый в информационной системе, имеет временный срок хранения (до 10 лет включительно), то он может создаваться, храниться, использоваться и уничтожаться в связи с истечением сроков хранения как электронный оригинал.

Однако соблюдение алгоритмов управления документами в полном объеме будет возможно только при условии реализации всех инфраструктурных требований, необходимых для практического внедрения положений Федерального закона от 06.04.2011 № 63-ФЗ «Об электронной подписи», а также при условии признания факта, что главная функциональность современных СЭД – создание документов по установленным правилам, а не их «транспортировка».

Заметим также, что в новой серии стандартов ИСО 30300 предполагается разработка стандарта по аудиту и сертификации систем управления документами. Чем раньше мы начнем осваивать реальные алгоритмы управления документами, тем успешнее мы станем!

Вернуться к Конкурсному голосованию

Один из самых непростых участков работы в делопроизводстве связан с регистрацией входящей корреспонденции. Несмотря на внешнюю техническую простоту, он предполагает взаимодействие со сторонней организацией, а иногда таит в себе юридическую подоплеку. Расскажем о первой стадии работы с входящими документами – об особенностях и основных сложностях их приема и первичной обработки, нормативных требованиях и рутинных реалиях.

Прием и первичная обработка входящего документа – важная стадия его жизненного цикла

Работа с входящими документами – одно из самых непростых направлений в делопроизводстве, потому ее чаще поручают опытным сотрудникам. До передачи документов на рассмотрение руководству нужно произвести с ними ряд пошаговых действий (Алгоритм).

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

Регистрация, предполагающая в самых общих чертах внесение данных о документе в регистрационную форму и проставление штампа на документе, сложности не представляет. Все самые ответственные мероприятия выполняют до регистрации: секретарь или делопроизводитель должен определить, может ли он принять (в случае доставки нарочным) и зарегистрировать документ. За свои действия он несет ответственность, ведь может оказаться, что слишком строгая оценка не позволила вовремя довести до сведения руководителя значимый документ, или наоборот – его время отнимет совершенно бессмысленное рекламное послание, умело замаскированное под официальный документ.

Сложности, как обычно, возникают тогда, когда в организации нет строго определенных алгоритмов работы. В этом процессе важно ориентироваться на положения локальной инструкции по делопроизводству, однако в ней можно предусмотреть что угодно. И ладно, если бы положения инструкции затрагивали только «внутреннюю кухню» организации, но при работе с входящими документами речь идет о коммуникации со внешней средой. Не секрет, что направить письмо в некоторые организации – непростая задача, так как там все документы проходят серьезный входной контроль. Но отказ в приеме документов или регистрации должен быть обоснован, а основания – существенными. Нельзя отказать просто потому, что документ не понравился, но и принимать и регистрировать все подряд – неверно. Кстати, нормативно нигде не установлена возможность отказать в приеме документа, но практика эта широко распространена: большая часть корреспонденции в настоящее время доставляется курьерами (нарочным), ее получение просят подтвердить подписью получателя, а для этого последний проводит быструю проверку.

Основные правила работы с входящими документами изложены в следующих документах:

1. Примерная инструкция по делопроизводству[1].

2. Правила делопроизводства[2].

3. Методические рекомендации по разработке инструкций по делопроизводству в государственных органах, органах местного самоуправления[3] (далее – МР по разработке ИД).

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

На основе требований нормативных актов сформулируем три главных правила, которыми следует руководствоваться при приеме и регистрации входящих документов:

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

Правило 2. Не все документы подлежат регистрации. Если документ не требует исполнения и не содержит информации, которая может быть использована в справочных целях, его не регистрируют, а передают в структурные подразделения и должностным лицам. Перечень нерегистрируемых документов приведен в Приложении 11 к МР по разработке ИД, однако он является примерным, в связи с чем может быть уточнен организацией с учетом специфики документооборота.

Правило 3. Получатель может отказать в регистрации документа в случае выявления несоответствий в ходе его проверки, при этом отправителю нужно направить уведомление об отказе в регистрации с указанием причины (см. п. 3.18 Правил делопроизводства).

Порядок первичной обработки входящего документа

В нормативных актах для наименования первой стадии работы с входящим документом используется термин «прием и первичная обработка документа», при этом проверка отправлений предусмотрена именно в рамках первичной обработки. Алгоритм проверки, предусмотренный Правилами делопроизводства, включает несколько этапов. В Таблице 1 мы представили действия получателя, нормативно предписанные ему на каждом этапе, и наш практико-ориентированный комментарий.

Порядок первичной обработки документа в соответствии с Правилами делопроизводства

Иногда проверка начинается уже «в процессе» получения документа – например, в момент его доставки курьером. При наличии некоторых нарушений получатель может отказать в приеме отправления.

Заметим, что описанный порядок действий относится к документам, поступившим на бумажном носителе. Первичная обработка документов, полученных по информационно-телекоммуникационным каналам связи должна соответствовать технологии работы с входящими документами (см. п. 5.16 Примерной инструкции по делопроизводству).

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

Кому именно следует выдать документ, обычно указано на конверте (например, ООО «Лазурь», Иванову И.И.). Зная особенности бизнес-процессов организации, адресата можно определить по виду и содержанию документа (например, оригинал договора нужно передать куратору договора, счет на оплату – в финансовый отдел и т.д.).

Если же после вскрытия конверта в нем обнаружено деловое письмо (сопроводительное или любое другое), то проверка продолжается, и по ее результатам определяется возможность регистрации документа.


[1] Здесь и далее – Правила делопроизводства в государственных органах, органах местного самоуправления (утв. приказом Росархива от 22.05.2019 № 71).

[2] Здесь и далее – Примерная инструкция по делопроизводству в государственных организациях (утв. приказом Росархива от 11.04.2018 № 44).

[3] Утв. приказом Росархива от 24.12.2020 № 199.

Материал публикуется частично. Полностью его можно прочитать в журнале «Секретарь-референт» № 9, 2021.

#статьи

  • 7 дек 2022

  • 0

Что такое алгоритмы и какими они бывают

Ты можешь разрабатывать микросервисы и знать все уровни модели OSI, но какой ты программист, если не можешь объяснить ребёнку, что такое алгоритм?

Иллюстрация: Катя Павловская для Skillbox Media

Антон Сёмин

Пишет об истории IT, разработке и советской кибернетике. Знает Python, JavaScript и немного C++, но предпочитает писать на русском.

Ведущий бэкенд-разработчик мобильного приложения «Альфа-Банка».

Иногда совсем простые вопросы о профессии вводят в ступор даже опытных специалистов. Примерно так происходит, когда у разработчика с 5–10-летним стажем спрашивают: «Что такое алгоритм?»

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

Вы узнаете:

  • Что такое алгоритмы
  • Для чего их используют
  • Какие у них есть свойства
  • Что такое псевдокод
  • Что такое блок-схемы и как их рисовать
  • Примеры линейных, ветвящихся, циклических и рекурсивных алгоритмов и блок-схем

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

Слово «алгоритм» произошло от имени персидского математика Абу Абдуллаха аль-Хорезми. В своём труде «Китаб аль-джебр валь-мукабала» учёный впервые дал описание десятичной системы счисления. А наука алгебра получила своё название в честь его книги.

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

1. Устанавливаем капсулу.

2. Проверяем уровень воды в специальном отсеке.

3. Если воды недостаточно — доливаем.

4. Ставим чашку под кран кофемашины.

5. Запускаем кофемашину.

6. Выключаем кофемашину, когда чашка наполнилась.

7. Достаём кружку.

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

С компьютерами намного сложнее. Им неизвестно, что значит «установить капсулу», «долить воду», «запустить кофемашину» и так далее. Чтобы запрограммировать робота-баристу под определённую модель бытовой техники, алгоритм придётся расписать более детально:

1. Возьми штепсельную вилку шнура питания кофемашины.

2. Вставь штепсельную вилку в розетку.

3. Проверь, есть ли вода в отсеке для воды.

4. Если воды недостаточно:

4.1. Подними крышку отсека.

4.2. Возьми кувшин с водой.

4.3. Лей воду из кувшина в отсек, пока он не заполнится.

4.4. Закрой крышку отсека.

4.5. Поставь кувшин с водой на стол.

5. Открой крышку кофемашины.

6. Возьми из коробки капсулу с кофе.

7. Вставь капсулу в отсек для капсулы.

8. Закрой крышку кофемашины.

9. Поверни рычаг кофемашины вправо.

10. Когда чашка наполнится, поверни рычаг кофемашины влево.

11. Возьми кружку.

12. Принеси кружку хозяину.

Конечно, если мы собираем робота с нуля, то даже такой детализации будет недостаточно. Каждую процедуру ещё нужно будет реализовать на языке программирования (например, на C++ или Python), что само по себе — нетривиальная задача. Тем не менее описание стало более точным и формальным.

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

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

У алгоритмов есть два замечательных качества: они позволяют эффективно решать задачи и не изобретать решения, которые кто-то уже придумал до нас. Это справедливо как для повседневной жизни, так и для IT.

Представьте, что оформляете загранпаспорт. Если будете всё делать сами и без инструкции, около 40 минут потратите только на выяснение необходимых справок и порядка оформления. Куда проще воспользоваться «Госуслугами», потому что алгоритм там уже составлен — делаете, что вам говорят, и ждёте результат. А ещё проще — обратиться к посреднику, который подготовит все справки и оформит паспорт за неделю.

Это очень бытовой пример, но программирование примерно так и работает. Разработчики изучают алгоритмы, чтобы писать быстрый и эффективный код, — распознают типовую задачу и подбирают для неё оптимальный алгоритм.

Допустим, нужно отсортировать в порядке возрастания числа в списке из 1000 элементов. Можно пройтись по списку 1000 раз: на каждой итерации находить наименьшее число и переставлять его в начало списка. В этом случае общее количество шагов будет равно 1 000 000 — современный компьютер справится с этим за секунду.

А если нужно упорядочить массив из 10 000 000 элементов? Тогда компьютеру придётся выполнить 1014 шагов, что потребует гораздо больше времени. Надо оптимизировать!

Разработчик, не сведущий в computer science, начнёт ломать голову над более эффективным решением. А опытный специалист применит алгоритм быстрой сортировки, который в среднем случае даст «время» 16 × 107 шагов.

Знатоки скажут, что ещё проще было бы воспользоваться библиотечной функцией сортировки (например, sorted() в Python). Тем не менее даже встроенные алгоритмы бывают недостаточно эффективными и разработчикам приходится писать собственные функции для сортировки. Но это уже совсем другая история 🙂

Теперь представьте: вы живёте в XX веке где-нибудь в США и зарабатываете тем, что ездите по городам и продаёте мультимиксеры. Чтобы сэкономить время и деньги, вам нужно придумать кратчайший маршрут, который позволит заехать в каждый город хотя бы один раз и вернуться обратно.

Иллюстрация: Катя Павловская для Skillbox Media

Это знаменитая задача коммивояжёра, для которой практически невозможно подобрать лучшее решение. Простой перебор здесь не поможет. Уже при 10 городах количество возможных маршрутов будет равно 3,6 млн, а при 26 — даже самым мощным компьютерам понадобится несколько миллиардов лет, чтобы перебрать все варианты.

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

Информатик и автор классических учебников по программированию Дональд Кнут выделял следующие свойства алгоритмов:

  • конечность,
  • определённость,
  • наличие ввода,
  • наличие вывода, или результативность,
  • универсальность,
  • эффективность.

Рассмотрим каждое подробно.

Конечность. Алгоритм должен решать задачу за конечное число шагов. Необходимость этого критерия очевидна: программа, которая решает задачу бесконечно долго, никогда не приведёт к результату.

Определённость. Исполнитель (компьютер, операционная система) должен однозначно и верно интерпретировать каждый шаг алгоритма.

Наличие ввода. Как и у математической функции, результат работы алгоритма зависит от входных данных. Например, на вход алгоритма сортировки подаётся массив чисел. А функция, рассчитывающая факториал, принимает натуральное число.

Наличие вывода, или результативность. Алгоритм должен выдавать конкретный результат. Например, если мы ищем подстроку в строке и такая подстрока в ней присутствует, то на выходе мы должны получить позицию этой строки. Если такой подстроки нет — алгоритм должен вернуть соответствующее значение, например -1.

Универсальность. Алгоритм должен решать задачи с разными входными данными. Например, хорошая функция для сортировки массивов должна одинаково хорошо справляться с массивами из 10, 100 и 1 000 000 элементов.

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

Представьте, что вы изучили какой-нибудь язык программирования, например Go, и устроились бэкенд-разработчиком в IT-компанию. В вашей команде, помимо бэкендеров, есть фронтенд-разработчики, которые пишут код на JavaScript.

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

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

У псевдокода нет общепринятых стандартов, и авторы используют собственные оригинальные нотации. Хотя часто они заимствуют названия операций из Python, Pascal и Java. Например, код ниже напоминает программу на Python:

int linear_search(int[] arr, int x):
	if arr is empty:
		return -1
	for i in 0..n:
		if arr[i] == x:
			return i
	return -1	

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

ФУНКЦИЯ линейный_поиск(целое[] массив, целое x):

           ЕСЛИ массив ПУСТОЙ:

                   ВЕРНУТЬ -1

           ДЛЯ i В ДИАПАЗОНЕ ОТ 0 ДО ДЛИНА(массив):

                   ЕСЛИ массив[x] РАВНО x:

                             ВЕРНУТЬ i

           ВЕРНУТЬ -1

Главное — чтобы тот, кто читает ваш алгоритм, понял его и воспроизвёл на своём языке программирования.

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

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

В таблице ниже представлены основные элементы блок-схем:

Графическое изображение

Значение

Элемент кода в Python


Начало/конец программы

Никак не обозначается
или обозначается как начало функции:

def foo(x):
   #код 

Конец функции обозначается словом return


Ввод/вывод данных

Операторы ввода и вывода:

print("Hello!")
word = input()


Арифметические операции

Арифметические операторы:

100 - 10
25 + 100
6 * 12.0


Условие

Условный оператор:

if n < 5:
   sum += 10


Цикл со счётчиком

Цикл for:

for k,v in enumerate(arr):
   print(k, v)


Ввод/вывод в файл

Функции для работы с файлами:

f = open("text.txt", 'r')
f.close()

С помощью этого нехитрого набора фигур можно нарисовать схему практически любого алгоритма. Другие фигуры блок-схем вы найдёте в документации к ГОСТ 19.701-90.

Блок-схемы можно рисовать в Microsoft Visio и в Google Docs (ВставкаРисунок Новый +). Также есть специальные сервисы: например, облачный Draw.io и десктопные Dia и yEd.

А теперь разберёмся, какими бывают алгоритмы, напишем примеры на Python и нарисуем для них блок-схемы.

По конструкции алгоритмы можно разделить на несколько групп.

В линейных алгоритмах действия идут последовательно, одно за другим. Такие программы — самые простые, но на практике они встречаются редко.

Пример. Напишите программу, которая умножает число, введённое пользователем, на 100 и выводит результат на экран.

Последовательность действий уже изложена в задании: ввести число → умножить на 100 → вывести результат. Переведём это на язык блок-схем:

Изображение: Skillbox Media

Ниже приведена реализация алгоритма на языке Python:

x = int(input())
x = x * 100
print(x)

>>> 5
>>> 500

В ветвящихся алгоритмах ход программы зависит от значения логического выражения в блоке «Условие». По большому счёту, любое логическое выражение сводится к выбору между истиной (True, «1») или ложью (False, «0»).

Пример. Напишите программу, которая запрашивает у пользователя возраст. Если он равен или больше 18, программа выводит приветствие, увеличивает значения счётчика посетителей на 1 и прощается, а если меньше — сразу прощается и завершает работу.

Чтобы изобразить ход решения, воспользуемся условным блоком. Во всех схемах его обозначают ромбом с вписанным условием:

Изображение: Skillbox Media

То же самое на Python:

visits_counter = 0
answer = int(input("Сколько вам лет? "))
if answer >= 18:
   print("Добро пожаловать!")
   visits_counter += 1
else:
   print("Доступ запрещён")

Когда пользователь вводит 18 или больше, программа выполняет часть кода, которая записана под оператором if. Если же возраст меньше 18, то на экран выводится сообщение «Доступ запрещён» и программа завершает работу.

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

Пример. Напишите программу, которая циклично увеличивает значения счётчика на 1 и на каждом шаге выводит его значение. Когда значение счётчика достигнет 10, программа должна завершиться.

В основе нашего решения будет лежать следующее условие: если значение счётчика меньше 10 — прибавить 1, иначе — завершить работу. Вот как это выглядит в виде блок-схемы:

Изображение: Skillbox Media

Переведём это в код на Python. Обратите внимание, что мы не прописываем отдельную ветвь для случая «Нет»:

count = 0
#прибавлять 1 к count, пока count меньше 10
while count < 10:
   count += 1
   print(count)
print("Переменная count равна 10!")

Результат работы программы:

1
2
3
4
5
6
7
8
9
10

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

Пример. Пользователь вводит число n. Посчитайте его факториал и выведите результат на экран.

#функция, которая вызывает саму себя
def factorial(n):
   if n == 1:
       return 1
   #когда функция возвращает значение, 
   #она вызывает себя, но с аргументом n - 1
   return n * factorial(n - 1)

Вот как выглядит блок-схема рекурсивного алгоритма:

Изображение: Skillbox Media

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

Есть и другие классификации алгоритмов. Например, по множеству решаемых задач их можно разделить на численные, поисковые, сортировочные, строковые, сетевые и криптографические. А по точности получаемых результатов — на нормальные и стохастические (вероятностные).

Если хотите изучить алгоритмы более подробно, начните с простых и увлекательных книг по computer science:

  • «Грокаем алгоритмы», Адитья Бхаргава;
  • «Теоретический минимум по Computer Science», Владстон Фило;
  • «Гид по Computer Science», Вильям Спрингер.

Когда познакомитесь с основными алгоритмами и научитесь решать с их помощью стандартные задачи, переходите к более серьёзной литературе. Например, прочитайте Computer Science Роберта Седжвика и «Алгоритмы» Рода Стивенса.

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

Научитесь: Профессия Python-разработчик
Узнать больше

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

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

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

Схемы можно рисовать самым разным образом. Если схема должна описывать бизнес-процесс, то такую схему принято рисовать определённым образом. Способ её отображения называют нотациями. Тут мы встречаем новое понятие, которое называется нотация бизнес-процессов. В конечно счёте, нотация – это некоторый гост или стиль записи, которого придерживаются для того, чтобы легче понимать друг друга. Нотаций существует несколько. Про это мы рассказывали в статье на нашем канале дзен. Там мы разобрали четыре основных типа нотаций. Соответственно, одним из первых моментов, которые нужно знать для правильного составления схемы – это нотации или условные обозначения. Это первое, что нужно уяснить. Но пожалуй, перейдем к поэтапной методике разработки любой схемы.

Шаг 1. Осознание информации

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

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

Шаг 2. Научитесь видеть самое важное

Когда есть общее понимание происходящего и мы знаем, что не тыкаем пальцем в небо, а разбираемся в какой-то слаженной системе, следует научиться выделять самое главное. Логика тут простая. Сначала нужно нарисовать или описать “хребет” происходящего, а потом обвешать его дополнительными вспомогательными данными. 

Это чем-то напоминает строительство каркасного дома. Сначала строится каркас из бруса, а потом его обивают досками или утепляют.

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

Подобная картина характерна и для разработки программного обеспечения. В сфере софтостроения тоже часто применяются блок-схемы. Там тоже происходит подобная модификация. Берется базовый процесс, а потом обвешивается вспомогательными цепочками. Например, если рассмотреть блок-схему работы самой обычной почтовой программы, то она тоже будет очень простой: Нажать на кнопку – отправить письмо – прислать уведомление о доставке.

Но очевидно, что с такой простенькой схемкой ни одно приложение работать не будет. Поэтому, ту же процедуру нажатия на кнопку нужно значительно развернуть. В реальности это было бы примерно так: Выдать уведомление – получить ответ от пользователя – сгруппировать данные для отправки в единый массив – занести их в рабочий буфер временной памяти – соединиться с сервером – получиться уведомление от сервера о соединении – начать передачу данных – уведомить пользователя – обозначить процедуру как “успешно”. Это только частичная расшифровка одной из стадий расшифровки.

Шаг 3. Изучить условные обозначения 

Условные обозначения или нотации – это как язык общения между людьми. Для того, чтобы понимать друг друга, нужно говорить на одном языке. Собственно говоря, так и появилась необходимость каким-либо образом стандартизировать варианты записи схем. Как и в языках, на которых общаются люди, в блок-схемах есть правила и общая логика изложения. Для всех типов блок-схем существует свод своих требований. Это касается и бизнеса и программирования, и прочих сфер, где возможно встретить схемы как таковые.

Читайте также: Что такое x86-64 и откуда оно взялось?

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

Шаг 4. Выбор рабочего инструмента

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

В зависимости от сложности задачи можно использовать самые разные приложения, но, исходя из нашего опыта, хорошо себя зарекомендовали для решения самых разных задач приложения Visio и Draw.io   

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

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

Это приложение draw.io. Адрес программы в интернете вот тут. Оно снабжено удобными интеграциями буквально со всеми существующими и, наверное, даже не существующими сервисами. Распространяется бесплатно, очень хорошо дружит с сервисами от google и позволяет строить буквально любые схемы. Работать можно как в режиме он-лайн, так и скачать программу на свой компьютер или мобильный. 

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

Шаг 5. Знать основные правила построения блок-схем

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

  • Обязательно в схеме должно присутствовать два блока – это «Начало» и «Конец». Очевидно, что у любого алгоритма или бизнес-процесса может быть только одно начало или только один конец.
  • Начальный блок связывается с конечным посредством линий связи, которые могут быть дополнены различными промежуточными операциями. Из всех блоков, кроме конечного, должны выходить линии потока. 
  • Все блоки удобно пронумеровывать. Так легче ориентироваться и вам при разборе схемы, и тому, кто пытается осмыслить полученный вами результат. 
  • Не секрет, что линии делятся на входящие и выходящие. Если блоки не начальные или конечные, или концевые для конкретной ветки, то одна и та же линия является для одного блока выходящей, а для другого входящей
  • Допускается наличие разрывов в линиях потока. Это обычное дело! Ведь у каждого ответвления рано или поздно происходит логическое завершение. 
  • Логика процесса может быть линейная, разветвляющаяся или циклическая. Предположительно, тут вопрос появиться не должно 🙂 Если блоки на прямой линии – это линейный вариант. Если на схеме есть разветвления – то схема разветвляющаяся (всегда реальная схема такая). Циклическая – для программиста обычное дело, а вот для бизнес-аналитика более редкая. Скажем, заправка автомобиля перед каждым рейсом – это циклическая операция. 

Шаг 6. Проработка существующей схемы процесса “от” и “до”

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

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

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

Алгоритм действий — это пошаговое объяснение, что делать в разных случаях: сдать налоговую декларацию, зафиксировать ДТП, подключить стиральную машинку, вырастить картошку. Один из способов алгоритм указать — составить блок-схему (или флоучарт). Ее определяют, как «графическое отображение решения задачи».

Простой способ прорисовать флоучарт — воспользоваться Google Диск. К тому же он позволяет создавать блок-схему командой: создайте проект и отправьте ссылку на него другим участникам, открыв доступ для редактирования.

  1. Выберите тему, которой будет посвящен флоучарт. Продумайте основную мысль, которую хотите передать в своём материале.
  2. Наберите в Word (или другом текстовом редакторе) тексты для блок-схемы. Они должны быть короткими, без воды. Пары предложений достаточно.
  3. Проверьте на ошибки. Иначе вам придётся переделывать блок-схему.

Открывайте Google Диск. Нажимайте «Создать» (кнопка вверху боковой колонки слева) или кликайте на правую клавишу мышки. Появилось всплывающее окно. Кликайте на «Еще», затем — Google Drawings (Google Рисунки).

Откроется новый документ. Назовите схему.

Вверху справа есть «Настройки доступа», если вам нужно подключить к работе над флоучартом коллег, нажимайте на них и указывайте, как команда может влиять: просматривать блок-схему, комментировать или редактировать.

Приступайте к созданию флоучарта. Установите фон: наведите мышку на поле, кликайте на правую клавишу, выбирайте «Фон».

Панель с инструментами размещена над рабочим полем. Набор функций стандартный: формы, стрелки, текстовое поле. Можно загрузить фотографию.

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

Можно вставить отдельно форму, а затем добавить к ней текст. Или можно текст положить на подложку.

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

Если стандартного поля мало — уменьшите масштаб и потяните за уголок в правом нижнем углу рисунка.

Когда флоучарт готов, нажимайте «Файл» в верхней панели, затем — «Скачать как». Выберите нужны формат: PDF, JPEG, PNG, SVG.

Если блок-схема нужна для публикации в интернете, нажимайте «Файл», затем — «Опубликовать в интернете». Выбирайте размер изображения, и — «Опубликовать». Чтобы получит код для вставки на сайт, переходите во вкладку «встроить».

Готово. Результат может выглядеть так.

Где может пригодиться флоучарт?

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

  • способы высадить картошку (да, их есть несколько);
  • как записать ребенка в детский сад, школу, лагерь, кружок;
  • как сдать налоговую декларацию, документы на регистрацию имущества, составить европротокол и пр.;
  • как действовать при конфликтах с магазином, управляющей компанией, соседями, полицией.

Понравилась статья? Поделить с друзьями:
  • Как найти силу сопротивления воздуха в физике
  • Как найти чаты по районам
  • Как найти линейное неравенство с одной переменной
  • Слишком жирная еда как исправить
  • Как найти массу углерода в углекислом газе