js归根到底还是函数式编程。优雅的js代码必然是高阶函数,表达式,不可变数据运用和驾驭的好的代码。高阶函数,表达式,不可变数据基本可以替代类,继承和封装及所有设计模式,困扰面向对象的所有设计模式问题,基本都可通过高阶函数解决。举个例子,spring所津津乐道的面向剖面编程,在函数式编程里就是一个use函数,而且只用写一次,不用配置满天飞。函数编程的这种抽象思维对于来自java面向对象世界的程序员确实难以理解和驾驭。

java的卓越之处在于其有编译性语言的性能,但在内存管理上没他们麻烦(主要与c, c++比较),当然,跨平台行,不过这似乎没啥好说的(现在还有哪门语言不是跨平台的?)。初次之外,java最本质上是一套代码规范,严格的如同一个暴君的代码规范。这台规范是建立在面向对象理论基础上的,严格按比规范,使得代码清晰度,可维护性无人能敌,加上强类型和编译器检查,特别适合大型软件的开发协作。然而,面向对象在带来巨大好处同时也产生了巨大问题,面向对象的坑产生了设计模式,设计模式使不必要的复杂度和啰嗦度到达无以复加的程度。命令式语言本来就不性感,再加上面向对象和设计模式,借用某知名coder的话"我们每年白白浪费了几百万行代码"。

java普遍用来写服务端,而服务端真正好玩的是数据库,nginx,分布式架构和linux及开发运维,然而我们的java开发人员目前觉大多是接触不到这些层,因为有几百万行代码要写或复制,自己也无时间和兴趣去探索这些领域,更不必说什么函数式编程。于是,我们的java程序员日复一日,做着将数据库api翻译为应用程序api再暴露给前端并随着前端需求不停修改的半机械化工作。想象力,创造力,抽象思维能力,探索精神由此丧失。

js代码普遍不太看得懂,java代码普遍不太有意思,这就是现状。
展开
10