上古时代,程序员绝对是个高门槛职业,只能用汇编编程,写个程序非常难。

机器指令集互不兼容,程序不可移植,只能重写。

IBM决定改变这种状况,推出了有着相同体系结构和指令集的机器家族System/360。

计算机厂商众多,硬件和指令集是难以统一的,那就在上面加一个抽象层吧:操作系统。

70年代,AT&T的Ken Thompson 和Dennis Ritchie发明了一个优秀的操作系统:Unix, Dennis Ritchie还发明的伟大的C语言。

Unix用C语言重写以后,变成了一个可移植的操作系统,屏蔽了底层硬件的差异,其上的应用程序也就可以移植了。

但让人没有想到的是,各大厂商和高校推出了自己的Unix版本,最后居然发展出了100多种Unix变体。

为了维护操作系统之间的兼容性,IEEE牵头定义了系统级和用户级的API,Portable Operating System Interface(简称POSIX)。

POSIX标准形成了标准,吸引了后来者入局。

有了POSIX,在不同操作系统间移植软件就轻松了很多。

除了统一操作系统统的API,还有些大神决定对编程语言开刀,在操作系统之上再增加一个抽象层:虚拟机。

虚拟机的出现,彻底隐藏了硬件和操作系统的细节,从此以后,绝大多数程序员只需要考虑业务逻辑就可以了,软件开发门槛再次被降低。

2007年,移动互联网时代来临,新的开发平台出现了。

(注:乔布斯当年从Apple出走,创立NeXT公司,推出了NeXTSTEP操作系统,这个系统的原生语言就是Objective-C,而macOS和iOS都源于NeXTSTEP,所以iPhone选择Objective-C也算一脉相承)

Java 没有在iPhone中安家落户,但是却进入了Android手机。

Android和iOS成为两大手机操作系统,互不兼容。

应用开发再次分裂,变得不可移植。

一个公司要开发原生App,必定要维持两套班子:iOS程序员和Android程序员。

iOS和Android差异巨大,很难像POSIX那样统一接口,也很难再通过虚拟机来屏蔽掉差异(Android本来就运行在虚拟机之上)。

这该怎么办?

Facebook推出了一个方案:用JS写App,通过React Native来“翻译”成原生的界面。

Reactive Native 是用JSX语法写界面和逻辑,可以实现热更新,但是毕竟它毕竟和原生API直接隔了一层,有一个“翻译”的成本,还是比不上原生的效率。

Google则走了另外一条路,推出了Flutter。

但是,这两套方案都有着这样那样的缺点,手机端应用的可移植性还任重而道远。

在未来,也许会出现一个新的技术或者平台,彻底解决手机应用可移植性的问题。

即使统一以后,新的平台(物联网?)很可能还会造成新的分裂。

纵观软件这几十年的发展,就会发现一个特点:

为了弥合各个技术平台的差异,实现软件开发大一统,抽象的层次越来越多、越来越高。

但是每一次统一以后,新的技术平台很快出现,再次分裂。

真是应了中国的古话:天下大势,分久必合,合久必分。

点击下方图片,查看更多精彩

漫画 | 软件开发的门槛是如何降低的?相关推荐

  1. 漫画软件开发:EasyComic

    漫画软件开发:EasyComic 说明 软件开发的初衷 开发准备 第一步:准备好图片资源 第二步:确认爬取内容 第三步:漫画滚动实现 结尾 附录 说明 本博文里所有的内容均为学习交流,切勿使用项目内容 ...

  2. 2020 年软件开发趋势预测,Java 将占主导,Python 将要吞噬世界

    简介: 全面云计算时代宣告来临,微服务已成软件架构主流,Kubernetes 将会变得更酷,2020 年还有哪些技术趋势值得观察? 基础设施:条条道路通云端 对于云厂商来说,2019 年是硕果累累的一 ...

  3. 2020 年软件开发趋势预测!

    再过几周,2019年行将结束,我们将迎来新的2020年. 对于软件开发行业来说,即将过去的2019年是个伟大的一年,因为软件和数字化深入地影响到了每个行业.这一趋势将延续下去,并将在2020年对全球各 ...

  4. 20 个 2020 年软件开发趋势预测

    企业上云已成不可逆的趋势,全面云计算时代宣告来临,微服务已成软件架构主流,Kubernetes 将会变得更酷,2020 年还有哪些技术趋势值得观察?一起来看! 基础设施:条条道路通云端 对于云厂商来说 ...

  5. (转载)技术族谱:软件开发相关知识体系的整理心得(图)

    每隔一段时间,就会收到些类似的消息: 怎么学好软件开发? 我已经学完了A,我接下来该学B还是C? 其实这样的问题,真的是一言难复.如何学习,是一个很复杂的话题,尤其是眼下业内的技术名词日新月异,乱花迷 ...

  6. 汽车ECU软件开发之应用层软件与底层软件

    随着汽车产品日渐趋向电子化,人们对各类先进的安全系统.高级驾驶辅助系统的接受程度日益提升.而原本昂贵的盲点检测.自动紧急制动等功能的成本下滑,使其快速获得了市场青睐.富士奇美拉研究所(Fuji Chi ...

  7. 软件开发管理与质量控制(二)

    3.5   开发人员技术结构 宏观上讲,软件开发机构基本可分为二种角色,管理角色和技术角色.不同角色各有其不同的发展方向,如图7所示. 不论是走技术路线还是管理路线,不存在那种角色地位更高的问题.高级 ...

  8. 破解“低代码”的4大误区,拥抱低门槛高效率的软件开发新选择 ZT

    破解"低代码"的4大误区,拥抱低门槛高效率的软件开发新选择 ZT 最近,每个人似乎都在谈论"低代码".以美国的Outsystems.Kinvey,以及国内的活字 ...

  9. 破解“低代码”的4大误区,拥抱低门槛高效率的软件开发新选择

    破解"低代码"的4大误区,拥抱低门槛高效率的软件开发新选择 误区1:低代码平台仅适用于SDLC的构建阶段 误区2:低代码仅适用于平民开发者 误区3:低代码平台和无代码平台,是同一个 ...

最新文章

  1. gitter 卸载_最佳Gitter频道:Scala
  2. ARM汇编:乘法指令集
  3. 并发容器CopyOnWriteArrayList
  4. selenuim自动化爬取汽车在线谷米爱车网车辆GPS数据爬虫
  5. linux系统做的小游戏,2007最新 100个Linux系统上的小游戏汇集
  6. 面试中有这些特征的公司可以pass了
  7. poj 2983 Is the Information Reliable?
  8. 快点来学吧!mysql批量插入数据
  9. java根据数据库自动生成代码
  10. Python实现Kmeans文本聚类
  11. PbootCMS百度小程序插件 DIY拖拽可视化布局 多端合一 一步到位
  12. python微信支付_微信支付 python版
  13. 基于CIM的智慧城市建设
  14. Linux Qt cannot find -lGL错误完美解决方案
  15. 获取服务器端的webapps路径
  16. picACG本地缓存目录_前端工程师必备之缓存问题
  17. Tableau 工作簿 打不开报错问题 A19C3D8C
  18. A* 算法详解 小时候玩过红警的进来看看,非常清晰
  19. python实现简单购物商城_python实现简单购物商城
  20. 高效筛选自动外呼系统构建

热门文章

  1. 关于虚拟机繁忙,关不掉的解决方法,无法用任务管理器关闭的解决方法
  2. reduce函数详解
  3. IIS的负载均衡的解决方案
  4. word文档批量调整页码-wordAID
  5. 一个老程序猿的焦虑3
  6. DM硬盘分区使用教程(图解)
  7. ubuntu beep 蜂鸣
  8. Stream(一)初识Stream
  9. 天气预报webservice调用地址
  10. 2022新版手机软件库游戏库下载系统源码/附教程