GUI编程与CLI编程
作为一名多年的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编程的更多相关文章
- Atitit 函数式编程与命令式编程的区别attilax总结 qbf
Atitit 函数式编程与命令式编程的区别attilax总结 qbf 1.1. 函数式程序就是一个表达式.命令式程序就是一个冯诺依曼机的指令序列. 命令式编程是面向计算机硬件的抽象,有变量(对应着存 ...
- .net 系列:并发编程之一 并发编程的初步理论
一.关于并发编程的几个误解 1)并发就是多线程 实际上多线程只是并发编程的一种形式而已,在C#中还有很多其他的并发编程技术,包括异步编程,并行编程,TPL数据流,响应式编程等. 2)只有大型服务器才 ...
- (46)LINUX应用编程和网络编程之一Linux应用编程框架
3.1.1.应用编程框架介绍 3.1.1.1.什么是应用编程 (1)整个嵌入式linux核心课程包括5个点,按照学习顺序依次是:裸机.C高级.uboot和系统移植.linux应用编程和网络编程.驱动. ...
- angular2系列教程(六)两种pipe:函数式编程与面向对象编程
今天,我们要讲的是angualr2的pipe这个知识点. 例子
- 物联网网络编程、Web编程综述
本文是基于嵌入式物联网研发工程师的视觉对网络编程和web编程进行阐述.对于专注J2EE后端服务开发的童鞋们来说,这篇文章可能稍显简单.但是网络编程和web编程对于绝大部分嵌入式物联网工程师来说是一块真 ...
- RPC 编程 使用 RPC 编程是在客户机和服务器实体之间进行可靠通信的最强大、最高效的方法之一。它为在分布式计算环境中运行的几乎所有应用程序提供基础。
RPC 编程 使用 RPC 编程是在客户机和服务器实体之间进行可靠通信的最强大.最高效的方法之一.它为在分布式计算环境中运行的几乎所有应用程序提供基础.本文介绍 RPC 客户机和服务器之间基本的事件流 ...
- Python编程和 Lua编程的比较
Python编程和 Lua编程的比较 2016.4.21 定义函数: python: def functionname( parameters ): "函数_文档字符串" func ...
- 【憩园】C#并发编程之异步编程(一)
写在前面 C#5.0中,对异步编程进行了一次革命性的重构,引入了async和await这两个关键字,使得开发人员在不需要深刻了解异步编程的底层原理,就可以写出十分优美而又代码量极少的代码.如果使用得当 ...
- 如何用ABP框架快速完成项目(面向项目交付编程面向客户编程篇)(1) - 目录
昨天发表了<如何用ABP框架快速完成项目 - 自动化测试 - 前端angular e2e protractor>后,大家十分热情,几个小时内就收到了不少问题,包括: 对于ui自动化测试这方 ...
随机推荐
- 其他 - 02. poolmon 安装
1. 概述 遇到 win10 的内存泄露 32G 内存都能给吃光 2. 思路 rammap 对整体内存做一个诊断 主要是内存分配 用途 状态 poolmon 确认内存的用途 比 rammap 更精确 ...
- Intellij Idea2019版本激活,目前可以激活到2089,解决失效问题(非商业用途)
目录 Intellij Idea2019版本激活,目测可以激活到2089!! 前言-此教程仅用作个人学习,请勿用于商业获利,造成后果自负!!! 步骤(直接激活新下载的) 成功 注意(不想重新下载的小伙 ...
- 深入delphi编程理解之消息(六)无窗口单元消息的创建、接受及dispatch模式编程
一.程序界面 二.程序代码 (一).主界面代码 //========================================================================== ...
- php从接口获取数据转成可以用的数组或其他(含转换编码)
程序开发,时常会用到将接口的json数据转换成程序可以用的,因为今天看到一个比较好的程序,贴上来,以备随时查看: /** * 将对象转成数组,并按要求转换编码 * * @param array $ar ...
- canvas的描述
// 1.找到DOM节点 const canvas = document.getElementById('canvas'); // 2.画笔 --- canvas的上下文对象 const ctx = ...
- 文本编辑器EditPlus的安装
- laradock ppa加速
环境 laradock-9.7 + win10 + docker desktop laradock 项目地址 问题: 构建 workspace 服务时 卡在这动不了,各种搜资料终于解决了 解决方法: ...
- Hadoop学习2—伪分布式环境搭建
一.准备虚拟环境 1. 虚拟环境网络设置 A.安装VMware软件并安装linux环境,本人安装的是CentOS B.安装好虚拟机后,打开网络和共享中心 -> 更改适配器设置 -> 右键V ...
- idea 快捷使用(二)回退断点的使用
在调试的时候,想要重新走一下流程而不用再次发起一个请求? 1.所谓的断点回退,其实就是回退到上一个方法调用的开始处,在IDEA里测试无法一行一行地回退或回到到上一个断点处,而是回到上一个方法.回退的方 ...
- JS中的提升(即变量和函数声明移动到代码顶部)
先看代码(第一个代码片段): console.log(a); var a = 1; 如果你认为这是一段不合法的代码,在调用console.log()的时候会输出undefined,你完全正确.但是如果 ...