Аннотация
Добро пожаловать на сайт! Меня зовут Вожегов Дмитрий. Я люблю и профессионально занимаюсь проектированием и разработкой информационных систем:
- участвую в создании it-команд, провожу грейдирование и технические интервью системных аналитиков и технических писателей;
- проектирую и оптимизирую процессы отдела аналитики и технических писателей: собеседования, адаптации, обучения, документирования;
- формализую и моделирую предметные области в нотациях BPMN, UML (SYSML), DDD, IDEF и т.д.;
- проектирую модели данных (ER, UML, DDD);
- занимаюсь высокоуровневым и низкоуровневым программированием (C, C++, CUDA, C#);
- изучаю вычислительное и сетевое оборудование;
- проектирую API и изучаю протоколы информационного обмена, начиная с канального уровня и выше (REST/OpenAPI, SOAP, HTTP, TCP и т.д.);
- разрабатываю и делаю экспертную оценку огромного количества программной документации;
- занимаюсь анализом и внедрением DocOps (VS Code, AsciiDoctor, Antora);
- много читаю и считаю, что книга - лучший подарок.
Образование
Окончил ВятГУ (вятский политех) по специальности «Вычислительные машины, комплексы системы и сети».
Основными девизами преподавателей, которые меня учили были: "Мы научим вас учить новые технологии" и "Мы заточим вам зубки, чтобы после окончания ВУЗа вы могли грызть гранит любой науки". Поэтому каждый семестр нам давали очень сложные и интересные задачи, например:
- спроектировать архитектуру, систему команд, функциональную, структурную и принципиальную схему CPU и FPU;
- оценить производительность и надёжность спроектированных архитектур, доказать работоспособность, смоделировав их работу на программном или аппаратном стеке;
- изучить 2-3 новых языка программирования и написать на них приложения (иногда требовали сходить по реальным предприятиям и найти для автоматизации реальные производственные задачи);
- разработать принципиальную схему и спаять оперативную память;
- выбрать, обосновать элементную базу и разработать цифровой прибор (например, сигнатурный анализатор);
- и т.д.
Я попал в очень сильную учебную группу. Большая часть группы состояла из людей, которые сдали ЕГЭ по математике и физике на 100 баллов. В то время ЕГЭ начали проводить в экспериментальном формате. Он был значительно сложнее текущих вариантов. Кроме того, набор заданий не был устоявшимся. И 100 баллов набирали те, кто очень любил учиться, очень любил математику и физику и тратил на них всё свободное время.
Преподаватели были очень сильные и идейные. Главная идея, которая прослеживалась в их действиях - это качество образования. До сих пор они держат максимальную планку качества, и без угрызения совести отчисляют 70 человек из потока в 90 человек, если те, не хотят учиться. Это приводит к конфликтам с администрацией, но при этом кафедра выпускает людей, которые хотят стать профессиональными разработчиками (инженерами, архитекторами, конструкторами) аппаратных и программных систем.
Многие из правильных привычек, которые мои коллеги и знакомые считают врождёнными, на самом деле сформировались у меня в ВУЗе, в ходе взаимодействия с преподавателями и одногруппниками.
В ВУЗе меня научили проектировать архитектуру аппаратно-программных комплексов, начиная с уровня "железа" и заканчивая уровнем прикладных приложений:
- как работает транзистор, как из транзисторов сделать логику (И, ИЛИ, НЕ) и статическую память (триггеры, счётчики, регистры);
- как из логики и статической памяти сделать целочисленные АЛУ, сопроцессоры с плавающей точкой, УУ, контроллеры прерываний, арбитры шины, РОНы, КЭШи, очереди и другие микропроцессорные секции;
- как из микропроцессорных секций сделать универсальные CPU + FPU, написать к ним микрокод;
- как проектировать базы данных и программировать на Си, С++, C#, Prolog, Lisp, SQL.
В качестве диплома я написал экспертную систему на C# Parallel Extensions + MS SQL для предприятия военно-промышленного комплекса, которая прогнозировала обстановку, распределяя вычисления между ядрами CPU.
После ВУЗа я начал переводить учебники по программированию для компании NVIDIA. Прошёл обучение и сертификацию в этой компании. И совместно с NVIDIA и ВятГУ открыл лабораторию по программированию на GPU, в рамках которой консультировал коммерческие и государственные организации по переносу кода с CPU на GPU.
Сертификат NVIDIA
Опыт работы
Сейчас я работаю в Научно-производственном центре «БизнесАвтоматика» в должности Competence Center Leader (директор центра компетенций). Проектирую и внедряю центр компетенций бизнес, системных аналитиков и технических писателей. Проектирую бизнес-процессы (BPMN) и доменные модели (ER, UML) для автоматизации собеседований, онбординга, обучения, грейдирования. Быстрое увеличение отдела аналитики, показало, что без автоматизации и оптимизации процессов изучения и оценки компетенций, а также без создания единых методик проектирования и документирования, не получится быстро повысить качество разработки программного и аппаратного обеспечения в быстро растущей компании.
Ранее в этой компании я занимал должность Team Lead Analyst (начальник отдела аналитики). Участвовал в полном цикле разработки программного обеспечения на стеке C# NET.Core, PostgreSQL, Nginx, Redis, RabbitMQ, ElasticSearch. В моём подчинении было 4 распределенных офиса, 30 системных аналитиков, 5 технических писателей. Сейчас в роли Директора к работе c ними добавилась методологическая поддержка других подразделений. А объём шаблонных технических задач по проектированию и разработке программного обеспечения сократился.
Ежедневно я работал по следующим направлениям:
- подготовка конкурсной документации;
- написание технических заданий (самостоятельная разработка более сотни ТЗ);
- анализ, декомпозиция требований, формализация требований в нотациях BPMN, EPC, UML, SYSML, DDD, IDEF, ГСА;
- поведение предпроектных обследований;
- проектирование, обоснование, прототипирование технических решений;
- постановка задач разработчикам (разработка алгоритмов, написание эпиков, пользовательских историй, задач для дизайнеров, bi-аналитиков, DS и ML аналитиков, back и front-end разработчиков);
- отладка кода вместе с разработчиками;
- постановка задач системным администраторам и DevOps-инженерам;
- интеграция информационных систем (анализ протоколов, форматов, проектирование правил маппинга, разработка регламентов информационного взаимодействия для обмена файлами/через общую СУБД/REST API, разработка контрактов OpenAPI);
- разработка полного комплекта документации по проекту (частных технических заданий, отчетов об обследовании, пояснительных записок эскизного и технического проектов, схемы деления, руководств администратора, пользователя, системного программиста, программ и методик испытаний, регламентов информационного взаимодействия и т.д.) по комплексам ГОСТ 2, 19, 34, 7.
Обучал проектные команды:
- проектированию БП, моделей данных, принципам ООП;
- пониманию сетевой модели TCP/IP, принципам работы сетевого оборудования L1, L2, L3, виртуализации, разворачиванию сервисов;
- форматам и протоколам взаимодействия (прикладного уровня REST, SOAP).
- написанию SQL запросов.
Обучал технических писателей Git, VS Code, AsciiDoctor, Markdown, Word, Gimp и т.д.
Дополнительно в мои обязанности входило:
- организация работы специалистов аналитического отдела;
- организация взаимодействия со смежными подразделениями отделом по машинному обучению, отделом разработки, отделом администрирования, защиты информации, отделом DevOps-инженеров, юридическим отделом);
- взаимодействие с архитекторами, конструкторами, разработчиками программного обеспечения, администраторами, специалистами по защите информации, а также специалистами предметных областей заказчика в процессе формирования ключевых архитектурных решений реализации информационных систем;
- организация и проведение планирования, груминга, анализа ретроспективы спринтов;
- разработка бизнес-процесса и проведение собеседований на должность ведущий системный аналитик, технический писатель, проектировщик информационных систем;
- проведение собеседований на должности: ведущий аналитик, системный аналитик, ведущий технический писатель, технический писатель;
- анализ и внедрением DocOps (VS Code, AsciiDoctor, Antora).
Работая в данной компании, я прошёл сертификацию в международной организации IPMA по проектному управлению.
Сертификат IPMA
Предыдущий опыт работы
С 2016 по 2019 в качестве Lead system analyst (ведущего системного аналитика) в Научно-производственном центре «БизнесАвтоматика» участвовал в более 20 проектах (АПК "Безопасный город", Платформа "МСП", АИС "Артек Путёвка", АС "Генсхема РФ", ИАС "Реестр услуг связи" и т.д.).
Список выполненных работ:
- подготовка и проведение рабочих встреч с заказчиком, анализ и детализация требований, разработка частных технических заданий, проектирование бизнес-процессов;
- проектирование БП в нотациях BPMN, EPC, IDEF, ГСА;
- проектирование и оптимизация моделей данных системы (UML, DDD);
- разработка скриптов в Postman для тестирования интеграционной шины;
- выполнение роли аналитика по интеграции: анализ требований и постановка задач на реализацию механизмов взаимодействия с сервером видео анализа, системой 112, системой стрелец-мониторинг, системой РУПОР, датчиками паводка, метеостанциями, сервером IP-телефонии и т.д. – протоколы интеграции всех уровней от прикладных, до сетевых и канальных;
- разработка моделей прогнозирования;
- постановка и контроль задач по разработке аппаратных и программных комплексов;
- разработка полного комплекта документации в соответствии с ГОСТ 19 и 34 (ТЗ, ЧТЗ, ПЗ, ПМИ, отчёты НИР и т.д.).
Ранее я работал в ФГБОУ ВО «Вятский государственный университет» Head of Programming Laboratory (Руководитель лаборатории по программированию) и старшим преподавателем.
Основной стек C/C++, CUDA, OpenCL, Assembler, OpenMP, CUDA-gdb, nvprof, Visual Profiler, memcheck, racecheck, initcheck, hg.
Провёл более 6 тысяч часов занятий по дисциплинам, связанным с программированием и разработкой вычислительных устройств (параллельное программирование, разработка баз данных, логическое программирование, проектирование ЭВМ, Вычислительные системы и комплексы, моделирование, системы искусственного интеллекта.
Написал 15 научных работ, получил три свидетельства о государственной регистрации программы для ЭВМ и один патент на изобретение.
Свидетельства и патенты
Книги
Роберт Мартин «Чистая архитектура. Искусство разработки программного обеспечения». Использую описанные в ней шаблоны для проектирования информационных систем, а также для проектирования документов и организационных процессов отдела аналитики. Рекомендую книгу для обязательного прочтения всем ведущим специалистам, проектирующим программное обеспечение или большие пакеты документации.
Ю.В. Кагарлицкий "Разработка документации" - при качественном проектировании аппаратных и программных систем необходимо писать большие объёмы проектной документации. Продумывание структуры, семантики, единой терминологии документации - это один из самых важных процессов, если мы хотим, передать её другим членам команды, для разработки и сопровождения. Поэтому очень рекомендую прочитать эту книгу любому техническому писателю и аналитику уровня сеньор, в обязанности которого входит организация и методологическая поддержка работы группы сотрудников.
Э. С. Таненбаум "Компьютерные сети". Книга описывает базовые основы работы проводных и беспроводных сетей (wi-fi, мобильные сети, bluetooth). Затрагивает протоколы и форматы передачи данных всех уровней моделей OSI, TCP/IP, а также вопросы информационной безопасности (электронная подпись, шифрование и т.д.). Не представляю, как можно проектировать и разрабатывать распределенные клиент-серверные приложения без знаний, приведенных в этой книге. Рекомендую книгу для обязательного прочтения всем it-специалистам от уровня джуниор и выше.
Роберт Мартин "Чистый код: создание, анализ и рефакторинг." Книга очень полезна начинающим аналитикам для правильного проектирования доменных моделей и UML диаграмм классов, состояний, последовательности, которые потом будут переданы разработчикам для реализации. Рекомендую книгу для обязательного прочтения всем аналитикам уровня джуниор и выше.
Эрик Эванс “Предметно-ориентированное проектирование (DDD).” Книга описывает один из наиболее эффективных методов концептуального проектирования программных продуктов. Книга показывает, насколько это творческий процесс - формализация и моделирование предметной области. Включает примеры, смешивающие различные нотации, переплетающие их с языками программирования и SQL. Базовые принципы DDD из книги понять очень легко. Но перенять через книгу опыт автора, который постоянно даёт ему озарения и позволяет находить эффективные решения - не получится. Поэтому прочтение вызывает противоречивые ощущения: кажется, я понял основы DDD, но хватит ли моего опыта и интуиции для принятия таких же эффективных решений? Рекомендую к прочтению аналитикам любого уровня, для общего понимания, что такое доменное проектирование, сущность, агрегат и т.д.
Буч Г., Рамбо Д., Якобсон И. "Введение в UML от создателей языка. 2-е изд.". Книга максимально понятно описывает назначение языка UML, основные принципы его использования при проектировании программного и аппаратного обеспечения. Иногда автор так хорошо подбирает примеры, что для меня меркнут статьи на Хабре, которые я считал эталонами наглядности принципов ООП и SOLID. Рекомендую её для прочтения всем системным аналитикам.
Клеппман М. "Высоконагруженные приложения. Программирование, масштабирование, поддержка". Книга является систематизированным сборником статей по проектированию распределенных приложений. Начинает повествование о текстовых файлах и базах данных. Описывает проблемы, которые возникают, когда их размер увеличивается и не умещается физически на одной машине. Постепенно приводятся примеры механизмов, с помощью которых можно решить эти проблемы. Кроме того, постоянно указываются программные продукты, где обсуждаемые механизмы реализованы (RabbitMQ, ActiveMQ, HornetQ, Apache Kafka, Hadoop, Apache Hive, Spark SQL и т.д.). Рекомендую её для прочтения всем ведущим системным аналитикам.
Хоп Г., Вульф Б. "Шаблоны интеграции корпоративных приложений Проектирование, создание и развертывание решений, основанных на обмене сообщениями". Книга описывает часто применяемые стили интеграции приложений: обмен сообщениями (REST, SOAP), интеграция через СУБД, обмен файлами. Также описываются очереди сообщений, структура сообщения, маршрутизация и т.д. При реализации сложных распределенных систем приходится использовать все описанные в книге стили. Поэтому рекомендую её для прочтения всем системным аналитикам.
Шилдт Г. "Полный справочник по C" Очень часто, когда выходит новая аппаратная платформа, первый язык, который она поддерживает (кроме Assembler) - это C. Поэтому с данным языком приходилось неоднократно сталкиваться при изучении новых вычислительных устройств. Язык C максимально близок к машинному, но при этом имеет высокоуровневые конструкции, встречающиеся в языках C++, JAVA, C#, PHP. Постоянно обращаюсь к данной книге, перечитывал полностью 3-4 раза. Рекомендую к прочтению и изучению языка всем it-специалистам. Небольшой объём справочника позволит при обучении держать большую часть синтаксиса в голове и при необходимости за день его повторять. Язык универсальный, позволяет решать любые задачи, в том числе работать с СУБД, реализовывать обмен клиента и сервера по протоколам HTTP/HTTPS, обрабатывать XML и т.д.
Шилдт Г. "C# полное руководство". Си подобный язык высокого уровня, на котором я написал диплом, и на котором пишут приложения программисты в компании, где я сейчас работаю. Книга больше 1000 страниц, но читается легко. Два или три раза перечитывал, впечатления очень положительные. В нашей компании большая часть микросервисов разработана на данном языке, поэтому я с большим приоритетом рекомендую ознакомиться с его синтаксическими особенностями нашим аналитикам. Но рекомендовать изучать его всем подряд смысла не вижу, особенно, когда есть языки, не уступающие ему в гибкости и возможности быстрой разработки.
Бьюли А. "Изучаем SQL". Хорошая книга для изучения основ языка SQL. Также рекомендую её для прочтения всем аналитикам.
Илон Голдштейн "Скрам без ошибок". Автор книги приводит примеры рабочих и домашних дел, в которые он интегрировал SCRUM. Книга хорошо раскрывает принципы SCRUM и позволяет взять из неё рабочие идеи по оптимизации командной работы, но только, если все члены команды заинтересованы качественно выполнить работу с минимальными затратами ресурсов. Если критерий качества не стоит на первом месте, то SCRUM поможет увеличить объём некорректных выполненных задач и временные затраты на их обсуждение.
Э. С. Таненбаум "Архитектура компьютера." Периодически обсуждаем микросервисную архитектуру, очередь сообщений и КЭШ. Иногда меня спрашивают понимаю ли я, что это такое? И я с лёгкой грустью вспоминаю архитектуру процессора, и почему она называется МИКРОархитектурой. О том, что в ней есть и трёхуровневый частично-ассоциативный КЭШ данных/команд, полностью ассоциативный КЭШ трансляции адресов, очередь команд, суперскалярная архитектура с 30 стадийным "пайплайном" обработки. Обработчики каждой стадии "пайплайна" работают параллельно. Между медленными и быстрыми обработчиками расположены буферы (очереди), чтобы сгладить производительность. Медленные обработчики промасштабированы - их несколько инстанций, чтобы успевать обрабатывать данные от быстрых обработчиков. Применяется оркестрация обработчиков. Управление происходит через API, формат которого представляет управляющий заголовок и данные. И вся эта картина всплывает перед глазами начиная с абстрактных уровней и заканчивая физическим. И хочется сказать - "да, тема очень близкая и знакомая ..." . И именно поэтому книги по архитектуре процессоров очень люблю читать, ведь в них расписаны все основные архитектурные принципы проектирования высокопроизводительных систем обработки информации. Но из-за объёма документации и того, что сам читаю всегда разделы только выборочно, рекомендовать её к прочтению всем не могу.
Несколько раз в год с целью повторения и актуализации знаний по микроархитектуре процессоров Intel и AMD изучаю следующие официальные руководства:
- Intel 64 and IA-32 Architectures Optimization Reference Manual - содержит описание архитектуры, структурные и функциональные схемы актуальных семейств процессоров Intel и рекомендации по оптимизации приложений под эти архитектуры;
- Intel 64 and IA-32 Architectures Software Developer’s Manual - содержит описание формата команд общего назначения/системных/SSE/AVX/VNNI (в том числе алгоритмов выполнения каждой команды), а также описание работы всех функциональных блоков процессоров Intel (КЭШа, очереди команд, РОНов, декодеров, АЛУ, системы адресации, прерываний и т.д.);
- AMD64 Architecture Programmers Manual - содержит описание формата команд общего назначения/системных/SSE/AVX/VNNI (в том числе алгоритмов выполнения каждой команды), а также описание работы всех функциональных блоков процессоров Intel (КЭШа, очереди команд, РОНов, декодеров, АЛУ, системы адресации, прерываний и т.д.);
- Software Optimization Guide for the AMD - содержит описание архитектуры, структурные и функциональные схемы актуальных семейств процессоров AMD и рекомендации по оптимизации приложений под эти архитектуры.
Несколько раз в год с целью повторения и актуализации знаний по архитектуре и программной модели GPU NVIDIA и AMD, изучаю следующие руководства:
- CUDA C++ Programming Guide - содержит описание аппаратной и программной архитектуры, перечень характеристик и примеры кода (в том числе с оптимизацией) для актуальных семейств GPU NVIDIA;
- CUDA C++ Best Practices Guide - содержит описание примеров отладки, измерения производительности, оптимизации по доступу к памяти для приложений, написанных на C++ CUDA;
- Parallel Thread Execution ISA - содержит описание низкоуровневой виртуальной машины и системы команд, в которые компилируются вычислительные приложения для GPU;
- AMD RDNA/Vega/GCN Instruction Set Architecture содержит описание формата команд, а также описание работы функциональных блоков актуальных семейств GPU AMD.