第1部分:技术文章

在刻板印象中,程序员往往被认为是不善言辞、情商远低于智商的一种人类,他们经常被叫做geek、nerd。但和许多刻板印象一样,这与事实相去甚远,与人沟通是程序员工作中非常重要的一部分能力。甚至大部分软件开发团队在招募程序员时,沟通能力的优先级要远在编程能力之上。换而言之,只有技术水平处于金字塔顶端的那一小部分人才有资格成为一个不顾别人眼光的geek,大部分程序员可都要在参加会议、编写文档、回复电子邮件等各种与人交流的活动上耗费大量的时间。如果他们真不懂得与人交流,或者说话、写东西词不达意,恐怕也很难完成他们自己的工作。而且,即使是金字塔顶端的那一小部分人,他们通常也都是好几本技术专著的作者或译者,也不可能都是表达能力低下的家伙。当然了,所谓的职业影响还是有的,但这种影响主要体现在他们对技术外行人的态度上,而不是表达、沟通的能力。总体而言,程序员们在写作方面的表现主要可分为两大类:

  • 纯编码者:这类人对于解决问题这件事本身更感兴趣,比较偏向于用代码说话,他们与人沟通往往追求如何直击要害,他们认为只要点出问题的关键所在,然后针对这个关键点提供给对方关键的代码,这个沟通就完成了。他们不大考虑对方在理解问题和接受其回答的能力上与自己所存在的落差,他们认为真心地认为这种落差是对方自己需要去努力的,譬如大家所熟悉的Linux之父Linus Torvalds差不多就是这类人。

  • 技术写作者: 这类人与纯编码者相比可能更善于描述问题的解决方法,他们不但可以将复杂的问题解析成一整套层层推进的演绎逻辑,并且能让大部分的读者理解这套逻辑。但他们有时候可能会认为,在解析了一个问题之后,对其他类似问题的举一反三,就是读者自己需要去努力的事了。譬如Effective C++的作者Scott Meyers就是这类人的典型,他们往往没有耐心针对读者遇到的具体问题做具体解答,尤其是那些还希望他给出具体代码的读者。

简而言之,程序员式的沟通总是给人一种对初学者不够友好的印象。如果一切用代码说话,让初学者觉得你高高在上,难以接近。如果写很多专著,初学者又会觉得你太形而上,忽视具体问题。我是个中国人,所以决定在本文集中采取中庸之道。也就是说,在接下来的这部分文集中,我将着重分享自己在工作、学习中遇到,或别人向我提问的各种样例问题,尽我所能地做到既详细描述问题的解决方案,也提供解决方案中的相关代码,以求做到尽可能多地将技术心得分享给大家。