从时间上来说,我接触的编程语言依次是:汇编、C、C++、Java、Python、JavaScript。其中汇编、C、C++带给我的使用体验都不好且难以理解,Java是之前在学校时自学过一段时间,Python是在使用Tensorflow训练机器学习模型时使用过,2019年写过很多Javascript代码,应该说是我目前最喜欢的语言。
现在工作中要使用Java,最近在读《ON JAVA》,第一章有两个点印象深刻,记录一下。
1是所谓类型我喜欢JavaScript的一个原因是不需要去管“类型”,因为JavaScript是松散类型的,即一个var对象可以保存各种类型的值,可以是数值,也可以是字符。
Java是有类型区分的,书中这么说:
所有编程语言都是一种抽象。甚至可以说,我们能够解决的问题的复杂程度直接取决于抽象的类型和质量。这里提到的“类型”的含义是“你要抽象的是什么”。
作者用“你要抽象的是什么”来表达“类型”我还是第一次听说,感觉说得特别好,书中提到:汇编是对计算机底层的抽象,命令式语言(如C)是对汇编语言的抽象,他们都是根据计算机的结果而非问题的结构来思考的,C++还有很多这种思想的痕迹,也许这就是他们难以理解的原因。也就是书中说的:
程序员必须在机器模型(解决方案空间)和实际解决的问题模型(问题空间)之间建立关联。建立这种关联需要耗费很大的精力,而且它是与编程语言无关的,这一切都导致程序难以编写且不易维护。
而Java把解决方案空间和问题空间统一了:
你阅读的既是解决方案的代码,也是表述问题的文字。这种灵活且强大的语言抽象能力是前所未有的。
也就是说,你阅读代码时,就是在阅读业务逻辑,也是在阅读计算机是如何执行的,比如状态、操作。
2是所谓服务当你开发一个面向对象程序或理解其设计时,一个上佳的方法是将对象想象成“服务提供者”。你程序本身也是为用户提供服务的,它通过使用其他对象提供的服务来做到这一点。所以,你的任务是创建一些提供对应服务以解决问题的对象。
而我在想,我最好也把编程语言,比如Java、C++看作服务提供者,如果我选择用Java这个服务,那么我可能要创建的就是一个SpringBoot对象(最终的、大的对象)去帮用户解决问题,而SpringBoot又包含很多小的对象,即自己定义的对象(编程)。
选择语言(服务)时,就需要考虑这个语言的特性,比如我需要“多态”,C++服务有virtual关键字来达到此目的,而Java服务默认具备动态绑定特性。
其他参考:
《JavaScript高级程序设计》学习笔记9:感受抽象
何为对象?谈内置类型和类类型的初始化问题
int类型与char类型



