GUI vs. CLI — последняя битва

    Настоящими программистами считается, что ничего лучше интерфейса командной строки пока не придумали и никогда не придумают, потому что лучше уже некуда. Естественно, хочется поспорить.

    Чтобы лучше понимать друг друга, давайте разговаривать об абстрактных апельсинах. Представьте себе Автокад, если слышали или доводилось попробовать. Можно Иллюстратор или КорелДро, что-нибудь далекое от программирования, чтобы абстрагироваться и рассуждать непредвзято. Почему они не могут работать в консоли?


    Рис. 1. Абстрактный интерфейс в вакууме.

    Первое: нужно иметь общую картину происходящего. Писать команду (get-lines) и получать честный список (((0 12) (5 12)) ...) неудобно для человека. Пытаться с помощью команд понять текущую ситуацию — это обмениваться через замочную скважину записками о том, как пахнет ветер и как звучит музыка (по выразительности) и чистой воды бюрократия по методу, когда справку выдают только по правильно составленному заявлению, о своей ошибке вы узнаете только после подачи, и в будущем заявление придется писать снова и снова. А, да, чтобы узнать, какие запросы вообще можно подать, надо делать отдельный запрос.

    Один взгляд на общую картину может сразу все прояснить для человека, тогда как над запросами надо думать, надо интерпретировать результаты (каждый ответ — это своя проекция информации, что не способствует ни составлению ментальной модели, ни выработке привычки). На достаточно емкой схеме разные люди могут увидеть каждый свое — то, что сейчас интересно. Короче, лучше один раз увидеть.

    Второе: непосредственное взаимодействие. В графическом интерфейсе человек может двигать сами объекты, в консольном же ему нужно решить уравнение «какую переменную и как изменить, чтобы решение изменилось так, как я хочу». Он оперирует в одном пространстве, задача у него в другом, правила перевода формализвоаны в одну сторону (команда → задача), а решать нужно обратную задачу. По ощущуениям примерно как прототипировать макет сайта сразу в хтмле. Возвращаясь к бананам, я могу взять конец отрезка и перетащить его к концу другого отрезка (соединить). Я вижу, что надо сделать, и я делаю именно это.

    Кому-то может показаться, что напротив, интерфейс в стиле запрос-ответ более естественнен для человека — ведь именно так мы строим диалог с людьми в жизни. Посчитайте количество действий и сравните. В гипотетической консоли я:
    1. дожен как-то указать, какой отрезок двигать, т.е. сочинить и проверить запрос на поиск отрезка по уникальному признаку; признак тоже предстоит придумать;
    2. аналогично найти конец второго отрезка;
    3. отдать команду и передать ей результаты выполнения предыдущих команд;
    4. как-то удостовериться, что произошло то, что нужно, и только то, что нужно;
    5. убедиться, что именного этого я и хотел.
    Готов поспорить, что ничего из того, что я написал, непонятно без примера. Возьмем гит как один из наиболее ярких примеров неуместного применения интерфейса командной строки, за который, впрочем, многие внешне неглупые люди совершенно напрасно готовы ломать копья. Вот я пришел утром на работу и зашел в папку с репозиторием. Что происходит? На чем я остановился? В какой я ветке? Все ли я вчера закоммитил? Запушил? Появилось ли что запуллить? После пулла, каким боком прицепились мои коммиты? Какова структура репозитория? В консоли это всё — отдельные команды. Чтобы мне включиться в работу, надо около семи заклинаний набрать, запустить и собрать результаты воедино в голове. Это к наглядности и общей картине. Единственное, хоть структуру репозитория гит рисует графически (ну, псевдографически — но это уже не консоль, это убогий гуй).


    Рис. 2. Вывод команды git log --graph --pretty=oneline --abbrev-commit. Воспроизведете по памяти?

    Про непосредственное взаимодействие тоже интересно. Глядя на дерево в gitk, не составляет большой проблемы разобраться в том, что сейчас происходит, даже в середине сложного мержа или какой-то еще хитрой трансформации. А вот перевести это в команды уже сложнее. Например, я понимаю, что нужно вот начиная с этого коммита все ченжсеты перенести в другую ветку. Но какой командой? На текущий момент их штук пять, все со своими особенностями, они зависят от где я нахожусь и куда хочу попасть, и обычно н делают то, что мне нужно, то есть их нужно комбинировать. Каждый раз я с трудом решаю эту загадку (shame on me, мог бы и зазубрить к моим-то годам), жутко бешусь от своего бессилия (все понимаю, а сказать не могу) и совершенно справедливо таю злобу за созданный на пустом месте квест.

    Но даже если сделать команды более прямолинейными, все равно останется проблема — мне придется в одном окне смотреть на дерево репозитория и потихоньку переписывать хэши ревизий в другое. То есть, опять-таки неясно, в чем бонус.

    А теперь о хорошем. Гибкость. Мощь. Пельмени. Я не глупец и не стану спорить с тем, что bash + unix utils связка мощная. Только восторги тут обычно связаны с тем, что bash — это такой REPL скриптового языка для файловой системы, который ее интерфейс удачно дополняет (см., например, как он встроен в mc или Far, и да, это не интерфейсы командной строки). Иметь в программе скриптовый язык с REPL-ом хорошо, это делает интерфейс пригодным для более сложных задач. (Эрудированный читатель знает, что и в Автокаде есть лисповая консоль, и все перечисленные страшные вещи в ней можно делать — искать объекты, двигать линии). Но в силу описанных выше причин помните, что это обмен удобства использования на гибкость, именно поэтому в cli возможны только простейшие утилиты-функции. И именно в этом суть и гениальность графического интерфейса.


    Рис. 3. Командный режим Автокада.
    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 32

    • UFO just landed and posted this here
        +6
        > К чему рассуждения «что лучше»?
        Эти рассуждения более чем актуальны, но только в контексте конкретной задачи, а не при рассуждениях в общем на тему…
        • UFO just landed and posted this here
          –1
          Просто аффтар жжот, но писать бы ему больше не надо ;)
          Холивар решил развести, трольчатинка.
            0
            трольчаинка — мясо молодого тролля?
            0
            А где вы увидели, что я утверждаю, что что-то всегда лучше? Вообще топик про то, чем ГУИ принципиально отличается от КЛИ. Эти отличия нужно знать, чтобы делать осознанный выбор.
            • UFO just landed and posted this here
                0
                Извините, вас конкретно не хотел обидеть.
            +21
            Признайтесь, где-то попали в холивар вида «Тяпка vs Лопата». Где вас затроллили, и вы в отместку решили разнести свою точку зрения на весь рунет. И это в споре который всегда (если стороны адекватны) заканчивается так: «Тяпкой удобно тяпать, лопатой удобно лапать копать.»
              0
              Мм, не угадали. А вот непонимание сущностных различий между гуём и командной строкой меня действительно беспокоит. Хотел просветить, а народ решил, что это холивар и троллинг. Наверное, слишком острая тема.
              +11
              имхо Автокад — хороший пример того, как может быть полезна консоль в гуевом приложении.
                +1
                Внезапно, именно это и написано в последнем абзаце.
                +10
                > GUI vs. CLI — последняя битва

                Да нет никакой битвы.
                Глупо вот так абстрактно сравнивать два различных принципа пользовательсткого взаимодействия с интерфейсом без какой-либо конкретики. Все вменяемые пользователи и разработчики прекрасно понимают, что для разных задач лучше или хуже может подходить разный интерфейс. О чём тут спорить?
                  –2
                  Хотел бы я жить в том мире, где все это прекрасно понимают. Однако, даже комментарии к этому топику показывают, что это не так.
                  +3
                  понятен пример с гитом. Но даже там есть алиасы. Я использую гит каждый день по 8 часов с консоли, так как нахожу гуевые тулзы неинтуитивными. Но это не значит что CLI лучше чем GUI. Я очень люблю гуишные инструменты, они намного легче в освоении. Но когда я использую гит я точно знаю что я хочу сделать, потому в этом случае для меня cli интерфейс более удобен, так как я просто вбиваю в строчку что я хочу сделать. Как то так.
                    –1
                    Хэши коммитов хорошо запоминаете?
                      +1
                      мне хватает HEAD^N
                        +1
                        и копировать-вставить никто в консоли не отменял
                      +1
                      Непонятен пример с автокадом. Если вы будете вот так вот мышкой всё тыкать и не использовать элементы CLI взаимодействия, то у вас быстрее мышь сломается, чем вы закончите первый чертёж.
                        +12
                        С Автокадом вы привели не самый удачный пример :) При работе с ним командная строкаи сторчески активно используется.

                        Знакомые архитекторы там так команды строчат, что некоторые админы с bash покурить в сторонку отойдут — построить прямоугольник, превратить в парралеллепипед, скопировать, изменить размер, сместить, вычесть одно из другого, переместить, повернуть — оконная рама стоит на месте и готова к трехмерному рендеренгу! :)
                          +1
                          Подтверждаю :)
                          +1
                          Когда я работал в КБ то мышки практически не использовались, тыкание мышкой в автокаде не когда не сможет сравнится со скоростью ввода в командной строке. Эх ностальгия
                            +2
                            Я вас несколько расстрою, но первые CAD системы были консольными. Из за крайне слабой графической подсистемы пользователю не выводилось текущее состояние чертежа, вместо этого была комманда построить всё то, что было набито коммандами.
                            Алсо не слишком правильно утверждать что в консоли хуже редактируются графические файлы, это не удивительно, так же как и то что в фотошопе тяжело редактировать видео.
                            А возьмите какой-нибудь Blender, работать с клавиатуры(шорткатами) в нём гораздо проще чем с мыши, но он не консольный.
                            Зато любое графическое приложение не может быть linux-way.
                            И кстати, вы не уточнили зачем программисту корел и автокад (в контексте его профессиональной деятельности конечно).
                              0
                              А первые компьютеры на перфокартах. Раз от этого ушли, значит что-то не в порядке было, наверное?

                              И при чем тут программисты? Речь о принципиальных отличиях двух видов интерфейса и областях их применимости.
                              0
                              Для каждой задачи свое решение. Например, если в автокаде требуется создать несколько похожих объектов, то командная строка часто незаменима. Также через командную строку можно навесить часто используемые команды на клавиши клавиатуры и получить существенный выигрыш в скорости.
                                0
                                Для каждой задачи свое решение.
                                Ребят, вы хоть понимаете, насколько эта фраза бесполезна? Каждой задаче свое решение, все люди разные, меня и так всё устраивает — с этим нельзя продвинуться никуда. Это просто сотрясение воздуха, софистика. Естественно, каждой задаче свое решение, но надо знать, какие они бывают и как их выбирать (про это статья).
                                Также через командную строку можно навесить часто используемые команды на клавиши клавиатуры
                                Можно, но командная строка тут ни при чем.
                                  0
                                  Если не понятно, тогда напримерах:
                                    0
                                    1) Попробуйте в автокаде создать 1000 кружков по периметру прямоугольника так, чтобы круги были разного диаметра.
                                    2) Попробуйте в автокаде нарисовать принципиальную электрическую схему на A1.
                                    Для первой задачи лучше подходит командная строка, для второй — графический интерфейс.

                                    По поводу софистики, не согласен.
                                      0
                                      Тогда я с вами тоже не согласен.
                                    0
                                    А вы за что бороться предлагаете? За повсеместное введение графического интерфейса и внедрение его во все задачи?

                                    Тогда вы все-таки выбрали неудачный пример (Автокад). Программы класса САПР постоянно требуют ввода точных численных данных (координаты, размеры). Устанавливать их при помощи мыши неудобно, переключаться постоянно между полями ввода тоже неудобно. В том числе поэтому консоль там жива и активно применяется.

                                    Это вопрос более широкого понимания человеко-машинного интерфейса — не только картинки на экране, но и доступных человеку элементов управления — мыши, клавиатуры, иногда планшета.
                                  –1
                                  Для подобных рассуждений нужно сначала:
                                  1. Понять зачем это нужно, поставить цель
                                  2. Оценить каждый вариант отдельно, определить его назначение, плюсы и минусы
                                  3. Делать выводы
                                  4. Пытаться прикрутить к абстрактной модели.

                                  В данной статье 2й пунктик пропущен, начались личные умозаключения, в итоге это не статья, не описание идеи и т.д., а личное мнение автора.

                                  Вот к примеру большинство людей, которые по роду своей деятельности плотно общаются с autocad и подобными продуктами, скажут, что консоль это фуфло, это вообще придумано для идиотов и все такое.
                                    0
                                    В статье не второй пункт пропущен, вся статья — это тот самый второй пункт. 1, 3, 4 остаются на усмотрение тех, кто полученные знания будет применять в боевой ситуации.

                                  Only users with full accounts can post comments. Log in, please.