系统程序员成长计划(共7篇).doc

  1. 1、本文档共32页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
系统程序员成长计划(共7篇)

系统程序员成长计划(共7篇) :程序员 成长 计划 系统 台风路径实时发布系统 掉进快穿系统的程序媛 大型分布式系统 篇一:程序员的成长和代码行数的关系 程序员的成长和代码行数的关系 2014-09-28 15:13 佚名 techug 字号:T | T 我的朋友Clift Norris发现了一个基本常数,我称之为Norris常数,一个未经培训的程序员在他或她遇到瓶颈之前能写出的平均代码量。Clift估计这个值是1500行。超过这个数以后,代码会变得如此混乱,以至于本人都无法轻而易举的进行调试和修改。 AD: 2014WOT全球软件技术峰会北京站 课程视频发布 11 月21日-22日 与WOT技术大会相约深圳 现在抢票 在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行代码然后证实因为程序上手并不

文档评论(0)

1045141460 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档