作者丨Aphinya Dechalert
译者丨杨志昂
策划丨万佳
本文认为,80/20 法则同样也适用于软件开发,只要一直持续做正确的 20% 事情,开发者就会变得十分高效。当然最难的是找出那正确的 20% 事情。对于软件开发而言,需要 10% 的必要专业知识,5% 的巧劲,5% 的创造力,还需要在余下 80% 中做好点滴积累。
由本文作者 Aphinya Dechalert 制作的图片,并为之加上标题:传说中的独角兽开发者,其实只是一个知道如何一直持续做正确的 20% 事情的开发者。
帕累托法则,也被称为 80/20 法则,已经在主流互联网上风靡了一阵时间,尤其在讨论生产力和激励动机等话题的圈子更是被人熟知。这个法则的大意是说,通常 80% 的产出是由 20% 的投入产出的。
这一 80/20 规则广泛适用于多个学科,包括但不限于:收入分配、经济学、销售、管理、体育运动和生产力等等, 此处不一一列举。
因此,这条规律在商业和体育中经常被引用和应用。那么,在软件编程中这条法则又如何呢?
软件工程实在是一个广阔的领域,它跨越诸多物理实体和数字虚拟的层次,还涉及各种服务、设备和编程语言。而刚进入这个领域的新手通常会有这样的印象,只需要学习一些精选的东西,然后就大功告成。
实际上,一旦涉及到数字技术,你就注定永远学无止境。
10% 知识
说到编程,确实有很多东西需要学习。
然而,如果我们仔细观察,就会发现目前流行的几种编程语言之间有很多相似之处。凌驾于不同的语言差异之上的,是那些包罗万象的核心概念和模式。
如果想要编写高效的代码,函数式和面向对象编程通常是最受欢迎的选择。而当谈论到如何提高开发人员的效率和效果时,模块化模式和事件驱动是常常涉及到的话题。
在掌握了这些之后,无论使用的是哪种编程语言代码,你会发现有一些模式和操作会反复出现,但是你需要了解更多细微末节的知识,才能根据自己选择的技术栈去实现这些模式或操作。
这些反复出现的模式或操作类似于 CRUD(create,read,update,delete)模式、数组相关处理、数据转换、以及在组件和类之间的信息传递。
会话、打开 / 关闭到数据库的连接、社交账户登录的 API 消耗、以及支付网关的集成是后端软件常见的需求。而路由和模块化 CSS 通常是前端软件的重要功能。这些都是常见的核心概念和模式。
5% 使巧劲,而不是蛮劲
当涉及到编程时,纯人工操作绝对属于最低效的时间利用。而编程中的纯手动模式更糟。
那么,纯手动模式到底是指的是什么?
纯手动模式的一个官方名称是命令执行模式,或者说,程序需要按照特定的顺序去执行才能产生正确的输出过程。而在现实中,事情从来不会按照 100% 的指定时间顺序出现。
灵活的代码并不会为所有潜在的意外事件都逐一进行编码以覆盖所有可能出现的场景。这就讲究以一种只依赖于组合因素,而非这些因素所出现顺序的方式来编写代码。用这种灵活的方式编写的代码,可以在很大程度上消除复杂性。
用灵巧的方式进行编码这个过程既降低了复杂性,同时也减少了潜在的故障点。除此之外,还有一个附加的好处是,你需要维护的代码行数也将随之减少。
5% 的创造力
这里并不推荐去编写那些创造性的代码,除非你正在用代码编写诗歌,这就另当他论了。
编程不是艺术。编程是将业务需求转换为数字格式的过程。然而,将个人知识点创造性地联接在一起的能力,在很大程度上决定了你最终的产出。
通常情况下,编写代码可以被看作是机械式的、毫无感情的。在某种程度上,编程这项工作的实质确实如此。而创造力的理念却来源于个人的激情和想象力。
然而,正如马克吐温曾经说过:
“其实根本没有所谓新想法这种东西。新想法不可能自己冒出来。我们只是简单地拿出许多旧的想法,并把它们放进一种心智的万花筒中。我们让它们转一圈,它们就会生成新奇的组合。
如果我们不停地转动,就有无穷的新组合产生;但放在万花筒里的东西其实都是古老的彩色玻璃,即古往今来一直在使用的旧想法。”
所以,能够创建创造性解决方案的能力,就是将已知的知识点联接在一起,在给定的时间内生成高效软件代码的能力。
80% 点滴积累
“你无法把点点滴滴在展望未来的时候串连起来,你只能在回顾过去的时候把它们联系起来。所以,你必须相信现在创造的点点滴滴会在你的未来以某种方式联接起来。”——史蒂夫·乔布斯,斯坦福大学毕业典礼演讲
我们当中最高效的开发人员看起来就像是跨越不同领域取之不竭的知识宝库。他们似乎总是无所不知。谈论任何话题,他们都游刃有余。
从我们在社交媒体讯息中看到的普通事物,到知识的随机花边新闻,他们都信手拈来,比如说,他们连制作玻璃的过程都知道。
那是因为,他们把时间花在学习、阅读和消费上,花在远超于当前知识领域的东西上。这些东西绝不仅限于让他们成为专家的那些技术栈相关知识。
而这样做的效果是,当需要创造性的解决方案时,他们通过联接更多的点滴来不断地去突破他们的创造性界限。
创新是超越知识的边缘去创造的知识点。图片由本文作者 Aphinya Dechalert 创作。
个人知识跨越不同的领域,正是凭借这点让我们当中那些佼佼者不断创建出新的软件解决方案,而从其他相关人等的经验和期望看来,这些方案如此直观有效。
这是因为,在这个行业中,代码背后的开发者也同时是他们正在创建的软件的积极消费者。他们能直接感受到软件中那些烦人和糟糕的地方。这就为何时需要解决方案提供了一个全新的视角。
全部加起来才是 100%
如上所述,实际工作中的 20% 决定了产出的高效性。然而,如何充分利用剩下的 80% 同样也很重要。
可能非要这 80% 在一个方程式中以某种形式作为输入出现从而得到那 20%,我们才真正能看清这 80% 的重要性。这也是因为,每个项目为了得到这决定性的 20%,前面都需要不同的鸡尾酒和开胃菜作为铺垫。
没有任何一种组合能保证每次都能奏效,也即是说,并没有解决所有问题的万能方法。传说中的独角兽开发者,其实只是一个知道如何一直持续从事正确的 20% 事情的开发者。
知识只是一切事情的冰山一角。是的,虽然知识在很大程度上决定了最终交付的健壮性、模块化程度和灵活性。
而识别出核心模式和将知识点实施于工作的能力,也是决定一名开发人员是否高效的主要因素。
要想找到项目中这制胜的 20%,你需要从囊括自己所有知识点的知识范围中进行筛选。这就是为什么另外 80% 同样也很重要,这也是为什么你除了花时间学习编码的模式和方法外,还应该尽可能地在日常点滴中为这 80% 做好积累。