C++中的符号编程令人着迷,因为它是由一个主要的机制——“引用”和“指向”的反操作而衍生出来的,一切都是围绕着内存地址进行。其中的星号、and号、甚至->都是那么的优雅。但如今,Lambda操作的引入让这个跟"->"看起来差不多的符号"=>"变得毫无美感可言。
理性地编程,是一种与世界对话的过程。而为了尽快实现功能而使用各种短视的机制,则是一种情绪化的编程倾向。Java构建在虚拟机之上,虽然功能的实现与组织效率很高,但终究会让架构太大的工程最终危如累卵,缝缝补补也将无济于事。究其原因,是因为Java本身是一种“玩具语言”,就像玩具电子琴之于钢琴,虽然能够实现很多功能,或者说如果接上合适的发声芯片也能媲美各种乐器,但这终究不能掩盖这门语言简陋的事实。
同样的,Lambda表达式也是一种对编程语言的亵渎。当你在调试程序时看到一大段委托代码不能一步一步地被执行而是整个被嵌套起来,其中如果发生什么问题会被快速地发现吗?且不说对变量赋值时如同SQL查询语句一样让人摸不着头脑的“不可读性”,就是本身如果有一些代码需要重用,不还是要拆出来?
是的,交付就是一切,但真正有良心的开发者会想着后续的维护能够有规可循。一个只能在演示时实现而不能有效维护和扩展的功能,和在PPT、特效视频里展示出的虚幻假象有何不同?如今的软件需求与以前不一样了,市场变化飞快,难道甲方就不想经常改动需求以适应更新的挑战吗?但目前软件市场供需如此,开拓者很少,这也是这个市场蛋糕逐渐变得有限而让开发者变成码农而内卷的原因。
不过确实,Java提供了很多先进和实用的编程理念,但Lambda并不是值得推崇的其中之一。Lambda表达式破坏了程序的可读性,给维护造成了很大的困难,让接手代码的人需要花更长的时间来读懂代码,况且这还是一个“新机制”。但我看这种短视的机制,不要也罢。