Некоторые разработчики программируют взглядом. Другие слепы и программируют на слух\ощупь. Отдельным товарищам достаточно маркера и доски. Но все-таки большинство .NET-разработчиков пользуется Visual Studio для кодирования и дебага, парочкой профайлеров, декомпилятором, плагином для VCS, браузерными инструментами, R#\CodeRush, тулзой для контроля базы данных, баг-трекером, билд-системой и кофемашиной.


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


Под катом — скучная и совершенно неинтересная реклама, немного Roslyn, чуть-чуть Rider, минимум CodeRush, малость описаны фичи C# 7.0, бегло рассмотрены перспективы .NET и один раз упоминается PVS-Studio.





JetBrains представлял Сергей serjic Шкредов, автор многочисленных фич в ReSharper, адепт системного программирования, руководитель .NET-направления в JetBrains, а также один из разработчиков (и пользователей) Rider.





– Добрый день, Сергей. Начнем с начала, а именно с IDE. Сейчас .NET мир лихорадит: вышли новые версии .NET, новые версии студии, своих первых пользователей нашел Rider. Когда ситуация немного успокоится?


– Добрый день. Надеюсь, никогда не остановится. Мы живем в мире, который крайне быстро меняется. И, на мой взгляд, сейчас в .NET гораздо больше порядка. MS развивает его как платформу, обслуживающую все MS-стеки разработки: отделы мобильной разработки, облачной, WinPhone, десктоп — все заинтересованы в развитии платформы. Чувствуется, что сейчас разработка упорядочивается: уменьшается влияние отдельных команд, .NET развивается как единое целое.


– У каждой платформы свои ограничения, не будет ли сокращаться основа .NET, общая для всех?


– Как раз наоборот. Для интеграции с .NET Standard каждая из платформ развивает свои API, расширяет их. Меня удивляет только живой Mono, я думал его заменит .Net Core. С другой стороны, Mono развивается с .NET Standard, что внушает определенные надежды.


– Судя по обсуждениям разных IDE на хабре, главные характеристики IDE — скорость работы, минимум потребляемой памяти\проца, скорость загрузки проектов, ну и набор фич. Есть ли вещи более важные?


– Конечно. Производительность критична. IDE должна быстро загружаться, загружать проекты, не блокировать UI; Этакие три кита, три критерия производительности.
Но при этом каждая IDE поддерживает некий стек технологий. То есть, имеются разработчики, они решают типовые бизнес задачи, обычно на одном стеке технологий. Соответственно, основная задача IDE — облегчить работу с этим стеком. Например, мы в Rider концентрируемся сейчас на кроссплатформенной мобильной разработке и ASP.NET.


– Выбрали самое популярное направление?


– В том числе. Помимо популярности, эти стеки не так сильно приросли к MS. Много OpenSource-утилит, инструментов. Если взять SharePoint или Office разработчика — без VS практически невозможно что-либо сделать. Кстати, я забыл упомянуть Unity. Аудитория немаленькая, но потребности у неё отличаются от того, что мы привыкли видеть в Web или мобильной разработке. Кода не так много, и польза от IDE чуть менее заметна.


– Вы собираетесь работать еще и с игровым движком?


– Нет, только со скриптовым. Грубо говоря, Unity состоит из двух частей: графического движка и скриптов. С графикой работают в Unity Studio, скрипты пишут под MonoDevelop или VS. Мы поможем работать со скриптами.


– Ранее R# был ограничен .NET framework 3.5. Сейчас это ограничение в силе?


– Нет, мы уже не поддерживаем версии VS меньше 2010, слишком мало пользователей у них осталось, да и для VS 2010 требуем 4.0. Cкоро будем требовать 4.5. Хотелось бы .NET 4.6.2, но он установлен далеко не у всех наших пользователей… Так что в ближайшие несколько лет ничего не изменится.


– Инструменты сейчас все чаще и чаще парят в облаках. Сервера, системы мониторинга, TFS, превратившийся в VSTS… Ожидает ли нас облачная IDE?


– Разработчикам пока лучше посидеть на десктопе, по крайней мере, я не вижу мотивации для перехода в облака. Разве что пригодилась бы мини IDE для быстрых фиксов без локального чекаута. Да, билд-фермы в облака уходят. Если у тебя часто возникает затык с очередью билдов, было бы неплохо иметь возможность быстро добавить несколько машин в build agents pool. При этом тут тоже нужно считать. По нашим расчетам, получается дешевле ставить собственные сервера.


– У вас TeamCity?


– Да, вся наша внутренняя инфраструктура живет на TeamCity. Для OSS-проектов мы тоже используем публичную инсталяцию TeamCity.


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


– Писать их просто, но какова мотивация авторов? Анализаторы — это клевая игрушка. Того же эффекта можно было и раньше добиться с помощью R# SDK. Пожалуй, единственное преимущество анализаторов Roslyn — это хорошая интеграция с Build процессом и IDE, это реально классно сделано. Но как и у нас, там есть большие проблемы с публичным API. Язык меняется, а это значит, что анализаторы тоже надо дописывать для новых конструкций языка.


В Open Source обычно контрибьютят либо полностью готовый фреймворк, либо соединение пару сложных фреймворков для получения готовой тулзы. Придумать же сложный проект с анализаторами тяжело: по факту ценность такого проекта накапливается с количеством анализаторов. При этом многие из них весьма похожи. В итоге для получения серьезного продукта нужно запилить 100 почти одинаковых фич. Методично, один за одним писать скучные куски кода — откуда возьмется мотивация на это? Плюс, написать анализатор правильно с первого раза трудно, жизненный цикл немаленький. То есть, ты пишешь анализатор, релизишь его, получаев 15 реквестов на редкие баги. Довольно тяжелое занятие.


– То есть, за подобные вещи стоит браться с чисто финансовыми намерениями? Самая простая мотивация?


– Я ожидал такого, что кто-то возьмется. Вот, PVS-Studio взялись. Пилят анализатор за анализатором.


– А что с производительностью анализаторов?


– Сильно страдает. Например, для работы с интерфейсами нужно строить индекс, который позволяет быстро анализировать десяток сценариев, иначе у нас будет десяток перевычислений. Если пилить это в Open Source — кто-то должен написать такой индекс, а потом десятку разработчиков придется как-то к индексу коннектиться. Даже за счет проблем коммуникации это очень сложно.


– Разработчики все больше и больше полагаются на свои инструменты. Помимо знания непосредственно языка (и пары платформ) сейчас нужно уметь работать с VCS, дебаггером, парой профайлеров, рефлектором, различными тулзами для рефакторинга, тестовым фреймворком (а то и не одним), системой управления проектами, инструментами разработки в браузере, да и сам .NET язык постоянно развивается. Мы становимся все более зависимыми от инструментов и stackoverflow. Настанет ли время, когда класс программиста будет определяться знанием утилит и плагинов, а не языка и библиотек?


– Да, знание языков и алгоритмов обесценивается. Инструменты становятся удобнее, часть работы берут на себя. Вспомни старые добрые WinForms: надо было создать элемент, подцепиться к EventHandler, написать метод для обработки, изменить модель, получить ответ, изменить пару компонент, кучу всего провалидировать. Недавно я писал на Kotlin c React, и почти не думал о UI. Изменил модель, отдал её на перерисовку, и фреймворк сам подхватил все изменения. Совершенно иной подход. Думаю, в ближайшее время от программистов будут требовать знание фреймворков, модных технологий, понимание как писать скалируемый код, переносимый. А алгоритмы и структуры данных — прошлое.


– Это касается только .NET мира? Полагаю, возражения системных программистов будут весьма эмоциональными.


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


– Разработка стала проще?


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


– Сергей, ты не мог бы рассказать про Team Tools (Hub, TeamCity, Upsourse, YouTrack)? Насколько сильно ваш набор приблизился к VSTS и Atlassian стеку? Что нам ждать в будущем?


– Необходимые компоненты мы собрали: YouTrack — баг трэкер, TeamCity — CI сервер и Upsource для код-ревью. При этом конкурировать нам с конкурентами сложно, наши продукты разрознены. В продукте Hub мы организовали User Managment, но оставшихся интеграций — вагон.


– Как вы будете это исправлять?


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


– Rider. Год назад вы не собирались слезать со студии, в январе же анонсировали свою IDE. Чего нам ждать от нее (помимо скорости\удобства)? Плагины? Интеграция со всем и вся? Интеграции со своим Team Tools стеком?


– Мы пока не слезаем со студии. Основные фичи R# и профиляторов работают со студией (и шарятся с Rider). Что до Rider — сейчас уже собрали значительную пользовательскую базу. Есть люди, которые сидят на Rider месяцами, не открывая студию (я в их числе). Сейчас мы рассылаем ссылки на свежие билды нашим самым ранним пользователям private EAP, но уже на днях собираемся открыть публичный EAP, а значит Rider можно будет скачивать всем прямо с сайта. Для нас это важный шаг, количество пользователей увеличилось на порядок. Очень много усилий мы сейчас прилагаем для достижения стабильности, чтоб билд\дебаг работал для любых проектов и выживал на любых системах.


Разделив обработку кода и UI — мы получили довольно шуструю, отзывчивую IDE. Над расширяемостью тоже поработали, плагины можно писать как к фронт-энду, так и к бек-энду. Сейчас пилим анализатор, позволяющий определять совместимость плагинов.


– Какая билд-система используется для билда?


– MsBuild на Widows, можно использовать XBuild на Mac и Linux (мы его не рекомендуем, но в то же время понимаем, что не все еще перешли на кросс-платфоменный MsBuild). В плане билд-системы мы никуда не от MS не уходим.


– То есть, ошибок билда при миграции со студии не будет?


– Именно. По большому счету, нет никакой миграции, открываешь все тот же студийный .sln и продолжаешь работу.


– Вы планировали выпустить релиз осенью. Получится?


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




Другого производителя, DevExpress, рекламировали адепты парного программирования:



Павел pavsenin Авсенин
.NET-разработчик, в эпоху бума Flash сбежавший в разработку приложений для соцсетей. Четыре года назад он вернулся и с тех пор помогает выбирать красивые имена для новых переменных в команде CodeRush. Большой любитель созерцать разные заголовочные файлы, особенно весной.



Александр alexandrz Захаров
Увлекся компьютерами и программированием еще в раннем детстве. Прошел через ZX Spectrum, BASIC, Pascal, C, C++, Java, и в итоге остановился на C# и .NET.
Сейчас занимается разработкой CodeRush в компании DevExpress.




– Добрый день. Сейчас .NET мир лихорадит: вышли новые версии .NET, новые версии студии. В DevExpress почти все продукты завязаны как минимум на один из этих компонентов, насколько тяжело вам успевать за MS?


– Да, MS развивает .Net Core, Xamarin, запускает Standard, и нас это радует. Технология развивается — значит она живет. Что касается поддержки — у нас свой подход: мы следим за любой технологией с самого начала её существования, но серьезно начинаем с ней работать только после некоторой стабилизации. Мы смотрим, пробуем, делаем билды, но публично это не выкладываем. Так, мы наблюдали за .NET Core и не предпринимали активных действий до выхода релиза. Так что, все изменения по сравнению с RC нас не коснулись. Помимо того, что мы не тратим сил на поддержку “не выстреливших” продуктов, за время ожидания у нас накапливаются запросы от клиентов, что позволяет нам точнее расставить приоритеты.


Хотя провалы случаются и у нас. Например, мы потратили немало ресурсов на поддержку мертворожденного Silverlight.


В последнее время работать стало проще: много вещей лежит в OpenSource, есть Early Access. Проще стало реагировать на изменения, мы узнаем о них раньше.


– Иногда конкуренты создают что-то до вас. Насколько вам помогают их продукты?


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


– Вопрос про анализаторы Roslyn. Простейший рабочий анализатор пишется за 5-10 вечеров, однако дальше простейших примеров дело обычно не заходит. И это при наличии уже готовых решений, которые могут служить отличной спецификацией. В чем проблема с этими анализаторами?


– Во-первых, подобные анализаторы (по сотне штук в пакете) есть.


Во-вторых, API — шикарное, но сам подход иммутабельных деревьев непривычен большинству разработчиков.


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


Почему же в OpenSource до сих пор такой команды не появилось?


– Сам MS развивает свои рефакторинги. Полагаю, никто не желает с ними соперничать. Плюс, висит вопрос мотивации: реально большой и сложный проект нужно поддерживать, а рассчитывать на поддержку в OpenSource рискованно. Вот и получается: маленький проект никому не нужен из-за недостатка функционала, большой из-за возможных рисков с поддержкой.


– Когда мы пишем анализатор — мы кидаем место фиксеру, и он бегает по коду во второй раз. Как вы решает проблему повторных вычислений?


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


– DevExpress упоминался как контрибьютор в Roslyn. Насколько проект открыт, насколько он развивается, какие тренды сейчас в его развитии?


– Конкретно команда CodeRush не контрибьютила. У нас была одна идея, но её уже серьезно пилили, так что мы решили не вмешиваться.


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


Каждый апдейт студии — апгрейд перформанса, иногда открывают API. Так, в 3 превьюшке разрешили экспорт комплишен-провайдеров для вставки автодополнений в основную сессию IntelliSense. Был API internal, стал public. Сейчас еще и сам C# активно пилят до 7 версии (быстрее бы уже), добавляются фичи, в том числе из функционального программирования. Ну, и рутина: фиксы, перформанс, полировка API.


– Анонсирован .NET standard 2.0. Он станет таки единым стандартом, или можно скачивать картинку про 15 уже 16 стандартов?


– Таки станет. .NET Core, Desktop, Xamarin — все там будем. Все зависит только от MS, желание у них есть, Roadmap есть, так что свою работу они доделают. С другой стороны, как видно по опыту предыдущих попыток, процесс унификации сложен и тернист, платформ немало. Скорее всего, придется сделать несколько попыток.


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


Иными словами, унификация закончится, но когда именно — только время покажет.


– На каком стандарте MS остановится? 4.5, 4.5, 4.5.1?


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


Сейчас MS занимается IoT, возможно, появится .NET для кофеварок. Может, запилят .NET для браузеров, TypeScript намекает. Разработки в нативной компиляции ведутся. Возможностей — миллион.


– Сейчас началась маркетинговая волна мессенджер-ботов. Ожидают ли нас скайп-помощники админов\тестировщиков\разработчиков?


– Уже есть подобные вещи. Например, бот коннектится к билд-серверу, смотрит последние билды, если есть красные — шлет сообщение в Slack. С другой стороны — боты лишь интерфейс. Если есть какой-то софт для задачи — его можно прикрутить к боту. Разве что, есть некоторая сложность с обработкой команд в мессенджере, могут потребоваться интеллектуальные утилиты.


– У DevExpress солидный набор инструментов, причем сильно различающихся по “направлению”: дополнение для IDE, графика, тестовый фреймворк, инструменты аналитики… При этом они кажутся достаточно разнородными. Насколько тяжело поддерживать такое разнообразие?


– Основное направление: разработка компонентов для разных платформ. Графика. Компоненты, контролы для WPF, WinForms, JS, etc. Остальное — просто некое развитие идеи компонентов. Разнообразие есть, но обычно есть система и поддерживающая её команда. Так что основные проблемы возникают при кросспроектных коммуникациях.


– CodeRush поддерживает все популярные тестовые фреймворки. Как вы боретесь с искушением написать свой?


– Борьба с искушением проста — у нас нет искушения. Была мысль сделать mock-фреймворк с возможностью подменять непубличное API и поведение типов из BCL, мысль до сих пор есть, но приоритеты иные. Есть nUnit, xUnit — незачем с ними бодаться, они отлично делают свою работу. Кроме того, у нас были запросы непрерывного прогона тестов (в фоне), но запросов этих немного.


– Какие инструменты популярны в конторе, разрабатывающей инструменты?


– CodeRush. Хотя кое-кто не видит пользы в подобном инструментарии, принципиально его не использует. VS. nUnit, xUnit. Git, Mercurial. Багтрекер свой, Trello как планировщик, профиляторы — от PerView до dotTrace. Свое решение для CI, основано на CruiseControl. В целом, зоопарк обширен.


– Разработчики все больше и больше полагаются на свои инструменты. Настанет ли время, когда класс программиста будет определяться знанием утилит и плагинов, а не языка и библиотек?


– Инструменты экономят время, и немало. Можно ли называть себя программистом не умея ими пользоваться — большой вопрос.


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


– На собеседовании вы спрашиваете его про любимые инструменты? Это критичный вопрос?


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


– Честно говоря, я не сталкивался пока с функциональными языками. Про обновление .NET новости мелькают часто, а F# почти не упоминается. Язык еще развивается?


– Упоминаний мало по одной простой причине: все необходимое уже на борту. С версии F# 3.0 там только небольшие косметические улучшения. Последнее время MS пытается интегрироваться с Roslyn на уровне проектной модели (Workspace API). Кстати, интерес к F# лишь растет. Появляются конференции, видео, посты. Есть небольшое, но преданное комьюнити.


Хотя масштаб, конечно, несопоставим с C# (пока что). Если сравнивать количества — на одного F# разработчика приходится десять разработчиков C#. Просто из-за функциональной парадигмы, не каждому она удобна или понятна. Скорее всего, со временем F# догонит C#, или вольется в него. Это не язык для финансов, Machine Learning, это отличный язык для всего.


– Появится ли CodeRush для F#?


– Сейчас тулинг убог, есть Visual F# Power Tools — и все. Остальное — точечные инструменты. По поводу CodeRush для F# — тут все зависит от запросов наших пользователей. Они есть, но их пока не очень много. Возможно, после интеграции с RoslynWorkspaceApi задача станет проще, и мы всерьез об этом задумаемся.


– Насколько реально использовать CodeRush для обучения? Он подсвечивает ошибки, предлагает исправления.


– Закрепление — возможно. Накосячил — тут же получил втык. Вежливый. Насчет же обучения — нет. Некоторые джуны увидев ошибку — гуглят. Что, зачем, почему так нельзя, почему нужно иначе. Остальные не думая применяют рефакторинг. Более того, если много полагаться на инструмент — в один момент перестаешь развиваться. Зачем, если умная тулза все сделает за тебя?


– CodeRush. В чем принципиальное отличие от R#? Вы конкурируете, или занимаете две ниши?


– Это инструменты одного класса, инструменты продуктивности разработчиков, и занимают они одну нишу. По факт, они появились почти одновременно. Когда только появлялись первые студии — у MS был IntelliSense и все. Тогда и появились CodeRush и R#.


– Почти 15 лет истории?


– Да. Хотя сейчас история переписывается. Одно время продукты были похожи, цеплялись к студии, тормозили её. То есть ранее студия разбирала код, и CodeRush\R# разбирал. Потом на стороне редактора потребовался доступ к компилятору, MS сделали CompilerAsService, у внешних утилит появилась возможность цепляться к компилятор… короче, два года назад мы переписали все на Roslyn.


– Пару лет назад вы сделали ставку на Roslyn (на тот момент еще сырой). Как вы думаете, сыграла ваша ставка?


– Основные желаемые плюшки мы получили: удалось избежать двойного разбора кода (а это двойные вычисления и память). Плюс, сейчас мы стали спокойнее воспринимать новые фичи в C#, обрабатывать их стало проще. Не нужно самостоятельно фиксить свои алгоритмы разбора кода, автоматом получается парсер и резолвер. Почти вся “рутина” сделана, остается только писать новые фичи. Тут сложно говорить о выигрыше, думаем, время покажет.


Мы сравнивали версии CodeRush (с Roslyn и без него) — Roslyn версия забирает чуть больше оперативной памяти, но это не критично. То есть, Roslyn действительно жрет много памяти, но при обработке синтаксических и семантических деревьев мы используем лишь его ресурсы, сам CodeRush теперь ничего не добавляет. Когда мы начинали переход, иммутабельное дерево вызывало много вопросов. Предполагалось, что managed компилятор будет тормозным. Но выяснилось, что деревья можно обрабатывать в нескольких потоках, что ускоряет вычисления. По поводу же “сырого” Roslyn — на тот момент проекту уже было несколько лет, писала его команда отличных спецов, и видно было что MS его улучшает. “Незнакомый” — может быть, но это поправимо. И да, когда мы серьезно взялись за переработку CodeRush, студия уже вовсю крутилась на Roslyn и была вполне стабильной.


– Что насчет идеи разделения UI и компилятора (как в Rider)?


– У JB есть платформа для написания IDE. Популярная, одна из лучших. Есть соответствующие спецы. У нас таких условий нет, так что этот вариант мы серьезно не рассматривали. На наш взгляд, .NET и MS неразделимы. Поддерживать свой компилятор — задача трудоемкая, и мы решили последовать за MS.




Если вы прочитали эти интервью и вам мало — приходите на DotNext 2016 Moscow . На конференции будем говорить не только про тулзы: пройдемся и по перфомансу, и по многопоточности и много по чему еще:


? .NET Core: State of the art
? Squeezing the Hardware to Make Performance Juice
? Интеллектуальные чатботы и когнитивные сервисы
? Stack Overflow — It's all about performance!
? Advanced Xamarin.Forms
? C++ через C#
? Продолжаем говорить про арифметику
? ASP.NET SignalR: Why It's Getting Really Crucial for Web Development
? Exceptional Exceptions in .NET
? Модификация кода .NET в рантайме
? End-to-end JIT
? Performance tuning Stack Overflow tags
? C# Scripting — why and how you can use your C# in places you never thought of before!
? Multithreading Deep Dive
? Собрать всё, или Знакомимся с Cake (C# Make)
? WinDbg Superpowers for .NET Developers
? Overview of the new .NET Core and .NET Platform Standard
? Какие уязвимости находят в .NET платформе и как не повторить их в своих приложениях
? What's new in C# 7?
? ETW — Monitor Anything, Anytime, Anywhere
Поделиться с друзьями
-->

Комментарии (16)


  1. moscas
    07.11.2016 18:01
    +2

    Там ошибка: исправьте, пожалуйста, YouTrace на YouTrack.


    1. Oxoron
      07.11.2016 18:16

      Спасибо, поправил.


  1. eugenebb
    07.11.2016 23:16

    По моему мнению, отдельное интересное направление для enterprise рынка может быть создание набора custom VS plugins специально сконфигурированных под проект.

    т.е. приходит сторонний консультант, анализирует проект и строит конфигурацию которая бы существенно помогла разработчикам конкретно этого проекта или даже создает новый plugin(s).
    Особенно востребованно для legacy проектов.

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


    1. Oxoron
      07.11.2016 23:22

      Пардон, а зачем для этого сторонний консультант? По факту ведь 10 анализаторов — это две недели работы лиду (вместе с тестами и обучением лида). Консультант же дольше будет в тему вникать.


      1. Andrey2008
        07.11.2016 23:38
        +1

        Это какие-то странные анализаторы (диагностики). У нас запросто до вдух человеконедель может только на 1 диагностику уходить. :)


        1. pavsenin
          08.11.2016 01:05
          +1

          Предположу, что автор имел ввиду анализаторы типа тех, которые он упомянул в статье: RefactoringEssentials.
          Не берусь судить странные они или нет.
          Но большинство из них занимает менее 100 строк кода. Еще 100 — на CodeFix.
          Мне кажется нужно сильно постараться, чтобы потратить на это больше одного человекодня.

          Не спорю, что могут быть более сложные диагностики, анализирующие dataflow/controlflow, references, type inference и так далее, но даже на такие у нас уходило максимум 2-3 дня на один язык (С#).


        1. Oxoron
          08.11.2016 11:19

          У вас диагностики серьезные, продаваемые. Могу предположить, вы анализируете немало граничных условий, плюс тесты, приемка… Отсюда и две недели.

          Теперь вернемся к нашему лиду с идеей 10 анализаторов. Он знает свой проект. Раз он дошел до идеи написания анализаторов — он себе представляет какие именно анализаторы нужны. То есть, самую тяжелую часть, сбор требований, ему делать не нужно. На граничные условия ему тоже плевать — достаточно рассмотреть лишь те, что есть в проекте, если что, позже пофиксит.

          Короче, вы разрабатываете продукт который должен работать без нареканий в самых разных проектах, а лид работает с легаси-проектом в кровавом энтерпрайзе. Отсюда и разница в оценках (само собой, истина лежит где-то посередине).


      1. eugenebb
        08.11.2016 00:15
        +1

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

        Главное, это то что в проекте надо понимание что это тебе надо и что _конкрентно_ тебе надо.
        Если есть компания которая предлагает подобный сервис и на выбор есть 500 plugins то ты можешь посмотреть, понять и выбрать 10 подходящих тебе, то купить гораздо проще чем убедить что этим надо заняться и получить время на разработку. И в конечном счете качество результата будет выше, специализация рулит.

        Плюс если компания занимается подобным сервисом, то после 100-ого клиента будет разбираться в общей структуре legacy проектов лучше чем владельцы проекта :-)


        1. Oxoron
          08.11.2016 11:01

          eugenebb, а можете подкинуть парочку примеров плагинов? Я с легаси особо не сталкивался, и не могу себе представить legacy-ориентированный плагин.


          1. eugenebb
            08.11.2016 17:11
            +4

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

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

            Текущей команде надо как-то это поддерживать и развивать. Работа на 90% состоит из хождения по коду в попытках понять как это работает и 10% собственно изменений. Инструменты которые помогают уменьшить эти 90%, делают жизнь сильно лучше.

            Например, несколько лет назад проект «интернационализировали» (сторонния компания прогнала автоматический скрипт который поменял все строки на вызов методов для перевода) для поддержки нескольких языков.

            Теперь когда идешь по коду, повсюду разбросано что-то типа:

            I18.Translate(«PPT_8999») или <%= I18.Translate(«ADMIN_234») %>

            чтобы понять что значит PPT_8999 или ADMIN_234 надо лезть в resource файл, искать значение и т.п.

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

            Еще пример. В коде в качестве комментариев разбросанны ссылки на номера тикетов в JIRA, plugin достает описание и показывает в одном из окон. т.е. ты идешь по коду и сразу видешь что, когда и почему.

            Подобный plugin для splunk, поищет для выбраного environment вхождения для текущего файла, метода и т.п.

            Или например, plugin который запрещает использование некоторых классов/методов (SqlConnection/FileStream) кроме как в одном проекте.

            Или plugin который если в редакторе находишься на имени stored procedure/table/view сразу покажет в одном из окон параметры/поля и т.п. позволит нажать на кнопку и выбрать данные, применить Т4 из библиотеки шаблонов против этих параметров/полей и сгенерировать код для DataContract, stored procedure call и т.п.

            Все эти plugins можно сделать более-менее универсальными, но требуется правильная конфигурация под специфику проекта. Плюс если например кто-то использует Jira ему не нужен плагин для Trello и т.п.

            Поэтому я и говорю что универсальные инструменты типа ReShareper очень помогают, но иногда маленькие и специфичные под проект могут помочь не меньше.


            1. Solexid
              16.02.2017 11:59
              +3

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


              1. eugenebb
                09.11.2016 20:47
                +2

                Есть еще универсальные, которые думаю были бы интересны многим разработчикам.

                1. Конвертер. Очень простой плагин, но довольно часто используется при отладке. В окне два text box-a и несколько кнопок, при нажатии на кнопку, содержимое первого конвертируется и содержимое и выводится во-второе. Реализованные функции:

                — url encode/decode
                — html encode/decode
                — xml encode/decode
                — mime64 encode/decode
                — js encode/decode
                — c# encode/decode (удобно например ввести html и получить c# строку, где " преобразованны в \", CRLF в \r\n и т.п.)
                — regex escape/unescape (если не эксперт в regex помогает)
                — dynamic regex evaluation (очень полезно если не эксперт в regex, в первый text box, pattern, во-второй текст и при обновлении\нажатии клавиши строит результаты работы regex с иерархией по группам и т.п., по мере того как печатаешь regex сразу видно результаты)

                2. Layers. Работает по типу того как layers функция в графическом редакторе, т.е. скрывает\показывает часть информации. На данный момент реализованна поддержка двух типов: try/catch и comments. Когда layer выключен, рисуется цветная линия на том месте где бы был код, все еще понятно что оно там есть, но уже не нужно напрягаться чтобы тратить на это время. Если нажать на линию, все покажеться.

                — try/catch — есть много кода который обернут в try/catch/finally для логирования и т.п. что не влияет на логику работы, но требует времени на анализ пока идешь по коду, особенно для коротких методов. «try {» заменяем на горизонтальную линию в редакторе, и вторая линия вместо " } catch (..) {… }", внутри try код остается видимым.

                — comments — есть очень многословные девелоперы, у которых комментарии занимают 30% от кода, через некоторое время начинает сильно напрягать, особенно когда комментарий содержит описание которое и так понятно из кода. Также заменяюстя цветной горизонтальной линией на месте комментария.

                3. HTTP request client — простая версия клиента позволяет послать HTTP запрос и показать в отформатированном виде ответ. Во-первых удобно иметь клиент в IDE, плюс несколько функции полезных при разработке\отладке. Конечно не сравниться со специализированными клиентами, но для большенства случаев подойдет.

                — Можно редактировать url/method/headers/body, сохранять для последующего использования и т.п.

                — возможность подменять значение в hosts файле на время запроса и автоматически убирать от туда после того как запрос выполнен. Удобно чтобы для отладки против отдельного сервера в ферме которые за LB или когда хочется обмануть запрос.

                — сконфигурировать pre-request т.е. запрос(ы) которые надо выполнить перед основным и использовать возвращенное значение, используется в основном для аутенфикации, получить token и т.п.

                — возможность применить XSLT/T4 против XML/JSON которые вернул запрос


                1. Oxoron
                  09.11.2016 21:12

                  Если не выгорит с консультированием — попробуйте выложить на github. Прикинул: в разных проектах мне пригодилась бы половина подобных утилит, с такой «конверсией» набор будет крайне полезен.

                  Если не секрет, сколько времени у вас заняло создание набора? И сколько проектов вы им анализировали?


                  1. eugenebb
                    10.11.2016 18:50
                    +1

                    Пользуется в трех legacy проектах, смесь asp.net webforms, mvc, web api и wcf.

                    Трудно сказать по времени, создавались по мере надобности, в течении трех лет. Наверное в пределах человеко-месяц или чуть больше. Кое-что, например Т4 библиотеки и имплементация ITextTemplatingEngineHost уже было.

                    Самая долгая единовременная затрата времени была на написание конвертора vb.net -> c# используя VisualBasicSyntaxTree из Roslyn, около 3-х дней. Пытались поиспользовать существующие конверторы, но не очень успешно. Попробовали поиграться с Roslyn и быстро что-то начало получаться, сделали command line утилитку.

                    Хоть не идеальное конвертирование, но зато учитывает специфику проекта. Например имена свойств или методов типа cstmbilladdr или frst_nm умеет преобразовавывать в CustomerBillingAddress и FirstName.

                    Основное удобство можно перобразовавать один файл или даже один метод и осуществлять миграцию one-by-one а не все или ничего. Даже VbScript конвертируем и что-то осмысленное получается.

                    Было бы наверное тоже полезно сделать универсальный плагин чтобы открываешь VB файл а видешь C# без того чтобы реально конвертировать, иногда нельзя существующие код трогать. А читаемость/понимание наверное процентов на 30 быстрее для C#, чтобы в чем то бысто разобраться.

                    Плагин самый сложный был когда пришлось встроить поддержку http server чтобы получать данные от chrome extension.

                    Extension мониторит что открывается в браузере/XHR и пересылает url/body data в VS плагин и он смотрит на параметры и автоматически строит несколько datagrid с данными из базы. Типа открыли страничку customerinfo.aspx?customerid=XXYYZZ а у нас в VS сразу данные из базы по XXYYZZ, второй грид по 5 последним заказам и третий с его ревью.
                    Или product.aspx?prdid=ABC у нас первый гирд из табличке products для ABC и второй с из табличке orders для него. Также имена полей типа cstmbilladdr или frst_nm показывает как Customer Billing Address и First Name чтобы читаемость выше была.

                    Наверное неделя чтобы сделать настраиваемо, динамически все правильно строилось.


              1. eugenebb
                09.11.2016 21:05

                Несколько идей до которых руки пока не дошли

                1. Security adviser — для методов потенциально представляющих проблему с точки зрения security выводим значок-предупреждение типа того как ReSharper показывает для error/warnings в редакторе.

                т.е. если есть SqlCommand / FileSteam / File.ReadAllText и т.п. который принимает значение из переменной (потенциальный injection) показываем warning.

                или есть Label.Text = someVariable или <%= «static text» + someVariable %> (т.е. потенциальный XSS) тоже warning, с предложением обернуть HtmlEncode и т.п.

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

                2. CSS adviser — много кода который содержит inline css style, плагин берет style, анализирует есть ли подходящий CSS класс и предлагает заменить или создать новый CSS класс.

                3. Debug enumerable viewer — часто при отладке надо посмотреть значение объекта который является коллекцией других объектов, что-то типа List<Person> или DataTable, было бы удобно выводить это как grid с возможностью фильтрации по значению.

                а то когда открываешь что-то с 50 элементами, найти что нужно затруднительно.


  1. perfect_genius
    16.02.2017 11:35
    +1

    Можно ведь добавить переключение большим пальцем?