过去的盲点给我们提供了另一种思考未来的方式。 技术变革的步伐并没有放缓。 在一两年之内,我们大多数人仍然会思考世界。 我们期待着很多变化,并且我们花了大量时间想象它们。 但是在雷达之下发生了什么? 我们期望哪些发展永远不会实现? 我们今天很少有人期望发生什么革命?
软件开发改变了世界。 我们只看到其中一些即将到来。关于当今软件开发的四件会让过去的程序员大吃一惊的事。
如今,计算机已经在我们的生活中生活了数十年-在大多数时间里,我们一直在观察它们,并试图预测未来。 有些变化并不难预料。 我们知道更快,更强大的硬件将推动语言的复杂性上升。 我们预测了代码将渗透到我们周围设备中的方式,从而取代了多合一的个人计算机。 我们已经花费了数年的时间来预测虚拟现实和人工智能的巨大变化。
但是其他变化出乎意料。 过去的开创性程序员可能没有想到以下四件事。
1.编程语言仍然是文本
1978年,布莱恩·克尼根(Brian Kernighan)编写了这是世界上第一个" Hello World"程序,却不知道他的代码将变得多么有名。
今天,大约半个世纪之后,您将毫无疑问地认识到此基本C代码的语法。 这说明了什么:编程语言是保守的。
即使语言混乱是真实的,即使新的API和框架一夜之间出现了,主流仍在缓慢地转变。 面向对象的程序设计是在1960年代由Simula发明的。 在1990年代,它随着C ++的发展而声名显赫,尽管有一些颇具挑战性的挑战者,但它仍然是当今的主导范式。 实际上,现代编程的最显着特征之一就是,世界上许多最重要的语言都具有相似的C风格的语法,从C#到Swift,Dart到Go,Java到JavaScript。 变化越多,它们保持不变的程度就越高。
编程专家已经预测了我们编写程序的方式将会改变。 我们一直期待着任何人都可以使用的自然英语语言,然后是根本没有任何文本的流程图风格的可视化语言,然后是可以自行编写的AI语言。 除了有趣的实验和利基工具,我们仍在以与上一代相同的方式来编写代码。
2.大多数软件便宜或免费
20年前,安装新的专业软件意味着要旋转CD,单击安装向导,以及逐个观看进度缓慢的进度条。 一些安装程序会客气地建议您使用等待时间来喝咖啡。
假设您想要合法的许可证,安装软件还意味着花大量的钱。
如果您有资格获得合适的晋升,Office 95的价格为几百美元。 但是,需要新的专业版本的完整副本的企业将以599美元的价格上钩。 那是在1995年。按通货膨胀因素调整后的价格,今天购买Office 95的价格将达到惊人的1033美元。 (当时,企业仍然认为这是一笔交易,因为它将多个应用程序捆绑在一个程序包中,并且使其最重要的竞争对手Novell PerfectOffice的价格低了。)
对于企业开发人员而言,这个故事更加昂贵。 由于分别购买操作系统,开发工具,数据库软件和其他工具的巨额成本,大多数Microsoft开发人员要么从Microsoft购买MSDN订阅(几千美元),要么在一家这样做的公司工作。 甚至被厌恶的Microsoft FrontPage也以699美元的标价推出。
今天,这种模式已经消失了。 发生了什么? 首先,开源软件赢得了开发界的青睐。 它拥有最热情的社区,一些世界上最有价值的软件,而且价格无与伦比(免费)。 然后,它传播到商业世界,在这里,公司现在比通过购买座位许可证更可能通过Amazon Web Services或Azure等方式支付计量使用费用。 然后,这种技术传播到了消费者世界,科技公司推出了他们的软件,并向其他人出售了将广告展示在观众面前的机会。
一些公司仍然可以靠软件换钱的模式生存(Adobe和许多游戏开发人员一起想到了)。 但是这些往往是中小型软件公司。 微软,谷歌和苹果等大型公司的软件销售收入越来越小。 有些人,例如Facebook,甚至没有办法为其软件付费。
3.桌面应用程序只是一种特殊的Web应用程序
自从1990年代初某个时候互联网首次引起公众的关注以来,我们一直期望互联网能够改变世界。 结果,尽管它摧毁并重建了我们世界的基本组成部分,但它引发的许多转变都让人感到意外。 如果您已经呆了足够长的时间,那么您会看到音乐业的消亡,商业的重塑,印刷媒体的消亡,以及分享新闻和信息的分布式社交团体的兴起。 所有这些变化都是巨大的,但没有一个是意料之外的。
另一个不足为奇的变化是台式机软件逐渐被网络应用所取代。一旦可以在Web浏览器中使用JavaScript进行某些操作(具有通用兼容性且无需安装过程),它便迅速成为二手首选。 在不同的域中反复重复此过程。 当然,桌面应用程序对于某些功能和某些专业领域仍然很重要……或者是吗?
在Node.js的帮助下,Electron创建了一个桌面外壳,其中封装了客户端Web堆栈(JavaScript和DOM)和Web服务器堆栈(具有一些用于插入操作系统API的扩展)。 如果这听起来有些沉重的开销,那您没错。 更糟糕的是,每个Electron应用程序都会获得此重量级执行环境的独特副本。 这听起来像一场肿的噩梦,但是计算能力和内存已经如此丰富,以至于开发人员可以负担这些开销。 剩下的就是历史了— Electron成为了适合构建Atom和Visual Studio Code等应用程序的专业质量工具。
当然,本地桌面应用程序并没有全部消失。 但是Electron蓬勃发展,并且出现了新一波技术,这些技术可以帮助开发人员将桌面应用程序隐藏在Web应用程序中。 WebAssembly打破了大门,通往Blazor等新项目。 世界已经倒转了。
早在互联网时代,我们就知道台式机和网络之间的性能差距会缩小。 我们知道,当今的关注点(JavaScript语言的缓慢解释特性,HTML DOM的额外层,非本地图形API)将不再那么重要。 我们中有些人甚至知道,每种类型的应用程序最终都会在网络浏览器中运行。 但是,有没有人意识到这种开发模型的优势-广泛的应用范围以及在各处使用相同技术的诱惑-会导致我们将桌面应用程序置于伪造的虚拟化Web浏览器和Web服务器中? 而且该设计的成本几乎变得微不足道了吗?
4.我们输掉了安全战争
在2000年代初,我们一直在寻找新的计算方法,并且还在不断增加安全风险。 不可信的应用程序可能会安装病毒。 黑客可能会使网站崩溃,并窃取信用卡数据,文档和电子邮件。 身份欺诈难以抗拒。
快进到今天,情况基本上是一样的。 数据仍然被盗。 网络仍被黑客入侵。 我们即将解决的早期互联网计算机安全性的唯一挑战是病毒挑战,因为我们已经为游戏和大多数消费者应用创建了巨大的沙盒模型。 但是,随着通用的全球计算和物联网的发展,我们需要捍卫的范围变得不可思议。
安全专家知道,万无一失的安全性是不可能的。 取而代之的是,我们争取一种称为"深度防御"的东西-防御措施的分层序列,迫使攻击者阻止多个系统窃取我们的秘密。
但这是问题所在。 在过去的二十年中,我们未能巩固最薄弱的环节:最终用户。 尽管我们已经开发了生物识别技术,但与保护数据相比,我们更有可能使用面部识别来索引我们的Facebook图片。 不能(实际上)证明人与人之间的身份。 我们拥有很少用于我们自己的数据或通信的加密工具。 这使两个月前的安全专家大为震惊:神秘地,带有任意大写和特殊字符规则的文本密码仍然是一件事情。
当然,安全是持续不断的斗争,人性很难改变。 但是,仅通过询问就可以窃取数十亿美元时,我们就无法保护最终用户。 而且,如何解释世界上技术最先进的国家何时举行受到低技术网络钓鱼攻击影响的选举?