搞定同一件事,程序员A用2万行代码,程序员B用100行代码,我们能因此说B比A厉害吗?程序员的能力能用代码行数(简洁程度)来评估吗?

http://www.guokr.com/question/426319/?orderby=vote&page=1#answer427622古城钟楼花2万行代码,而@陶國樑 只用了100行。谁更厉害呢?

推荐  (1) | 56人关注关注
49个答案
96 2

能用更简洁的代码实现预定功能当然是能力强的一种体现,但是这种能力并不一定是实际工作所需要的。过于简单的代码很有可能影响代码的可读性和可维护性。
还有,简洁的代码不一定就是最优化的算法。所以哪一个代码写得更好更强,要具体分析,不能只看代码的多少。

56 3

先说结论,很多情况下,同样的功能能用更少的代码写出来水平更高。

但是这个问题并不能如此简单就下结论,特别是不从事软件开发的人来说,单纯的下结论很容易引起误导。

对于程序员来说,这个问题本是个常识,也没有深入讨论的余地。但是题主应该不是从业人员,而问题下的答案乱七八糟,很多不明所以的人随便点赞和反对,特别是@叔大奥尼等完全没有编程经验的人,给出一些莫名其妙的结论,却得到了几十个赞,被推到答案的前面,具体为什么是错的,下面会详细说明。为避免大范围的误导,这个时隔近两年的问题还是要来说两句。

不少答案中提到的因素与结论有关系,但是戏谑的成分多,认真回答的成分少,这种答案都以赞+不是答案的方式处理了。然后还有一些答案,虽然点了赞,但是说明并不充分或并不完全正确。这里把这些答案中提到的因素列举如下

  • 功能的细致程度
  • 执行效率的差异
  • 通用性
  • 扩展性与可维护性
  • 代码可读性
  • 执行环境是否相同
  • 是否选用同一种语言
  • 是否使用代码库
  • 是否使用同一种库
  • 对目标领域的熟悉程度


如果所有条件都相同,毫无疑问,大部分情况代码量越少,越容易阅读,相应地,编写者的水平一定更高。
但是代码量的多少在满足功能和性能要求的前提下,是为容易阅读、容易扩展和容易维护服务的。

下面对容易引起误解的因素做简要说明。

通用性并不能直接决定代码多少。越通用的代码往往更复杂,代码也会相应的变多,但是增加程序通用性时的代码量增加也很有可能是程序员不知如何复用现有代码造成的,如果是后一种情况,很显然是能够说明水平的。如果在没有必要的情况下增加通用性,一定是水平低下的表现。使用合适的方式实现代码也是程序员的能力之一。

扩展性与可维护性和通用性相似,往往更加依赖于代码的复用和良好设计的架构,在这些情况下,往往代码量会更加少。但是这两个要求在某些情况下也会使代码量小幅增加,比如,满足这两个要求要经常写更短的函数和更短的类,但是更短的类和函数意味着更多的类和函数,因此也会多出很多函数名、括号、代码引用或其它符号。同样,如果为用不到的地方增加扩展性和维护性,也只能判定水平低下。

是否使用代码库也是一个很微妙的问题,需要分解开来讨论。对于初级程序员来说,不使用代码库而自己编写相关功能,或使用低质量的代码库,很有可能是因为他不了解或不熟悉高质量的代码库。而对于熟练的程序员,不使用代码库则很有可能代码库无法满足其需求,因而需要自己实现。因此是否使用代码库产生的代码量差异无法简单的得到水平高低的的结论。

语言的差异就不用说了,由于各种语言抽象层次差异巨大,没有办法横向比较。

目标领域的熟悉程度则能够直接体现水平,往往对目标领域越熟悉的人写出的代码越简短。

也有为了效率或其它原因故意把代码写成不太友好的形式,合理的写多可能恰恰是水平的象征。这种情况也没办法简单的评价。

然而正如@即墨.如烟 所说,“并不是追求极致就是最好的”。精简的代码是有目的的,最核心的目的就是投入产出比,特别是站在长期的角度。如果达不到这些目的,很多时候没有必要花费很大力气去把代码写成极简的形式。

具体问题还要具体分析。就题主所提到的例子“古城钟楼”来说,我并没有看过两者的代码,无从比较。由于题主给的条件不充分,实际上无法得出@陶國樑是个更厉害的程序员这个结论,我想@陶國樑本人也没有这个想法,我认为他想表达的只是“这是一个很简单的程序而已”。

再补充一点,传统上用代码行数来统计程序员的工作量是错的离谱的!

39 8

叔大奥尼NGA论坛著名版主

2013-01-09 19:19

我来补充下。

作为一个互联网产品经理呢,对于一个产品的具体要求大体分为以下几类:
1.功能性(第一要素,实现不了预期功能这个产品就没有意义)
2.稳定性(运行2分钟down3分钟的产品没人用)
3.用户体验(以实际敲钟为例,有的只是当当当,有的是音乐外加木偶巡游,后者体验更好)
4.扩展性(是否能便利添加功能——比如你家的挂钟就没办法加巡游的木偶了,但景点的因为有空间,就有扩展性)
5.后续维护性(第一任开发走了就没人能继续搞那就死逼了……总不能当潘多拉盒子封印着吧)

那么,相对于一个100行的代码来说,可能唯一能满足的就只有1、2两点——而20k行的可能在3、4、5方面都会做的更好
怎么说呢……为了消除歧义,也为了便于某些理解力不足的用户能够正确理解这句话……我决定编辑并详加解释这条:
首先强调下,上面说的仅仅是可能,而非确定的事实,也有可能100行的1-5全部做到(我们先假定就这么逆天吧),而20K行的字做到了1,这也是有可能的。
其次再说明下,我个人觉得如果100行的代码是调用了某些现成的库啊、接口啊等等,那么严格意义上来说这个代码只按100行统计也是不科学的。如果因为一个借助了外部的工具实现100行,一个是完完全全独立实现需要20K行,那么孰优孰劣就更不好说了。
最后,如果不论在前台或是后台,完完全全实现的功能都一样(比如能满足我所说的1、2、3、4、5这些条件),那么不用说肯定是少的比多的强力,这点毋庸置疑。


最后的最后,强调我的结论,也希望某些理解力不足的用户不要断章取义:
单纯的行数是无法评估好坏的——没有无用/冗余/不必要的重复,并且性能良好的,就是好代码

29 0

感觉不少人都在为2万行代码辩护。不过我觉得,代码太长了可读性、可维护性同样会差。
如果一个程序由一个不注意代码简洁的人来写,写了2万行,而由一个非常“吝啬”的程序员来写,写了100行(在功能相同的前提下),那我会觉得比较适合的长度应该是200~300行左右,绝不会达到“万”的数量级。

26 0

即墨.如烟BI工程师、程序猿、PMP

2013-01-09 22:20

显然木有可比性,暂且不论语言不同,即便是语言相同,在不同的场合下也不同的。
比如:如果对代码大小、执行效率、并发、性能等要求较高,一般来讲比较简短的代码会是首选。But,这这能会产生一系列问题:代码可读性和可维护性变差、可扩展性也可能会变差。
再比如:在对代码大小、执行效率、并发、性能等要求不是很高的情况下,一般来讲推荐注重可读性和可维护性高的代码,一般而言这样势必造成代码不是最精简的。But,这木有任何关系,满足场景的使用需求具有良好的可维护性和可读性即可。

重点是:实际工作中,并不是追求极致就是最好的。

22 0

傅里叶变黄油猫软件工程师,应用数学专业

2014-05-03 13:51

用代码行数来评价程序,就像用重量来评价飞机。

一个软件工程师,从低级到高级,他的代码会先从多,慢慢变得少,后来又变得多。

早期多,是因为代码内聚低,相同的代码抄来抄去改改就用。这种代码就像一坨捞面,每次需求更变或者设计调整都是一场灾难。
后来多,是因为耦合低,将模块拆分再拆分,条理清晰、易读、健壮、易重用、易修改,于是多出了很多接口相关的代码。这种代码就像博物馆里陈设的一件件艺术品。

21 0

就楼主所给的例子而言,用2万行代码完成这个功能一定是有问题的。现在看起来的问题是作者过于技术宅。。。。。。。。。。。。

到点报时是一个十分简单的功能。老式的机械钟不需要太多的技巧就能完成。当这个任务交给程序员时更简单,的确是100行内应该完成的事情。这个功能不需要高并发,无事务相关性,逻辑简单,接口明确。即便周围加上很多维护用的工具也实在想不出2万行搞定的理由。而这些工具不少是通用的可以靠引用别人的库搞定的。

支持 @辛昕的观点。
扩展性 和 后续维护性 上100 行代码必然胜过 2W行。
100行代码+1000行注释也才 1100 行。所以可读性以及后续可维护性上你懂的。
在能理解这100+1000行代码后,这100行代码写的再差,通过复制粘帖,修修补补,继承其思路重写撑死也就100行或200行。而其中的技术细节几乎是完全掌控的。模块小也更容易测试。顺着思路重写代码,这在开源社区中非常常见,A写了段不错的代码在X项目,B毫不犹豫的在Y项目抄了,并表示感谢(,然后一个引用连注释都省了。。。),比如java7 就毫不犹豫抄了python的排序实现。相反为了100行能搞定的事整体引入别人2W行代码的库是比较少见的,还会白白增加系统复杂性。而这2W的技术细节开发者需要花很大力气才能掌握。

我看到过不少为了运行速度,并行能力等问题把代码故意写长的例子。比如很多SHA1算法的实现会为了速度把主循环 复制粘贴 79遍,但是那是写底层库为了速度,为了提高hash表的访问速度才做的诡异事情。而且代价也就79行代码而已。。。。一个应用层,没有速度要求的东西能把100行写到2W行。

9 0

架構夢想程序猿 代码格式化洁癖 理想主义洁癖 等

2013-01-09 21:43

显然没有可比性

A 自己用jdbc写一个简单的跨数据库操作库,少说几千行.
B 调用现有的库 几十行就能实现

你说A与B 谁的技术好?

而且不同语言也没法比 python 显然比 c 写的少 但是执行效率呢?

如果再考虑架构未来是否有扩展性啊.那就更没法说了.

6 0

冰火梦幻信息与计算科学学士,算法控,AI爱好者

2014-05-03 08:13

远古时期那种恨不得控制每一个比特位的编码风格已经过时……
现在评价程序员能力的标准是:”编写正确,紧凑,高效,可维护,而且还廉价的计算机程序(出自杰拉尔德·温伯格的《理解专业程序员》)“。
同一个功能,任何能在IT企业混口饭吃的程序员都能写出风格不一、性能不一、长度不一、正确性不一、稳定性不一、可读性不一、可维护性不一的N份代码,其中最长和最短的代码长度比例可以达到1000:1。

6 2

人家是一个团队,又不拿来盈利。明明写着好玩的顺便练练技术。。。

那么认真干嘛

4 0

那也要看看比例。
1:200。
看过前面的回答纯属泛泛之谈。
即使什么可读性,可扩展性。
可读性也许再牺牲几行就可以满足?
至于扩展性,如果为了扩展性把一个功能单一纯粹的模块写成一个巨无霸,那还不如设置一个中间层。

无论如何,简洁和短小是一个优良设计的重要特征,当然不是绝对,而且如果总拿极端情况来说是没意义的。
再说100和20000,这个比例,问题绝不只是什么可读壳维护那么简单的事情,至于可扩展,那也是极其恶劣的实现方法,类似的事情我干过,但也没这么夸张,只是几百行和一两千行的差别。

4 0

加饭某审计学校的计算机学生

2014-05-03 15:22

你确定100行和2w行写出来的是一个东西?

不过我觉得2w行那个是因为大部分代码在造轮子罢了。

2 0

看过运营者的微博后,看来大家完全低估了码农的恶趣味。。。

2 0
支持者: 浮生n若茶 polebug

20000行那个不是故意写的那么长的么……

1 0
支持者: 浮生n若茶

敲钟那个是用多种技术搞着玩儿。而100行是指实现它所必须的代码数量。

1 0

nigou脑内秩序二级破损

2013-01-10 10:00
支持者: 浮生n若茶

很有可能太简洁的代码实现的功能不全面,只实现了最简单功能.
要是说100行代码PK上千条我信,pk2w条代码还能实现所有功能可能性不大,即使2w行代码再垃圾.

1 0
支持者: 浮生n若茶

没有具体需求和环境,难以判断是2W行好还是100行好
不过这个程序真的写了2W行?

1 0
支持者: 浮生n若茶

能用几行代码解决几万行代码的人肯定是牛人,不过这么做是否符合需要就另一说了
java这种效率并不算太高的高级语言能够占领大半壁江山就很说明问题
代码效率的高低,很多时候编译器自己会帮你优化,但如果代码写的只有自己才能看懂,从一个开发团队的角度来看,那就很麻烦

1 0
支持者: 浮生n若茶

如果你只是写一个脚本,而且这个脚本只是自己使用一下,我觉用100行代码完成它的人肯定牛B,

1 0
支持者: 浮生n若茶

抛开钟楼的程序只讨论这个问题

同语言下100行能代替20000行的情况有两种:
1、20000行的人水平比较水,或者对API不熟悉很多东西都自己手动实现。
2、20000行的人所做的处理和考虑的事情跟100行的不一样,说个程序猿懂的例子可以就是说直接new和用对象池生成一个对象的区别。程序除了功能以外还有很多要注意的东西,可扩展性可读性性能这些可能不是那么直接能体现出来的东西。

P.S. 突然想起以前高中竞赛有个师弟各种缩代码(例如把多句代码放在一行,不留空行之类),统一题目比我短了10行,然后跑来炫耀,那种感觉实在是………………

1 0
支持者: 浮生n若茶

如果都符合需求(比如稳定性,运行效率,可维护性,注释清晰,易读),自然是B的能力强 。
不过实际中完成同样的事情,不会出现几万行代码对几行代码这么大的差别,所以B能用几行代码能写出来,如果A不是刚来的菜鸟实习生的话,哪B的代码肯定缺少了很多重要的东西,所以B就不能算能力强了,用取巧什么的更合适

1 0

hetaoljt专业烧开水

2014-05-03 21:26
支持者: 浮生n若茶

用汇编写一万行和用mathematica写100行,不是一个概念吧。。。

1 0
支持者: 浮生n若茶

能,把完全相同功能的代码写的越短的越变态

1 0
支持者: 浮生n若茶

=-=喜欢动不动压代码的童鞋飘过

1 0
支持者: 浮生n若茶

用过Arduino就知道了 表面看着代码很少 但是背后有很多代码都被封装隐藏起来了

1 0
支持者: 浮生n若茶

脱离使用的语言和具体实现方式,讨论代码行数都是耍流氓好吗楼上各位!

1 0
支持者: 浮生n若茶

这不是重点好么,100行那个调用接口了吧

1 0
支持者: 浮生n若茶

与使用的语言也有关系。
比如A用了python, B用了C/C++甚至汇编。

1 0
支持者: 浮生n若茶

作为曾经的程序猿……我明确表示我非常讨厌改别人的代码。
如果一定要我改,我选择死磕那个200行的变态纠结神奇代码,也绝对不去碰那个2万行的,哪怕它每行都有注释。

我就不明白了,某些人认为2万行的代码会比200行的可读性更好?你以为读代码还能跟读小说一样一目十行么?你见过2万行的代码长啥样没?

1 0
支持者: 浮生n若茶

这个例子太极端了而且,也跟语言相关
我能假设 2 万行的是汇编语言,而 100 行的是高级语言么?
那这个优缺点学过计算机原理的应该都知道

另外,个人主张在能用类库的情况下,尽量用类库
当然,类库的选择上应该是通用的,有人维护的

1 0

Jove被电脑玩的

2014-05-08 09:56
支持者: 浮生n若茶

这个例子不好,这个微博明显就是宣传,炒作。至于那20W代码,不过是作者想在电视上自抬身价而已。

就象有人造了个螺丝,电视台去采访,当事人说花了2个亿。
真实情况是人家开了个汽车工厂,,螺丝是第一个生产出来而已。

抛却上面的例子,如果有人非要说20W代码,更有效率更稳定,,何不自己焊几千W个电子管来取代CPU哪,,
不做不死啊

1 1
支持者: 浮生n若茶 Maverick506

盖茨说过句话,通过代码量判断工作量和通过重量判断飞机建造情况一样,没什么意义

1 1
支持者: 浮生n若茶

还要容易维护,还要省资源……不过100行总是要好过2W行的……

0 0

盛令漪哈师大附中学生 模拟法院社团社长

2014-05-05 22:24

1.作为一个高中的程序小白,我只懂Pascal,行数貌似不是问题,重点是分号
2.我觉得如果你把随机数啥啥啥的都手动写出来,那肯定行数比较多,可是本质是一样的吧
3.我觉得……比较复杂的程序加后门比较不容易被看出来
4.我觉得……可能是思路不一样吧……有时候懒了,就写个比较暴力的,占内存超大代码反而简单

好吧就想出这些

0 0

这个问题让我想起了前几年我国发射的一颗月球探测器(好像只是探测),当时要在天上绕一个礼拜,变好几次轨,才会进入月球轨道。曰本似乎是为了恶心天朝,同时间也发射了一个,一两天就变轨到月球轨道了。
然后很多人就是中国的更先进啦(好像经常上CCAV的那个将军也说了),理由就是咱们天朝的,在天上转一个礼拜,还能准确无误的进入轨道,还没跑丢了,说明咱们这个更精准啦,技术更成熟啦等等的。
所以,A编了2万行代码,还没有出错,多了不起啊!

0 0

V月雨程序猿在路上

2014-11-06 23:21

具体情况具体分析,算法的优劣不=代码长度。

0 0

穿靴子的柴郡猫吃货,技术宅,猫科动物爱好者,医生

2015-08-27 18:16

2万行代码和100行比,要么100行狂用第三方或者搞了个别人看不懂的算法,要么2万行故意的写了一堆废代码和注释。相差实在太大,无法比较。

0 0

一般软件系统是一个小的核心部分,外面一堆的辅助管理功能。如果核心部分在同样功能情况下做到越小,那么绝对是值得提倡的。但是再小也有一个极限,突破这个极限会让代码变得非常不易读,比如编码比赛就有这种情况,功能很强,但是基本上不可读了,这不好。从另一个角度来看,能把相同功能用非常少代码做好和比用非常多代码做的程序员,前者的水平应该比后者高出许多,雇佣的话要选择前者,前者可以在工作者选择怎么写,选择余地非常大,而后者却是没有办法的。

1 2
支持者: 盛令漪

我能把它们写在一行上,是不是更牛逼?

0 1

酷叼拽控制科学与工程硕士

2013-01-10 00:30

100行的代码很可能不易读懂,也很可能不是模块化的,不容易修改,扩展。所以不能说明什么。

0 1

对产品的定位会影响到程序员的设计。

0 1

如果非要对比,那么要用运行性能来对比(例如:执行这段代码的需要时间),这是对比的唯一要求。

0 1

我觉得楼主的问题应该在控制变量的前提下进行各种对比~

0 1

当然不能,代码量不能决定空间复杂度和时间复杂度,程序员厉不厉害是个很复杂的问题,楼主这么问就好像问建筑公司盖同一个楼,一个用1年一个用5年,哪个厉害一样

0 1

16号楼扛瓦斯物理化学在读博士

2014-05-03 20:19

作为一个外行我插句话:
听说有的程序员工资是按行算的。

0 1

2万变100应该也是用了很多第三方库吧,大量频繁地用第三方库会导致代码不稳定,不过最终检测码农能力的还是看运行效果,BUG少才是王道,所以一切QA说了算

4 0

橡胶万岁会计学硕士生,摄影爱好者

2013-01-09 19:03

该答案错误。留楼警示自己。
-------------------------------------------------------
请楼主自行搜索视频,关键字”64K 3D动画“。
1.5G的动画可以压缩成64k,也就是压缩大约25W倍。但是64k的就一定更好吗?不一定的。这个例子中,64k的对硬件要求很高~~
所以,个人理解,软件好不好,先看实用性,可维护性,可拓展性;对硬件的要求;算法的效率;之后才是行数。

查看更多

添加回答

登录 后回答问题,你也可以用以下帐号直接登录

相关问答

关于我们 加入果壳 媒体报道 帮助中心 果壳活动 家长监控 免责声明 联系我们 移动版 移动应用

©果壳网    京ICP证100430号    京网文[2018] 6282-492号    新出发京零字东150005号     京公网安备11010502007133号

违法和不良信息举报邮箱:jubao@guokr.com    举报电话:18612934101    网上有害信息举报专区    儿童色情信息举报专区