Найти тему
letsCode

GUI или консоль? Шокирующая правда

Оглавление
Люк, переходи на тёмную сторону силы, у нас есть печеньки...
Люк, переходи на тёмную сторону силы, у нас есть печеньки...

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

  • где варианты выбора действий?
  • почему я должен заучивать какие-то команды?
  • где моя многозадачность и возможность таскать окошки?

Другой лагерь, проникшийся дзеном текстового интерфейса люто негодует:

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

Данный спор является заслуженной дисциплиной в холиварах компьютерных гиков с далёких времён, когда и 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 предоставляют автокомплит либо сами, либо после установки простых плагинов, а последние двое и вовсе умеют подкрашивать пользовательский ввод

Шелл fish с подсветкой синтаксиса и отображением текущей ветки git
Шелл fish с подсветкой синтаксиса и отображением текущей ветки git

Если вам нужно несколько консолей на одном экране - для этого даже не нужен GUI, давно в наличии имеется простой и понятный инструмент tmux.

3 консоли в одной: сверху - fish, снизу слева - ctop, справа - htop
3 консоли в одной: сверху - fish, снизу слева - ctop, справа - htop

Продолжать можно долго и многие очень удобные и полезные инструменты есть только в консольном виде и доступны всегда, без поиска ярлычка на рабочем столе или в сотнях вложенных меню. Собственно поиск в меню по названию - это вернулось в 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