在上一篇中,我们讨论了在碰到技术问题时的基本解决思路,在这一篇中,我们主要讨论如何问出一个好问题。
我的研究生导师肖老师是一个非常有才华和人格魅力的老师,我非常敬佩——然而即便如此,我还是没能读完她推荐的《学会提问》。我们实验室每周开 seminar,我们轮流讲论文,导师和同学会在之后提问。肖老师的问题总是一针见血。与其说是这本书的功劳,毋宁说是她长久的学习生活经验养成的思维习惯所致。
除了这本书,就技术问题的提问而言,Eric Steven Raymond 有一篇非常经典(也非常长)的论述《How To Ask Questions The Smart Way》。
但是我知道你们懒得看的。
就像订阅了一堆技术类的公众号,到头来没几篇愿意打开读的,不知道大家是不是这样。原因很简单,就是我在使用微信的时候,是处于休闲放松情境下的,自然也就懒得学这些东西。所以,作为公众号,我的文章不会写得很深刻或者有很多干货,因为如果你是真的期待干货,你就不会在这里寻找了。我希望能够写更多有意思的东西,如果在这过程中,恰巧也能让你对一些新东西产生兴趣,我也就非常荣幸了。
技术提问要素清单
其实你不必看那本书,也不必看那篇冗长的论述,简单的一个清单就能帮助你大大提高问题的质量。
Tip 4.1 描述你的问题
上一篇我们说到“练习使用更精准的描述”,这里再强调一下,一个好的描述,必然是自己经过一些调查或者调试之后,大致明白问题所在的,具体请参考 Tip 1。
在问题一开始的描述时,不需要涉及太多细节,可以简单用一两句话概括地描述。
江湖中我们也遇到很多这样的人,说话没个重点,啰里吧嗦说了半天也不知道他想表达什么。作为程序员,抽象的能力很重要!
Tip 4.2 展示你的尝试
展示你的尝试,是一种诚意的表现。你可能的确有搜过这个问题,但是由于各种原因没有得到适合的答案,这时候一个激进的答题者可能会觉得你是一个不懂规矩的毛头小子。
这里说展示你的尝试,前提当然是你的确有尝试过。试想一下,你一个非常有诚意的提问,说百般尝试不得其果,这才冒昧提问叨扰,还望诸君拨冗解答。结果人家随便一搜就有结果,你期待人家给你复制粘贴过来?不,你一定会被喷得很惨!
展示尝试,并不只是说你已经搜过了的意思,而是把调试排查的过程、以及如何得到“问题应该在某处”的结论简单介绍一下,这样不仅帮助答题者高效定位问题,也说明你是一个会提问的人。
Tip 4.3 附上你的代码
前面说描述不要过多,因为 Talk is cheap. Show me your code.
有些问题说再多也说不清楚,几行代码就很清楚了。而且在 StackOverflow,如果你真的很用心地提问,答题者也会很用心地回答,通常会自己运行了代码再来答题,所以你的代码就是与人方便与己方便。
通常一个好的附代码的方式是,把关键部分的代码在提问的地方内联地贴上,并且把完整能运行的版本在 jsfiddle 等代码共享平台保存,将地址粘贴在问题中。这样做的好处是,答题者可以扫一眼看这个问题他有没有把握或兴趣,如果是,那么可以进一步地了解细节。
提问之后
在 StackOverflow,如果提问的方式正确,并且问题并不是特别冷门的话,通常在几分钟内就会有人回答。如果你的提问方式稍有不足,别人也会热心地告诉你,缺了代码或是具体的描述。
在获得你要的答案之后,并不是提问周期的结束。
Tip 5.1 记录你的错误
记录错误,并不仅仅为了以后少犯同样的错误,还可以在犯错时更快地找到错误。
具体的方法可以有很多了,我目前使用的方法是技术日记,把每天看的有价值的技术类文章和碰到的技术问题,用 markdown 简单记录在马克飞象中,然后导出到印象笔记。当然,也不是每天都会记,这件事上也不需要太强迫自己,不然一旦一天不写,后面反而没有动力坚持。
Tip 5.2 增长解决问题的能力
通过一段时间的问答训练,你将慢慢掌握这一技巧。在这一过程中,增长的不仅仅是对问题本身的经验,更少找到问题的经验。重要的是,平时多动动脑子,多问几层为什么,往往也就能看到更本质而不变的东西了。
Tip 5.3 帮助社区成长
winter 说过一句让我印象很深刻的话:很多人以新人自居,过了很多年,他们还是新人。
认为自己还有很多不足之处值得向前辈学习是好的,但是也应该多给自己一些肯定,不要害怕成长。不要觉得自己是新人就可以理所当然地问愚蠢的问题、理所当然地等着别人喂你答案,这次获得帮助或许是容易些,不过长远来看,你能解决的是问题,不能解决的却是为人处事的态度。
所以,不用觉得自己是新人,只能问,不能答。其实你完全不用担心误人子弟,因为你如果给出了一个错误答案,其他人看到了也会给你指出,还能帮你找到一直以来误解的地方,岂不两得?
同样地,对于来问你不那么明智的问题的妹子,也请把这篇文章转给她。授人以鱼,不如授人以渔。替她谷歌了再告诉她的行为无异于让她染上毒瘾,真正的君子不忍为之。