呆在家里的时间越来越长了,这也给了我很多时间去做一些以前没有想过的思考。
所以趁着目前的学习阶段,我想谈谈我所认为的三种主流编程语言——C++、Java、Python。这三种语言有着不同的运行方式、不同的运用场景和不同的使用目的,也是我目前主要使用的三个编程语言。
C++
C++ 是我最早接触的语言之一了,早期的 C++ 更多地是 C 的一个不严谨的“超集”,你甚至可以在 C++ 的语法环境下编写 C 程序,两者相互兼容。后来的 C++ 17 / 18 反而越来越像“Python”,这也足以显示目前语言的一个发展方向。
的确如今的 C++ 复杂度已经过分高了,从而让开发者把更多的时间花在了指针以及内存管理等本可以自动处理的部分。这对于如今互联网企业的“敏捷开发”潮流来说十分不友好,如果贯彻 C++ 就需要花费大量时间搭建脚手架。
优点
优点显而易见,程序运行效率极高,接近于机器语言,并且相比于 C 有 OOP 的能力。所以这能够让 C++ 开发者在硬件层次上考虑问题,从而最大化利用硬件的性能。
所以这就特别适用于对运行速度要求很高,与系统底层相关的程序。
缺点
那它还有什么缺点呢?首当其冲的就是在开发过程中,工程师需要花费远超算法实现的时间(至少对于我来说是这样)去解决硬件资源管理和内存管理的问题,而这些问题往往与目前解决的问题无关。
第二点便是代码量和复杂的设计。这大概是历史原因,因为 C++ 一直在鼓励复杂的、精致的设计,导致了庞大的代码体积。
Java
Java 是我最近学习的一种语言。期初我学习 Java 的兴趣并不高,但是后来的作业中用了一下,便继续深入了一点,现在大概还是初学者阶段吧。(笑)
因为我的 Java 经验并不是特别足,所以就简单对比一下 Java 与其他语言的优劣。
优点
优点很直观,就是“Write once, run anywhere”,这也是当初 Java 被设计出来的原因。因为 Java 需要先将代码编译成可供 JVM 运行的字节码,所以这也意味着程序可以完全不依赖与运行的平台,只要有 runtime 的运行环境即可。
其次便是 Java 的编程过程相较于 C++ 就轻松了很多,不仅比 C++ 小巧简单,而且有 GC,OOP,强类型,与 C 结合比较好。
还有一个最大的优点,便是使用 Java 的开发者占比非常高,所以 Java 的入门是十分简单的,如果出现了错误也能够及时在网络上寻找到解决方案。
缺点
此外缺点也很严重,一个就是每一台运行 Java 程序的机器都需要 JRE,而这个 JRE 无论嵌入 exe 还是独立安装,都会占用一定的使用空间。并且由于是 runtime 的环境,所以占用内存大小会远远超过 C++ 的程序。
除此之外,Java 还存在部分代码类不直观,配置环境和版本混乱的缺点。但是由于运行速度也不错(相较于 C++ 慢很多),并且开发速度和难度都低了很多,所以 Java 在大多数的使用环境下都是一不错的方案。
Python
Python 是一个让我又爱又恨的语言,几乎占据了我日常的 60% 代码量。
由于 Python 的语法结构简单,如今有相当多的营销号和机构在使用“人工智能”的噱头推广这一门语言的学习。但这样的潮流有其弊端,会容易给人一种学会了 Python 的错觉,其实很多人只是学会了使用 Python 的部分方法罢了。
但我觉得这反而是 Python 的一个优势之处,接近于人类语法的语言结构使得更多人都可以从容使用 Python 去完成所需要的工作,而不需要掌握过多的语法细节。这一点与 C++ 截然不同,我用 Python 花 25 分钟完成算法实现,用 C++ 可能需要 50 分钟甚至更多(编程 + 调试)。
Python 的另外一个优势在于它能够作为优秀的胶水语言,粘合在大型项目的模块之中。它有出色的模块化特性,能够协同开发大型的复杂网络项目。而且也十分直观,修改代码即可修改程序,无需通过漫长的编译过程。
当然缺点也很明显,Python 的运行效率奇慢(真的出奇的慢),内存占用奇高。这主要是因为 Python 的动态语言特性,使得运行的时候需要额外分配余量内存去确保变量能够在任何一种类型下进行存储和运算,并且由于动态类型,在循环步骤的时候会重复检测变量类型,消耗了大量时间——当然 Python 也有 jit 这样的预编译解决办法,但是不支持第三方库,也不够优雅。
不过好就好在 Python 与 C 高度耦合,所以关键的计算密集模块,可以使用 C 语言来编写,从而优化运行速度。这也是现今很多 Python 科学计算库的实现方法。
所以在我看来,Python 是一个非常优秀的脚本语言,它就像是胶水一般,可以填在任何一个空隙和角落。它不一定是最优选择,但往往是最快选择,尤其是在现在的“快就是王道”的环境下开发效率格外突出。