До меня дошло, что не так с ИДЕ. То есть, я и раньше их не любил, но по косвенным причинам. Они тормозные, много кнопок, требуют регистрации и подписки и все в таком духе. Но это только внешнее.

На самом деле, мое пренебрежение исходит от их убогого предназначения. Задача ИДЕ – научиться понимать код и угадывать, что хочет программист. Поясню на примере с PyCharm, де-факто ИДЕ для Питона.

Предположим, есть у меня файл “foobar.py” где сверху написано import datetime. Открываю его в ИДЕ. Запускается много-много Джава-кода, который парсит файл грамматиками. В результате ИДЕ знает, что импортирован модуль времени. Теперь каждый раз после "datetime." (с точкой на конце) будет появляться выпадашечка с функциями этого модуля.

Не уверен, что выражаюсь ясно, но все же: здесь мне видится некто третий лишний. У меня есть Питон. Есть программа на Питоне. Если я загружу ее в интерактивный сеанс ipython, то получу полный контроль над системой. Что загружено а что нет, на какие классы и переменные могу сослаться и так далее. Автодополнение по табу будет работать идеально, потому что его отдает интерпретатор. А он, в свою очередь, берет данные из памяти самого Питона. Он последняя, самая надежная инстанция.

В самом деле, кто лучше знает, что там в Питоне загружено: процесс Питона или посторонняя Джава?

Но нет, мы пишем код на Джаве, который пытается делать это лучше каноничной реализации. Иногда нормально выходит, иногда полная лажа. Когда написано “import time”, ошибки быть не может. А вот пример с импортом в рантайме:

try:
    import json
except ImportError:
    try:
        import simplejson as json
    except ImportError:
        from django.tools import json

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

Предположим, у меня установлены все три библиотеки. Вопрос, на какой именно остановится ИДЕ? Она вообще это распарсит? Предположим, да. Но опять-таки, это не будет честное выполнение кода. Ведь ИДЕ не исполняет код в настоящем интерпретаторе. Если я напишу "os.system('rm -rf')", ничего не удалится.

Я уж не говорю о динамических вещах типа подключение модуля в зависимости от аргументов командной строки. Или вызов функций из проприетарной dll. Все это случается в полете. На момент редактирования кода ИДЕ ни хрена об этом не знает.

Вы с подобным не сталкивались? Поздравляю, а у меня было. Такое программирование сводится к обезьяне: поправил – запустил – упало, поправил – запустил – упало. Прямо как первый скрипт на Перле.

ИДЕ это в общем случае убогое подобие интерпретатора, который парсит текст и собирает смысл по крупицам. Этакий программист-даун. Он знает, что есть классы Person и PersonManager и даже какие аргументы им передавать, но что случится в процессе работы – не знаю, не научили.

Это костыль, который мы сами воздвигли.

Или вот Докер: ты не можешь запустить 10 строк на Js или Питоне, потому что зависимостей на 30.000 файлов. Вместо того, чтобы доработать платформу и компилировать один файл, мы запихаем все говно в контейнер на 200 мегабайт и ладушки.

Джава-разработчик не поймет зачем в проде Докер. Лисп-программист не поймет зачем нужна ИДЕ. Потому что с бородатых времен любая Лисп-система запускается как машина с состоянием. Подключаешься к ней из редактора, загружаешь в машину код и… чудо! Редактор знает о системе абсолютно все. На той стороне не поделка на Джаве, а сама система, процесс, где прямо сейчас вертится ваш код. А в отдельном окошке (REPL) можно прогнать какой угодно сценарий.

Словом, улучшать нужно не ИДЕ, а целевую платформу. Чем меньше коммерческих костылей ей нужно со стороны, тем она совершенней.

ИДЕ для Питона должна быть написана на Питоне и взаимодействовать только с Питоном. Это я не на конкретный ЯП взъелся, замените Питон на что угодно. Если язык не может покрыть свои же нужды, не стоит им заниматься.

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