Впечатления от IntelliJ IDEA после года работы с ней, а также классика на тему Vim vs IDE

29 июня 2015

Мой первый подход к IntelliJ IDEA состоялся в середине мая 2014 года. Месяц или полтора я к ней принюхивался, выяснял, есть ли там все нужные мне хоткеи, потому что, работая с Vim, я привык все делать клавиатурой, ну и такого рода вещи. Убедившись, что все в порядке, я стал использовать IDEA в качестве основного редактора кода. Поначалу писал в ней на Erlang и немного на Haskell, а спустя пару месяцев — на Scala. Ну и на Java с Kotlin пописывал немного. Так незаметно пролетел целый год. И сегодня я хотел бы рассказать про все, что удалось выяснить об IntelliJ IDEA за это время — плюсы, минусы, вот это все.

Начну с минусов:

  • Не столько минус, сколько информация к сведению. Не все языки одинаково хорошо поддерживаются в IDEA. Достоверно известно, что хорошо поддерживаются Java, Kotlin и Scala. Erlang, насколько я припоминаю, тоже поддерживался хорошо. Для большинства других языков, которые я пробовал, всякие там Rust, Go, Haskell и прочие странные никому не нужные языки, либо реализована только подсветка синтаксиса, без нормального автокомплита, перехода к определению, рефакторингов и так далее, ну либо они реализованы, но работают абы как. Следует однако отметить, что даже в таких случаях IDEA не хуже Vim как минимум;
  • Исключительно редко, но бывает, что наталкиваешься на баги. Нажал shift-shift, нашел нужный класс, а диалог поиска не закрывается. Или пишешь такой код, и в какой-то момент раз, пропал курсор. На совсем. В первом случае удается как-то выкрутиться, во втором IDE приходится перезапускать. Но еще раз отмечу, что случается такое не часто. Можно неделями спокойно работать и не знать бед;
  • Поддержка некоторых вещей оставляет желать лучшего. Настроил ты флаги в build.sbt, что везде -Xfatal-warnings, в одном подпроекте -deprecation:true, а в другом -deprecation:false. Сам sbt собирает все без проблем, а IDEA не собирает, потому что у тебя deprecation warning в подпроекте, где -deprecation:false. А потом, спустя какое-то время — раз, и уже все собирается, хотя ты ничего не менял. Также поддержка Play Framework меня расстроила как в бесплатной, так и в платной версии IDEA. Половина кода подчеркивается красным, автокомплит работает через раз — такого рода проблемы;
  • Кое-что работает не самым очевидным образом. Так, чтобы Scala Console нормально работала в одном из подпроектов, видела все пакеты из него и так далее, нужно запустить Scala Console, закрыть ее, затем открыть Scala Console в Run Configurations и изменить модуль в выпадающем списке на нужный. Если не знать, где искать, можно очень долго разбираться или даже решить, что Scala Console сломана;
  • В некоторых случаях IDEA может заметно подтормаживать. Например, если у вас в проекте есть файл из 5000 строк кода на Scala. Разбивайте такие файлы на файлики поменьше и проблема уйдет;
  • IDEA несколько требовательна к ресурсам. По умолчанию она выделяет до 512 Мб на x86 и до 768 Мб на x64. При крупном рефакторинге даже 768 Мб становится недостаточно, поэтому у меня лично в файле idea64.vmoptions сейчас прописано -Xmx1024m. Нужно отметить, что при этом IDEA делает действительно много полезного и 1 Гб памяти не такая большая проблема даже на моем стареньком запасном компьютере, которому уже 2.5 года;
  • Суммарно я, наверное, дня три пытался разобраться, почему проект в IDEA переставал собираться после перехода на Scala 2.11 и JRE 8. В SBT все отлично собиралось при этом. Общее правило в таком случае — клонируйте проект в новый каталог и импортируйте с нуля. А также, если есть возможность сидеть на community edition, сидите лучше на ней. У меня сложилось такое впечатление, что поскольку поддержка языка Scala в ultimate edition и community edition разная, а пользователей, видимо, больше у последней, то там и поддержка Scala более стабильна за счет большего числа пользователей и их багрепортов;
  • Очень страшно ставить апдейты плагинов, а также апдейты к самой IDE. Нередко что-то ломается. Однажды сломали Scala Console — не работало сочетание Ctr+Enter. Что-то может начать работать чуть-чуть не так, как работало раньше. Раньше переход к определению case class’а работал как по Ctr+B, так и по F4, а сейчас он работает только по Ctr+B. Понятное дело, если ты привык всегда пользоваться F4, выглядит это так, словно переход сломался. После обновления IDEA с версии 13 на версию 14 вообще была большая проблема снова заставить проект компилироваться. Либо внимательно тестируйте апдейты самостоятельно в виртуалке, либо совсем отключите их и ставьте новую IDEA в отдельный каталог раз в год, кучу нервов сэкономите;

Ну а теперь — о хорошем:

  • IDEA действительно является мощнейшим редактором исходного кода. Здесь есть не только классические подсветки синтаксиса, табы, фолдинг и несколько буферов обмена. Переходы к определению, автокомплит с учетом нужного в контексте типа, автоматическое добавление нужных импортов, а также оптимизация импортов с удалением ненужных, встроенное отображение документации и типов, подсказка по аргументам, переименование аргументов, переменных и модулей буквально за секунду, быстрое указание возвращаемого типа у метода, всякие подсказки в стиле «чувак, а ты вот тут написал filter(...).size, давай заменим на count(...)» или «ой, а ты тут не заимплементил еще два метода нужных вот этому трейту, давай их добавим». Жмешь там, где подсветило желтым цветом, Alt + Enter, снова Enter, и код моментально исправлен за тебя. Многое из названного есть в Scala Console, что делает ее намного удобнее обычной sbt console. Все это действительно дает просто дичайший прирост к производительности. Попробовав однажды вы больше никогда не захотите возвращаться ни на какие Vim;
  • Есть еще просто дофига того, чем я лично не пользуюсь или пользуюсь очень редко. Интеграция с Git и другими системами контроля версий, встроенный мощнейший отладчик, встроенное определение степени покрытия кода тестами, построение диаграмм классов и переходы по иерархиям вверх и вниз, встроенный декомпилятор байткода Java. Подозреваю, что есть еще немало такого, о чем я еще и не догадываюсь;
  • Требовательность к ресурсам и тормознутость IDE, ровно как и языка Scala, на которой я сейчас большую часть времени пишу, или там JVM, оказалась очень сильно преувеличена. Как уже отмечалось, даже на далеко не самом новом и не самом крутом ультрабуке отлично пишется вполне крупный и реальный проект, и свободных ресурсов при этом остается вагон. Удивительно, но на этом ултрабуке компиляция проекта с нуля занимает даже на несколько секунд меньше времени, чем на моем основном компьютере, уж сам не знаю, почему. Кроме того, IDE можно отлично пользоваться на 13-и дюймовом мониторе, я сам долгое время так писал;
  • Впервые на моей практике в команде нет срачей из-за code style или такого, что кто-то ставит для оступов табы, а кто-то три пробела. Все сидят под IDEA и код форматируется автоматически. Более того, никто не ругается по пол дня из-за вещей вроде как более правильно назвать метод и не докапывается во время code review до мелочей вроде однобуквенных переменных. Все по той причине, что переименовать класс, методы или переменную занимает реально одну секунду и назвать их в любой момент можно абсолютно как угодно. Когда в команде пользуются вимами или саблаймами, такие вещи постоянно вызывают споры, потому что потом исправить отступы или переименовать функцию будет требовать довольно большого количества времени. Как результат, благодаря использованию IDE продуктивность команды значительно выше;
  • Предвидя кажущееся остроумным замечание в комментариях, что из-за IDE программисты начинают мириться со сложностью, и потому пишут сложный код, отмечу, что это совсем не так. Программисты, которые не пользуются IDE, говнокодят точно так же. И они куда терпимее относятся к файлам на 5-10 тысяч строк кода. Разница в том, что когда сложность накопилось, IDE позволяет за один-два рабочих дня отрефакторить половину проекта, избавившись от этой сложности. А вот при использовании обыкновенных редакторов со сложностью действительно приходится мириться, потому что другого выбора особо и нет;
  • Все названное выше вы получаете готовое из коробки. Поставил и пиши код. Vim и другие редакторы нужно постоянно донастраивать под конкретный язык. Зачем, если есть готовое и оно по всем параметрам не хуже? Ну поставьте в крайнем случае еще и Vim Plugin, если уж вы так сильно привыкли к Vim. Или вот представьте, что к вам в команду пришел новый человек и он никогда до этого не писал на используемом у вас языке, а может и вовсе не программировал. Что проще — научить его пользоваться IDEA, или научить его пользоваться Vim и после этого еще настроить Vim под язык? Будет потрачена огромная куча времени, а по функционалу все равно будет сильно хуже того, что предлагает IntelliJ IDEA;
  • Несмотря на все озвученные выше недостатки IDEA, видно, что с новыми релизами она становится заметно лучше, чем было до этого, что радует;

Vim я пользовался намного больше лет, чем IDEA. Я был одним из тех людей, которые высмеивали пользователей IDE, что дескать эти IDE все тормозные, подсветка кода и табы у меня и в Vim есть, а рефакторинги приходится делать так редко, что их поддержка и не требуется. Не знаю, как на счет NetBeans или Eclipse, но в отношении IntelliJ IDEA я был неправ совершенно точно. Есть, конечно, названные выше неприятные проблемы. Но если представить, что это цена за получаемые в обмен преимущества, то это примерно как купить автомобиль по цене планшета.

Писать в IDEA даже на таком требовательном к ресурсом во время компиляции языке, как Scala, можно на любом современном и даже не очень ноутбуке. Быть может, это стало возможным относительно недавно, например, после выхода JRE 8 или Scala 2.11, не знаю, но сейчас это так. Притом вы из коробки и совершенно бесплатно получаете инструмент, который куда мощнее любого другого известного мне редактора. Я чувствую, как моя производительность увеличилась просто в разы. Пусть даже я обманываю себя, и на самом деле — только в 1.5 раза, оно оно все равно того стоит. Вам знакомо пьянящее чувство, будто ты всю жизнь ползал и вдруг начал бегать? Вот я испытываю его, и поэтому никакими коврижками меня на Vim в качестве основного редактора не вернуть. Разве что так, конфиги поправить, для такого рода вещей.

Дополнение: Небольшой обзор Sublime Text и шпаргалка по хоткеям

Метки: .

Понравился пост? Узнайте, как можно поддержать развитие этого блога.

Также подпишитесь на RSS, Facebook, ВКонтакте, Twitter или Telegram.