我对未来技术趋势的一些看法

1,497 阅读8分钟

预测未来的技术发展方向是件有趣又有意义的事情,正确的判断技术发展方向对于技术选型,业务发展和职业规划都起着至关重要的作用。日常的需求沟通,项目管理,设计编码,运维部署工作能带给我们满足感和安全感,但是在脚踩大地之外偶尔也需要仰望一下星空,看看未来是什么样子,这里就神棍一把,说一下我对未来技术发展趋势的一些看法。

困难与挑战

在预测未来之前,首先分析一下程序员的日常工作中遇到哪些困难与挑战。

需求和设计

在需求沟通阶段,程序员需要准确的获取PRD上的需求信息,并对业务的价值和发展有一定的预判。根据以上的信息进行技术选型,数据建模,设计抽象。在这个过程中主要的挑战有:

  • 高效的需求沟通
  • 合理的技术方案选择
  • 对现实世界的逻辑抽象

开发和测试

在编码和测试阶段,程序员需要选择适合的数据结构并编写算法,合理的运用设计模式高效的实现功能,并且保证尽可能少的存在bug。在这个过程中主要的挑战有:

  • 高效的编码
  • 避免语言的陷阱
  • 尽量少的bug
  • 代码有可读性和机器执行效率

部署和运维

在部署和运维阶段涉及到测试环境和生产环境2个方面,程序员分别需要在测试环境和生产环境部署代码和定位问题。在这个过程中主要的挑战有:

  • 方便的提供多套隔离的测试环境
  • 方便的在多集群多机器的生产环境部署和回滚代码
  • 方便的部署和升级基础设施(例如mysql)
  • 生产环境和测试环境的一致
  • 生产环境可以弹性伸缩
  • 有工具能辅助发现定位问题

系统内部

系统内部的主要挑战来自代码腐烂和功能复用2个方面。

  • 代码腐烂:如何在系统复杂度不断增加,几千几万次迭代之后依然可以高效的进行功能开发,而不是系统变成谁都不敢动的层层叠,开发效率越来越慢。
  • 功能复用:代码和系统的复用往往意味着更高的开发效率,更少的系统风险,一次修改就可以解决问题,而不是满世界的查找相同功能的代码进行修改。

系统外部

系统外部的主要挑战来自高并发,高并发带来3个问题,抗压,竞态条件,热点数据

  • 抗压 高并发意味着系统需要支撑更高的吞吐量,如果存在比较严重的性能瓶颈往往导致服务的不可用,无状态的节点可以比较容易的水平扩展,有状态的节点通常会成为系统的瓶颈。比较常见的解决方案是分库分表+缓存,但是同样带来开发难度提升,数据不一致,数据迁移等问题。
  • 竞态条件 高并发也会导致小概率的竞态条件不断出现,导致不能得到正确的结果。例如cache aside模式中读缓存为空并且DB读耗时>DB写耗时会导致缓存脏数据问题。
  • 热点数据 高并发在秒杀等场景中也会导致热点数据问题,在DB中会导致严重的锁冲突性能急剧下降,在cache中会导致缓存穿透,击穿,雪崩等问题。

业务约束

不同业务的特点也会带来不一样的挑战,例如很多金融业务会要求强一致而非最终一致,计费等业务的错误容忍度也远低于社区,微博突发热点话题的业务特点也会带来更大的技术挑战。

趋势:一切皆代码,无处不AI

分析了软件开发过程中面临的困难与挑战之后,终于来到了激动人心的未来技术趋势部分。无论是大到工业革命还是小到技术微创新,本质上都会发展生产力,解放生产力,未来技术的发展肯定也会极大的改变软件开发行业,和其他的行业一样,分化成标准化,规划化,规模化的大规模工业制成品模式和少部分知识密集型的研发模式。对于未来的技术趋势我认为是--一切皆代码,无处不AI,软件开发的整个生命周期都通过代码的形式进行组织和编排,同时有AI参与到需求,设计,编码,测试,运维的每个阶段,软件开发变的非常容易,极大的降低门槛。 针对上述遇到的困难与挑战,具体看一下已经出现的和可能出现的解决方案。

需求与设计

在需求和设计阶段我认为未来的趋势是SaaS的繁荣+专家系统+更快的原型构建工具。随着云计算的发展,数据的积累和SaaS自身发展,SaaS会逐步取代外包软件研发和自建研发团队,直接购买SaaS服务将会是中小型公司的第一选择。AI+SaaS会改变SaaS千篇一律的缺点,专家系统根据企业的业务特点生成个性化,定制化,智能化的解决方案。在原型构建领域会出现类Sql的语言,程序员不必再告诉计算机怎么做,只需要声明式编程即可。

编码和测试

在编码和测试阶段我认为未来的趋势是更简单的并发编程+所见即所得编程+AI辅助编程+持续集成。在未来TDD会成为主流,写单元测试不再是一项增加成本的额外工作,而且真正成为提高生产力的工具,在所见即所得的编程模式中写的每写一行代码都能直接看到单元测试的运行过程和当前结果,AI辅助编程会使得未来实现一个模块就如同当前调用一个类库一样简单,每次的commmit都会触发独立的持续集成流程,软件的开发难度会有大幅下降,开发效率会有极大的提升。

部署和运维

在部署和运维领域我认为未来的趋势是容器+AI+故障自动定位+故障转移/恢复。在高可用架构下人往往成为最大的瓶颈,从故障发生到故障发现到故障定位到故障止损到根因分析,即使有着最强大的监控工具和最高效的处理流程大部分故障依然需要人的介入,故障恢复时间也存在极大的不确定性,同时7✖24的oncall也给人带来极大的精神压力。故障的定位本质上是一个封闭的领域,非常适合机器学习在故障定位中发挥作用,在未来代码部署之后AI就开始学习,当故障发生时可以自动扩容+限流+降级+定位根因+故障转移,甚至可以自动的打一段代码补丁快速止损。

架构

在架构领域我认为未来的趋势是更丰富更强大更智能的基础设施+更强大更智能程序运行时。软件开发生命周期中技术发展带来的生产力提升将使代码实现更加的简单,风格更加的统一,大幅减少了代码腐烂的速度,提高代码了代码复用率。也一定会出现更强大更智能的runtime环境,使得程序的并发控制更加的简单出错的可能性更小,非功能需求更加容易解决,同时基础设施也会更丰富更强大更智能,更好的解决系统内部,系统外部,业务约束带来的挑战。例如同时满足高性能+高吞吐+事务+扩展性的数据库(关系型并不是OLTP的核心需求)会取代mysql分库分表+缓存的模式。

未来的分化

虽然完全的自动编程并不现实(准确的告诉机器想要什么并不比告诉机器如何做更容易),但是生产力的不断发展必然影响这个行业,上述的改变很有可能发生,在未来初级程序员工作会大幅的减少,偏重业务与偏重基础技术的工作也会出现明显的分化,偏业务方向的程序员工作会变成行业解决方案架构师和技术咨询,偏基础技术的程序员则会成为某个领域的专家。

第一只猴子开始仰望星空时,人类诞生。