觉得可以从我们与计算机打交道的方式来看,大致上可以分成这两个话题讨论:关于图形用户界面(GUI)和命令行界面(CLI);关于商业与开源。
倒不是说 Linux 效率就一定更高,关键的在于它背后的 CLI 的操作模式和 Unix 哲学。Linux 下 CLI 和 Unix 哲学的贯彻可以说是甩其它的系统好几条街。在现实很多不确定性之中,CLI 很多时候不能很好地覆盖一些直觉的问题,所以需要 GUI(现在电脑也不只有字符终端)。
程序员的出发点是技术的深入,很难去做那些兼容世界的众多不确定性的问题,以此为代表的 Linux 也更重 CLI 的部分,GUI 相比于 Windows 和 macOS 来看是比较落后的。
GUI 的关键在于一种兼容,更贴近与人的直觉。Windows 一开始就往大多数用户的日常直觉的需求去靠拢。它的名字本身就叫 Windows,也代表着它一开始是强调 GUI 方向去发展,甚至连一个好看好用的终端工具都没。这在商业上是非常强势,鼓吹 GUI 之下,直接占领了绝大部分的江山,形成垄断优势。
只有 GUI 并不能代表一切,特定的 UI 局限于特定的场景。面向商业的 Windows 也由此搞出了很多奇奇怪怪的 UI,加之考虑历史遗留的兼容问题,就像一个大杂烩,结果连直觉的问题也没有很好地处理好。一个简单的软件堆满了各种按钮,更新一个版本按钮位置又得变化一下,用起来也各种懵逼。因为这样的历史包袱,它存在许多浪费学习者时间的因素,且因为是闭源系统,在其下讨论和研究计算机的组成与学习,就像是纸上谈兵。
与电脑打交道不可能只有 CLI 或者只有 GUI。人最终是靠下意识的直觉去与电脑打交道,同时也需要配合 CLI 去解决许多计算机本身擅长解决的问题。即使是极致设计角度出发的 macOS 也有一个 Terminal.app。
可以说 Mac 是两者优势的综合体,而作为程序猿,如果只在 macOS 环境下工作学习,没有深入使用 CLI 的经验,很难体会到 CLI 的高效。所以说,走程序的道路,肯定离不开 Linux 的折腾学习的。
随着硬件性能的提高,移动互联网占领强势地位,如今在日常需求这一领域早已被 iOS 和 Android 瓜分,PC 更多定位是面向专业化的工作工具,工作的重心也渐渐从客户端走向浏览器,UI 相关的领域也逐渐被自带跨平台属性的 Web 前端技术蚕食,直接原生桌面开发的效益越来越低。
Windows 在 GUI 领域的垄断优势已经不在,微软挣扎几年搞的 UWP 平台也不温不火,于是也开始拥抱起了 Web。在这个背景之下 Linux 体系在 GUI 的弱势也能靠此弥补,所以说现在在 Linux 也是可以比较舒服地使用的(至少在编程方面的需求已经完全覆盖了)。
另外,从 WSL 翻译 Linux syscall 到 WSL 2 直接跑 Linux 内核,还有 VSCode,TypeScript,甚至为了优化 Wondows 的CLI 体验着手开发 Windows 下的终端软件 Windows Terminal 等一系列的动作可以看出,微软早已在开源方向靠拢。在人类知识开放共享的大背景之下,软件领域的商业拥抱开源也是一个趋势所在。
另外还想到的是,国内的巨头像微信这种防火墙下的畸形产物,也无不依赖着 Web 技术的方方面面(比如说在安卓端的X5内核只是定制的 Chromium),抱着一种模仿的姿态,带着商业的负担,注定着难以在计算机核心技术领域中搞出大风浪。
由此可见,开放最终会战胜封闭,拥抱开源才是明智之举~