V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xheruacles
V2EX  ›  程序员

程序员生产力(效率)差距大之谜,简单探讨

  •  
  •   xheruacles · 2012-06-08 13:31:05 +08:00 · 3885 次点击
    这是一个创建于 4544 天前的主题,其中的信息可能已经有所发展或是发生改变。
    首先定义下我这里讨论的程序员。
    1,热爱写程序,崇尚科技,相信技术的力量。(所以那些从北大青鸟几个月就出来只想找好几千的写程序的工作那种不在讨论之列)
    2,有基本的学习能力,且热爱学习。(个人认为这个几乎是程序员的本质了,有学习能力,且热爱学习的出了程序员范围,还真的难找到了。)
    3,想提高自己的效率。

    我常在各处看到各路大神说程序员之间的效率差距真是“何止十万八千里”。我个人算是一个很基本很初级的我所定义的程序员,时常想了解下自己和“牛逼”的程序员之间究竟差在哪里。从程序员是生产高质量代码的工作这个角度,大概思考了一下“牛逼”的程序员生产的代码具有以下几个特点:
    1,好读,好维护。(readability, maintainablity)
    2,灵活,适应变化的需求。(flexibility)
    3,抽象,代码可重用。 (reusablity)
    等等。

    要达到1,我只要学好英文,努力写好每一个变量名,函数名,类名。有清晰的代码结构等等(参看The Art of Readable Code)
    要达到2,我需要尽可能的理解需求,对其领域知识(domain knowledge)有充分了解,这样我才知道需求会有什么样的变化,才能在代码上得到体现。
    要到达3,我需要抽象思考能力,或者提炼重复出现的需求(这里的需求可以指一个函数所需要实现的功能)的能力。同一、类似需求尽量在一个地方实现,也算是解耦,也算是模块化思想的体现。
    当然还有很多别的特点,但是我这里只是想说,“牛逼”的程序员写出来的高质量代码我也是可以做到的。
    但是为什么“牛逼”程序员用的时间比我少?效率比我高?
    我大概认为有几点:
    1,英文好
    2,打字快
    3,用的语言非常好的支持灵活、抽象(据说用lisp的hacker都很牛逼)
    4,学得快,不管是学新语言,还是学新的领域知识
    5,等等。。。。。

    大家都有什么看法?
    6 条回复    1970-01-01 08:00:00 +08:00
    vicalloy
        1
    vicalloy  
       2012-06-08 13:44:47 +08:00
    2,打字快
    -----> 其他的没仔细看,但这点不成立。真正敲代码的时间只占到很小的一部分。
    rivsen
        2
    rivsen  
       2012-06-08 13:50:48 +08:00
    我感觉个人的做事的方法正确与否会影响工作效率,即使具有相同的知识储备的两个人,如果他们中有一方做事方法不够科学,很有可能就会影响两个人之间的工作效率差距
    zealot
        3
    zealot  
       2012-06-08 13:52:19 +08:00
    经验,或者说厚积薄发。

    即便是个简单需求,写出好代码的话需要涉及到很多个方面。
    对于新手,要么写出一个丑陋但还能凑合用的东西;要么挨个深入研究学习,将每个极小的点做到尽可能的"完美"(这里"完美"指已知的、一致认可的最佳实践,而不是那些虚无缥缈的追求)

    例如,根据pid判断进程是否存活。新人需要查阅资料、手册,甚至是参考开源代码,可能还要跟其他人一起探讨。查到资料后,还有收集更多信息来对比孰优孰劣。对比/proc fs、ps aux|grep pid、kill(pid, sig=0)。而根据新人能力不同,可能需要耗费半天甚至几天时间彻底弄透。但是,经历过这个过程的程序员,1分钟就能搞定。1分钟 vs 几天,这就是最常见的生产效率差异。

    再比如,记log的方式,需要考虑哪些因素;优雅重启;可运维性;可配置;监控与报警,等等。有经验的程序员充分研究和实践过后,则能厚积薄发。他们1分钟的代码背后可能蕴含着好几天的努力学习,这个过程是新手难以在短时间内复制的。

    当然,很多时候新人也能把开发时间缩短到比较接近有经验的程序员,但是没有足够的最佳实践钻研与积累,质量上是有差距的。
    生产效率的巨大差异,前提必须是新人也做到跟老鸟同样的"完美"("完美"同前面解释)
    xlaok
        4
    xlaok  
       2012-06-08 13:56:34 +08:00
    专注,我就特别不专注,效率有的时候奇高,计划一周的事情一个晚上能做完,大部分时间就是不专注,不知道自己在想什么,刷着网页一天就过去了,比如现在...
    zealot
        5
    zealot  
       2012-06-08 13:58:27 +08:00
    @zealot 补充一下,新人自然是可以站在前人肩膀上快速成长。
    所以这几点比较关键
    - 有前人指导
    - 踏实肯学,必要时需要系统性学习
    - 勇敢的放弃舒适区,去非舒适区寻求更大成长
    - 团队内部互相、频繁CodeReview,互相学习,及时发现自身问题
    - 最后一点很关键,足够的时间去投入到技术中,大学混四年,毕业后写个两三年代码就嚷嚷着IT码农老了后没饭吃,拼命转管理,这种团队内部技术成长与积累都会有很大问题
    xheruacles
        6
    xheruacles  
    OP
       2012-06-08 13:59:39 +08:00   ❤️ 1
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1009 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 20:22 · PVG 04:22 · LAX 12:22 · JFK 15:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.