文丨Peter Wayner
本文是对未来编程的发展趋势提出了十一个预言,包括云、物联网、视频、机器学习、法律问题、容器等各个方面。
技术的进步日新月异。午饭刚吃饭,一位从事芯片设计的朋友就会为自己请求宽恕:摩尔定律要求他必须每周让芯片的速度提高0.67%,即使是在假期。如果达不到这个要求,那么芯片的速度就不会每两年翻一番。
为了能在将来打下基础,现在需要对未来的技术方向做出预判。但是,从物联网日趋严峻的安全问题到遍地可见的机器学习,编程的未来变得越来越难以预测。
云将击败摩尔定律
有的人认为芯片速度的发展不会再像八九十年代那样每两年翻一番了。虽然,这很有可能,但是,却不重要,因为芯片之间的界限变得越来越模糊。
在以前,桌面CPU的速度很重要,每隔几年就要重新购买一个更快的CPU才能提高工作效率。而现在,大部分的工作都可以在云上面完成。当你在使用Google搜索时,Google公司庞大的云端可能会投入10台、20台,甚至1000台主机为你寻找正确的答案。
程序员目前面临的挑战是如何为每个用户部署性能足够的计算能力,让用户能够快速完成计算,而不是让用户等的时间太久,以致于闲的逃到其他竞争对手的网站上去。提供云服务的公司能为你解决计算密集型问题,但是你自己必须去寻找并行计算算法让服务器协同工作。
物联网(IoT)的安全性让人忧心忡忡
Mirai病毒的出现给物联网的发展敲响了警钟,这些聪明的小设备也会像普通计算机一样感染病毒。目前并没有一个有效的机制来修复这些设备的漏洞。我们的烟雾探测器、烤箱、烘干机,以及房子里的一切,他们的的软件未必都是最新的,未必安装了所有的安全补丁。设备数量的增加使得监控家庭网络的智能化变得更加困难,因为你无法分辨出连接到家庭路由器上的所有设备。
物联网平台的开放性能让设备具有更大的灵活性,但是也为病毒开发者提供了更多的机会。他们需要做的就是找一个存在漏洞的小设备,然后就能黑进成千上万个同样的设备中去了。
视频将以新的方式主宰网络
当HTML标准委员会将视频标签加入HTML标准时,他们可能只是为了解决插件带来的问题,而并没有想到要重新定义娱乐。在过去,大多数视频是被动消费的。人们坐在沙发上,按下播放按钮,由视频的作者来决定观众能看到什么。
JavaScript对视频的控制是有限的,但是聪明的网页设计师们正在设计一种巧妙的方法,这种方法可以将视频与网页有机地整合在一起,使得用户可以与视频进行交互,控制故事的发展。但是作家、艺术家和编辑们的想法需要编程人员来实现。
控制台将继续取代电脑
人们都喜欢游戏机,游戏机有着强大的显卡和稳定的软件平台,让我们能在客厅释放压力,在游戏中锄强扶弱,或者是踢足球。
客厅控制台只是开始,房子的其余部分的制造商们也可以遵循类似的路线向前发展。制造商可以选择一个开源的生态系统,但他们目前却在建立属于自己的封闭平台。封闭的平台会破坏市场,可能造成一个开关能控制这个灯,却不能控制另外一个。对于程序员来说,这减少了代码重用的机会,使得他们的工作量大大增加。
数据将继续称王称霸
在2016年的美国总统大选之后,一些人开始嘲笑数据分析专家,称他们的分析统计是一种愚蠢的行为,大数据也是毫无用处的,因为专家们对总统选举的结果预测错了。那他们是如何得出这个结论的呢?通过将一组数字(预测)与另一组数字(选举结果)进行比较。其实,他们这时候就是在用数据分析。
人们可能会根据不完美的数据做出错误的预测,但这并不意味着我们应该停止收集和分析数据。数据的收集、整理和分析是当今企业最重要的工作之一。程序员将继续提供更多、更容易理解的数据给决策者使用。但这并不意味着决策肯定是完美的,因为决策者的知识背景和直觉也会影响最终决策。这对于程序员来说需要更加努力地工作,构建更大、更快、更多的数据密集型软件。
机器学习将成为新的标准功能
当大学生们在学习“数据结构”这门课时,他们了解到祖父母们以前写代码的时候是无法依赖一个名为“数据库”的东西的。真正的程序员必须脱离Oracle、MySQL或MongoDB而对数据进行存储、排序,以及关联数据。
机器学习算法在最近这几年得到了突破性的发展,过去,程序员需要自己编写大量的代码来执行复杂的分析,但是,像R语言这样的商业智能工具逐渐流行起来,并开始成为一些软件的基本功能。
机器学习算法不会在一夜之间发生翻天覆地的变化,目前我也不清楚它的未来会是什么样子,但是很明显,越来越多的商业计划依赖于机器学习算法来找到最佳的解决方案。
随着个人电脑的衰退,UI设计将变得更加复杂
在智能手机、客厅控制台和平板电脑崛起的时候,唯一仍然坚持使用个人电脑的人是上班族和需要交作业的学生。
以前,程序员在制作UI的时候可以假设软件或网站用户都有一个键盘和一个鼠标。但是现在很多用户却没有键盘或者鼠标。智能手机用户用手指触摸一块几乎无法容纳完整的26个字母的玻璃屏幕,而控制台用户正在按遥控器上的方向键。
由于触摸事件与点击事件略有不同,因此,设计一个网站会更加棘手。用户屏幕的分辨率各不相同,屏幕尺寸也差异很大。在将来,UI设计只会变得更加麻烦。
开放性的终结
个人电脑在逐步走向衰退,这也是一个开放而又深受欢迎的市场在走向死亡。
PC的开发人员可以自由地写程序,编译代码,将其复制到磁盘上,然后将这些磁盘打包,向全世界的人销售。而现在,家庭控制台被牢牢地管控着。没有资本投资,就没有人能够进入这个市场。应用商店虽然开放,但它们仍然是一座有着围墙的花园,限制我们能做什么,不能做什么。
我们正在失去共享代码的能力,因为我们正在失去编译和运行代码的能力。PC的终结是开放性终结的其中一个重要的方面。虽然对于现在来说,大多数读者可能还是会有一台可以编译和运行代码的桌面电脑的,但这正在慢慢的发生变化,能够编写并分享代码的人将越来越少。
自主交通就在这里
这不单单是指汽车,一些人想要制造不需要道路的自主飞机,而另一些人想要制造适合简单旅行的自主滑板。
程序员不会控制人们在屏幕上看到的内容,但是能控制人们去哪里,以及如何与世界进行交互。人只是游戏的一部分。所有的东西都会自主移动。
如果你想要吃市中心的某个著名厨师做的食物,那么一个带有保温功能的自主滑板会把食物带到你家里。如果您想要割草,自主割草机将取代邻居家的小孩。
法律会发现新的限制
几年前,最高法院认为对车辆进行跟踪需要有相关的授权,因为当时只有警察会在汽车里装配跟踪器。现在,没有人真的知道哪条规定适用于获取Waze、Google或者其他应用程序的跟踪数据,而这些数据包含了我们的位置信息。警察伪造文件或密码合法吗?如果目标是真正的恐怖分子,或者仅仅是在停车点停车太久而没有及时付费的普通人呢?
这是开发者未来几年的一大难题。软件架构师需要在设计软件地时候提前考虑这些法律问题。在编写任何代码之前,他们需要考虑隐私和法律的问题。如果不这样做,开发者在以后可能会遇到麻烦。
同时,代码本身就是法律的一个版本。程序员定义软件什么可以做什么不可以做。在我们编写代码时,我们实际上定义了世界的某个角落的自由和限制。
容器将占统治地位
理论上我们不需要容器。可执行文件用来运行,操作系统负责权限管理和资源调度,以便让所有的可执行文件可以和平共处。但是,这个梦想的破碎比以往任何时候都要快。可以和平共处的程序逐渐变少,许多程序依赖于各种不同版本的库或其他特殊的环境。即使有“随处可以运行”的技术,例如Java,但也可能会遇到麻烦,因为有各种不同版本的虚拟机。
好的VM可以解决这个问题,但是它们很庞大。容器是轻量级的,易于使用,因此大家都喜欢。我们将在企业的各个角落看到越来越多的容器,因为他们的魅力实在太大了。