时不时,我遇到我业界的圈子里,码农朋友们在抱怨:
开发App好麻烦哟,我要在五个不同的平台上,聘请五类不同的技术人员,分别开发基于MSWindows、MacOS、iOS、Android、Linux的App应用程序,用不同的IDE开发工具,VS、xCode和Swift、Android Studio、Geany,他们分别得熟练不同的编程语言,
C++、Object C、java、C和汇编语言,虽然都能满足原生开发的效果,技术管理好复杂、成本好高......
俺们用的emb的RAD Delphi、RAD C++Builder,虽然能跨平台一次编码,5个平台分别分发,效率高,但不停的升级操作系统的SDK好折腾,原生的执行效率和用户体验要差些......
H5的web应用开发,天天伴随我左右,写出来的代码,只要有浏览器的地方,倒是随处可用,但怎么运营方就经常抱怨,说用户抱怨越用月卡呢......
用户说,你们做的小程序,我在微信里,一开始吧还行,后来,感觉越来越不流畅,是不是我的手机又该重装咯?!还有它只能在微信中用,离开了它,什么浏览器都不起作用,唉......
......不一而足。
别说,这些抱怨和现象,还很少静下心来,认真思考。
有一天,听群里一朋友说,码农真辛苦,写的代码,还不如“卖水果”赚的钱多......
听得这话,好辛酸。索性,好好研究了一下本质,同时把它分享给我的同事:程序员,到底做的,是什么?
这得从几个层次来看:
计算机的操作系统、操作系统的用户表达方式、计算机软件行业的专业分工、人们如何从互联网获取信息、浏览器及引擎之争、浏览器的渲染(浏览器的排版引擎)、应用级别的SDK引入、应用开发级别的API的公布、IDE对工具链和API的集成与语言翻译、码农们手上的源代码、最终用户看到的用到的UE用户体验、怎么样赚更多的钞票......
多的细节,都不聊了,大家可以参阅百度百科:
https://baike.baidu.com/item/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/192
https://baike.baidu.com/item/%E6%93%8D%E7%BA%B5%E7%B3%BB%E7%BB%9F/12651822
1.1.1、各类手持终端操作系统(Palm、PDA等)
1.1.2、iOS闭源手机操作系统
1.1.3、Android开源手机操作系统
1.1.4、工业嵌入式操作系统
Unix是什么:Unamed Operation System,未统一命名的操作系统的简称。类Unix,即Unix的变体。
1.2.1、Unix大型操作系统(适用于[超]大型机)
略......
1.2.2、Unix中型操作系统(适用于中型机)
比如IBM的IBM-AIX、HP的HP-UX等。
1.2.3、Unix小型操作系统(适用于小型机)
比如IBM的IBM-OS 400等。
1.2.4、Linux阵营(Unix的变体)
详见:Linux家族的进化史 https://blog.csdn.net/pulledup/article/details/113267337
1.2.4.1、商用机型级别略......
1.2.4.2、Linux微型PC级别操作系统(适用于微机)
1.3.1、MSWindows
1.3.2、MacOS(商用化的类Unix,因其通过了Unix认证,因此命名有争议,但均转遵循POSIX协议)
1.3.3、Google Chrome OS轻量级网络计算机操作系统计划
在分布式集群架构下,上述物理计算机操作系统,利用“容器技术”(超越传统虚拟机的新的拓展),让不同操作系统的运行环境的封包,能够在其下彼此兼容运行。
好啦,计算机怎么通过操作系统,把它的功能展示给非专业人士呢?这就是下面的,关于计算机操作系统的表达方式:
命令行界面(英语:command-line interface,缩写:CLI)。我们在Windows下的DOS和PowerShell就是很典型的。
但因其使用命令行工具以文本方式表达,所以无论应用编程的码农们,还是最终用户,都难以普遍胜任和接受。所以,就出现了图形化的界面:
图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口),是指采用图形方式显示的供用户操作的计算机界面。
于是,产生了计算机软件领域的一次革命性的分工,有些人和组织,专门来做GUI。
从本质上来讲,真正的应用级别的编程高手,都是熟悉各个操作系统的“脾气”和“指令”的,即熟悉它们各自的CLI的指令代码,无论你用什么编程语言,也无论你用什么IDE开发工具,都可以用各自的语系代码去调用它们。
K Desktop Environment(简称KDE)。https://baike.baidu.com/item/KDE
全面支持iOS、Android、WP,它提供给应用程序开发者建立艺术级的图形用户界面所需的所有功能。基本上,Qt同X Window上的Motif、Openwin、GTK 等图形界面库和Windows 平台上的 MFC、OWL、VCL(emb的Delphi和C++Builder上的可视化组件库)、ATL、跨平台的FMX是同类型的东西。
GNU Network Object Model Environment(简称GNome)。https://baike.baidu.com/item/Gnome/5105879
比如,我们的ubuntu Linux上,就默认集成了它。
以上这两类API接口,对应用开发级别,并不透明(即做了封装,不开放源码)。
因而,在这个层面上,应用软件开发人员,本质上,都在用他们的技术成果,赚取钞票。
知道,为什么,当年,微软要打压Linux操作系统、java语言及开发工具了吧(它们都要开源呀,要全部透明呀)。
你也就知道,为何,那个年代(上世纪末~2007年前),MFC、OWL、VCL为何如此牛逼,VCL为何如此骄傲,出众得让微软必须让它死!
那么。透明的(开源阵营一直坚持要做的),又是什么呢:
由于伟大的互联网的兴起,成立了W3(www)组织,指定了很多标准,让大家共同遵守,其中HTTP标准,就流行至今。
超文本传输协议(Hypertext Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;而消息内容则具有一个类似MIME的格式。这个简单模型是早期Web成功的有功之臣,因为它使开发和部署非常地直截了当。
有了标准,大家来遵守,那么,最终,怎样提供给最终用户呢?!利益,开始分化......这,就是浏览器及其相关的领域。
浏览器,不仅可以浏览操作系统上GUI形式体现的大部分CLI的内容,还可以浏览互联网上的绝大部分的资源。
网景->美国在线->时代华纳->微软,他们几大爷的好戏,我们出道不久的那个年代(上世纪末1993~1998)的产物,现在除了商标,消失了,只剩下大家熟知的Firefox网络浏览器、Gecko排版引擎和Mozilla基金会,详见:
https://baike.baidu.com/item/%E7%BD%91%E6%99%AF/70176?fromtitle=netscape&fromid=2778944
https://baike.baidu.com/item/Mozilla%E5%9F%BA%E9%87%91%E4%BC%9A/10167516?fromtitle=mozilla&fromid=7148071
直到今天,永不停息的浏览器大战,几大阵营:
为啥?因为,谁抢占了浏览器市场,谁,就掌握了最终用户,谁就终端为王!这,是真正的底层的入口之争!
现在我们编程,无论你用什么语言,用什么IDE开发工具,视觉可见的和非视觉可见的本质上,就是在围绕浏览器打转转。
获取网页的源码(本质上就html、javascript、css这些代码) ->解析代码(即分析和整理代码) ->重新用css进行排版 -> 将排版后的内容呈现给客户。
即上述过程中的:重新用css进行排版的引擎代码部分。
同样的网页源码,在不同的排版引擎下,呈现给最终用户的视觉体验和操作体验,会有所差异,这就是我们编程中,常说的浏览器的兼容性,它是用User-Agent头部定义,来识别和区分的。
细节不再赘述,详见: https://baike.baidu.com/item/%E6%8E%92%E7%89%88%E5%BC%95%E6%93%8E
https://www.cnblogs.com/qcloud1001/p/10305293.html
由此可见,无论是GUI还是浏览器排版引擎,主宰它们的,都是背后的设备制造商和操作系统研发者和投资者。
主宰者,他们,将所有的代码,以SDK(软件开发包)的形式,封装和发布出来,以闭源或开源的形式供应给全球的IDE(软件集成开发环境)供应商。
IDE(软件集成开发环境)供应商,再将SDK引入其开发工具,翻译成自己的语系所能被工具链编译的语言代码,提供给码农们使用。
因而,为了充分应用硬件级别的技术升级,各操作系统级别在不停的升级和优化,其SDK再不停的升级和发布,IDE的供应商们在不停地跟进、引入、翻译成API、优化和主导扩展自己的语系能力。
而今,无论你是哪个语系,无论你是哪个IDE阵营,您都得熟练掌握H5+JS+CSS的基础。客户端的Vue.js也好,服务端的Node.js,都是开源阵营对它们的扩展而已,怕的,就是你基础不牢靠,不会应用它们。
如上分析,您是否和我一起认识到,编程语系并不是最主要的?!IDE开发工具也非影响我们产品的客户认同的主要因素?!
因而,从今天起,放下本文一开始讲述的抱怨、放下对自己语系功能还欠缺点什么的不满、放下对自己所用IDE的太多的要求。
放下吧,多研究操作系统,多学习操作系统指令。放下吧,牢靠H5+JS+CSS的基础,多研究浏览器的“脾气”和特性。放下吧,在牢靠的基础之上,充分运用开源阵营的代码。
放下吧,多看点IDE及其框架提供给你的源代码,比什么都强......
放下啦,就很容易释怀!放下啦,就轻松啦!轻松啦,上阵就信心十足!信心十足、努力突破自我,就一定能获取最终的成功!
喜欢的话,就在下面点个赞、收藏就好了,方便看下次的分享: