一门编程语言同时扮演了3个不同的角色:它连接了机器,它连接了开发者,它连接了团队。
然而在这些角色上,现有的编程语言都有严重的问题。
如果我们可以解决下面的这3个问题,不仅仅可以让开发者的体验变得超棒,同时也肯定会有实质性地回报。
可考核性问题
软件开发的最大危机是缺乏可考核性。
理想的情况是,总有一个团队对整体负责,然后他们把职责分派给下一层的多个团队。就像结构化编程所许诺地那样分工方式。
然而在这个到处都是微服务的世界里,职责以碎片化地方式从一个团队传递给许多其他的团队,导致业务方的负责人疲于给多个技术团队重复沟通。更为重要的是,这导致了没有人可以对最终业务收益负责。
为什么这个问题和编程语言相关?因为我们所写的每个function,每个class都是关于如何分拆问题的。
语言不仅仅描述了逻辑,它还塑造了我们的世界观,如何把大问题拆解为小问题,又如何把小的解决方案拼装回大的解决方案。
可读性问题
时常我们需要读很多代码才能找到我们所需要找的东西。信息的密度很低。总是感觉代码的因果联系怎么那么“扭曲”。
同时代码重用也不可避免地牺牲了可读性,因为你要跳过那些和你的特定使用场景无关的通用逻辑。
非功能性需求同时又和本来已经很复杂的功能性逻辑纠缠到一起。比如大段大段的错误处理就是导致代码很不好读的常见原因之一。
让代码可读不仅仅是把变量名取好就可以做到的。编程语言如果不提供类似协程,AOP,函数重载这些机制,代码风格是无法写成我们希望的那样的。
异构计算问题
主流语言对于并行和分布式计算的支持是以编译器hint和库的形式来实现的,其世界观基本停留在PDP-11只有一个线性执行的CPU的年代。
今天在一台机器上有多种执行引擎(SIMD, GPU)已经司空见惯了,在一个软件内同时使用他们中的多个也越来越普遍。
而且内存模型也不仅仅是一个大的heap,对于不同的执行设备,可能有多级的heap。
编程语言应该对实际的执行设备提供更接近真实的抽象,而不是把我们的思维和表达限制在过时的计算模型上。
愿景
理想的编程语言应该具有下面这些特性:
职责应该从最顶层到最底层逐级分解,总会有那么一个团队可以对全局负责
相关的逻辑被集中到一起,不需要跳到很多地方就能知道到底是怎么回事
语言应该能够描述现代的计算环境,包括SIMD/GPU/微服务等多种计算模型
到头来,所有的一切都和代码是给人来读的有关。人可以很轻松地从各种抽象层次去检视代码,推测它的正确性。代码里所写的就应该是脑袋里所想的。
领取专属 10元无门槛券
私享最新 技术干货