May 23rd, 2020

Почему JetBrains не напишет легковесную IDE

Еще в 2011 я публично отказался от ИДЕ и так с тех пор и живу: TextMate, Vim, Sublime, LightTable, VS Code, снова Sublime.

И вот год назад я устроился в JetBrains. Нет, мое отношение не поменялось: я все еще считаю, что в ИДЕ программировать не надо. У меня на столе усердно копится папочка Annoying IDE(A), а Джаву и Котлин я все так же пишу в Sublime Text.

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

Сейчас, посмотрев на Idea, и на Java-тулинг, и на Android Studio, я понимаю, что это принципиальное противоречие: в самой идее IDE заложена сложность, кривость и неудобство. Легковесная IDE не может существовать, потому что мир вокруг сложен.

Давайте подумаем, что ИДЕ нам дает. Syntax highlighting, Go to definition, Find usages, Show hierarchy, Structural rename, и допустим Run configurations, то есть возможность все это как-то запускать (в том числе и под дебаггером). Все это сами по себе вполне легковесные функции, так-то. Легко представить их чисто интерфейсно в, скажем, в Vim или VS Code, ничего принципиально сложного или развесистого они в себе не несут. Так в чем же проблема?

Проблема в том, что чтобы они работали, нужно вот прям все-все знать о проекте в целом. Язык программирования, допустим, маленький и фиксированный, с ним просто. Поэтому Syntax highlighting, для которого дальше одного файла смотреть не нужно, есть в самых легковесных редакторах. А вот как проект настроен и как билдится, вот тут-то адок и начинается. Миллионы билд-систем, некоторые из которых императивные и тюринг-полные, два миллионна фреймворков, миллион в квадрате интеграций, все это кривое, косое, уникальное, как блядь снежинка, общается друг с другом не пойми как, пишет файлы, теряет файлы, не видит очевидного, лезет куда не нужно, зависит друг от друга, ломается и занимается при этом довольно тривиальными вещами, что обидно.

Особенно меня впечатлила Android Studio. Она как бы на основе Idea, но делается гугловцами. Гугл, как известно, принципиально не может ни во что простое и понятное, но тут это возведено в принцип. Android Studio — это не продукт, это папка scripts на всех языках мира, собранная напрямую с машин разработчиков гугла, поверх которой натянут разве что чудом не разваливающийся интерфейс, который хочется пристрелить из жалости. Если бы в мире Mad Max писали программы, их писали бы именно как Андроид Студию.

При этом Андроид Студия это и есть ИДЕ в самом чистом виде: адок, который хоть как-то работает и который хоть во что-то скачиваемое упакован. Это и есть его основная польза. Проблема не в том, что ИДЕ плохо сделана, проблема в том, что от нее хотят работы с вещами, которые сами по себе безумно сложные. Почему они сложные — ну, ответ в человеческой природе, человек слаб, и да, это сложность на пустом месте, только для ИДЕ это данность, а не пространство для дизайна. Как только ИДЕ станет легковесной, она перестанет быть ИДЕ.

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