Филипп Торчинский — о важности мелких деталей

Филипп, чем вы занимаетесь в JetBrains?

Я занимаюсь общением. Моя работа — это поездки на конференции с докладами, работа с участниками конференций на стендах, технические статьи в разных источниках (например, на Хабре) и взаимодействие со студентами университетов.

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

В поездках на конференции тоже бывают неожиданные сюрпризы. Например, оказалось, что в казанском университете будущим разработчикам уже с первого курса читают язык Java, в Ульяновске считается куда более престижным писать на Java, чем на PHP.

Расскажите о новых технологиях JetBrains.

Вначале скажу о некоторых частных технологиях, которые связаны с деталями, за внимание к которым и ценят наши IDE. Например, в конце 2012 года, в платформе IntelliJ, той самой, что лежит в основе и всех наших IDE, и Android Studio от Google, появилось важное улучшение, позволяющее ускорить работу. Все инспекции (проверки кода) теперь описаны в XML-файлах, и при открытии проекта загружаются классы только тех инспекций, которые нужны для используемых в проекте языков.

Для веб-разработчиков важно, что в недавно вышедшей версии WebStorm 7 мы разрешили делать обновление результата на ходу в соседнем окне браузера, во время редактирования, для файлов HTML, CSS, Javascript и даже PHP, но только в режиме отладки. Раньше это делалось всегда при включенном режиме Live Edit и могло мешать разработчику.

Еще пример важной детали. При редактировании строки, в которой много полей, в новом редакторе базы данных (он, кстати, встроен во многие наши IDE — в IntelliJ IDEA Ultimate, в PhpStorm, RubyMine и PyCharm Professional Edition) можно «транспонировать» строку из БД — посмотреть на значения полей, выстроив их по вертикали, чтобы увидеть все сразу. Это, конечно, касается только визуального представления таблицы, в самой БД ничего не изменится.

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

На ваш взгляд, почему в Google взяли за основу для Android Studio платформу IntelliJ?

У Google был не такой уж большой выбор. Платформа Eclipse, для которой Google с первых дней существования Android делал плагин, перестала устраивать группу, которая в Google делает инструменты для разработки под Android, и они решили сделать собственную IDE от Google, куда можно интегрировать свои службы, тот же Google App Engine, например. По возможностям IntelliJ подходила отлично, а то, что она с 2009 года открыта под удобной Open Source лицензией Apache и активно развивается, подтолкнуло Google к этому выбору.

При этом в Google подчеркивают, что в будущем станут поддерживать и Eclipse тоже — все-таки тех, кто пишет под Android в Eclipse, в мире очень много.

Как сотрудничество JetBrains с Google в работе по созданию Android Studio повлияло на функциональность IntelliJ IDEA?

Мы добавили некоторую функциональность, которая была важной для интеграции с Android-плагином от Google, и теперь в IntelliJ IDEA используется тот же плагин, что в Android Studio. Например, в нем есть Layout Editor, графический редактор экранных форм для Android, так он полностью написан Google.

Здесь скорее позитивное влияние не в том, что в IntelliJ IDEA появится много нового, потому что Google как раз решил использовать платформу IntelliJ за уже готовую богатую функциональность. Улучшение в том, что унифицируется интерфейс для пользователя, а он привыкает к тому, что все работает сразу, без долгого допиливания, и в Android Studio, и в IntelliJ IDEA. И начинает ждать этого от любой IDE. Это в целом повышает стандарты в отрасли. И на динамику продаж тоже влияет позитивно.

Каковы особенности системы контроля версий от JetBrains? Что подтолкнуло к созданию своей VCS и что планируется в ней реализовать в ближайшем будущем?

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

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

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

IntelliJ IDEA обладает возможностью «понимания контекста». Не могли бы вы рассказать об этом подробнее?

Во-первых, понимается контекст языка. У вас есть код на PHP, который генерирует некий HTML, куда встроен Javascript, CSS еще какой-нибудь и, понятное дело, обращения к базе данных — SQL.

Хотите вы изменить, скажем, имя переменной в коде PHP, а оно совпадает с названием поля в базе данных и еще с чем-нибудь в HTML, и с именем переменной в Javascript. Так вот, IntelliJ IDEA разберется, что менять надо только имя переменной в коде PHP. Не всякая IDE с этим справится, тем более не справится обычный текстовый редактор. IntelliJ IDEA так умеет, потому что строит отдельное синтаксическое дерево на каждый язык, который используется у вас в проекте.

Или другой пример: вы пишете код, написали левую часть какого-то выражения и теперь используете автоподстановку для правой части. Обычно вам выдаются все варианты, которые IDE найдет, а в IntelliJ IDEA есть Smart Code Completion, когда IDE выдает только те варианты, которые подходят по типу, т.е. если слева у вас integer, то в автоподстановке не покажется выражение другого типа.

Совсем недавно JetBrains представила новую платформу Upsource. Не могли бы вы рассказать подробнее о ее назначении и функциональности?

Это продукт, который находится в активной разработке. Сейчас Upsource — это браузер кода с возможностью быстрой навигации по коду и с анализом кода. Поскольку он создан на основе наших разработок в IDE, возможности навигации, find usages и прочего, к чему привыкли пользователи IntelliJ IDEA, у него схожие, т.е. сделать там можно все, что требуется.

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

Сейчас Upsource поддерживает Java и Kotlin, и мы планируем скоро добавить новые языки. На сайте upsource.jetbrains.com вы можете уже сейчас с его помощью смотреть на исходники самой платформы IntelliJ и некоторые общедоступные библиотеки. Upsource дает посмотреть всю историю коммитов кода и умеет показывать различия между ними.

В чем назначение и особенности систем YouTrack и TeamCity? Кстати, система YouTrack была создана с использованием JetBrains MPS. Расскажите подробнее и о последней.

YouTrack — это система отслеживания заявок (issue tracker) и agile board в одном флаконе. Фактически на массив задач, которые относятся к конкретному проекту, можно смотреть и как на линейный список заявок, и как на набор swimlanes со своими задачами и статусами.

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

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

Например, можно сделать такие правила workflow, чтобы по ключевым словам в описании автоматически назначался ответственный за исполнение задачи или сразу устанавливалась подсистема в проекте, или создание нового тикета (новой задачи) в одном проекте вызывало создание задачи в связанном с ним проекте.

Правила workflow очень просто писать, для них придуман C-подобный язык, а редактор workflow, как и все прочие наши продукты, предлагает автодополнение и подсказки при написании правил.

MPS позволяет быстро конструировать предметно-ориентированные языки и IDE для работы с ними. Это довольно специфическая область разработки, и главный пример очень успешного его применения — это и есть YouTrack. Для него разработали два предметно-ориентированных языка — для своей базы данных, которая встроена в YouTrack, и для веб-интерфейса. Успех был и в скорости разработки, и в том, что нам проще изменять язык поисковых запросов в YouTrack, чем нашим конкурентам в их баг-трекерах.

Скажите, пожалуйста, какие решения вы можете предложить для кроссплатформенной разработки на C/C++?

Пока C++ поддерживается только в AppCode, нашей IDE для разработки под iOS на Objective-C, но мы планируем в этом году выпустить первую версию своей С++ IDE. Кроме того, наш главный продукт для платформы .NET, ReSharper будет поддерживать C++, но несколько позже, сейчас я дату релиза назвать не готов.

Что нового в ReSharper 8?

Если коротко, то улучшения и нововведения появились в автодополнении кода, навигации по коду, поддержке XAML, поддержке CSS, добавились новые рефакторинги и новый механизм коррекции ошибок «fix in scope», шаблоны для создания наборов файлов, стало проще работать с расширениями.

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

Этот новый продукт под названием ReSharper Command Line Tools можно использовать вместе с сервером непрерывной интеграции (например, с TeamCity) или c системой контроля версий.

Расскажите подробнее о новых возможностях декомпилятора .NET-сборок dotPeek 1.1?

Я, к сожалению, мало занимаюсь тем, что связано с платформой .NET, так что в ответ на этот вопрос, пожалуй, лучше предложу посмотреть список самых интересных возможностей dotPeek на нашем сайте: http://www.jetbrains.com/decompiler.

А с другой стороны, для меня dotPeek — пожалуй, самый близкий продукт из нашей линейки .NET. Задолго до того, как пришел в JetBrains, я занимался локализацией на русский язык одного Open Source-приложения на C#, duplicati, это бэкап-клиент, который может делать резервные копии в любые хранилища — Amazon S3, Rackspace Openstack, ftp, sftp, WebDAV, все что угодно.

И вот когда я делал модифицированную сборку, приложение неожиданно перестало запускаться. Помог именно dotPeek, ссылку на который я откопал где-то на stackoverflow. Проблема оказалась очень простой, но так как у меня не было никакого опыта с .NET, неожиданной: оказывается, в свойствах проекта была прописана конкретная версия .NET, а на моем ноутбуке она оказалась более новой. Без dotPeek, который вообще-то не для таких простых задач, я бы это быстро не обнаружил.

Что принес нового недавний релиз PyCharm 3.0 для разработчиков?

Прежде всего он принес PyCharm Community Edition — теперь разработчики, которые пишут на Python и не применяют веб-фреймворки, могут использовать базовую функциональность PyCharm бесплатно.

А платная версия PyCharm Professional Edition пополнилась поддержкой тулкита SQLAlchemy, фреймворков web2py и Pyramid, библиотек PyQt и PyGTK. Кроме этого, PyCharm 3.0 поддерживает поиск дубликатов в коде, а также новые инспекции и рефакторинги.

Что привело к созданию языка программирования Kotlin? Какие у него, на ваш взгляд, перспективы? Насколько он востребован и в каких отраслях?

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

В октябре 2013 года мы начали первую в мире олимпиаду по Kotlin, правила которой очень похожи на знакомый многим разработчикам ACM. Финал пройдет в апреле 2014-го в нашем офисе в Петербурге, можно на сайте kotlin.jetbrains.org/challenge следить за ходом олимпиады. Так как разработчиков, которые хорошо знают Kotlin, еще немного, на сайте олимпиады есть и инструкции, и примеры кода на Kotlin.

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

Причина появления Kotlin в том, что нужен был язык, более простой, чем Scala, но все-таки более удобный, чем Java. Перспективы — в определенных нишах — хорошие, насколько массовым он станет, сказать пока трудно. У нас есть один довольно серьезный внутренний проект, написанный на Kotlin, и нам результат нравится.

Кроме того, плагин для редактирования веб-страниц с одновременным просмотром результата, Live Edit, который очень популярен у пользователей WebStorm, тоже написан на Kotlin и транслирован в JavaScript.

Можно ли узнать об особенностях процесса разработки в JetBrains — от появления идеи до ее практического воплощения и продвижения?

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

С другой стороны, «подход Valve» (по названию одноименной американской компании), который мы фактически практикуем — когда менеджеров почти нет, а разработчики занимаются только тем, что им интересно, — имеет и обратную сторону: некоторые задачи может оказаться некому делать. Поэтому одни идеи воплощаются быстро, а другие, которые не показались привлекательными никому из разработчиков, могут месяцами ждать своего часа.

Какое программное обеспечение используете/предпочитаете для работы?

Большинство разработчиков в JetBrains используют Mac OS или Linux, у некоторых стоит Windows 8. У меня еще Windows 7, поскольку я часто езжу на конференции, лучше использовать что-то консервативное, так как на конференциях часто нет ни новых проекторов с HDMI, ни переходников для Mac, да и презентации часто просят присылать в формате PowerPoint, а не Keynote.

Почти все разработчики используют браузер Chrome, а я уже больше года использую Яндекс.Браузер, он мне эстетически приятнее.

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

Разумеется, в качестве инструмента разработки в JetBrains все используют IntelliJ IDEA. Во-первых, она самая лучшая. А если в чем-то она не кажется нам самой лучшей, то это самый сильный мотив ее такой сделать. Во-вторых, только пользуясь своим продуктом, можно по-настоящему понять, что в нем надо менять и к чему надо стремиться.

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

Какие у вас требования к аппаратной части?

Наши продукты написаны на Java или на C#, так что все, на чем с разумной скоростью работает Java и .NET, годится. Опыт показывает, что большинство разработчиков в мире сейчас стараются иметь компьютер с 8 Гб памяти и самым большим из доступных SSD. Остальные параметры подбираются по вкусу, поскольку на скорость работы они влияют мало. Но это конфигурация с хорошим запасом, а если вы пишете сайт на PHP+HTML с удаленной отладкой на хостинге, то вам понадобится значительно менее мощный компьютер.

Используете ли облачные технологии и сервисы, а также социальные сети в своей работе?

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

Мы сейчас запускаем олимпиаду по языку Kotlin, и весь веб-сайт и создавался, и тестировался, и теперь развернут на Amazon. На примере олимпиады можно проследить и как мы используем социальные сети: мы пишем в твиттер, который для нас — отличный инструмент обратной связи, у олимпиады есть страница ВКонтакте.

Кроме того, с давних пор каждая продуктовая команда ведет собственный блог на blogs.jetbrains.com.

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

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

Разработчики сами стали предлагать облачные сервисы, например, у нас можно купить лицензию на YouTrack, чтобы поставить его на свой компьютер, а можно заказать у нас экземпляр YouTrack в облаке. Одно из самых интересных новых облаков — сервис Manta от компании Joyent, который предлагает гигантское хранилище данных с встроенным обработчиком MapReduce, они обещают онлайновую обработку запросов к хранилищу даже при постоянном гигабитном входящем потоке данных.

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

Будут развиваться дальше и системы совместной работы, code review, парного программирования. Не обязательно это будет в форме веб-сервисов в облаке, но в облаке такие услуги точно станут предлагать.

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

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

Мы много участвуем в конференциях в разных странах мира. В этом году мы стали чаще ездить на конференции в России, Украине и Белоруссии, нас можно увидеть на встречах разработчиков или студенческих конференциях во многих городах. Сами мы организуем либо небольшие семинары и тренинги, либо мероприятия покрупнее.

В сентябре 2013 года мы впервые (и очень успешно!) попробовали формат JetBrains Day — небольшую конференцию с двумя параллельными потоками докладов. Собрали в шведском городе Мальмё больше 100 разработчиков. Доклады были только от наших команд о том, что мы нового делаем, что готовим, как эффективнее использовать наши разработки.

Если говорить о чисто образовательных проектах, то мы поддерживаем Computer Science Center, в котором предлагают бесплатную двух-трехлетнюю программу очных вечерних занятий по самым востребованным сейчас ИТ-специальностям для людей с любым образованием.

Кроме этого, мы поддерживаем Академический университет — он предназначен для тех, кто уже получил бакалаврский диплом и хочет продолжить образование. Там на кафедре математических и информационных технологий можно пройти двухлетний очный дневной курс обучения по магистерской программе. На кафедре есть три специализации: теоретическая информатика, разработка программного обеспечения, алгоритмическая биоинформатика.

И еще на матмехе СПбГУ работает лаборатория JetBrains — для студентов факультета. Там сейчас в нескольких интересных проектах заняты 20 студентов, половина из которых — уже второй год.

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

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

Я стараюсь выдерживать горизонт планирования примерно в полгода, сейчас график конференций составлен до января 2014-го. Так что про следующий год могу сказать немного: надеюсь, что удастся съездить на CodeFest в Новосибирск, на SECON в Пензу, на ULCAMP в Ульяновск. Зимой рассчитываю, что мы организуем десант на PyCon Russia, потому что в 2013 году поездка туда была очень удачной.

А до Нового года будет несколько конференций в России с нашим участием: в декабре планируем серию workshop для студентов в Челябинске и Казани.

Рассказываю я в основном об интеграции инструментов разработки (IDE — баг-трекер — сервер непрерывной интеграции), внутреннем устройстве наших IDE на примере IntelliJ IDEA и управлении проектами.

Беседовал Игорь Штомпель. Впервые опубликовано в журнале «Системный администратор».