程序员的成长和代码行数的关系

标签: 程序人生 代码行数 | 发表时间:2014-09-26 20:25 | 作者:techug
出处:http://www.vaikan.com

在2011年John D. Cook写了一篇 博客,其中提到:

我的朋友Clift Norris发现了一个基本常数,我称之为Norris常数,一个未经培训的程序员在他或她遇到瓶颈之前能写出的平均代码量。Clift估计这个值是1500行。超过这个数以后,代码会变得如此混乱,以至于本人都无法轻而易举的进行调试和修改。

我还不了解足够多的初级程序员来验证这一结果,不过我自己认识到,程序员生涯的下一个瓶颈将发生在20,000行。我把Norris常数改成2,000那样正好变成十倍。

在我离开大学之后的第一份工作中,我和我的同事一样(和我差不多年纪)反复遇到了20,000行的瓶颈。在梦工厂我们有950个程序给动画师使用,行数统计显示多的一些基本在20,000 至25,000行。超过这个数的话即再多的努力也无法增加新特性了。

在1996年年中的时候我负责编写 梦工厂的照明工具(和另外两个程序员),我知道这将远远超过20,000行代码。我改变了我的编程方法并且这个工具一年后以大约200,000行的代码量成功交付。 (这个工具计划于2013年退役,在16年时间里它被每天使用并用来拍摄了21部电影。)我因为写了好几个行数在10万到20万的程序,我很确定我遇到了下一个瓶颈,我已经能够能感觉到它。

特别难的部分是和一些没有像你一样打破了好几道瓶颈的人讨论技术。打破这些瓶颈意味着做出不同的取舍,特别是一些短期内看起来不合理但以后会有所帮助决定。这很难去争论,短期内的优点是显而易见的,但我无法说服任何人说从现在起一年内可能有人会做出一个看似无害但是会破坏现有代码的改动。

Edsger Dijkstra 在1969年 写道

一个一岁多的孩子会以一定的速度匍匐前进,比如说每小时一英里。但每小时一千英里的速度就是一架超音速喷气机。就物体的移动能力而言这两者是没有可比性的,任何其中一个可以到的但是另一个不能做到,反之亦然。

一个Clift 所指的初级程序员,学会了爬行,接着蹒跚学步,然后行走,然后慢跑,然后再跑步,最后冲刺,他认为,“以这样加速度前进我可以赶上超音速喷气机的速度!“但他跑进了2,000行的极限,因为他的技能不会再按比例增加。他必须改变移动方式,比如开车去获得更快的速度。然后,他就学会了开车,开始很慢,然后越来越快,但有进入到了20000行极限。驾驶汽车的技术不会变成开喷气式飞机。

我的朋友 Brad Grantham用新手程序员用“蛮力”解决问题来说明了这一点。我认为这是正确的:当代码是在2,000行以下,你可以写任何混乱肮脏的代码并依靠你的记忆拯救你。深思熟虑的类和包分解会让你的代规模达到20,000行。

突破这个瓶颈的关键是什么?对我而言,就是让事情保持简单。除非现在就非常需要,否则完全拒绝添加任何新特性或者新代码。我已经在 Every Line Is a Potential Bug中提高了这一点(在 Simple is Good之前还是一知半解)。梦工厂的首席特效架构师是这么理解的:

对我而言,照明工具成功的地方在于他选择了一系列容易使用和维护的小功能并且强大到足够成为一个非常棒的照明工具。

作为一名技术领导我明白我主要的贡献是对那些同事觉得非常重要但不能证明其合理的需求说“不”。但真正的诀窍是知道什么需求增加了线性的复杂度(只和自身相关)和指数级复杂度(和别的需求有关联)。两者都因该去避免,但后者需要更令人信服的理由。

举个例子,在2012年,Linux内核有 1500万行代码。其中75%是具有线性复杂度的(驱动,文件系统和处理器结构相关的代码)。你可能有许多视屏驱动,但他们之间没有任何(或很少)的交互。剩下的则有更多的依赖关系。

Dijkstra觉得很难去教授这些先进的方法,因为他们只对那些2万行或者20万行的程序才有意义。任何的类或者规范必须限制其示例在几百行以内,暴力方法在这里也同样适用。你真的需要范例给你显示30,000行代码然后证实因为程序上手并不是非常复杂所以新功能能够很容易的被添加。但这实际上是不可能的。.

我不知道做出什么改变来突破20万行的瓶颈。我最近已经切换到了更纯粹的函数式风格并减少了可变状态,也许这些能让我有所突破。

而且我很想知道到代码量达到2000万行的时候会变成什么样子。

在三百万到四百万行代码左右似乎有一道无形的墙,无论多少人(数以百计)或多少年(数十年)花在上面增长率将会显著降低。- Dan Wexler

相关 [程序员 成长 代码] 推荐:

程序员的成长和代码行数的关系

- - 外刊IT评论
Cook写了一篇 博客,其中提到:. 我的朋友Clift Norris发现了一个基本常数,我称之为Norris常数,一个未经培训的程序员在他或她遇到瓶颈之前能写出的平均代码量. Clift估计这个值是1500行. 超过这个数以后,代码会变得如此混乱,以至于本人都无法轻而易举的进行调试和修改. 我还不了解足够多的初级程序员来验证这一结果,不过我自己认识到,程序员生涯的下一个瓶颈将发生在20,000行.

强制程序员使用统一的代码格式,好吗?

- - TECH2IPO创见
Java程序员Stijn Geukens与其他10位程序员一起为企业开发产品,但是他们11个人每个人都有自己喜好的编程平台,语言编写起来也是千奇百怪. 不过,这种情况很快就会发生变化,因为企业即将强制要求所有的程序员使用统一代码格式,统一使用Eclipse Java平台. 于是Stijn Geukens便在Stackexchange上 提问,“这样的强制要求是否值得.

IBM新专利:通过代码提交评判程序员

- - 奶味网-IT人- 最新RSS订阅
新闻来源:Slashdot. 觉得老板只需要用软件扫描一下你提交的代码就能判断你的工作效率进而决定解雇还是留下你这种事情怎么样. 这不是幻想 - 这是 IBM 最近披露的最新专利申请的内容. IBM 称, 对一名开发者的代码提交以及其他操作的统计可以用来产生一份用于同其他人比较的 "总结报告", 从而帮助管理层避免在低效率的程序员身上浪费时间.

程序员,都去写一写前端代码吧

- - 四火的唠叨
文章系本人原创,转载请保持完整性并注明出自 《四火的唠叨》. 你可以认为我是一个极端的人,就像有许多人专注于自己的领域而不屑于其它“肤浅”的工作范畴一样. 比如我见过不少认为做portal没有技术含量的判定,做工程都是充满苦逼行为的言论,最近则还有那些“大数据”崇拜者的疯狂吐槽……我的极端则有些不同,我的极端在于我认为绝大多数优秀的程序员,都要尝试多方面的事情.

[译]程序员要学会读源代码

- - 呦呦鹿鸣
在“沟通”这个复杂的领域里,写出能让人类领会并理解的连贯段落比敲出几行让解释器或编译器不致于“呕吐”的软件代码要难得多. 这就是为什么——就软件开发而言——所有的文档大概都是很差劲的. 而且,由于为人写作比为机器写作要困难得多,文档恐怕在可预见的将来还会继续差劲下去. 译者注:卢克(Luke Skywalker)是电影《星球大战》中的一个角色,他来自塔图因星球,在发现了莉雅公主输入到机器人R2-D2中的求救信息后,他与绝地骑士欧比旺一起迎战邪恶的银河帝国,最终救出了公主.

优秀程序员眼中的整洁代码

- - 博客园_知识库
  有多少程序员,就有多少定义. 所以我只询问了一些非常知名且经验丰富的程序员.   Bjarne Stroustrup,C++语言发明者,C++ Programming Language(中译版《C++程序设计语言》)一书作者. 代码逻辑应当直截了当,叫缺陷难以隐藏;尽量减少依赖关系,使之便于维护;依据某种分层战略完善错误处理代码;性能调至最优,省得引诱别人做没规矩的优化,搞出一堆混乱来.

程序员新人怎样在复杂代码中找 bug?

- - IT瘾-geek
我曾经做了两年大型软件的维护工作,那个项目有10多年了,大约3000万行以上的代码,参与过开发的有数千人,代码checkout出来有大约5个GB,而且bug特别多,open的有上千,即使最高优先级的showstopper也有上百. 优先解决那些可重现的,可重现的bug特别好找,反复调试测试就好了,先把好解决的干掉,这样最节约时间.

无代码开发,站到了程序员鄙视链顶端

- - InfoQ推荐
“无代码”不是在“淘汰”开发者,而是给予开发者更大挑战、更多机会. 疫情进一步推动了“无代码”行业的爆发. 微软称无代码是它的“Next Big Thing”,谷歌说无代码是下一代的变革和提升. 也有越来越多的企业开始进入“无代码”领域. 所谓“无代码”,并不是“不存在代码”,无代码平台的开发对后台的支撑能力提出了更高的要求,需要更为强大的技术团队.

弯曲评论荣誉推荐:李先静 。《系统程序员成长计划》

- 肥山 - 弯曲评论

通过艰难的六步让你成长为一名出色的程序员

- jl1987 - 东西
在GDNet论坛里,其中一类比较常见到的是像这样的一些主题:“你好,我刚 [ 买了台电脑 | 写了一个简单的游戏 | 开发了一个游戏引擎 ] ,我想知道从这起步的话,可以走到哪. 如果说我想要最终能实现某个特定目标的话,我需要学习什么东西呢. 首先,你必须明白,Peter Norvig 很久以前就已经非常清楚的知道: 成为一名程序员要花费10年时间.