作为一名多年的iOS开发人员,多次触发我思酌“GUI编程与CLI编程”各自的优劣,尤其是在当我为界面交互花费大占比时间时,时常怀疑自己的工作性质,我终究还是为互联网工作的码农,而不是让互联网为我所用的明智人士。(容我把偏GUI编程看成是取悦他人,把偏CLI编程看成是取悦自己。)

-----前言

  • GUI = 功能逻辑 + 用户交互逻辑
  • CLI = 功能逻辑

支持CLI的意见:(摘抄)

1. 写GUI程序,不光要编写功能逻辑代码,还要用某个UI引擎编写一个和谐美化的界面展示给用户,如果还有很多的用户交互,功能逻辑和交互逻辑代码耦合在一起,那么代码量和代码复杂程度也会成倍增加。因为任何一个UI引擎的代码量都远远超出你要写的软件的功能逻辑代码的几十倍了,外加熟悉掌握UI引擎的用法,然后再去写界面的交互逻辑代码,这工作量也是翻几倍的。

举个简单的例子,让你做一个电子表格,比如类似于Excel的完成特定格式的数据的录入和保存,写个CLI的程序,才能有多少代码量,然而如果你要做成GUI形式的程序,代码量起码是CLI的几千倍了。

2. GUI的好处是“所见即所得”,缺点是“所见即全部所得”。

3. GUI环境通常受限于它们的设计者想要提供的能力。如果你需要超越设计者提供的模型,你大概不会那么走运,而且很多时候你确实需要超越这些模型。

4. 首先是编程方便,很复杂的功能对于GUI来说,在处理交互上可能要花费一个月时间,编写相同功能CLI的话可能只会用几天。

其次,也是最重要的是可组合:可以简单地将小程序组合起来实现各自所需要的复杂大功能。而且也方面GUI等程序在别处调用。

再次,就是跨平台。CLI不需要考虑太多平台相关的东西。而且还可以在它之上包装GUI。

还有一点就是,CLI方便远程执行,一行ssh命令就能做到。

5. CLI可以说是人机界面的远祖,哪怕是远古时期的纸带式计算机,也同样需要使用“命令行”方式工作。可以说命令行是最符合计算机工作方式的操作方式。

由于主要使用文本作为界面,CLI软件对计算机的要求也低得多,在同等配置的机器上也要比GUI软件的性能好得多。也正因此,CLI软件得以在广大的服务器系统上大行其道,在这些系统上,性能是最重要的。同时,由于具备了比GUI软件好得多的可伸缩性,CLI的使用范围也远比GUI广泛,在很多嵌入式平台上,我们甚至只能看到CLI的身影。

6. CLI的身上,带有编程的“影子”。

7.  尽管GUI提供了良好的易用性,极大地填补了人机对话的鸿沟,但在另一方面看来,实际上增加了软件开发的成本,缩小了软件的适用范围,同时降低了软件的工作性能。

支持GUI的意见:(摘抄)

1. 说句实话,如果用户都接受CLI程序的话,都会用CLI程序的话,还会有哪个Windows程序员吃饱了撑着,花百倍的工作量去做UI呢?

如果把Word或者Excel都做成命令行形式,那世界上得多增加多少Word或Excel的培训机构了?

如果把各种游戏比如《王者荣耀》做成命令行形式,那还能赚钱吗?

2. 说CLI用起来不舒服,至少对记忆力差又粗心大意的家伙是这样的。

3. GUI能呈现各种多媒体数据,而CLI基本只能呈现文本。

4. GUI由于采用了大量的图形元素,界面会更显得具有艺术性,富有人性化。相对于枯燥的文本来说,精致且合理的图形大大增加了界面的易用性。简洁明了的图形控件使得软件操作起来更为直观。

相较于GUI而言,CLI通常就不具备什么美观程度了。为了提高性能,CLI通常采用纯文本方式工作。

5. 快捷键取材于CLI,实质上是一种直接向系统发送指令的操作方式,但由于依赖于GUI,我把它归为GUI的工作元素,并视为提高工作效率而向CLI所作的折中。

6. 但毕竟人不是计算机,符合计算机的工作方式的同时也就意味着不那么人性化。

7. 另外,对于CLI软件来说,执行结果往往并不是那么清晰的。用户常常不得不面对满屏滚动的反馈信息,体验黑客帝国一般的快感,或者是仿效真正的黑客一般从浩瀚的log海洋中寻觅那条丝毫不起眼的提示信息。

8. 有人把CLI软件的工作方式称为“所想即所得”。这种方式的特点在于,虽然没有直观地反应出执行结果,但却能保证执行结果可以和你的意图一样。从某种程度上来说,这种说法是正确的,因为用户的意图总是以“命令 + 参数”的方式精确地传递给系统,最后虽然不能直观地看到执行结果,却总能发现系统已经出色并严格地完成了工作。但从某种意义上来说,这种说法是不准确的,因为当面对着长长的参数手册时,用户往往已经搞不清自己的意图到底是什么了。

9. GUI软件可以通过使用大量的图形元素和图形特效,从根本上改变软件的表现形式,“美观”和“人性化”渐渐成为软件界面设计的讨论主题。随着计算机处理能力的发展,我们甚至能够以3D的形式来呈现和操作软件。大量GUI软件的出现大大降低了学习和使用计算机的门槛,赏心悦目的操作界面吸引了各行各业的人投入其中。如果说CLI适应了各种各样的计算机,GUI则适应了各种各样的人。

10. 以操作系统开发商为例,可以说,如今做能坚守一易用性阵地的当属苹果公司。尽管其产品同样存在一些瑕疵,但直到今天,苹果公司仍然坚持发展人机界面设计学,其创造的GUI软件大都是艺术性和易用性结合的典范。

中立态度:(摘抄)

1. 因为两者面向的用户不同,初中也不同。今天看了《程序员修炼之道》这本书,可谓是有了更深入的了解。GUI侧重于易用,CLI则侧重于效率。

2. 现在几乎所有人都没办法离开GUI,对于程序员等专业用户来说不可能离开CLI。

GUI编程与CLI编程的更多相关文章

  1. Atitit 函数式编程与命令式编程的区别attilax总结  qbf

    Atitit 函数式编程与命令式编程的区别attilax总结  qbf 1.1. 函数式程序就是一个表达式.命令式程序就是一个冯诺依曼机的指令序列. 命令式编程是面向计算机硬件的抽象,有变量(对应着存 ...

  2. .net 系列:并发编程之一 并发编程的初步理论

    一.关于并发编程的几个误解 1)并发就是多线程 实际上多线程只是并发编程的一种形式而已,在C#中还有很多其他的并发编程技术,包括异步编程,并行编程,TPL数据流,响应式编程等.  2)只有大型服务器才 ...

  3. (46)LINUX应用编程和网络编程之一Linux应用编程框架

    3.1.1.应用编程框架介绍 3.1.1.1.什么是应用编程 (1)整个嵌入式linux核心课程包括5个点,按照学习顺序依次是:裸机.C高级.uboot和系统移植.linux应用编程和网络编程.驱动. ...

  4. angular2系列教程(六)两种pipe:函数式编程与面向对象编程

    今天,我们要讲的是angualr2的pipe这个知识点. 例子

  5. 物联网网络编程、Web编程综述

    本文是基于嵌入式物联网研发工程师的视觉对网络编程和web编程进行阐述.对于专注J2EE后端服务开发的童鞋们来说,这篇文章可能稍显简单.但是网络编程和web编程对于绝大部分嵌入式物联网工程师来说是一块真 ...

  6. RPC 编程 使用 RPC 编程是在客户机和服务器实体之间进行可靠通信的最强大、最高效的方法之一。它为在分布式计算环境中运行的几乎所有应用程序提供基础。

    RPC 编程 使用 RPC 编程是在客户机和服务器实体之间进行可靠通信的最强大.最高效的方法之一.它为在分布式计算环境中运行的几乎所有应用程序提供基础.本文介绍 RPC 客户机和服务器之间基本的事件流 ...

  7. Python编程和 Lua编程的比较

    Python编程和 Lua编程的比较 2016.4.21 定义函数: python: def functionname( parameters ): "函数_文档字符串" func ...

  8. 【憩园】C#并发编程之异步编程(一)

    写在前面 C#5.0中,对异步编程进行了一次革命性的重构,引入了async和await这两个关键字,使得开发人员在不需要深刻了解异步编程的底层原理,就可以写出十分优美而又代码量极少的代码.如果使用得当 ...

  9. 如何用ABP框架快速完成项目(面向项目交付编程面向客户编程篇)(1) - 目录

    昨天发表了<如何用ABP框架快速完成项目 - 自动化测试 - 前端angular e2e protractor>后,大家十分热情,几个小时内就收到了不少问题,包括: 对于ui自动化测试这方 ...

随机推荐

  1. 08day 操作命令以及目录结构

    yum /var/log目录(日志文件)两个重要目录:message--记录系统或服务程序运行状态信息 secure--记录用户登录信息 tail -f 查看日志方法    head 查问文件头部

  2. 实战【docker 镜像制作与使用】

    一.制作docker 镜像 使用spring boot 构建一个简单的web 项目,返回 “Hello,World ”字符串,使用 Maven 打成 jar 包,使用的Linux 环境是 Centos ...

  3. 前端——语言——Core JS——《The good part》读书笔记——第三章节(Object)

    本章介绍对象. 在学习Java时,对象理解为公共事物的抽象,实例为具体的个例,对象为抽象的概念,例如人为抽象的概念,具体的个例为张三,李四. Java对象种类多,包含普通类,JavaBean,注解,枚 ...

  4. hadoop学习笔记(七):hadoop2.x的高可用HA(high avaliable)和联邦F(Federation)

    Hadoop介绍——HA与联邦 0.1682019.06.04 13:30:55字数 820阅读 138 Hadoop 1.0中HDFS和MapReduce在高可用.扩展性等方面存在问题: –HDFS ...

  5. mount命令实际操作样例

    本篇文章主要介绍了如何在Linux(CentOS 7)命令行模式安装VMware Tools,具有一定的参考价值,感兴趣的小伙伴们可以参考一下. 本例中为在Linux(以CentOS 7为例)安装VM ...

  6. 线上BUG定位神器(阿尔萨斯)-Arthas2019-0801

    1.下载这个jar 2.运行这个jar 3.选取你需要定位的问题应用进程 然后各种trace -j xx.xxx.xx.className methodName top -n 3 这个后面要补充去看, ...

  7. C:产生随机数

    函数说明 #include <time.h> time_t time(time_t *t); 功能:获取当前系统时间 参数:常设置为NULL 返回值:当前系统时间, time_t 相当于l ...

  8. 推荐算法之---FM算法;

    一,FM算法: 1,逻辑回归上面进行了交叉特征.算法复杂度优化从O(n^3)->O(k*n^2)->O(k*n). 2,本质:每个特征都有一个k维的向量,代表的是每个特征都有k个不可告人的 ...

  9. Blockchain technology and Application

    BTC-密码学原理 比特币本质:crypto currency[加密货币] 比特币用到的两个功能: 1.哈希 crypto graphic hash function 2.签名(非对称加密) 哈希cr ...

  10. oop(面向对象)中的内置函数

    oop中的内置函数 ​ 类中存在一些名字带有双下划线__开头的内置函数, 这些函数会在某些时候被自动调用,例如之前学习的迭代器__init__函数 一.isinstance(obj, cls) 检查o ...