今天编程中遇到的“正常”环境和十年前截然不同。对于给定的任务如web应用,移动和大数据,只涉及到一台电脑的概念已经消失了。对程序员来说,这意味着我们要应对例如并发,阻塞,同步性,网络通信与协议等问题。就连基本的网络编程都会让你熟悉例如缓存的概念。
由于这些压力,我们看到了在计算栈的不同层的一些现象。在高层,云计算设法缓和维持多台机器运转和网络通信所遇到的困难;在开发应用层,框架则体现通晓的模式并抽象出乏味的细节;在语言层,并发和网络计算在不同的语言中变得更简单,如Go,Scala.
看看你的家里,处理器和程序存在与大多数你所拥有的电子设备,他们都包含电脑的一小部分。不是每个人都会从事嵌入式编程,但许多开发者要学手机开发是什么,以及不远将来的汽车,飞机,眼镜和智能尘埃等。
即使更传统的计算,GPU阵列作为非传统编程的先进的数据运算辅助处理器正在兴起兴起。不同的形式因素需要不同的编程方法。业余爱好者的样品需求使得Arduino和Processing被带入生活。
语言和程序员需要应对的以前专家领域的问题,如低内存和CPU的速度,功耗,无线通信,软硬件的实时要求。
面向对象作为当今编程的主要形式,总体来说对数据是不够友好的。它着眼于访问方法中的封装数据的行为,以及用更紧凑的方式来封装数据集合。在数学的世界中,数据确实是没有行为,但C++ 或 Java的严格性要求开发者去操心数据是如何被访问的。
由于数据和数据分析越来越重要,把数据作为一等公民来对待的编程语言将会更多的被使用并流行起来。很明显,类似于R语言的静态语言将会在这股潮流中崛起。但在通用编程中会出现对Python或Clojure语言的偏好,因为他们使得数据更容易被操纵。
现在有比以往任何时候都更多的人在编程。这些聪明,数不过来的,偶然的开发者们为Excel的宏,精制JavaScript和通过如IFTTT 或 Zapier这样的web服务把应用胶合在一起等的技巧而吵嘴。这很合理,他们并不熟悉软件开发,而且也不感兴趣(译者附:最糟的是他们认为这样就已经可以应付工作混日子了)。
然而,只有当真正想要把事情做好时,许多这些随意的程序员才会发现很容易产生混乱和陷入困境。在最好的情况下,这只是恼人的,在最坏的情况下,这就是雇主的责任了。而且要知道,这不是程序员的错误。
如何对这些“意外的开发者”更好地提供可编程环境的服务呢?我们需要新的更多语言,或者基于现有各种语言的更好的框架吗?它关系到教育吗?甚至这是一个问题吗,或者只是生活吗?
从Bret Victor 的工作, 和诸如 Scratch 和 Light Table 这样的项目中有迹象表明通往一个不同的未来。
最后,这一屋子卡片是值得研究的,而这些卡片都是使用软件发展的现行方法构建的。问题很简单:我们的大脑里面只能容纳这么多东西。要成为一名符合是时代的程序员,你就要能够在你的脑子里面运行你写的程序。
当问题空间太过庞大时,我们的反应是写一个让这个问题空间变小的框架出来。因此,我们有了基于CPU的操作系统,在操作系统之上的各类库,用户接口,以及运行在这些库之上的应用框架。而网页浏览器基于所有这些之上,JavaScript又运行在浏览器之上,javaScript库运行在javaScript之上。我们都不知道是不是到此为止。
我们就像是一位野心勃勃的服务员,想要在其他堆叠的杯子之上再放一只茶杯。现在,它看起来如此摇摆不定。我们制造的CPU更快,更强大,但是得到的主观应用性能却和十年前一样。正是框架中出现的安全漏洞使得大量系统处于危险之中。
我们为什么要这样使用电脑,同时建立一屋子的卡片,并把计算能力限制在程序员可以放入他们的脑袋的地步呢。有办法对这种对待软件的观点按下复位键吗?
当我展望未来的编程时我将会考虑这些趋势和更多因素。如果你有经验或者观点,或正在研究从根本上不同的做事方法,我想听到来自你的声音。请给这篇文章留下一个评论,或邮箱联系 。
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。 2KB翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务