0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

10倍效率程序员是否真的存在

工程师人生 来源:网络整理 作者:工程师吴畏 2018-10-30 11:50 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

编程神话中,一个 10 倍效率的程序员可以完成一个普通程序员 10 倍的工作量。「普通程序员」就是指,善于完成工作但没有 10 倍效率程序员那神奇能力的人。实际上,为了更好地描述普通程序员,我们可以这样认为,就是在专业程序员之中,代表那些可以输出平均编程成果的程序员。

是否存在 10 倍效率的程序员,在这件事上编程社区内是严重的两极分化:有人说根本没有这样的人,也有人说事实上不仅存在这种人,如果你知道到哪里去寻找,甚至还存在 100 倍效率的程序员。

如果你认为编程是一个“线性”的学科,那存在 10 倍效率的程序员这件事看起来几乎是不可能的。一个跑步的人怎么可能跑得比另一跑步的人快10倍?在相同的时间内,一个建筑工人怎么可能建造东西的速度比另一个建筑工人快 10 倍?然而编程是一门设计学科,并以一种非常特殊的方式。即使程序员不参与实际的程序的架构设计,实施它的行为仍然需要一个实施策略上的子设计。

因此,如果一个程序的设计和实现不是线性能力,像经验、编码能力、知识和识别等无用之物,在我看来,不仅仅是线性的优势,当这些事物作用在一起时,它们的效果就远不是一加一这么简单了。当然,当程序员可以同时处理程序的设计和实现时,这种现象发生得更多。如果越以“目标导向”为任务,那么拥有10倍效率潜力的程序员为了轻松地达到目标就越可以开拓她/他的能力。

当手头有非常刚性的任务时,这个任务有具体的指南:必须使用哪些工具和如何实现事物。那么 10 倍效率的程序员在更短的时间内执行大量工作的能力就被削弱了:他仍然可以开拓“局部”上设计的潜能,但却不能以更意义深远的方式去实现目标,这也许包括,可能、甚至完全从项目中删除部分规范,即便需要达到的目标几乎看起来相同但需要付出的努力程度由于一个大因素被减少了。

在作为程序员工作的二十年中,我观察着与我一起工作的其他由我指导的程序员同事,我下发指定的目标,他们则给 Redis 和其他项目提供补丁。期间,很多人告诉我,他们相信我是一个非常高效的程序员。考虑到我根本不是一个工作狂,我也把自己当作快速编码的一类人。

以下这些品质,我认为将引发程序员生产力高低截然不同:

纯粹的编程能力:完成子任务

程序员最显著的限制或优势之一就是处理实际执行程序部分的一个子任务:一个函数,一个算法等。令人惊讶的是,根据我的经验,非常有效地使用基本的命令式编程结构来实现某些功能的能力,并不像人们想象的那么普遍。在一个团队中,有时我观察到非常无能的程序员,甚至不知道一个简单的排序算法,和在理论上非常有能力、但实施解决方案的实践非常不足的刚毕业程序员相比,他们的工作往往事倍功半。

经验:模式匹配

通过使用经验:我的意思是一系列已经探索完成的用于大量重复的任务解决方案。有经验的程序员最终知道如何处理各种子任务。这既避免了很多的设计工作,也是针对设计错误的非常强大的武器,但反过来却又是简洁的最大敌人之一。

专注:实际时间 VS 虚假时间

如果不考虑时间质量,那么评价花费多少时间来编写代码是不恰当的。内部和外部因素都可能导致专注度下降。内部因素是拖延,对手边的项目缺乏兴趣(你不能做好你不喜欢的事情),缺乏运动/福祉,不好的睡眠质量或者睡眠不足。外部因素是频繁的会议,没有实际办公室的工作环境,同事经常打扰等等。很自然的是,尝试改善专注度和减少中断对编程生产率将产生非边际影响。有时为了变得专注,需要采取极端措施。例如,我只会偶尔阅读电子邮件,并且不回复他们中的大多数。

设计上的牺牲:删减 5%,获得 90%

当不愿意认识到一个项目的非基本目标占据了很大的设计复杂性,或者正在使另一个更重要的目标难以实现时,往往会产生复杂性,因为在基本特征和非基本特征之间有设计张力。设计师认识到设计中所有不容易实现的部分是非常重要的,即在努力和优势之间没有绝对的比例。为了最大限度地实现产出而执行的一个项目,将完全地集中在可以在合理的时间内实现的方面。例如,当设计Disque(一个消息的代理工具)时,在某些时候,我意识到通过为消息提供性能最好的顺序,项目的所有其他方面都可以大大提升:可用性、查询语言和客户端交互、简洁性和性能 。

简洁性

设计时保持简洁性,这个明显的观点意味着一切。为了理解什么是简洁性,核查复杂性大多数时候是如何产生的是值得做的。我认为复杂性的两个主要驱动因素:不愿意进行设计上的牺牲以及在设计活动中累积的错误。

如果在设计过程中,每次都追求错误的路径,我们将离最优解决方案越来越远。一个初始设计错误,在不好的方面,不会导致该系统重新设计。为了应对初始设计错误,却会导致另一个复杂的解决方案被设计。因此,项目在每个错误的步骤之后将变得更加复杂和效率低下。

实现简洁性的方式是以“概念证明”来推敲,从看起来最可行和直接的解决方案开始工作,以便大量简单的设计能在程序员脑中被探索。之后,经验和个人设计能力将有助于改进设计,并为需要解决的子设计找到合理的解决方案。

然而,每次需要实现一个复杂的解决方案时,重要的是要长时间地推敲如何避免复杂性,只有在没有更好的可能性的、即使考虑到完全不同的替代方案情况下,才继续这个方向。

完美主义,或者如何扼杀你的生产力和影响你的设计

完美主义有两种变体:在程序中达到最佳可衡量的性能的工程文化,以及作为一种人格特征。 在这两种情况下,我认为这是程序员快速交付事情的最大障碍之一。 完美主义和外部带有偏见的观点的恐惧带入了一种设计偏差,导致仅根据心理或简单可衡量的参数来改进设计时可选择项较少,其中诸如健壮性、简洁性、及时交付的能力往往不被考虑。

知识:一些理论将会有所帮助

在处理复杂任务时,有关数据结构的知识、计算的基本限制和非常适合于模拟某些任务的非平凡算法将对找到合适设计的能力产生影响。 成为一切事物的超级专家不是必需的,但是至少,知道一个问题的潜在解决方案是必需的。例如,应用设计牺牲(接受一些误差百分比)和清楚概率集合基数估计器可以组合在一起,以避免复杂、缓慢和记忆效率低下的用于统计整个流程中唯一的项目的解决方案。

底层:了解核心

即使使用高级语言,程序中的一些问题也是由于对计算机如何执行给定任务的误解而产生的。 这甚至可能导致需要从头开始重新设计和重新实现项目,因为在使用的工具或算法中存在着根本问题。良好的 C 语言能力,了解 CPU工作原理以及关于内核如何运行以及系统调用如何实现,这些可以避免糟糕的后期意外。

调试技巧

有时候为了发现那些 bug 会花费大量的工作时间。善于获取一个bug的状态、一系列合理的解决问题的步骤、以及编写不太可能包含太多错误的简单代码的态度,这三点对程序员的工作效率有很大的影响。

看到程序员的上述品质如何能够对输出产生 10 倍的影响,我并不奇怪。 结合起来讲,从可行的模式开始,它们允许良好的设计实现,可以比替代方法简单几倍。 有一种方法可以用来强调简洁性,我喜欢称之为“机会主义编程”。 基本上在每个开发步骤中,选择一系列要实施的功能,用最少的付出,以最大程度地影响程序的用户基础。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编程
    +关注

    关注

    90

    文章

    3707

    浏览量

    96756
  • 程序员
    +关注

    关注

    4

    文章

    955

    浏览量

    30785
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    AI算法开发,SpeedDP打辅助!不止10效率

    。而那些能够带来10工作效率的AI自然能够轻松取代人类。当然这也是相对的,不是每个领域都适用,厨师再快,也无法让实物快10熟;医生再优秀
    的头像 发表于 11-20 18:09 354次阅读
    AI算法开发,SpeedDP打辅助!不止<b class='flag-5'>10</b><b class='flag-5'>倍</b><b class='flag-5'>效率</b>

    鸿蒙是否存在可以调用中断的API。

    当前想要测试一下高精度定时器中断响应时间,没有找到相关的API,或者是否存在API可以调用其他中断?
    发表于 11-01 11:13

    奔赴热AI,码力全开!Talkweb House@1024程序员日系列活动圆满收官

    1024程序员日”系列活动至此划上了一个圆满句号。本届1024程序员节以“AI构建世界,智能引领未来”为主题,广邀技术大咖、产业领袖、企业代表与全球开发者齐聚星城
    的头像 发表于 10-27 18:59 420次阅读
    奔赴热AI,码力全开!Talkweb House@1024<b class='flag-5'>程序员</b>日系列活动圆满收官

    开鸿智谷“以赛促学、以赛选才”|1024程序员节暨开源鸿蒙构建大会圆满落幕!

    10月24日,由开鸿智谷联合主办的长沙1024程序员节暨开源鸿蒙构建大会在长沙圆满落幕。本次活动以“湘聚长沙,共赴热AI”为主题,通过技术分享与实战竞赛相结合的方式,着力培养“开源鸿蒙+AI”领域
    的头像 发表于 10-27 17:58 473次阅读
    开鸿智谷“以赛促学、以赛选才”|1024<b class='flag-5'>程序员</b>节暨开源鸿蒙构建大会圆满落幕!

    干扰可以提高测量精度,是真的吗?

    ,干扰是测量的天敌,干扰会降低测量精度,严重情况会导致测量不能正常进行,就这个角度而言,干扰可以提高测量精度,是假的! 然而,是否总是如此呢?是否存在一种情况,干扰不但不会降低测量精度,反而会提高测量精度呢? 答案是肯定
    的头像 发表于 08-04 09:28 533次阅读
    干扰可以提高测量精度,是<b class='flag-5'>真的</b>吗?

    程序设计与数据结构

    的地址)出发,采用推导的方式,深入浅出的分析了广大C程序员学习和开发中遇到的难点。 2. 从方法论的高度对C语言在数据结构和算法方面的应用进行了深入讲解和阐述。 3. 讲解了绝大多数C程序员开发
    发表于 05-13 16:45

    解锁智能制造:PLC远程下载如何让设备运维效率提升10

    解锁智能制造:PLC远程下载如何让设备运维效率提升10? 一、202 5 年远程运维的三大变革驱动力 政策强制: 欧盟CE新规要求:2025年起工业设备必须具备远程审计接口 中国等保2.0:工业
    的头像 发表于 04-17 16:42 435次阅读
    解锁智能制造:PLC远程下载如何让设备运维<b class='flag-5'>效率</b>提升<b class='flag-5'>10</b><b class='flag-5'>倍</b>?

    如何在 树莓派 上编写和运行 C 语言程序

    ,一本很好的书是BrianKernighan和DennisRitchie所著的《TheCProgrammingLanguage》。这本书对经验丰富的程序员和想学习C语
    的头像 发表于 03-25 09:28 935次阅读
    如何在 树莓派 上编写和运行 C 语言<b class='flag-5'>程序</b>?

    零基础入门:如何在树莓派上编写和运行Python程序

    是一种非常有用的编程语言,其语法易于阅读,允许程序员使用比汇编、C或Java等语言更少的代码行。Python编程语言最初实际上是作为Linux的脚本语言而开发的。Py
    的头像 发表于 03-25 09:27 1523次阅读
    零基础入门:如何在树莓派上编写和运行Python<b class='flag-5'>程序</b>?

    如何判定线性稳压器是否存在过热问题?工作温度范围的重要性影响多方面因素

    如何判定线性稳压器是否存在过热问题?工作温度范围的重要性影响多方面因素
    的头像 发表于 02-06 09:37 871次阅读

    ADS1274识别的信号可以小于噪声1000,是真的吗?

    据说Σ△型的AD可以识别的信号可以小于噪声1000,这个不知道是否属实,还有就是如果是的话,使用它是不是需要编写特别的驱动??好编写么···?大神指教
    发表于 01-23 08:37

    阿里云升级通义灵码AI程序员,全面上线

    近日,阿里云宣布其备受瞩目的通义灵码AI程序员已正式全面上线,为开发者带来更为强大和便捷的编程辅助工具。 此次上线的通义灵码AI程序员,在功能上实现了全面升级。现在,它支持VS Code
    的头像 发表于 01-09 11:16 956次阅读

    TMS320C6000程序员指南

    电子发烧友网站提供《TMS320C6000程序员指南.pdf》资料免费下载
    发表于 12-24 17:19 2次下载
    TMS320C6000<b class='flag-5'>程序员</b>指南

    TMS320C55x DSP CPU程序员参考补充

    电子发烧友网站提供《TMS320C55x DSP CPU程序员参考补充.pdf》资料免费下载
    发表于 12-21 11:36 3次下载
    TMS320C55x DSP CPU<b class='flag-5'>程序员</b>参考补充

    UCD3138A64/UCD3138128程序员手册

    电子发烧友网站提供《UCD3138A64/UCD3138128程序员手册.pdf》资料免费下载
    发表于 12-09 14:42 1次下载
    UCD3138A64/UCD3138128<b class='flag-5'>程序员</b>手册