Pull to refresh
39
0.6

Senior Back-End Developer .NET Core C#

Send message

Как мы позволяем разработчикам разрабатывать, а не перерабатывать

Reading time4 min
Views7.1K

Привет! Меня зовут Костя Карусев, я тимлид в одной из команд направления WMS (Warehouse Management System). В статье я расскажу, как выглядит наш процесс разработки, и как он помогает разработчикам заниматься своим делом и с чистой совестью отдыхать на выходных.


Отвечу на такие вопросы:


  • почему мы не используем полноценный SCRUM;
  • что такое feature-team и как эта концепция сосуществует с привычными командами;
  • как отстроенные процессы помогают разработке двигаться предсказуемыми темпами, а разработчикам — не перерабатывать.

Читать дальше →
Total votes 13: ↑11 and ↓2+9
Comments9

Энтерпрайз-домино. 0x13 вредных советов для ниндзя-разработчика

Reading time6 min
Views8.3K

Практически любая enterprise-система (под которой мы будем подразумевать некоторое ПО, где пользователи работают постоянно в течение всего рабочего дня) в современном мире стремится вырасти вместе с управляемым ей бизнесом в высоконагруженное web-решение вроде нашего СБИС.

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

Когда, где и как их может вызвать затаившийся до поры диверсант?

Читать далее
Total votes 21: ↑21 and ↓0+21
Comments5

Разделённые запросы в EF Core

Reading time7 min
Views16K

ORM Entity Framework Core с каждой версией становится все более и более богатой на фичи. Команда разработчиков тратит много времени на перфоманс и вероятно простое обновление Nuget-пакета уже приведет к некоторому бусту, который почувствуют пользователи. Но сегодня я хочу рассказать о совершенно конкретной фиче: это новый режим запросов — "разделённые запросы" или "split queries" в оригинале.

Читать дальше →
Total votes 11: ↑11 and ↓0+11
Comments12

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

Reading time7 min
Views13K

Фрагмент комикса с простым объяснением, что такое числа с плавающей запятой

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

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

Дело в том, что многие программисты используют технологии не задумываясь, как они работают. И это нормально. Люди выполняют поставленные задачи. От них не требуют понимания всей сути, потому что детали отвлекают от главной задачи и зачастую ничем не помогают в её выполнении.
Читать дальше →
Total votes 21: ↑18 and ↓3+25
Comments9

Архитектурные паттерны в iOS: страх и ненависть в диаграммах. MV(X)

Reading time15 min
Views28K

Каждый iOS разработчик в своей жизни уходил с собеседования в расстроенных чувствах и мыслью “это что еще за новая аббревиатура?” Архитектурами пугают и джунов, и миддлов, и синьоров (и наверное даже синьорит). Важно не просто знать что стоит за названием, но ещё и в каком случае какую использовать. Литературы по этому вопросу преступно мало, редкие обсуждения в интернете ограничиваются собственным опытом и какими-то поделками на гитхабе.

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

Первая часть посвящена MV(X) паттернам: самым известным и распространенным практикам в индустрии.

Читать далее
Total votes 39: ↑39 and ↓0+39
Comments12

Создание архитектуры программы или как проектировать табуретку

Reading time25 min
Views696K
Взявшись за написание небольшого, но реального и растущего проекта, мы «на собственной шкуре» убедились, насколько важно то, чтобы программа не только хорошо работала, но и была хорошо организована. Не верьте, что продуманная архитектура нужна только большим проектам (просто для больших проектов «смертельность» отсутствия архитектуры очевидна). Сложность, как правило, растет гораздо быстрее размеров программы. И если не позаботиться об этом заранее, то довольно быстро наступает момент, когда ты перестаешь ее контролировать. Правильная архитектура экономит очень много сил, времени и денег. А нередко вообще определяет то, выживет ваш проект или нет. И даже если речь идет всего лишь о «построении табуретки» все равно вначале очень полезно ее спроектировать.

К моему удивлению оказалось, что на вроде бы актуальный вопрос: «Как построить хорошую/красивую архитектуру ПО?» — не так легко найти ответ. Не смотря на то, что есть много книг и статей, посвященных и шаблонам проектирования и принципам проектирования, например, принципам SOLID (кратко описаны тут, подробно и с примерами можно посмотреть тут, тут и тут) и тому, как правильно оформлять код, все равно оставалось чувство, что чего-то важного не хватает. Это было похоже на то, как если бы вам дали множество замечательных и полезных инструментов, но забыли главное — объяснить, а как же «проектировать табуретку».

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

Данная статья является попыткой ответить на эти вопросы хотя бы в первом приближении.
Читать дальше →
Total votes 88: ↑85 and ↓3+82
Comments45

Разложение монолита

Reading time14 min
Views17K

Эта статья является конспектом книги «От монолита к микросервисам». Материал статьи посвящен шаблонам разложения монолита.

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

Читать далее
Total votes 8: ↑8 and ↓0+8
Comments7

Как справиться с более чем двумя миллиардами записей в SQL-базе данных

Reading time5 min
Views7.8K

У одного из наших клиентов возникла проблема с большой, постоянно растущей, таблицей в MySQL с более чем 2 миллиардами записей. Без модернизации инфраструктуры была опасность исчерпания дискового пространства, что потенциально могло сломать все приложение. С такой большой таблицей были и другие проблемы: низкая производительность запросов, плохая схема, и, из-за огромного количества записей, не было простого способа анализировать эти данные. Также нам нужно было решить эти проблемы без простоев в работе приложения. 

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

Читать далее
Total votes 11: ↑5 and ↓6-1
Comments5

О разных данных на бытовом уровне

Reading time6 min
Views8.3K

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

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

Часто встречаясь с одними и теми же проблемами, в конце концов, я решил поделиться своим опытом, возможно, это кому-то будет полезно в чистом виде, а кто-то поймёт принцип и придумает примеры и объяснения получше.

В этой статье я хочу рассказать об уровнях данных – Физическом, Логическом, Концептуальном.

Читать далее
Total votes 7: ↑6 and ↓1+9
Comments0

Архитектура архитектуры. Шаг 3: дуй в дилижанс

Reading time9 min
Views4.5K

К предыдущим постам и карте цикла.

Мы сдвинулись еще на шаг с прошлой точки. Раз уж мы тут все – люди опытные, то очевидно, что мы попали в финалисты тендера.. БигБиз любит выход на бис! Поэтому финалистов будут смотреть еще раз и с пристрастием. Мы же с вами говорим о таком махровом энтерпайзе - в белом плаще с кровавым подбоем. А значит и стоимость проекта будет как внешний долг Либерии. При таких раскладах лучше пере-, чем недо-. Так что, в зависимости от клиента и количества Либерий стандартом будет либо крещением боем, либо внешний аудит.  

Dog fight!
Total votes 7: ↑4 and ↓3+1
Comments3
Современные технологии — сфера многообразная. Многие темы в ней бесконечно далеки друг от друга. Невозможно быть экспертом сразу во всех из них, но можно — в какой-то одной. Именно статьи таких экспертов — подробные, сложные, узконаправленные; словом, лучшие — мы собрали для хабравчан в этой коллекции. Выбранные материалы отвечают на все вопросы по своей теме. Показывают, как лучше всего изложить свои знания, если вы профи. И подсказывают, из каких ещё источников читателю получить знания.
Посмотреть коллекцию
Total votes 22: ↑18 and ↓4+31
Comments1

Оптимизация работы с PostgreSQL в Go: от 50 до 5000 RPS

Reading time14 min
Views30K

Привет, меня зовут Иван, и я делаю Авито Доставку. Когда пользователь покупает товар с доставкой, мы показываем ему список отделений служб доставки с ценами. Цена доставки может меняться от отделения к отделению. Мы смотрим на область карты, где покупатель ищет товар и информацию по объявлению, например, координаты продавца, вес и размеры товара. И на выходе показываем человеку список отделений с адресами и ценой доставки в каждое из них.


В ходе разработки калькулятора цены доставки возникла такая задача: есть структура базы данных PostgreSQL и запрос к ней от сервиса на Go. Нужно заставить всё это работать достаточно быстро. В итоге нам удалось поднять пропускную способность сервиса с 50 до 5000 RPS и выявить пару нюансов при общении сервиса с базой. Об этом и пойдёт рассказ.


Читать дальше →
Total votes 44: ↑39 and ↓5+42
Comments44

52 системы управления проектами для командной работы в разных сферах

Reading time37 min
Views134K

Привет, Хабр! Вам приходила мысль сделать свою систему управления проектами и задачами? Нам да! И мы делаем YouGile

Знаете, в чем самая большая сложность? Выбрать и сфокусироваться на одном востребованном направлении продукта. Вообще такая задача есть везде, но тут она особенно масштабная. 

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

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

Текст невероятно длинный (проскроллите до конца?) Внизу есть таблица с кратким содержанием.

И если у вас есть свой взгляд на какую-либо систему – прошу дополнять, пишите в комментариях. 

Читать далее
Total votes 11: ↑9 and ↓2+12
Comments19

Производительность распределенного хранилища: препродакшн тесты

Reading time12 min
Views3.2K

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

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

Нужно сказать, что больше всего я работал с Ceph, поэтому в основном методология строится исходя из этого опыта, но, если не вдаваться в детали, то подход к тестированию более-менее одинаков для всех распределенных программных хранилищ данных (SDS).
Читать дальше →
Total votes 28: ↑28 and ↓0+28
Comments2

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

Reading time27 min
Views19K

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



Марк Симан — автор популярной книги Dependency Injection in .NET, автор бесчисленных блог-постов. На DotNext 2017 Moscow Марк рассмотрел применение dependency injection в классическом объектно-ориентированном дизайне и объяснил, почему его необязательно (даже нежелательно) использовать в функциональном программировании. Следом за этим он наглядно показал, как использование приемов функционального программирования устраняет необходимость в использовании моков и стабов в модульном тестировании и позволяет полностью выбросить мусор из прямого перечисления зависимостей.


Под катом — перевод доклада и видео. Далее повествование будет от лица Марка.

Total votes 35: ↑35 and ↓0+35
Comments11

Книга «Паттерны проектирования для C# и платформы .NET Core»

Reading time11 min
Views17K
image Привет, Хаброжители! Паттерны проектирования — удобный прием программирования для решения рутинных задач разработки ПО. Грамотное использование паттернов позволяет добиться соответствия любым требованиям и снизить расходы. В этой книге описаны эффективные способы применения паттернов проектирования с учётом специфики языка C# и платформы .NET Core.

Кроме знакомых паттернов проектирования из книги «Банды четырех» вы изучите основы объектно-ориентированного программирования и принципов SOLID. Затем узнаете о функциональных, реактивных и конкурентных паттернах, с помощью которых будете работать с потоками и корутинами. Заключительная часть содержит паттерны для работы с микросервисными, бессерверными и облачно-ориентированными приложениями. Вы также узнаете, как сделать выбор архитектуры, например микросервисной или MVC.
Читать дальше →
Total votes 5: ↑5 and ↓0+5
Comments5

Как создать отличную поддержку и повысить показатели, не демотивировав сотрудников

Reading time15 min
Views7.3K

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

Читать далее
Total votes 4: ↑3 and ↓1+4
Comments23

Несеребряные пули или кратко про методы софтостроения

Reading time9 min
Views11K
Давайте пробежимся по способам софтостроения, придуманным примерно за 70 лет его существования. Их не так много, как может показаться. Но достаточно много, чтобы завести в тупик.
Читать дальше →
Total votes 16: ↑15 and ↓1+22
Comments8

Основы распределённого мониторинга: четыре золотых сигнала

Reading time8 min
Views9.6K
image

Мы в ForePaaS уже какое-то время экспериментируем с DevOps — сначала в одной команде, а теперь и по всей компании. Причина проста: организация растет. Раньше у нас была всего одна команда на все случаи жизни. Она занималась архитектурой, проектированием и безопасностью продукта и быстро реагировала на любые проблемы. Сейчас мы разделились на несколько команд по специализации: фронтенд, бэкенд, разработка, эксплуатация…

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

Раньше девопсами мы называли команду, которая, по сути, делала Ops, а еще отвечала за разработки на бэкенде. Раз в неделю другие разработчики говорили команде DevOps, какие новые сервисы надо задеплоить в продакшене. Иногда это приводило к проблемам. С одной стороны, команда DevOps не очень понимала, что происходит у разработчиков, с другой — разработчики не чувствовали ответственность за свои сервисы.

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

В этой статье мы поговорим о том, что такое мониторинг и с чем его едят, узнаем о так называемых четырех золотых сигналах и обсудим, как использовать метрики и детализацию drill-down, чтобы изучить текущие проблемы.
 
Читать дальше →
Total votes 15: ↑15 and ↓0+15
Comments0

SmartTraits или добавляем «множественное» наследование в C#

Reading time13 min
Views8.1K


Один из наших клиентов, приверженец технологий php, жаловался что с переходом на C# и стек .Net лишился одной из своих любимых возможностей – использовать в своих скриптах traits и что он хотел бы добавления подобной функциональности в продукт разрабатываемый для его компании.

В один прекрасный момент, мы решили сделать ему подарок и реализовали proof of concept схожей функциональности для C#.

На удивление, всё случилось довольно быстро и интересно. Кому любопытно что из этого получилось и как можно попробовать, добро пожаловать под кат.
Читать дальше →
Total votes 17: ↑15 and ↓2+20
Comments31

Information

Rating
1,885-th
Location
Россия
Registered
Activity

Specialization

Backend Developer
Senior
C#
.NET Core
SQL