Как стать автором
Обновить
90.93
Контур
Делаем сервисы для бизнеса
Сначала показывать

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

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров4.5K

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

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

Об этом и расскажу в статье с примерами коллег.

Читать далее
Всего голосов 10: ↑7 и ↓3+4
Комментарии0

Миграция API с Framework на .NET6 — скандалы, интриги, расследования и немного выводов

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров4.9K

Давным-давно, во времена, когда по Земле бродили цифровые динозавры, а разработчики .NET ещё помнили, зачем нужна технология WebForms (и какие у неё были проблемы с производительностью), в Контуре появился продукт под названием Фокус, предназначенный для проверки контрагентов. И у этого продукта довольно быстро появился API, ориентированный на крупных клиентов.

ASP.NET MVC был ещё в новинку, до появления WebAPI оставались годы, и отцы-основатели проекта приняли вполне актуальное, с учётом реалий того времени, решение: делать API на базе ashx-хендлеров, чтобы максимально повысить скорость работы.

Шли годы, .NET Framework сперва меняла версии как ветреная красавица перчатки, а потом и вовсе перешла в разряд «для поддержки жизнедеятельности требуется опытный некромант», .NET Core сперва появился, а потом благополучно переименовался в просто .NET, дорос до 6-й, а потом и 7-й версии… а API Фокуса всё ещё жил по старому, доброму принципу «работает — не трогай». И вот, наконец небосвод провернулся, и звёзды сошлись в нужной позиции. Мы поехали на .NET 6.

Оговорюсь сразу, что сам переезд произошёл примерно полгода назад, когда .NET 8 ещё находилась в стадии альфы. Именно поэтому в качестве целевой версии .NET была выбрана именно стабильная 6-я. Тем не менее большинство проблем будут актуальны и при миграции на 8-ю версию.

Читать далее
Всего голосов 25: ↑24 и ↓1+23
Комментарии14

Построение графа покрытия UI-тестами бизнес-логики на основе VisualFSM

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров1.8K

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

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

Читать далее
Всего голосов 5: ↑5 и ↓0+5
Комментарии0

Комната с опускающимся потолком

Уровень сложностиПростой
Время на прочтение11 мин
Количество просмотров4.3K

Приветствую. Меня зовут Устюжанин Игорь. Мне довелось поработать в разных ролях при разработке ИТ-продуктов - от инженера-программиста до руководителя продукта. Этот опыт я получил в компании СКБ Контур, куда пришел разработчиком аж в 1999 году, будучи студентом 4-го курса.

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

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

Читать далее
Всего голосов 14: ↑13 и ↓1+12
Комментарии2

ThreadPool.Workers

Время на прочтение13 мин
Количество просмотров5.5K

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

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

Читать далее
Всего голосов 13: ↑12 и ↓1+11
Комментарии4

Сказка про For vs Foreach

Уровень сложностиПростой
Время на прочтение10 мин
Количество просмотров24K


Ходят слухи, что foreach быстрее for. А ещё ходят слухи, что for быстрее foreach. Пора разобраться, что быстрее!

Читать далее
Всего голосов 50: ↑48 и ↓2+46
Комментарии21

ThreadPool.Chain

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров5.5K


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

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

Читать далее
Всего голосов 13: ↑11 и ↓2+9
Комментарии8

Сказка про Branch prediction

Время на прочтение9 мин
Количество просмотров9.5K

Конвейер трудится изо всех сил, чтобы повысить производительность твоей программы. А злобные «if»'ы нагло врываются посреди его работы и всё портят!

На сколько полезен конвейер в современных ЭВМ? Как сильно мешаются ветвления в коде, которые ты написал? И как архитекторы процессоров сглаживают ущерб, который «if»'ы наносят по производительности программ?

Читать далее
Всего голосов 42: ↑42 и ↓0+42
Комментарии23

Как внедрить SLO в продукт и получить от этого пользу

Время на прочтение14 мин
Количество просмотров3.5K

SLO — это практика, входящая в состав SRE-методологии, которая помогает найти баланс между скоростью развития сервиса и его надёжностью.

В статье хочу поделиться опытом внедрения SLO в наш продукт и рассказать, какие результаты это принесло. Или как мы применяем инженерный подход к решению менеджерской задачи

Читать далее
Всего голосов 8: ↑8 и ↓0+8
Комментарии1

Reciprocal throughput

Уровень сложностиПростой
Время на прочтение10 мин
Количество просмотров9.4K

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

Читать далее
Всего голосов 76: ↑75 и ↓1+74
Комментарии39

ThreadPool. async/await

Уровень сложностиПростой
Время на прочтение13 мин
Количество просмотров7.8K

А вы никогда не задумывались, что async и await выглядят как-то инородно среди прочего C# кода? Больше нигде не встречается такого странного синтаксиса и таких модификаторов, кроме как в методах, работающих с Task и Task<T>.

А ещё интересно, сколько вообще стоит пользоваться async/await? И когда можно (нужно?) обходиться без них?

Читать далее
Всего голосов 10: ↑9 и ↓1+8
Комментарии15

yield return

Время на прочтение7 мин
Количество просмотров9.9K

А вы никогда не задумывались, что yield return выглядит как-то инородно среди прочего C# кода? Больше нигде не встречается такого странного синтаксиса и такой инструкции, кроме как внутри методов, возвращающих перечисление.

А ещё интересно, сколько же на самом деле стоит перечислять элементы с помощью yield return? И можно ли лучше?

Читать далее
Всего голосов 27: ↑27 и ↓0+27
Комментарии9

Пародия на замыкания

Уровень сложностиПростой
Время на прочтение12 мин
Количество просмотров7.1K


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

Читать далее
Всего голосов 24: ↑22 и ↓2+20
Комментарии24

Несите трубы! Как мы строили пайплайн ML-эксперимента

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров2.5K

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

Читать далее
Всего голосов 2: ↑2 и ↓0+2
Комментарии5

ThreadPool.Intro

Время на прочтение6 мин
Количество просмотров5.9K

Тема тредпула, скажем так, complex and hard. У меня в жизни было два «осознания», когда я гордо говорил себе — вот теперь-то я точно понял, как устроен и как работает тредпул в дотнете! Впрочем, после второго раза я неоднократно осознавал, как же я ошибался.

Читать далее
Всего голосов 10: ↑10 и ↓0+10
Комментарии4

Пришло время пересмотреть структуру проектов на .NET

Уровень сложностиПростой
Время на прочтение11 мин
Количество просмотров16K

C релизом .net 6 у нас появился новый упрощенный подход для быстрого создания сервисов  Minimal APIs. Эта статья появилась потому, что с новым подходом появились новые вопросы, связанные с организацией кода внутри проекта.

Это — немного вольный перевод статьи "Maybe it's time to rethink our project structure with .NET 6" от Tim Deschryver про подход к созданию сервисов с помощью Minimal APIs, который может помочь нам сделать архитектуру приложения более чистой, простой и легкой в поддержке и развитии.

Читать далее
Всего голосов 16: ↑13 и ↓3+10
Комментарии24

Как Контур меняет стандарты обучения разработчиков и работает с ними

Уровень сложностиПростой
Время на прочтение12 мин
Количество просмотров2.8K

В Екатеринбурге есть Уральский Федеральный Университет (УрФУ), а в нем направление фундаментальной информатики и информационных технологий (ФИИТ), на котором готовят разработчиков. С 2019 года Контур совместно с IT-сообществом региона меняет, развивает и поддерживает это направление.

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

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

Читать далее
Всего голосов 11: ↑10 и ↓1+9
Комментарии5

Инструменты анализа эффективности работы приложения. PerfView

Время на прочтение15 мин
Количество просмотров12K

Иногда приходится разбираться, почему .NET приложение работает "плохо". Не так, как мы ожидали. Тупит, медленно работает, зависает, запросы «не исполняются», утекает память или потребляется слишком много CPU.

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

Читать далее
Всего голосов 23: ↑23 и ↓0+23
Комментарии5

Сказка про Method as Parameter

Время на прочтение9 мин
Количество просмотров9.9K

Наверняка вы вызывали методы в C#. И казалось бы, что тут может быть интересного. Но тут есть о чем поговорить, есть что интересного рассказать.

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

Читать далее
Всего голосов 41: ↑41 и ↓0+41
Комментарии7

MVI и State Machine — объединяем концепции. Визуализация и анализ диаграммы состояний в Android и KMM проектах

Время на прочтение7 мин
Количество просмотров4.9K


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


В итоге мы получаем конечный автомат.


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


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


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

Читать дальше →
Всего голосов 12: ↑12 и ↓0+12
Комментарии0
1
23 ...

Информация

Сайт
tech.kontur.ru
Дата регистрации
Дата основания
Численность
5 001–10 000 человек
Местоположение
Россия