Do Hard Things

再次反思自己的工作,作为一个软件工程师,他所做的工作应该是很有技术含量的。但如今,我觉得工作内容也没有什么高科技。

我们桌上的 PC,手中的智能手机,都算是计算机,如今的计算机无论从便捷性、性能方面都远远超出十几年前的机器。感谢像贝尔实验室、施乐帕洛阿尔托研究中心、IBM等机构或企业,以及全球数百万的开源贡献者,今日人们能够很轻松地利用计算机来应对处理日常工作、做科学实验,利用计算机来做各种有意义的事情,这一切都归功于他们的杰出贡献。

计算机领域的前辈们解决了很多棘手的问题,创 造了大量优秀的工具,这极大地方便了今天的用户和软件开发者。用户能够更容易地使用计算机,而软件开发者也有了更加优秀的工具支持,能够更容易地开发出符合期望的软件。

如今的软件开发,分工越来越细化,在某个方向有过一些了解,就能算是软件开发了。说技术含量,真谈不上,任何人可能学习几个月都能做。这也是如今一些培训公司存在的根本条件。而可怕的是,挂着一个软件工程师的头衔,可能会误认为自己做的事情是高科技,因为人们习惯将计算机看做高科技的产物。

起初我认为开发者的工作难度是呈正态分布的,后来我改变了这个想法,开发者所从事的工作难度应该是下面这样的:

横轴是工作难度,而纵轴是人数。大多数人从事的是中等难度的工作,从事高难度或者极其简单的人数是较少的。

人们希望自己位于横轴正方向无限远的地方,而且可能很多人都觉得自己处在纵轴的右边。但不可否认的是,大多数人最终都还是集中在了中间部分,成为一个平凡的开发者。他们能完成工作上的要求,能开发出可以使用的软件,仅此而已。

要想做的卓越,我倒是听说了一些方法,软件开发者可能是最喜欢分享的一类人了,他们分享技术、知识,同样也分享自己的成长历程,因此很容易就能获得这类关于如何变得更厉害的技巧。获得技巧很容易,要执行就变得很难了。

其中一个技巧就是——做有难度的事。这个观点,我前几天提到过一次。做困难的事情,这说来简单做起来就难了。因为做困难的事情毕竟不舒服,遇到困难也常常会退缩。而且还常常有一种错误的思想阻碍自己,想着 “等自己技能提高了以后再来做这些事”,有这样的心理就注定不会迈出脚步去做那些困难的事情。遇到困难,正面突破,即使搞不定也应该试试,是不?

我最近就遇到一个棘手的问题,我一直视它为圣杯,一直不敢上去解决,直到最近有了机会。在此之前,我只听说这个问题其中涉及的逻辑比较复杂,人们都这么说。我试了一下,果然不太简单,尝试了几次,一度处于放弃的边缘。感谢朋友的一句话,那天和她聊天,说到最近在做的事情有点难度,她说,“我知道你喜欢做这类有难度事情,这样才能体现你的能力嘛”。每每想起这话,我都备受鼓舞。

后来一鼓作气,在白纸上推理了好几页,把其中涉及的逻辑理顺了以后,我发现,之前觉得困难,一个是心理原因,另一个是自己太缺少处理复杂问题的经验了。做简单的事情,其实不用想太多,因为逻辑比较简单,整个流程图在脑子里很快就形成了,且很少出问题,而稍微复杂点的问题,流程比较多,就需要分解它,需要以自己的能力将其划分为合适的粒度,然后把每个小块都理清楚,再把整体串起来,直到后来把一切都理清。我试图用解决简单问题的方法去解决复杂问题,结果自然是频频受挫。缺少都整体的把控,急着要去解决问题,好的结果是事倍功半,而坏的结果就是无功而返。

做困难的事情,事后会发现它其实没有什么难度,之所以没什么难度,是因为自己对“困难”的定义变了。还有一些技巧,就不说了,我先亲身体验一把,有了经验再谈。

要和大多数人一样,我目前就位于中间附近,可能会更偏左一点,不过,我相信我能够出现在偏右的位置上。目前,我还在努力。

#开发者 #工作