内容简介:程序员证明证明一个语言的优秀常常就是:用XXXX行代替了YYYY重写了ZZZZ。这都快变成了一个Pattern。事实列举是对的,但是这不足以说明一个语言就超过另一个语言,哪怕是在行数上。影响代码行数的因素有很多,重写后是最不容易说明问题的。就算使用同一种语言,你再重写自己的一个应用,也可以极大的缩短代码行数,而这是因为你站在了以前代码的基础上。除了写Hello World这种演示级别的程序以外,当程序的代码达到一定数量后,用说明语言其实区别不是特别大,翻倍可能,但是肯定达不到数量级的区别。原因是程序本来就是
程序员证明证明一个语言的优秀常常就是:用XXXX行代替了YYYY重写了ZZZZ。这都快变成了一个Pattern。事实列举是对的,但是这不足以说明一个语言就超过另一个语言,哪怕是在行数上。
影响代码行数的因素有很多,重写后是最不容易说明问题的。就算使用同一种语言,你再重写自己的一个应用,也可以极大的缩短代码行数,而这是因为你站在了以前代码的基础上。
除了写Hello World这种演示级别的程序以外,当程序的代码达到一定数量后,用说明语言其实区别不是特别大,翻倍可能,但是肯定达不到数量级的区别。原因是程序本来就是现实问题的抽象,当代码行数达到一定规模后,你自然会使用一定的抽象,所谓的高级语言,也是这样出来的。
举一个例子,即使你现在翻看一些 C语言 写得项目,你仍然可以发现面向对象的思想在里面,而且很多都是借助 struct
来模拟的,即使C语言的标准库没有 list
, map
这样的数据结构,但是有几个C语言的项目没有实现这些通用的数据结构呢?Redis包括 Linux 的Kernel不都是有这样的通用数据结构。
所以,当代码达到一定规模,我们就会抽象,所以会减少很多的重复,而重复才是影响代码行数的其中一个重大因素。
另一个影响代码行数的重大因素是兼容性,这也是很多软件大版本升级后,代码行数减少,性能变好的重要原因。一个大项目跨时很长,其中很大部分的代码贡献了再兼容性,包括改动时考虑对原有代码影响最小的情况。而重写完全不用考虑这些,加上更加熟悉业务,所有代码行数会有很大的减少。
所以用什么语言并不能指数级减少代码的行数,跟代码行数有关的就是减少代码行数并不能显著减少项目所用时间。再举一个例子,C#和 Java 相对是比较冗长的代码,但是C#和Java在工程面考虑了很多功能,比如如果你想做一些精确运算你可以直接用 decimal
类型,而你用 Golang
还真没有现成的类型,你需要用 math/big
库来处理。
以前听冰河的一个访谈,其中说到100W行的Lisp代码对应400W行的C代码,我认为这是靠谱的。在语言抽象度上Lisp算事比C要高出许多,但是也只是区区4:1,考虑到C语言的工程师数量,常见问题的解决范式,等等便利。Lisp剩下的优势就非常少了。
所以换语言重写缩小代码行数,真不是个什么事儿。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
机器学习基础教程
(英)Simon Rogers,、Mark Girolami / 郭茂祖、王春宇 刘扬 刘晓燕、刘扬、刘晓燕 / 机械工业出版社 / 2014-1 / 45.00
本书是一本机器学习入门教程,包含了数学和统计学的核心技术,用于帮助理解一些常用的机器学习算法。书中展示的算法涵盖了机器学习的各个重要领域:分类、聚类和投影。本书对一小部分算法进行了详细描述和推导,而不是简单地将大量算法罗列出来。 本书通过大量的MATLAB/Octave脚本将算法和概念由抽象的等式转化为解决实际问题的工具,利用它们读者可以重新绘制书中的插图,并研究如何改变模型说明和参数取值。......一起来看看 《机器学习基础教程》 这本书的介绍吧!