Большинство разработчиков (да чего уж там, почти все) периодически сталкиваются с работой в консоли и использованием консольных инструментов. Многие при этом испытывают почти физическую боль от непонимания, что происходит:
- где варианты выбора действий?
- почему я должен заучивать какие-то команды?
- где моя многозадачность и возможность таскать окошки?
Другой лагерь, проникшийся дзеном текстового интерфейса люто негодует:
- зачем так много элементов интерфейса?
- почему конфигурации не в текстовых файлах?
- почему я не могу решить это скриптом?
- почему я должен вообще трогать мышь?
Данный спор является заслуженной дисциплиной в холиварах компьютерных гиков с далёких времён, когда и Windows-то не существовал, но холивар уже вёлся, как и всегда, когда сталкиваются несовместимые интересы... Хотя стоп. А несовместимые ли? Вроде как автор этих строк (ярый консольщик) с удовольствием пишет этот текст в Kubuntu и браузере Chromium, а не упражняется в ловкости рук в кошерной консольной lynx. Но при этом на соседних рабочих столах (опять GUI) у меня открыты порядка 7 консолей под разные нужды.
Обсудим плюсы и минусы обоих интерфейсов
Оба интерфейса работы с компьютером равнозначны, но при этом предназначены для разных задач. И там, где рядовой пользователь с удовольствием жамкает нарисованные кнопочки, программист предпочтёт обойтись скриптом или парой-тройкой команд. Неужели вы бы предпочли настраивать разворачивание серверов путём накликивания конфигов в чём-то подобном мастеру установки Windows (не просто "далее-далее-ок", а прям с кучей полей ввода)? Или вам сильно нравится разбираться с графической консолью управления AWS (представьте, что у вас там порядка двух-трёх сотен серверов и прочих ресурсов)?
Ок. Если взять что-то более приземлённое, с чем разработчик не devops сталкивается ежедневно, вроде запуска приложения в режиме отладки и прочего обслуживания процесса разработки? Но и тут гораздо удобней добавлять зависимости коротким `yarn add reactjs` или простым копированием зависимости в конфиг gralde. Вряд ли добавление зависимости в графический интерфейс обошлось бы менее, чем 3-4 клика мыши и вставке текста (а то и вовсе в нексколько полей).
Можно предположить, что у нас нет графического интерфейса потому что текстовый проще (тут готов спорить) и разработчики ленятся проектировать кросплатформенный удобный GUI для всех платформ. Но это опять не так. Многие задачи практически невозможно довести до состояния понятного интерфейса и проще их оставить в текстовом виде для упрощения и ускорения взаимодействия. В качестве примера могу привести окно настроек любой IDE или личный кабинет разработчика или рекламодателя в любой социальной сети, при том, что конфигурация большинства IDE хранится как раз в конфигах.
Console
Опять-таки, из-за того, что консоль давно и прочно заняла место на машинах разработчиков и системных администраторов, она обросла большим количеством средств, помогающих использовать её гораздо эффективней. Очень многие консольные инструменты используют автодополнение команд, имеют отлично расписанный help с примерами команд (тот же git вообще в ascii графике рисует деревья с коммитами до и после команды). Все ныне используемые шеллы вроде bash, zsh и fish предоставляют автокомплит либо сами, либо после установки простых плагинов, а последние двое и вовсе умеют подкрашивать пользовательский ввод
Если вам нужно несколько консолей на одном экране - для этого даже не нужен GUI, давно в наличии имеется простой и понятный инструмент tmux.
Продолжать можно долго и многие очень удобные и полезные инструменты есть только в консольном виде и доступны всегда, без поиска ярлычка на рабочем столе или в сотнях вложенных меню. Собственно поиск в меню по названию - это вернулось в GUI из-за неоспоримой скорости поиска посредством текстового ввода.
GUI
Но эта статья не про восхваление консоли, а про сравнение интерфейсов. И настала очередь понять, когда консоль позорно сливает ввиду конструктивных особенностей. И таких мест много
Во-первых это везде, где нужна графика, где нужны картинки и анимация. Никакая ascii графика не поможет работать в Photoshop или AutoCAD. Без графики я бы не смог подготовить видео для канала (кстати - https://www.youtube.com/letscodedru проходим и подписываемся), а вы бы не смогли его посмотреть, не будь графических браузеров. Современные игры - это сплошь графический интерфейс. Ну и сложные графики, точность их отрисовки в текстовом режиме не слишком-то и хороша.
Во-вторых графический интерфейс нужен везде, где мы отображаем большой объём информации, которую необходимо воспринимать целостно. А это всевозможные dashboards, аналитические отчёты, где нужно читать текст и сравнивать прочитанное с текстом и графиком одновременно.
Гибкость консоли не особо позволяет размещать большое количество визуально сложной информации на одном экране. Да и зачем? Никто не заставляет нас выбирать "или-или".
Вывод
К счастью, мы давно научились дружить консоль и GUI. Многие инструменты из консольного мира удобно запускаются из меню IDE. Никто не запрещает конфигурировать даже реестр Windows через консольные скрипты. Да и в целом, Microsoft поняла важность консоли и добавила в свои продукты полноценную виртуализацию linux, чем подарила разработчикам всего мира доступ к целому вороху действительно крутых и мощных консольных приложений, которые до этого можно было запустить только через боль и страдания.
Если вам интересна эта тема - пишите в комментариях и я обязательно сниму несколько видео про свои любимые консольные приложения и про то, как я их использую в ежедневной работе. А также, как любой иструмент либо интегрируется, либо уже заинтегрирован с моей любимой IDE - IDEA/PyCharm
➡ YouTube: https://www.youtube.com/letsCodeDru
➡ Второй канал: https://www.youtube.com/geekChatDru
➡ Twitch: https://www.twitch.tv/drucoder
➡ Наш Тви: https://twitter.com/letsCodeDru
➡ Чат в Телеграм: https://t.me/joinchat/FeiP9xEhqHajfqhLr4z-Nw
➡ Канал в Телеграм: https://t.me/letsCode_dru
➡ Сервер Discord: https://discord.gg/xs6XxSx