Об авторе

Я программирую с 1989 года на языках Pascal (Borland Delphi), Clipper 5.0, DBase IV, FOXPro, Fortran и другие. На платформе C#.NET с самого начала ее появления — с 2001 года.

Что я умею

За последние несколько лет я работал как "Старший разработчик", "Ведущий разработчик", "Руководитель команды разработки", "Системный аналитик", "Технический ведущий разработчик", "Архитектор программного обеспечения", "Архитектор микросервисов", "Системный аналитик". Работа на этих должностях позволила развить способности, о которых далее и подробнее.

√ Писать правильный код C# (backend)

Правильный - это значит "читаемый", управляемый, масштабируемый код, который легко поддерживать и тестировать. Шаблоны проектирования Repository, Unit of Work, Factory, Builder, Facade, а также практики SOLID, DRY, YAGNI, KISS при правильных подходах Clean Architecture, Vertical Slice Architecture, Domain Driven Design позволили реализовывать быстро и качественно требования бизнеса.

√ Делать разметку (frontend)

Есть опыт реализации приложений SPA использования ReactJS, Angular, Aurelia, KnockoutJS и jQuery, в том числе с использованием Redux. А после появления возможности создавать UI на C# использовал Blazor, MAUI

√ Логировать действия программы

Логирование подразделяется на несколько уровней пользователей их читающих, а также важно подразделять уровни Develop и Production. Сбор информации о работе программы (микросервисов) я обычно использовал ELK, хотя бывали и Seq, и Jaeger, и Loki.

√ Генерировать и собирать метрики

Для бизнеса очень важно понимать как работает "бизнес". Метрические данные (OpenTelemetry) о течении бизнес-процессов являются основой для этого понимания. Я умею собирать данные при помощи Prometheus и визуализировать их при помощи Grafana. Это основные инструменты, которые я использовал обычно, хотя были и другие, например, Zabbix.

√ Писать Unit-тесты

Написание самих тестов теперь простая задача, если говорить в контексте ИИ - это "хорошие" тесты. А "правильные" тесты - это когда точно знаешь, где и что сломалось. Я использовал обычно xUnit с подходом разработки TDD, BDD.

√ Тестировать API и UI

Для тестирования и анализа REST/SOAP API) я обычно использую Swagger, Scalar, Postman, REST Client или Insomnia. У каждого из них есть свои "плюсы" и "минусы" по управлению/просмотру/анализу JSON и XML.

√ Управлять командой разработки

Обычно в команде разработки были backend-разработчики в количестве от одного до пяти, frontend-разработчики в количестве от одно до четырех, тестировщики - один два человека. Обучение, менторство, парное программирование - хорошие инструменты. Плюс к этому умение создавать презентации и обучающие видео ролики - отличный способ достичь взаимопонимания. Методологий по управлению командами и процессами разработки много, например, Agile, Kanban, Scrum. И у каждой есть свои "плюсы" и "минусы". Я для себя нашел самую эффективную методологию - LEAN, ее и пропагандирую.

√ Проводить исследования R&D

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

√ Проектировать архитектуру приложения

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

√ Проектировать микросервисы

Так получилось, что я реализовал несколько проектов с микросервисной архитектурой. Реализации были на платформе ASP.NET Core с использованием RabbitMQ очереди с надстройкой MassTransit или Rebus. В основу брал Event-driven architecture, которая считается более гибкой, но при этом может быть более сложной при большом количестве событий в системе.

√ Интегрировать ИИ

Есть опыт создания MCP-серверов для интеграции с ИИ. MCP - это открытый протокол Model Context Protocol, разработанный компанией Anthropic. Он позволяет языковым моделям (LLM) безопасно подключаться к внешним базам данных, файлам и API без необходимости создавать отдельные интеграции для каждого сервиса. Довелось встраивать контекст (базы данных) микросервисов (сервисов/модулей) в чат для ИИ.

√ Пилить "монолит" на модули

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

√ Проводить нагрузочное тестирование

Использовал K6 библиотеку, которая может так нагрузить сервер, что будет сразу понятно, на сколько RPS он готов к обслуживанию.

√ Оценивать производительность

Для тестирования на производительность код (методы, функции, версии платформы NET, использование памяти, использования процессора, а также другие аспекты качественного кода) я использовал BenchmarkForNet библиотеку. Использовал, чтобы оценить, какая конструкция языка эффективнее работает, какую библиотеку использовать, какой способ реализации.

√ Создавать фреймворки

Фреймворки, как базовый код, как основа разработки позволяет дисциплинировать разработчиков и привести их код к некому стандарту, который проще поддерживать и обслуживать. Правильный фреймворк может существенно ускорить процесс реализации требований и прикладных задач. У меня есть опыт создания фреймворков на ASP.NET Core, WPF, WinForms, Silverlight

√ Создавать библиотеки (nuget-пакеты)

Сборки или nuget-пакеты отлично ложатся в основу модульной разработки, универсализации фреймворк может существенно ускорить процесс реализации требований и прикладных задач. У меня есть опыт создания фреймворков на ASP.NET Core, WPF, WinForms, Silverlight

√ Строить диаграммы

Есть опыт создания UML-диаграмм разных типов: Class Diagram, Sequence Diagram, Entity Relationship Diagram, Flowchart, State diagram, Gantt diagram, Mindmaps, Event Modeling Diagram, Radar, GitGraph Diagrams, Requirement Diagram, С4 и другие

.

√ Собирать требования и формировать документацию

Документация разного типа - требует разные навыки. От "рисования" диаграмм разного типа, до понимания спецификаций, регламентов и правил оформления документов: Use Cases, User Flow, ТЗ, ФТ, НФТ, ADR и другие. Использовал обычно Confluence, но были и другие системы типы Notion, Jira, OneNote.

√ Моделирование процессов

Есть опыт c BPMN для моделирования бизнес-процессов (BPM) на базе ELMA, которая является BPMS.

√ Проводить собеседования

У меня подготовлен набор вопросов, которые разбиты на категории, а также разложены по уровням сложности. Более того, я написал программу на WPF, которая может формировать отчет по результатам собеседования.

√ Создавать презентации

Создать и провести презентацию - нет проблем. Опыт ведения своего канал на YouTube и Boosty способствует совершенствованию в этом деле.

√ Создавать видео

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

√ Работать с Docker

В процессе настройки инфраструктуры для работы микросервисов пришлось наладить запуск её через docker compose на компьютере разработчика, чтобы отладка и разработка микросервисов не требовала наличия внешних сервисов и архитектуры. В инфраструктурные сервисы попали PostgreSQL, Redis, Prometheus, Kibana, Elasticsearch, OpenTelemetry и другие.

√ Настроить CI/CD

Есть опыт настройки CI/CD для своего блога, который работает на ubuntu и nginx. А публикуется после успешной сборки на Github Actions. Также есть который опыт настройки, хотя наверное честнее сказать, правки настроек и управления ими на Gitlab.

√ Настроить linux-хостинг (ubuntu)

Мой блог работает на платформе ASP.NET Core на системе ubuntu и публикуется через CI/CD на базе GitHub Actions. Другими словами, у меня есть некоторые представления об Ubuntu и nginx.

√ Работать в команде

Опыт работы по методологии Waterfall, в Agile-командах (Scrum/Kanban) в разных ролях от middle-разработчика, до Team Lead. Работать довелось в командах разного размера и должностного состава.

Мои курсы

Я умею быть наставником, читать лекции и готовить материалы для обучения. Вот, например, курсы подготовленные мной:

Мой GitHub

Мой профиль на GitHub насчитывает более 80, в которых представлены как OpenSource проекты: nuget-пакеты, библиотеки, сборки-фреймворки. Более 230 подписчиков доверяют моему представлению о правилах кодирования на C#.

Мои сборки и пакеты

Я создал более 80 публичных nuget-пакетов на nuget.org, количество скачиваний которых более чем 1 700 000 раз. Также я какое-то время занимался frontend-разработкой, поэтому мои пакеты есть и на npmjs.org.

Мой Youtube

Я веду в свой канал на Youtube, где веду своё канал. Тематика канала " Программировании на платформе .NET и не только...". Темы для видео: Принципы. Правила. Тенденции развития. Советы разработчикам. Обмен мнениями. Интересные ссылки. Советы по реализации. Обучение программированию. Тема рефакторинга и многое другое.

Дзен

Также я веду свой канал на Дзен. Тематика канала та же "Программировании на платформе .NET и не только...". Темы для видео: Принципы. Правила. Тенденции развития. Советы разработчикам. Обмен мнениями. Интересные ссылки. Советы по реализации. Обучение программированию. Тема рефакторинга и многое другое.

Мой Boosty

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

Обратная связь

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

Навыки и опыт

  • Технологии и практики, библиотеки и платформы: ASP.NET, ASP.NET core, ASP.NET Pages, MVC, HTML5, SignalR, WebSocket, JavaScript, ES6, jQuery, knockoutjs, MVVM, PRISM, Silverlight, TDD, BDD, DDD, Unit Testing, Visual Studio C#, Visual Studio Code, WCF, Web API, Owin, WPF, Веб-программирование, ООП, паттерны и шаблоны проектирования, принципы построения БД, Управление проектами, Git, GitFlow, Ext JS, LINQ, .NET Framework (2.0-4.8), .NET Core 1.1 - 3.1, .NET 5, .NET 6, .NET 7, .NET 8, .NET 9, .NET 10, Windows Phone, MS SQL Server, SOLID principles, YAGNI, KISS, DRY, PostgreSQL, MongoDb, Clean Architecture, Microservice Architecture, Vertical Slice Architecture, Cloud Design Patterns
  • Программное обеспечение:
    • Программирование для платформы .NET: Программирование для Web (ASP.NET, Silverlight, javascript, jquery, AJAX, Knockout), Windows (WinForm, WPF), КПК (WIndows Mobile), Windows phone 7.1-8, Windows 8 Store, MAUI (Blazor, RazorComponents).
    • Web-сервисов: ASMX, WCF, LINQ, Silverlight, MVC, MVVM, паттерны проектирования, ServiceLocator, Unity, Prism, IoC, Dependency Injection, MVC, MVVM, MVP, HTML 5.0, CSS, JavaScript, Knockoutjs.
    • Базы данных: Microsoft SQL Server 2000, Microsoft SQL Server 2005 Express Edition. Microsoft SQL Server 2005, 2008, 2012, 2014, 2016, Pervasive 2000 Server, Oracle 8.1 – 9.2, PostgreSQL, MongoDb, Clickhouse.
  • Платформы .NET: WinForms, WPF, Windows Store, Windows Phone 7-8.1, WCF, Silverlight, Blazor, MAUI, RaspberryPI
  • Шаблоны проектирования (patterns): MVC, MVVM, Unit Of Work, Repository, Mediator, Factory, Builder, UnitOfWork, YAGNI, DRY, KISS, Abstract Method, Inverse of Control и другие.
  • ORM: EntityFramework, EntityFrameworkCore, LinqToSQL, Dapper, LLBLGen
  • Библиотеки: AutoMapper, SignalR, ASP.NET Identity, OWIN, Mediatr, MassTransit, Rebus, FluentValidation и другие
  • Фреймворки разметки HTML: Bootstrap, Metro UI CSS, Simantic UI
  • Фреймворки javascript: KnockoutJS, UnderscoreJS, BreezeJS, DurandalJS, jQuery, MomentJS, AmplifyJS, ReactJs, VueJS, Aurelia.io, ReactJS, Angular
  • Фреймворки unit-тестирования: xUnit, NUnit, Autofixture, Moq и другие.
  • Фреймворки авторизации: IdentityServer4, OpenIddict, Keycloak
  • Фреймворки построения диаграмм: MermaidJs
  • Системы контроля версий: Source Save 2005, Team Foundation Server (TFS), GIT (GitHub, Bitbucket, GitLab, GitFlic, GitVerse)
  • DI-контейнеры: Autofac, UnityContainer, Funq, StructureMap, PRISM, ASP.NET Core Container, SimpleInjector, SimpleIoc, DryIoc


Пишите правильный код!

Что-то пошло не по сценарию и завершилось ошибкой. Перезагрузить страницу (F5) 🗙

Rejoining the server...

Rejoin failed... trying again in seconds.

Failed to rejoin.
Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session.
Please reload the page.