45 | 尾声:如何成为一个编程好手?

从刚开始准备这个专栏的时候算起,到这一篇文章和大家见面,已经有十个月的时间了。

这个专栏设立的愿景,是想要传达编写优秀代码的理念,帮助软件工程师快速成长并且保持长久的竞争力。但是,四十多篇文章,显然不是通天的秘籍。一个软件工程师的修炼,主要还是靠日积月累的积累和精进。而且,这个修炼还包括编码之外的功夫。

了解问题的领域

我们编写代码的目的,是要解决具体的问题,而不是为了写出好看的代码。这就需要我们至少了解两样东西:编码的工具和具体的问题。无论是编码工具,还是具体的问题,都需要专业知识。一般来说,一个优秀的程序员,这两样东西都要学,都要会,而且还能把它们结合起来。

世界上的编程语言屈指可数,如果只会几门编程语言,不管你多么精通这门语言,都很难保持长久的竞争力。这主要是因为,编程语言的门槛很低,掌握编程语言的人太多。这也就意味着,在市场竞争中,你要超越的人会有很多。

而具体的问题领域,则是一个多姿多彩的世界。证券交易、银行结算、商品流通、教育培训、安全防护等,各有各的道理,各有各的规则。

作为一个软件工程师,如果你熟悉银行结算的专业知识,你就成为了懂得编码和银行结算的复合型人才。你可以在编码工具的领域出类拔萃,也可以在银行结算领域出类拔萃。但是,市场分工已经不需要你在这两个领域都是顶尖高手了。只要在这个结合部位,是个顶尖高手就可以了。而这个结合部位的竞争者的数量,就没有那么大的基数了。

所以对于软件工程师来说,特别是那些年轻的软件工程师,我们不要把自己局限代码的编写者这个角色上。我们需要把自己的角色拓展成问题的解决者。

定位成代码的编写者,你的目标可能就是写好代码,学好工具。定位成问题的解决者,你的目标可能就变成使用代码,解决好问题。

问题解决者这一定位,会让你更有好奇心去了解问题的来龙去脉,去发掘问题背后更多的东西。这样,你就能自己推动自己,成为该问题领域的专业人士,然后成为这个结合部的复合型人才。

扩大“无用”的见识

编写代码,本身是一个创造性的过程。在这个过程里,很多过去看起来没有多大用处的见识,可能就会派上用场。而这些“无用”的见识,如果过去你没有认识,没有积累,它们一定不会在你需要的时候让你灵光乍现,也不会在你需要坚持的时候给你力量。所谓的灵光乍现,其实都是埋在你脑海深处的见识。

我们前面讨论过不少编码的原则,比如说“简单直观”和“最小授权”。直觉上,这些虚无缥缈的东西和编码本身没有直接的联系。可是,这些小小的原则往往决定着产品的市场成败。你怎么抵御住复杂性、丰富性以及代码权力的诱惑?说实话,如果没有很坚定的理由和开阔的视野,我们很难抵御住这些诱惑。而见识和信念,来源于你对于生活的理解,包括对人的理解。

所以,除了技术之外,我希望你有时间、有精力、有能力去做其他的事情。读书、旅游、做饭、遛娃、种地、修车,各种爱好,都是积累,都是人生百态。

平衡安身的生活

当我准备这篇文章的时候,996.ICU 的讨论真是一浪高过一浪。希望普遍的 996 只是一个特殊时段的特殊产物。

长期超负荷的工作时间能不能换来超额的工作产出,这是一个很大的疑问。不过,我可以确定的是,每个人一天都只有 24 小时,我们有限的精力只能在这 24 小时内腾挪。在一段时间里,我们做了这件事情,就丧失了做另外一件事情的机会。获得了这件事的好处,就丧失了另一件事的好处。这还有一个专业的名词,叫“机会成本”。

996 的安排,让我们付出了多大的代价,丧失了多少机会?对于具体的每个人,答案也许有所不同。但是对于整个群体和大部分人,这代价也许会超出我们的想象。它所造成的长期的社会问题和个人问题,也许要很多年后才会显现。

希望 955 早日正常化,这需要大家的共同努力。

即使正常的工作时间只是一种奢望,我希望你还能够谈恋爱、陪家人。

谢谢你陪我一起走过了这个 45 期的专栏!