153 lines
10 KiB
Markdown
153 lines
10 KiB
Markdown
|
||
|
||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||
|
||
|
||
25 桌面开发的未来
|
||
你好,我是七牛云许式伟。
|
||
|
||
今天,我原本想结合一个实战例子,来回顾一下 “桌面软件开发” 一章到今天为止的内容,但是由于要准备的内容比较多,会延后一下。
|
||
|
||
所以,今天我还是会按原来大纲的内容,谈谈我个人对桌面开发未来趋势的判断。
|
||
|
||
桌面平台的演进与未来
|
||
|
||
谈未来,我们要先看过去。
|
||
|
||
在 PC 时期,本地桌面操作系统主流的有 Windows、MacOS、Linux。为了消除不同平台的差异,于是就出现了 QT、wxWidgets 这样的跨平台解决方案。
|
||
|
||
但是它们都败了,败给了一个它们并没有意想得到的对手:PC 浏览器。
|
||
|
||
浏览器并不是为跨平台而来,但是除了干成了软件服务化外,也干成了跨平台这件事情。
|
||
|
||
虽然浏览器厂商很多,但是它们遵循相同的规范。** 这意味着支持了浏览器,就支持了所有的 PC 用户。**
|
||
|
||
这太诱人了。
|
||
|
||
于是在软件服务化和跨平台开发的双重优势下,软件厂商们趋之若鹜,QT、wxWidgets 这些方案就变成小众需求。
|
||
|
||
QT 有机会反抗么?其实是有的。关于这一点我们后面再说。
|
||
|
||
然后,移动大潮来了。我记得 2006 年有一次我和雷军雷总吃饭,聊起对移动操作系统未来趋势的判断,我们俩各持己见。
|
||
|
||
雷总认为 WinCE 会赢,因为 Windows 已经培育了最大的开发者群体。而我认为 Symbian 会赢,因为它占据了最大的终端用户群。
|
||
|
||
结局大家已经知道了,最后赢的是谁都没有预料到的玩家:Android 和 iOS。
|
||
|
||
如果我们从事后看,实际上这个事情并不是完全没有迹象可循。iOS(诞生于2007年)固然当时还没有诞生,但是 Android 诞生于 2003 年,并于 2005 年被 Google 收购。作为搜索引擎厂商,Google 收购一个手机操作系统,显然不是随意为之的,而是公司发展战略上的考量。
|
||
|
||
Android 和 iOS 的诞生,一下子让操作系统的生态变得更为复杂。
|
||
|
||
操作系统不同,输入方式不同(鼠标 vs 触摸屏),屏幕大小不同,想要一套代码横跨 PC 和移动多个平台?太难。
|
||
|
||
这还不算。虽然还不像手机那么普遍,但是今天手表、电视机、汽车,以及各式各样的 IoT 传感设备,都需要操作系统的支持。
|
||
|
||
从操作系统发展来说,我个人会倾向于按交互方式来分。 未来桌面操作系统和服务端操作系统会渐行渐远,差异越来越大。** 从交互来说,服务端会维持简约,经典的命令行交互会长期占据主流。**
|
||
|
||
而桌面操作系统,笔记本市场,鼠标+键盘仍然会占据主流。虽然鼠标形态已经变了,变成了触控板,但是鼠标指针这种基于精确位置交互的方式会得到保留。多点触摸的交互,也会得到部分机型的支持。
|
||
|
||
移动市场,多点触摸+键盘会占据主流。但是语音助手也会得到一定程度的渗透。
|
||
|
||
IoT 市场,语音助手会占据交互的主流。 但也会有一些设备引入多点触摸这种交互方式来补充。在这个市场,目前看技术上的 Amazon 和 Google 占据了领先地位。虽然苹果入场较早,但是 Siri 的表现还是和前两者有较大的差距。
|
||
|
||
IoT 设备会两极分化。** 一类 IoT 设备是专用设备,它的应用场景非常固定,它对操作系统最大诉求是裁剪能力:最好不要给我太多的东西,匹配场景就好。** 能不能提供AppStore?不是重点,有也只有很少的一些应用,其实直接找合作伙伴就好。
|
||
|
||
一类 IoT 设备则有较大的通用性。 但受限于语音助手技术的限制,IoT 操作系统的开放性要比移动系统差很多。所以在有任何可能的时候,这些设备就会带上触摸屏变成一台由移动系统支持的设备。
|
||
|
||
长远来说,要看智能语音技术的发展。关于这一点,我个人抱谨慎乐观的态度。但显然,在很长一段时间里,我们面对的还是移动操作系统。
|
||
|
||
这么多操作系统怎么搞呢?
|
||
|
||
于是 React-Native 出现了。理论上,React-Native 可以横跨 PC 和移动。因为 React 本身基于 Web 技术,可以支持 PC 浏览器,而 React-Native 又支持 iOS 和 Android,从而做到 “Learn once,write anywhere”。
|
||
|
||
平台差异不能完全消除,只能尽可能地减少。
|
||
|
||
手机操作系统这场仗刚有了眉目,移动浏览器之争又起来了。
|
||
|
||
国内涌现了大量的小程序厂商,国外 Google 也在推 PWA。还有 Facebook 意见不明,不知道会去支持 PWA,还是基于自己的 React-Native 技术搞一套新的移动浏览器标准。
|
||
|
||
这下好了,统一的 Web 分裂成多个技术阵营。
|
||
|
||
移动浏览器,国内外不统一已经是既成事实。海外巨头们除了 Facebook,已经用明确的行动支持 PWA。小程序在海外要想有市场,要看头条腾讯阿里们的海外市场占有率。
|
||
|
||
移动 WebApp 技术的分裂是否会最终得到纠正?这仍然是未知之数。
|
||
|
||
但由此观之,终端操作系统的多元化已经是既成现实。这对开发者生态将产生重要的影响。
|
||
|
||
我们可能有人留意到,QT 今天基本上支持了所有的桌面操作系统,不管是 PC 还是移动。但是这还不太够,因为还差 Web、小程序和 PWA。
|
||
|
||
今天的跨平台,重点是要跨 Android、iOS、Web、小程序和 PWA。如果精力顾不上,PC 桌面操作系统的优先级反而可以缓一缓,毕竟 Web 也能够顶一下。
|
||
|
||
QT 的机会在这里。但是很明显它并没有意识到兼容 Web 开发对于一个跨平台工具的重要性。
|
||
|
||
就算在 PC 时期,一个同时支持 Web 和本地操作系统的跨平台工具也能够受到欢迎。今天随着桌面平台的多元化,跨平台工具的需求达到了历史最高点。
|
||
|
||
当然还有一种跨平台的思路,是垂直发展,比如专做游戏开发的跨平台。不过单就游戏开发这个领域而言,已经有强大的玩家,比如 Unity 在里面。
|
||
|
||
那么,通用的跨平台怎么做到?
|
||
|
||
Google Flutter 给了一条路,它把对操作系统的要求最小化,整个界面系统完全自己在用户态构建。
|
||
|
||
这个思路和 Go 语言有点像。Go 语言其实是在用户态完全重写了操作系统的进程管理和 IO 子系统。
|
||
|
||
那么 Flutter 会像 Go 语言一样成功么?
|
||
|
||
我个人持谨慎态度。不同操作系统的用户是有自己独特的交互范式的。比如 Android 和 iOS 用户的习惯就有一定的差异。而这可能恰恰是跨平台更难的一点。
|
||
|
||
另一个是软件体积问题。Android 是 Google 自己的,可以通过让 Android 预装基础库来减少体积。但是更多的系统有可能需要一个体积不小的跨平台层。
|
||
|
||
这会制约 Flutter 的发展。客户端软件的尺寸,对新用户的转化率有着至关重要的影响。何况像微信小程序这样的平台,还限制了小程序的尺寸,最早限制为 4M,后来放宽到 8M。
|
||
|
||
这和 Go 语言面临的环境不太一样。Go 语言因为面向的是服务端,用户对软件的尺寸不敏感,反倒是部署的便捷性更敏感。
|
||
|
||
我个人更倾向于尺寸更轻盈的跨平台工具。
|
||
|
||
其次是编程手法上的问题。大趋势是要用 Web 这种声明式的界面描述方式。至于是否需要在语法上进行一次重新梳理,我个人觉得是有必要的。React-Native 在这个方向的探索是个不错的尝试。
|
||
|
||
在这一点上,苹果的 SwiftUI 或许更值得关注。苹果以极简体验著称,SwiftUI 某种程度上来说代表了关于跨平台开发的可能方向。
|
||
|
||
儿童编程教育
|
||
|
||
在我们谈论桌面开发的时候,我认为其实还有一个重要但又很容易被忽视的趋势,是儿童编程教育的走向。
|
||
|
||
说到儿童编程教育,我们大多数人可能都知道 Scratch 语言。但是要说儿童编程的鼻祖,毫无疑问应该算 Logo 语言,海龟作图。
|
||
|
||
Scratch 语言由美国麻省理工大学(MIT)于 2007 年发布,到现在已经发展到了 3.0 版本,项目正变得越来越活跃。
|
||
|
||
在 Scratch 之后,Google 也曾经发布了 Blockly 语言进军儿童编程教育。但是由于缺乏社区基础,Blockly 语言一直不温不火。
|
||
|
||
但有两件有趣的事情。
|
||
|
||
其一,Scratch 3.0 是基于 Blockly 的源代码改造而成的,为此据说 Google 也投入了大量的技术人员进行协助,双方协同开发。
|
||
|
||
其二,Google 基于 Blockly 语言搞出了一个 App Inventor,用于教育儿童学习 Android 开发。
|
||
|
||
无独有偶的是,苹果推出的 Swift 语言启蒙教程也是针对儿童的,在 AppStore 上可以下载到,叫 “Swift Playgrounds”。
|
||
|
||
这意味着,我们原本以为两件风马牛不相及的事情,其实是密切相关的。
|
||
|
||
桌面开发的未来是什么?
|
||
|
||
从终局的视角来看,桌面开发的终极目标,是让儿童可以轻松编写出生产级的应用。
|
||
|
||
这不是痴人说梦。
|
||
|
||
在 iOS 出来之前,如果有人说他要开发一个让三岁小孩都会使用的电脑,可能会有很多人觉得绝无可能。
|
||
|
||
但是苹果的确做到了。虽然可能还不能完全识别电脑上常见的文字,但是一个三岁的儿童使用起 iPhone 或者 iPad 却毫不困难。
|
||
|
||
那么,让一个八岁刚刚上学没多久的小学生去做生产级的应用,这事也不是遥不可及的梦想。
|
||
|
||
桌面开发技术的演进,和儿童编程教育相向而行,有一天必然汇聚于一点上。
|
||
|
||
结语
|
||
|
||
今天我们结合桌面开发和儿童编程教育,聊了个人对桌面的未来演进趋势的判断。
|
||
|
||
如果你对今天的内容有什么思考与解读,欢迎给我留言,我们一起讨论。下一讲我们将结合一个实际的案例,来讲解一下桌面开发(含单机软件和 Web)到底是什么样的。
|
||
|
||
如果你觉得有所收获,也欢迎把文章分享给你的朋友。感谢你的收听,我们下期再见。
|
||
|
||
|
||
|
||
|