被遗忘的软件产品形态
记得是从2010年以后,很多公司开发的软件产品,很少有客户端了,web2.0之后,主流的业务系统基本上都是基于Web去构建业务系统。这几年见到的业务应用系统都是基于Web的构建的。而在To C市场,几乎就没有客户端了,都是打开网扯就进入,例如各大电商,娱乐网站等,而且我们最熟悉的杀毒软件,也号称云化了,免安装。如果你说我要搞个系统,然后是个要安装的客户端,大家会觉得你很low,你还是别搞了,不好意思拿出手。
这2年数字化时代转型的口号喊得特别凶猛,于是线上作业,几乎是很多企业都在呼喊的。那怎么线上作业呢?很多人简单粗爆地把线上的工作直接往线上搬。因为只有基于Web的复杂的业务系统,他们才认为这才是最牛逼的,代表着先进实践。
业务系统构建在web上面有很多好处,最简单的就是免安装,天然的在云端,省去了很多升级的麻烦,好像也很方便。当这个事情成为流行的时候,现在大家构建一个IT业务系统,基本上都形成了一个思维模式,要么是PC端,要么是移动端,而PC端通常是指Web端的作业系统。
那么,现在我们做产品,构建企业级业务应用,我们还有做客户端的必要吗?如果我们有个客户端,我们是不是要改到web上面呢?
PC客户端、Web应用、及手机app可以说是软件产品的三种形态,我认为他们是各有优劣的,并且适合不同的场景,应该去分辨他们的区别,而不是一味地跟风升级自己的产品。手机app就不用说了,就是移动场景,非常清晰,PC上的一般就是坐在电脑前的场景了。坐在电脑前,到底是打开网站还是打开客户端来得方便,来得多呢?客户端和网页版的,又有什么本质区别?
还原一下,我们的qq是什么形态?它是客户端,我们经常逛的淘宝,是什么?是个网站。再回到工作场景,工作上我们是什么时候会打开浏览器,什么时候打开户端呢?我可能会打开Web业务系去处理个订单,或者提交申请单或者批复一下其它同事的请示, 然后我会打开客户端处理文档,写设计方案,处理邮件,其实最常见的客户端就是Office。
还原了场景之后,你会发现客户端和通过浏览器的web端最大区别是什么?不难发现我们在做很多精细的工作的时候,其实都是借助客户端的,我们一般不会在网页上去PS图片,不会在网页上去写设计方案。同时,我们时刻在用的聊天工具,它为什么是客户端?还有OUTLOOK,为什么也是客户端呢?有网页版,你用了吗?你不会用。为什么?因为不方便,我是要高频使用的!
总结一下,PC客户端的最大优势在于它非常适合高频的使用,精细作业的场景,并且入口非常地浅,打开即用。而web端适合什么?我偶尔来一下,轻载的,简单录一下,审批一下的这种场景,我不常来,我不可能偶尔来一下还要安装个客户端吧,那我可能没安装完我就没耐心了。而Mobile为什么又都是客户端呢?一方面是屏幕小,我打开网站还真的不方便,是精细的诉求。
知道了他们的区别,回来我们构建软件产品的时候,就清晰了。传统的客户端,它可能是离线的,可是谁说客户端就一定是离线的呢?客户端也是可以全在线啊,只要数据在线上就行了,没有人强制你的页面一定要做在浏览器上啊。而我今年看到最可悲的是什么场景,就是把一些高频的,精细作业的场景,硬生生做成基于Web端的产品,最简单的例如协同编辑,不知道有哪几个人真的在Web上面协同了,还有某个产品明明是大量的excel表单处理,也硬生生要做成Web的。其实解决这个问题很简单,就是跟outlook一个道理,还有qq,还有网盘,这不都是线上的客户端么?我只要数据在线上就解决问题了,只有这样的线上,既可以满足数据化、全在线的作业战略诉求,又不会对用的人产生效率的影响。
做产品,看起来很简单,但是很多人知其然,并不知所以然,似乎都会,但这东西,真的是靠实践。你以为你会了,你真的懂了,其实并没有,正如看到很多人对着微信评头论足,似乎给他机会他就能做出一个一样成功的产品一样,有时候真的是只能是笑面而不语。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 3小时带你开发一款商城类小程序(零基础入门小程序系列)
- Android 隐式Intent的实例详解
- Android编程使用加速度传感器实现摇一摇功能及优化的方法详解
- 微信小程序分页加载数据~上拉加载更多~小程序云数据库的分页加载
- TextView实现跑马灯效果 就这么简单!
- Android自带emoji表情的使用方法详解
- Android EditText实现输入表情
- Android编程实现使用Intent传输包含自定义类的ArrayList示例
- EditText实现输入限制和校验功能实例代码
- java零基础入门006~springboot实现多文件的上传(java多文件的上传)
- Android编程实现随机生成颜色的方法示例
- Android中将Bitmap对象以PNG格式保存在内部存储中的方法
- python入门012~使用python3爬取网络图片并保存到本地
- java入门015~springboot2整合mybatis,轻松实现mysql数据的增删改查
- 详解Android activity与fragment之间的通信交互