可能一直在一线的程序员对这个称呼都看不惯,尤其是全栈工程师。本文主要是抛砖引玉,预测未来的技术方向。另外,文中可能有一些表述不正确的地方,还望指正。如果只想看未来的部分,可以从中间开始。计算机出现后,这个行业的发展日新月异,不断产生新技术解决新问题。在这里,计算机语言的更替并不算是技术的改变。计算机语言应该算是规范。除了解决新问题,一些语言的出现和流行也有历史原因。当计算机刚产生时,它解决了计算问题。很多人需要几个月的计算才能在几天内完成。这一代工程师更多的是在解决硬件问题。程序员(或软件工程师)将问题翻译成计算机语言(其实程序员一直都是这样做的),也就是硬纸板。程序员不应该被视为当时计算机系统的核心角色。因为大部分的问题和挑战都在硬件系统和算法上。随着计算机成本的降低,世界大战后对战争的需求减少,经济开始蓬勃发展。硬件解决方案的成本成为一个问题,通用计算机开始出现。通用计算机逐渐统一了硬件标准,并在软件上赋予了更多的灵活性。基本模式是:巨无霸硬件厂商负责提供计算资源,程序员负责解决问题。这时候,程序员的春天来了。与此同时,软件开发理论也在不断发展。随着各种语言的出现,基本上大家已经认识了指令、数据、基本程序流程、库函数等各种计算机概念。未来随着计算机应用的范围越来越大,挑战也会越来越多。由于系统复杂度的增加,很多系统已经不是几个甚至几十个程序员就能完成的了。(今天的操作系统和搜索引擎是几千甚至几万人几十年辛勤劳动的结晶)。新的挑战也随之而来——软件工程,如何更高效、更可预测地开发和维护复杂系统。这里的挑战包括:如何将传统的项目管理经验融入到软件项目管理中;如何让程序员采用各种标准化的编程风格;如何搭建合适的团队架构等等,这时候程序员的重要性就凸显出来了,在产业链中的地位也变得更高了。纵观历史,成千上万的人曾经聚集在一起从事体力劳动或战争。人类从来没有能够将他们的智慧集中在一起来解决如此大规模的问题。同时,需要解决的问题规模和类型进一步增加。其中,人机交互是一个热门且具有挑战性的方向。在输入方面,除了打字机的键盘外,还发明了鼠标、显示器、扬声器等各种人机交互设备。除了实现底层驱动代码,程序员还需要在人机交互层面实现便捷易用的交互体验。这时候,除了算法和设计等挑战外,还有人体工学和文化方面的挑战。例如,中国人花了很多年,却没有产生广泛使用的中文键盘和流行的输入法。最终,英文键盘+拼音成为了最主流的输入法。这是汉字本身的特点造成的,广大程序员为了实现这些文化规律,花费了大量的人力物力。此外,互联网是另一个热门话题。程序员在底层将计算机连接在一起,依靠强大的网络能力实现人与人之间的远程通信。近年来,大数据、物联网等热门方向不断涌现。程序员从底层实现大数据的批处理、传输、存储,解决性能、可靠性等各种问题。由于大数据的准确性和完备性通常不是100%,大数据也让很多程序员开始去解决不确定的问题。别人家的程序员一直在解决不同领域和类型的问题。程序员的角色开始分化(同时,很多角色都和程序员分化了),从开发,测试,到架构设计,体验优化,前端开发,后端开发,驱动开发,数据库开发,IT等不计其数。纵观程序员并不太长的职业生涯,这些角色都在不断地出现和消失。这意味着一代又一代的程序员要么继续学习,要么离开这个行业(还不错,很多有钱人都是被程序员换的)。从历史上看,程序员解决的问题、使用的组件、思维方式都发生了变化。但也有一些东西是不变的,比如程序的基本流程、设计模式、软件工程等。所以很多程序员都在不断的学习新的东西,这样才能解决新的问题。那么,现在和未来正在发生哪些变化呢?这里我只想讨论一个:人机交互的革命,包括人机交互方式和人机交互层次的革命。(说人话!)嗯,就是Kinect、HoloLens、Cortana带来的新局面。这些新产品的集合将彻底改变现有的人机交互方式。一句话:未来,人们应该花更少的时间学习如何使用技术,而程序员应该花更多的时间让技术适应人,而不是人去适应技术。例如,独轮车不需要学习如何在一个轮子上保持平衡,四轴飞行器也不需要学习如何转弯和稳定。这些都是很好的例子。一:人机交互模式。人生活在三维空间中,程序员也在不断地以各种输入输出方式模拟三维空间。首先,显示屏是二维输出的,所以鼠标和各种触控方式也被设计成二维的。这里的二维不仅仅是一个平面输入输出,它真的只是一个物理平面。飞机。键盘在哪里?可以说它的维度甚至不是一维的。未来的输入设备是什么?它包括全息输入和输出设备以及免提输入。全息输入设备。Kinect等体感和手势输入设备是全息输入设备。Kinect很酷,但不得不说它只是全息输入设备的开始。这不仅是因为它的状态不温不火,还因为它还有很大的提升空间。一方面,设备本身的精度不够,使用范围不是360度无死角;另一方面,没有强大的人工智能做支撑(人工智能放在交互层面部分,这里只说全息输入设备)。未来的输入设备应该覆盖整个空间,准确检测人的微动作和微表情,甚至能够检测人的健康状况(安全和隐私是需要考虑的方面)。从单一的技术角度来看,应该没有攻不破的问题,但集成制造先进装备仍然需要巨大的投资。全息输出设备。全息显示技术在很多科幻电影中都有展示。HoloLens等增强现实设备和各种虚拟现实设备都是全息显示设备。这些设备仍处于早期阶段,但已经引起了不小的轰动。在物理技术突破之前,这种可穿戴设备是全息技术的主要载体。此外,还会有各种味觉和触觉设备,它们共同覆盖了人体所有的感觉器官,可以称为全息输出设备。像Cortana这样的语音助手。它最具革命性的一点是进一步解放了双手(为什么听起来很耳熟?)。这当然比不上直立行走解放人类的双手,但其革命性也是可圈可点的。还是那句话,这类语音助手还处于起步阶段,他们的主要挑战不仅仅是语音识别,还有后面要讲的交互层面。Cortana不像鼠标和键盘。一方面,你需要学会如何使用它,另一方面,你需要去一个固定的位置或固定的姿势去使用它。虽然Cortana只能拿起手机使用,但随着物联网的进一步发展,它可以得到进一步发展。程序员面临的挑战来了:制造、集成这些设备,甚至发明新设备。这些设备需要提供出色的体验,与人体运动、感官和感觉自然地无缝结合。在高层次上,如何将模糊的、大规模的输入转化为计算机可以处理的明确命令。与传统的输入法相比,除了三维空间之外,信息量也增加了一个数量级。如何提高投入效率,降低学习成本?程序员需要考虑的是如何颠覆性地提高输入效率。不仅仅是鼠标和屏幕的坐标从二维变成了三维。想想钢铁侠是怎么进去的?如何让设备输出最自然的体验?尤其是全息显示设备,需要大量的调试和研究才能解决头晕等问题。最重要的是:如何使用这些设备构建新的体验模型。例如,不同类型的应用应该放在哪里,如何放?什么样的动作操作最高效自然?这些都需要一代又一代的产品不断迭代,才能加深对新体验的理解,充分发挥新一代全息设备的能力。二:人机交互层面。在现在的人机交互方式中,虽然很多产品号称体验非常好,但人还是需要去适应设备。不仅是输入输出的方式,还有思维方式,目前人机交互的体验还有很大的提升空间。比如你要去旅行,首先要研究去哪里,要么上网,要么听人说,要么直接去旅行社订。去旅行社当然是最省事的,但是如果不听亲身体验的话,成本会比较高。如果要自己研究,选地方,定日期,买机票,酒店,找攻略,过程中需要用到很多搜索引擎,各种订票网站,发邮件。从一开始想起来至少要好几天,中间还要用好几个小时各种工具。而有钱人呢?可能只用了5分钟就完成了整个过程:告诉助理:想出去玩。助理可能只是问你想去什么样的地方(也许不是特定的地方)?你玩几天?你什么时候走?然后在基本确认后,汇报安排。这两个过程之间的核心区别在于交互的级别。普通人依赖计算机进行任务级交互,而富豪则依赖意图级交互。这就是不同层次的交互对效率的影响。除了解放你的双手,像Cortana这样的语音助手也是一种非常自然的输入法。这使得程序员和科学家可以开始更多地研究人们语言背后的意图,从而提高计算机与人类之间的交互水平。ProjectOxford和AzureMachineLearning等开放式人工智能组件,真正将实验室多年的玩具带到了世界。这就像当年Siri的发布。虽然它不是独一无二的,但没有它,就没有googlenow和Cortana的快速推出。好吧,我们再来一次:虽然ProjectOxford只是一个原型,但ProjectOxford的推出已经为业界定义了一个更高层次的人工智能组件接口标准,降低了人工智能的学习和应用门槛。特别是里面的语言模型。除了人工智能组件的开放,可以预见的是,各大公司基于大数据的各种数据模型也将很快共享。基于它们,人工智能的应用很快就会无处不在,所有的程序员都可以创造出更智能的应用,让每个人都拥有自己的私人助理。如果你无法想象私人助理的价值,请观看电影《她》(《Her》),看看人工智能如何帮助你处理电话和电子邮件。另一方面,在这一轮人工智能的热潮下,硬件公司也开始制造使用人工智能算法的处理器,这也代表着新一代编程语言和概念的开始。在交互层面对程序员的挑战更大:最大的挑战是学习和适应新的编程概念。以前的程序都是if..else+while这样的确定性结构化程序,程序员不得不开始学习如何写元程序。写的程序可以适应个别用户的需求,而不是写一个可以适应所有用户的程序。程序员的代码会有方向性和整体性,而不是一堆细节。脑洞大开,如何结合全息交互、物联网等技术,提升人机交互水平。帮助人们做事10步变成5步,5步变成1步。比如什么时候举手表示要喝水,什么时候抬起头表示要开灯,甚至没有具体的动作;它确实可以帮助人们管理时间和协调日程安排,而不仅仅是日程安排。总而言之,这里描述的未来可能在10年、20年或更长时间之后。也许我们这一代程序员已经退出了江湖。热点将不再是各种语言的发明,各种工程管理方法和软件设计模式的发现,而是技术如何进一步以人为本,推动生产力发展。程序员面临的挑战不仅仅是学习和探索新的输入输出方式,还要学习人工智能等完全不同的编程概念。【编者推荐】之所以聘请老程序员,就是因为这四个原因。只有程序员才知道的9个真相!写给代码技术同仁:只有被信任,才能有光明的未来,远离加班!提高程序员生产力的11种方法我是如何在12周内成为一名程序员的
