译者:刘汪洋,网名:明明如月。杭州电子科技大学计算机学院研究生在读。
原文:https://codewithoutrules.com/2016/08/25/the-01x-programmer/
你可能听说过那种比普通人高效10倍的带有传奇色彩的10x程序员。如果你想成为一个更优秀的程序员,这个传奇不仅会让你失望对你也无益处:你怎可能写出十倍的代码量?
另外,我们可以考虑一个更实用的概念:0.1x程序员:只编写普通程序员代码量的10%的程序员。正如在商业领域所说的那样,成为一个0.1x程序员是可行的。
当然了少写代码听起来好像有问题,因此我们需要重新精炼一下目标。
你能否通过编写现在代码量的10%,却仍然能够把你的任务做好,仍然能够修复等量的漏洞,仍然能够实现等量的功能?答案可能仍然是否定的,但这至少是一个你能够很容易地通过努力逐步实现的目标。
用更少的代码实现更多的功能
你如何通过编写更少代码实现等量的功能?
1、使用更高级的编程语言
和前几代坚持使用低级编程语言的程序员相比,我们绝大部分并不需要刻意的去做什么都是0.1x程序员。如果你不用担心手动内存管理或从头开始创建一种数据结构,通过高级编程语言你就可以编写更少的代码实现相同的目标。
2、复用代码
我们使用现有的库而不用重头开始编写基础的代码,就可以实现相同的效果。例如:本周早些时候我遇到一个源代码和文档中升级的版本号增长的问题。稍加搜索我就发现了一个恰好满足我需求的开源工具。由于它已经被很多人使用过而且随着时间的推移不断完善,它的设计日臻完善、得到了更充分的测试、比我设计的原型版本bug更少。
3、抽出一些时间来思考
令人惊讶的是,就长期而言,提前花费更多的时间来做计划可以节省你的时间。如果给你2天时间来修复一个bug,它就值得我们花费10%的时间也就是1个半小时来思考如何去修改它。尤其在问题比较复杂的情况下,前五分钟你可能就想出的第一个解决方案一般不会是最佳方案。多花一个多小时的时间来思考你可能只用两个小时而非两天就能够解决问题。
4、精炼功能需求
大部分功能需求包含以下3个部分:
(1)客户要求的必备功能。
(2)虽好但是非必要的功能。
(3)客户明确说明不需要的功能。
最后一类需求往往是提前就舍弃掉了,但是我们仍然被要求实现顾客和产品经理所要求的但不太必要的中间那部分功能,因此就需要找到的代价来实现一个功能。大多数情况下,没人会不想要那些可有可无的补充功能。
5、完全放弃这个功能
有些功能根本就不需要做。有些功能应该按照与要求完全不同的方式来实现。
不应该对于所有的功能需求都说“是,我来做”。你应该明白为什么有些人会产生这样的需求,经常思考有没有备选方案。如果你能够提出一个更快更好的点子,客户或者产品经理通常将非常乐意接受你的建议。
6. 完全放弃整个产品
有时你的整个产品根本不值得去做:它可能没有用户,可能无法让别人产生兴趣。花费几个月的时间在一个没人会用的产品上就是在浪费时间更别说做这个产品带来心情上的沮丧了。
学会启动调研是避免出现上面问题的一种方法:在你开发产品之前你应该花费最少的工作量来确定这个产品是否值得去做。
结论
作为一个程序员你的目标并不是写代码而是解决问题。从低级编程语言到高级编程语音,我们可以通过更少的代码来解决同样的问题。所以不要从“我怎样去写代码?”这个层面来开始着手,而是应该从“我怎样去解决这个问题?”的角度开始思考。有时候,如果完全不解决某个问题或者去重新定义它反而将会使你做的更好。如果你能更好地通过编写更少的代码来解决问题,你会发现你非常高产,特别是你开始解决复杂问题的时候。
我花费一些时日才学会这些,在此过程中也犯了一些错误:编写过多的代码或者解决错了问题。如果你想规避我遇到的所有的错误,你可以访问Software Clown。在这个网站上我分享我遇到的错误以及从中的收获。