Подробно об авторе

Аннотация

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

Я люблю и профессионально занимаюсь проектированием и разработкой информационных систем:

  • участвую в создании it-команд, провожу грейдирование и технические интервью системных аналитиков и технических писателей;
  • проектирую и оптимизирую процессы отдела аналитики и технических писателей;
  • формализую и моделирую предметные области в нотациях BPMN, UML, DDD, IDEF и т.д.;
  • проектирую модели данных (ER, UML, DDD);
  • занимаюсь высокоуровневым и низкоуровневым программированием (C, C++, CUDA, C#);
  • изучаю вычислительное и сетевое оборудование;
  • проектирую API и изучаю протоколы информационного обмена, начиная с канального уровня и выше (REST, SOAP, HTTP, TCP и т.д.);
  • разрабатываю и делаю экспертную оценку огромного количества программной документации;
  • много читаю и считаю, что книга - лучший подарок.

Чтобы постоянно развиваться, стараюсь подходить творчески даже к самым скучным задачам. Если возникает задача генерации информации в Excel, то я беру не VB, а стек C++, OpenMP, CUDA, Google test, Git и делаю встроенную в Excel функцию, которая запускается на всех ядрах CPU с помощью OpenMP и переносит вычисления через CUDA API на GPU. Таким образом Excel превращается в клиент для массивно-параллельной вычислительной системы. Такой подход хорошо развивает навыки системного анализа и разработки гетерогенных (разнородных) приложений.

 

Образование

Окончил ВятГУ (вятский политех) по специальности «Вычислительные машины, комплексы системы и сети».

Основными девизами преподавателей, которые меня учили были: "Мы научим вас учить новые технологии" и "Мы заточим вам зубки, чтобы после окончания ВУЗа вы могли грызть гранит любой науки". Поэтому каждый семестр нам давали очень интересные задачи, например:

  • спроектировать систему команд, функциональную и принципиальную схему CPU и FPU (сделать всё по ГОСТ, на бумаге без применения ПК и САПР);
  • изучить 2-3 новых языка программирования и написать на них приложения (иногда требовали сходить по реальным предприятиям и найти для автоматизации не учебные задачи, а реальные производственные, требующие автоматизации);
  • разработать принципиальную схему и спаять оперативную память;
  • выбрать, обосновать элементную базу и разработать сигнатурный анализатор;
  • и т.д.

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

В ВУЗе меня научили:

  • как работает транзистор;
  • как из транзисторов сделать логику (И, ИЛИ, НЕ) и статическую память (триггеры, счётчики, регистры);
  • как из логики и статической памяти сделать целочисленные АЛУ, сопроцессоры с плавающей точкой, УУ, контроллеры прерываний, арбитры шины, РОНы, КЭШи, очереди и другие микропроцессорные секции;
  • как из микропроцессорных секций сделать универсальные CPU + FPU, написать к ним прошивки (микрокод);
  • как разработать ISA и написать свой ассемблер;
  • как программировать на Си, С++, C#, Pascal, Prolog, Lisp, SQL.

В качестве диплома я написал экспертную систему на C# для предприятия военно-промышленного комплекса, которая прогнозировала обстановку, распараллеливая вычисления на всех ядрах CPU.

Также прошёл сертификацию и обучение:

  • в компании NVIDIA по программированию и архитектуре GPU;
  • в международной организации IPMA по проектному управлению.

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

Сертификация в компании NVIDIA была очень сложной, т.к. никто не проверял, насколько хорошо я знаю архитектуру GPU и синтаксис С++ CUDA. Сразу выдавали комплекс задач:

  • смоделировать полёт заряженных частиц в магнитном поле;
  • сделать реализацию, использующую скалярные CUDA ядра методом Рунге-Кутты;
  • сделать реализацию через текстурные блоки (интерполяцией 3D пространства);
  • для визуализации результата использовать Matlab.

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

Сертификаты
CUDA_sert
CUDA_sert

 

Опыт работы

Сейчас я работаю в Научно-производственном центре «БизнесАвтоматика» в должности начальника отдела аналитики. Участвую в полном цикле разработки программного обеспечения на стеке C# NET.Core, PostgreSQL, Nginx, Redis, RabbitMQ, ElasticSearch;

В моём подчинении 4 распределенных офиса, 30 системных аналитиков, 5 технических писателей.

Ежедневно я работаю по следующим направлениям:

  • разрабатываю и оптимизирую организационные процессы отдела аналитики;
  • анализирую, декомпозирую и контролирую выполнение задач по всем стадиям жизненного цикла разработки информационных систем;
  • готовлю конкурсную документацию;
  • пишу технические задания;
  • анализирую, декомпозирую требования и формализую их в нотациях BPMN, EPC, UML, DDD, IDEF, ГСА;
  • провожу предпроектные обследования;
  • проектирую, обосновываю, прототипирую технические решения;
  • делаю ревью задач других аналитиков, а также сам ставлю задачи разработчикам (разрабатываю алгоритмы, пишу эпики, пользовательские истории, задачи для дизайнеров, back и front-end разработчиков);
  • ставлю задачи системным администраторам и DevOps-инженерам;
  • изучаю и проектирую решения по интеграции информационных систем (анализирую протоколы, форматы, проектирую правила маппинга, разрабатываю регламенты информационного взаимодействия для обмена файлами/через общую СУБД/REST API, разрабатываю контракты OpenAPI);
  • разрабатываю полный комплект документации по проекту (частные технические задания, отчеты об обследовании, пояснительные записки эскизного и технического проектов, схемы деления, руководства администратора, пользователя, системного программиста, программы и методики испытаний, регламенты информационного взаимодействия и т.д.) по комплексам ГОСТ 2, 19, 34, 7;
  • участвую в приёмке и испытании информационных систем;
  • обучаю аналитиков и технических писателей:
    • проектированию информационных систем в нотациях UML, DDD, BPMN, IDEF;
    • принципам SOLID и ACID;
    • принципам ООП, программированию на С/С++/С#/CUDA/OpenGL/OpenCL (в том числе git, hg, gdb), шаблонам фабрика, фасад, репозиторий, сущность, агрегат и т.д.;
    • микроархитектуре и типам данных, обрабатываемых процессором (в том числе стандарту IEEE-754), системе адресации процессора, обработке прерываний, работе КЭШ памяти (FIFO, LRU и т.д.) и т.д.;
    • пониманию сетевой модели TCP/IP, принципам работы сетевого оборудования L1, L2, L3, виртуализации, разворачиванию сервисов;
    • форматам и протоколам взаимодействия (прикладного уровня REST, SOAP), сетевого уровня, канального (через обмен сообщениями, через общую БД и через обмен файлами);
    • написанию SQL запросов: выбор данных из множества таблиц с соединением (JOIN INNER, LEFT, RIGHT, CROSS JOIN) группировкой (GROUP BY), агрегатными функциями (COUNT, SUM, AVG, MIN, MAX), вложенными запросами, общими табличными выражениями (WITH CTE) и оконными функциями (LAG, LEAD, RANK, DENSE_RANK, ROW_NUMBER, OVER BY) и т.д.;
    • написанию встроенных в Excel/Word функций на С++, OpenMP и CUDA;
  • участвую в организации взаимодействия со смежными подразделениями (отделом по машинному обучению - ML и DS), отделом разработки, отделом администрирования, защиты информации, отделом DevOps-инженеров, юридическим отделом);
  • разрабатываю API для интеграции между сервисами и внешними системами (REST, SOAP, через общую БД, обмен файлами и т.д.);
  • проектирую прототипы интерфейсов и функционала в средах автоматизированного проектирования или IDE, с передачей на реализацию в отдел разработки;
  • взаимодействую с архитекторами, конструкторами, разработчиками программного обеспечения, администраторами, специалистами по защите информации, а также специалистами предметных областей заказчика в процессе формирования ключевых архитектурных решений реализации информационных систем;
  • организую и провожу планирование, груминг, анализ ретроспективы спринтов;
  • составляю планы и организую мероприятия по мотивации и развитию навыков коллективной работы специалистов аналитического отдела;
  • курирую ведение базы знаний специалистов аналитического отдела;
  • разрабатываю систему грейдирования специалистов аналитического отдела;
  • провожу технические интервью на должности: ведущий аналитик, системный аналитик, ведущий технический писатель, технический писатель;
  • оптимизирую бизнес-процессы подразделения.

 

Предыдущий опыт работы

Ранее я работал в ФГБОУ ВО «Вятский государственный университет». Закончив обучение в компании NVIDIA, работал в качестве руководителя лаборатории по программированию и обучению массивно-параллельным вычислительным системам на С/С++ CUDA, созданной NVIDIA в ФГБОУ ВО «Вятский государственный университет». Разработал учебный план и преподавал свою дисциплину "Программирование на GPU". Консультировал по переносу кода с CPU на GPU частные компании. Работал и вёл исследования по следующим направлениям:

  • применение API для доступа к функциональным блокам графических ускорителей: CUDA, OpenCL, OpenGL;
  • ускорение приложений с помощью оптимизации доступа к памяти с блокировкой страниц, глобальной памяти, разделяемой памяти, константной памяти, текстурной памяти, отображаемой памяти, унифицированной памяти (автоматического перекрытия вычислений и передачи данных через PCI-E);
  • разработка физических моделей на C/С++ CUDA (применение как программных, так и аппаратных моделей, а также интерфейсов доступа к специализированным функциональным блокам);
  • разработка экспертных систем на C/С++ CUDA, OpenMP (проектирование архитектуры для максимальной утилизации вычислительных ресурсов: при небольших нагрузках распараллеливание на уровне функциональных блоков одного ядра CPU, при средних нагрузках распараллеливание на нескольких ядрах, при обработке больших массивов данных распараллеливание между несколькими ядрами CPU и GPU);
  • реализация программной конвейеризация с помощью запуска на GPU нескольких процессов (Stream потоков + Thread потоков);
  • ускорение моделей MATLAB на GPU с помощью C/С++ CUDA;
  • проектирование многоуровневых API/фасадов (разработка структуры сообщения: полей, отвечающих за тип выполняемой операции, за тип и количество передаваемых в сообщении данных, за режимы доступа к данным, за предобработку данных сообщения, разработка декодера сообщений, ускорение обработки сообщения за счёт выравнивания в памяти, трансляция полученных сообщений в более низкоуровневые API);разработка учебных приложений на C/С++ CUDA (в средах Linux, Windows);
  • разработка учебных приложений на OpenCL;
  • разработка учебных приложений на OpenGL;
  • разработка лекционных и тестовых заданий для проверки компетенций по программированию на C/С++ CUDA, OpenCL, OpenGL;
  • оптимизация приложений на CPU с помощью векторных команд SSE и AVX;
  • подготовка материалов по сравнению ISA NVIDIA, AMD и Intel.

Переводил учебники по программированию для компании NVIDIA. Разворачивал среду для разработки приложений на C/С++ CUDA и OpenCL (закупал персональные суперкомпьютеры и графические рабочие станции, устанавливал Ubuntu, CUDA Toolkit, настраивал ssh для удаленной разработки и отладки приложений и т.д.).

Основной стек технологий: Visual Studio (при работе в ОС Windows на локальных рабочих станциях), vim/gcc/nvcc/gdb (при работе на удалённых рабочих станциях под управлением ОС Ubuntu), Hg, C/C++, CUDA, OpenCL, Assembler, OpenMP, CUDA-gdb, nvprof, Visual Profiler, memcheck, racecheck, initcheck.

Также в ВятГУ провёл тысячи часов подготовки и очных занятий по дисциплинам, связанным с программированием и разработкой вычислительных устройств:

  • Параллельные вычисления на графических процессорах;
  • Параллельное программирование;
  • Компьютерная графика;
  • Разработка баз данных;
  • Логическое программирование (Lisp, Prolog);
  • Проектирование ЭВМ;
  • Вычислительные системы и комплексы;
  • Высокопроизводительные вычислительные комплексы;
  • Моделирование;
  • Вычислительная математика;
  • Системы искусственного интеллекта;
  • Распознавание образов и изображений;
  • Схемотехника;
  • Руководство дипломными проектами по разработке программного обеспечения (C/С++ CUDA);
  • Руководство курсовыми проектами по разработке CPU, ISA.

Написал 15 научных работ, получил три свидетельства о государственной регистрации программы для ЭВМ и один патент на изобретение.

Свидетельства и патенты
CUDA_sert
CUDA_sert
CUDA_sert

 

Также в ходе исследовательской работы на стеке: C/C++, OpenMP, CUDA (Visual Studio, Hg) + SSE/AVX разработал и реализовал:

  • Интеллектуальную систему логического прогнозирования развития ситуаций на основе абдуктивного вывода;
  • Гибридную программную систему логического вывода с определением фактов;
  • Метод параллельного дедуктивного вывода с определением фактов;
  • Метод параллельного абдуктивного логического вывода с определением фактов;
  • Метод параллельного дедуктивного логического вывода заключений в исчислении предикатов с определением фактов.

Участвовал в выполнении фундаментальных НИР:

  • «Интеллектуальная система логического прогнозирования развития ситуаций на основе параллельных дедуктивных и абдуктивных вычислений» (государственное задание Министерства образования науки, 2012-2013 гг.);
  • «Разработка адаптивной информационной системы интеллектуального мониторинга состояния и поведения объектов управления на основе параллельных дедуктивных и абдуктивных вычислений», № ПСР 2.4.1-1 (государственное задание Министерства образования науки 2012-2013 гг.);
  • «Логическое прогнозирование развития ситуаций на основе абдуктивного вывода (грант РФФИ, проект № 15-01-02818а, 2015-2016 гг.).

 

Дополнительно

Участвовал в качестве ведущего аналитика при реализации Аппаратно-программного комплекса «Безопасный город»:

  • проектировал интеграционную шину (UML, DDD);
  • проектировал и оптимизировал модели данных системы (UML, DDD);
  • разрабатывал скрипты в Postman для тестирования интеграционной шины;
  • проводил рабочие встречи с заказчиком, анализировал и детализировал требования, разрабатывал частные технические задания, пояснительные записки, проектировал бизнес-процессы;
  • выполнял роль аналитика по интеграции: анализировал требования и постановку задач на реализацию механизмов взаимодействия с сервером видео анализа, системой 112, системой стрелец-мониторинг, системой РУПОР, датчиками паводка, метеостанциями, сервером IP-телефонии и т.д. – протоколы интеграции всех уровней от прикладных, до сетевых и канальных;
  • разрабатывал модели прогнозирования аварий на химически опасных объектах;
  • выполнял постановку и контроль задач для разработчиков;
  • разрабатывал программы и методики испытаний (ПМИ) на аппаратно-программный комплекс;
  • сдавал и защищал проект перед заказчиком;
  • разрабатывал полный комплект документации в соответствии с ГОСТ 19 и 34.

Участвовал в качестве ведущего аналитика в реализации информационной системы «Реестр государственных программ Санкт-Петербурга»:

  • проводил рабочие встречи с заказчиком, анализировал и детализировал требования, разрабатывал частные технические задания, проектировал бизнес-процессы;
  • проектировал подсистему «Объекты регионального назначения» (UML, DDD, ГСА);
  • детализировал функциональные и нефункциональные требования на подсистему;
  • разрабатывал и апробировал математические модели прогнозирования потребности Санкт-Петербурга в объектах регионального назначения (школах, садиках, больницах, объектах физической культуры, пожарных депо, станциях метро и т.д.);
  • проектировал модель данных (UML);
  • разрабатывал расчётные алгоритмы (ГСА);
  • проектировал read-модели, отчетные формы;
  • проводил планирование, контроль, груминг спринтов;
  • ставил задачи для отдела разработки ПО на реализацию математической модели;
  • апробировал информационную систему совместно с Комитетом по экономической политике и стратегическому планированию Санкт-Петербурга;
  • демонстрировал функционал заказчику;
  • разрабатывал полный комплект документации в соответствии с ГОСТ 19 и 34.

Участвовал в качестве ведущего аналитика при выполнении научно-исследовательской работы по теме: «Разработка Концепции создания комплексной информационной системы ФГБОУ «МДЦ «АРТЕК».

  • разрабатывал приложения на языке С++ для генерации обучающей выборки апробации математической модели искусственной нейронной сети;
  • проектировал информационную систему (UML, DDD);
  • детализировал функциональные и нефункциональные требования;
  • разрабатывал и апробировал математическую модель формирования рейтинга на основе искусственных нейронных сетей и генетических алгоритмов;
  • ставил задачи для отдела разработки ПО на реализацию математической модели;
  • апробировал информационную систему совместно с правительством Кировской области;
  • определял класс защищенности информационной системы, разрабатывал модель угроз и аналитическую записку по обоснованию применения средств защиты информации;
  • разрабатывал полный комплект документации в соответствии с ГОСТ 19 и 34.

Участвовал в качестве ведущего аналитика при реализации контракта Министерства связи и массовых коммуникаций РФ по созданию информационно-аналитической системы «Реестр услуг связи»:

  • детализировал, распределял и контролировал работы по подготовке технической документации для участия в тендере;
  • общался с заказчиком, анализировал и детализировал требования;
  • проектировал и разрабатывал модели данных и модульную структуру информационно-аналитической системы (UML, DDD);
  • ставил задачи для отдела разработки;
  • выполнял настройку информационной системы (ролевой модели, мнемоник, пресетов и т.д.);
  • выполнял сайзинг системы (оценку оборудования, необходимого для реализации и эксплуатации информационно-аналитической системы с учётом масштабирования, технического обслуживания и резервного копирования);
  • разрабатывал полный комплект документации в соответствии с ГОСТ 19 и 34.

Участвовал в качестве ведущего аналитика при разработке «Государственной информационной системы обеспечения градостроительной деятельности Российской Федерации» Министерство строительства и жилищно-коммунального хозяйства Российской Федерации:

  • разрабатывал конкурсную документацию (ставил задачи аналитикам, дизайнерам и разработчикам на создание интерактивного макета, разрабатывал документ "предложения участника", разрабатывал документацию на макет);
  • разрабатывал пояснительную записку, в части разделов логической и физической структуры;
  • разрабатывал диаграммы классов, диаграммы активности и последовательности для описания пайплайна интеграции со СМЭВ (в текстовом виде и в PlantUML);
  • выполнял постановку задач на интеграцию со СМЭВ адаптером;
  • выполнял тестирование интеграции с помощью SoapIU, СМЭВ-адаптера, Putty, Sftp/ftp-client, ЕПГУ;
  • разрабатывал документацию по работе со СМЭВ адаптером;
  • проектировал, дорабатывал и настраивал бизнес-процессы интеграции и обработки заявлений с портала Госуслуги;
  • разрабатывал программу и методику испытаний, участвовал в приёмке, работал с экспертной комиссией.

Участвовал в качестве ведущего аналитика при выполнении составной части опытно-конструкторской работы «По созданию бортовой системы видео регистрации данных летательного аппарата вертолетного типа»:

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

Участвовал в качестве ведущего аналитика при выполнении составной части опытно-конструкторской работы «Интеллект-БА»:

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

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

  • выполнял все этапы НИР;
  • проводил рабочие встречи с заказчиком, анализировал и детализировал требования;
  • исследовал и анализировал текущее состояние ВАИ ВС РФ;
  • проектировал и обосновывал технические и программные решения;
  • разрабатывал научные отчеты по каждому этапу НИР;
  • рассчитывал стоимость создания опытного образца;
  • разработал техническое задание на выполнение опытно-конструкторской работы;
  • разработал пояснительную записку технического проекта ОКР;
  • разработал модель данных и регламентированных процессов.

Участвовал в роли системного аналитика в выполнении государственного контракта (совместно с РБС и Mail.ru Group) по созданию Цифровой платформы, ориентированной на поддержку производственной и сбытовой деятельности субъектов малого и среднего предпринимательства:

  • проводил рабочие встречи с заказчиком, анализировал и детализировал требования, разрабатывал частные технические задания;
  • проектировал модели данных (UML, DDD);
  • проектировал бизнес-процессы в нотации BPMN;
  • составлял план, распределял и контролировал работы по разработке концепции в соответствии с ГОСТ Р 56861-2016 «Система управления жизненным циклом. Разработка концепции изделия и технологий. Общие положения.»;
  • проектировал модели данных и ставил задачи для отдела разработки;
  • составлял план, распределял и контролировал работы по разработке комплекта отчётной документации (в соответствии с ГОСТ 34).

 

Участвовал в качестве системного аналитика в проектах:

  • разработка аппаратного комплекса автоматического мониторинга транспортных средств ФГБОУ «МДЦ «Артек»:
    • разработал структуру аппаратно-программного комплекса;
    • выполнил анализ и выбор оборудования (блока мониторинга транспорта, датчиков уровня топлива);
    • разработал сметную документацию;
    • определил класс защищенности информационной системы, разработал модель угроз и аналитическую записку по обоснованию применения средств защиты информации;
    • разработал комплект технической документации (в соответствии с ГОСТ 34);
  • модернизация сайта Федерального медико-биологического агентства России: 
    • спроектировал модель данных;
    • выполнил постановку задач для отдела разработки;
    • разработал модульную структуру системы;
    • определил класса защищенности информационной системы, разработал модель угроз и аналитическую записку по обоснованию применения средств защиты информации;
  • создание Платформы Управления Земельным Фондом для Агентства ипотечного жилищного кредитованию:
    • выполнил анализ, разработку и оптимизацию бизнес-процессов управления земельным фондом в нотации IDEF0, IDEF3, UML;
    • разработал комплект технической документации (в соответствии с ГОСТ 34);
  • создание комплексных АИС «Материально-технического снабжения», ГИС «Инвентаризация», АИС «Мониторинг мероприятий по безопасности дорожного движения» для нужд ГБУ МО «Мосавтодор»:
    • разработал и оптимизировал бизнес-процессы в нотации IDEF;
    • разработал модульную структуру информационной системы;
    • определил класс защищенности информационной системы, разработал модель угроз и аналитическую записку по обоснованию применения средств защиты информации;
    • разработал комплект технической документации (в соответствии с ГОСТ 34);
  • создание концепции Генеральной схемы развития сетей связи и инфраструктуры хранения и обработки данных Российской Федерации на период 2019-2024 годов:
    • проводил рабочие встречи с заказчиком, анализировал и детализировал требования, разрабатывал частные технические задания;
    • проектировал и разрабатывал модели данных;
    • ставил задачи на отдел разработки;
    • составлял план, распределял и контролировал работы по разработке концепции в соответствии с ГОСТ Р 56861-2016 «Система управления жизненным циклом. Разработка концепции изделия и технологий. Общие положения.»;
    • настраивал информационную систему (ролевую модель, мнемоники, пресеты и т.д.);
  • выполнение опытно-конструкторской работы по созданию комплекса программно-технических средств (КПТС) Интернет-портала Минобороны России:
    • проектировал модели данных;
    • ставил задачи для отдела разработки;
    • разработал модульную структуру;
    • разработал концепцию дизайна сайта;
    • рассчитал параметры производительности и резервного копирования;
  • выполнение опытно-конструкторской работы «Выпускник» в ВАГШ Вооруженных Сил РФ:
    • декомпозировал функциональные требования;
    • разрабатывал модульную структуру;
    • разрабатывал сценарии использования системы (UML диаграммы вариантов и активностей);
    • анализировал протоколы передачи видео и аудио данных;
    • разработал модель угроз, определил класс защищенности информационной системы;
  • создание аналитической информационной системы «Система мониторинга и анализа реализации мероприятий по цифровизации городского хозяйства Умный город»:
    • апробировал методику расчёта IQ рейтинга регионов.

 

Книги

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

Ю.В. Кагарлицкий "Разработка документации" - при качественном проектировании аппаратных и программных систем необходимо писать большие объёмы проектной документации. Продумывание структуры, семантики, единой терминологии документации - это один из самых важных процессов, если мы хотим, передать её другим членам команды, для разработки и сопровождения. Поэтому очень рекомендую прочитать эту книгу любому техническому писателю и аналитику уровня сеньор, в обязанности которого входит организация и методологическая поддержка работы группы сотрудников.

Э. С. Таненбаум "Компьютерные сети". Книга описывает базовые основы работы проводных и беспроводных сетей (wi-fi, мобильные сети, bluetooth). Затрагивает протоколы и форматы передачи данных всех уровней моделей OSI, TCP/IP, а также вопросы информационной безопасности (электронная подпись, шифрование и т.д.). Не представляю, как можно проектировать и разрабатывать распределенные клиент-серверные приложения без знаний, приведенных в этой книге. Рекомендую книгу для обязательного прочтения всем it-специалистам от уровня джуниор и выше.

Роберт Мартин "Чистый код: создание, анализ и рефакторинг." Книга очень полезна начинающим аналитикам для правильного проектирования доменных моделей и UML диаграмм классов, состояний, последовательности, которые потом будут переданы разработчикам для реализации. Рекомендую книгу для обязательного прочтения всем аналитикам уровня джуниор и выше.

Эрик Эванс “Предметно-ориентированное проектирование (DDD).” Книга описывает один из наиболее эффективных методов концептуального проектирования программных продуктов. Книга показывает, насколько это творческий процесс - формализация и моделирование предметной области. Включает примеры, смешивающие различные нотации, переплетающие их с языками программирования и SQL. Базовые принципы DDD из книги понять очень легко. Но перенять через книгу опыт автора, который постоянно даёт ему озарения и позволяет находить эффективные решения - не получится. Поэтому прочтение вызывает противоречивые ощущения: кажется, я понял основы DDD, но хватит ли моего опыта и интуиции для принятия таких же эффективных решений? Рекомендую к прочтению аналитикам любого уровня, для общего понимания, что такое доменное проектирование, сущность, агрегат и т.д.

Хоп Г., Вульф Б. "Шаблоны интеграции корпоративных приложений Проектирование, создание и развертывание решений, основанных на обмене сообщениями". Книга описывает часто применяемые стили интеграции приложений: обмен сообщениями (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.