当前位置: 首页 > 科技观察

为了性能,我把10行代码改成了500行...

时间:2023-03-13 01:18:55 科技观察

作者|写的代码量和这个月的工资直接相关。这里可以用比尔·盖茨的话来说,“用代码行数来衡量编程的进度,就好比用重量来衡量飞机制造的速度”。这个话题在技术界引发了热烈的讨论。[Isaac]作为公司经理,你必须意识到你会得到你所评估的。也就是说,当你关注代码量的时候,代码量会爆炸,但并不代表项目的进度就快了,反而可能会慢一些。【梁飞】你怎么看?如果你用C语言编程,写同一句话:“helloworld”用1行,Python可能用10行,Java可能用20行。如何衡量这个?而且,不同层次的程序员写出的代码质量也不同。就像比尔盖茨写Winodows的底层代码,10行就搞定了,执行效率非常高。普通程序员写100行就搞定了,执行效率低。【考小琴】用代码量考核有点废话,容易造成代码冗余对不对?质量还不错。[哎哟]这绝对是不合理的。将其用作性能评估只会使简单的程序变得糟糕。增加代码行数最简单的方法是减少函数的重复。通常,将复用的代码或相同的功能封装成一个函数。如果要求行数,没有人会这样做。调用自己封装的函数时,直接把函数内容写进去,比如我有一个函数intsum(inti[]);其中10行,我在程序中调用了50次,所以我占用的代码行数是50行。如果我不封装这个功能,那么我的代码行数是500行。如果只看代码行数,只能做一些无用功。1、代码多并不代表代码少可能更有利于软件的运行。该代码有两个基本要求。一是完成它应有的功能,二是结构清晰,便于后期维护。为KPI疯狂“凑字数”,增加代码行数只会让代码难以阅读和使用。据某平台的一组统计:Linux的内核代码超过2500万。改进后,新增代码2,229,836行,删除代码2,004,759行。在添加了许多新功能的同时,也删除了许多旧功能。CPU体系结构支持和内核中的其他无用代码。可见,在软件开发过程中,代码的多少并不能决定软件的质量。一个软件要想继续发展下去,就需要对已有的代码进行重构和重写,剔除那些无用和冗余的代码,从而增加整个Codebase的可维护性。研究表明,对于常用的编程语言,生产力似乎是固定的,但如果使用合适的高级语言,编程生产力可以提高5倍。以流行的编程语言Python和古老的编程语言Java为例。Java比较麻烦。实现同样的功能,Java需要很多行代码,而Python可能只需要几行代码。这可以从以下两个示例中看出:打印HelloWorld来源:博客字符串处理来源:博客因此,在编程世界中,高输出不等于高价值。2、用代码量来评价程序员的贡献,无疑是外行人的决定。如果按照字数结算,那就拼命泼水,如果按照页数结算,那就拼命换行。程序员绩效指的是稿费的结算方式,得到的结果无外乎如此。程序员的工作不是敲代码。作为技术人员,程序员需要有编程能力和技术知识才能站稳脚跟。代码是智慧的产物。代码量的多少与可以实现的功能没有直接关系。创建代码是为了提高生产效率,所以代码量并不重要。而且代码行数其实很容易增加,比如换行、初始化、赋值、加注解、大括号、中括号、小括号,或者多写一些无用的类和方法,甚至引入第三方源码该项目。但高质量的代码是经过深思熟虑和优化的结果,其迭代过程可能是数次甚至数十次。这些努力在最终代码中是看不见的。老实说,有无数种方法可以增加行数。但结果如何,代码规范被打破,代码质量难以提升。编程的本质是解决问题,而不是写垃圾代码。在网上看到一个很有意思的例子。一个非常优秀的程序员可以做到别人100行代码就可以完成的事情,而他10行就可以做到。于是他开始把一行代码就能完成的功能写成10行。比如给定两个点计算矩形面积的函数,原来他写了这么一行代码:doublegetRectAreaByPoints(doublex1,doubley1,doublex2,doubley2){returnabs((x1-x2)*(y1-y2));}(来源:知乎@安晓辉)现在他会这样写:doublegetRectAreaByPoints(doublex1,doubley1,doublex2,doubley2){doublewidth;宽度=x1-x2;如果(宽度<0){宽度=-宽度;}双高;高度=x2-y2;如果(高度<0){高度=-高度;}双区;面积=宽*高;如果(面积==0){返回0;}else{返回区域;}}(来源:知乎@安晓辉)这样看,缺点很明显。很多程序员关注的是如何增加代码行数,而不是如何写出高质量的代码,甚至有些人会不惜一切代价交换代码,大量复制粘贴,根本不考虑复用,导致大量垃圾代码。因此,代码行数不适合作为工作量的衡量标准。3.程序员的贡献应该从多方面来评价。一个项目比较麻烦的部分,往往与框架搭建功能、需求分解功能以及后续的功能测试有关,而代码只占了一部分工作。代码能力可以随着经验和时间的推移而提高,但算法逻辑能力和架构能力不会。这两个是衡量程序员能力的重要标准,但是这些“能力”是无法计算的。因此,对于程序员的绩效考核,KPI标准应该更加复杂。不能简单地统计代码行数,而是可以看代码的质量,发现的bug数量,代码测试的结果,单元测试的覆盖率,以及项目中的角色和岗位.已经研究了定量和其他方面。只有通过各种调查得出的结果才能更真实地反映员工的工作能力,并以此来激励程序员更加努力地工作。例如,国内互联网大公司腾讯的绩效评价分为业务评价和组织管理评价两部分。通俗地说,就是绩效评价和行为评价。绩效评价权重为70%,行为评价权重为30%。虽然网上并没有公布明确的考核标准,但可以看出,他们的考核也是多方向同时进行的。