做技术如同做学问:首先得态度端正,其次得勤于思考,还要能于吃苦,最后你得学习有方。

  • 态度:严谨、朴素、踏实、顽强、不浮躁
  • 思考:多角度、多维度
  • 吃苦:愿意为解决一个问题而穷极所能

案例

下面是一个非常不错的发起提问的例子,我们看一看这里是如何提出问题的:

首先,肯定别人的项目,对项目组成员致以感谢。并说明自己选用这个项目是因为这个项目非常 awesome 。

接着,告诉项目组自己在使用时遇到的问题,并说明自己不是一遇到问题就立即来提问,而是经过很多途径、尝试了很多种解决方案,没有得到解决,然后才提出这个issue。 比如文中提到:

我根据你的文档一步一步的进行操作,并且通过google搜索尝试了很多解决方案,但是仍然没有找到能够解决该问题的办法,请给我一点 wisdom。

在说明这些之后,表述了事情经过。他在issue提到:

根据要求安装和配置好了 Vagrant 及 VB,通过 gitbash 设置了相关配置,一切都很正常。 然而,无论我怎么努力都不能通过 ssh 连接上服务器。随后,命令行返回一段错误,并说出了错误信息:blablabla...

仔细描述了操作过程,以及错误的发生时机和返回的错误信息等。这些信息都非常有助于使问题得到快速解决,都是能够初步或直接断定问题所在的关键点。

通过上面一段描述之后,发生错误的时机以及整个操作流程都说清楚了。接着,是对操作流程中每一个操作细节的描述:

这里提到了,操作系统环境是 win8x64,ssh keys 是通过 Gitbash 创建的并且保存在 .ssh 目录中,尝试了不同的命令行终端但是都不能正常工作,但是 ssh 可以与其他服务器。 进行了系统重启、删除并重建配置等与虚拟机相关的各种尝试,但问题依旧。还通过VB界面检查了端口设置,并尝试修改端口配置,但都无济于事,还通过 netstat -a 检查了端口情况。 接着通过 vagrant 相关命令尝试了一系列操作,根据文档进行逐步尝试,仍无法连接上服务器。还阅读了 Google 来的各种解决方案,但都没有解决问题。

最后,请给我一些帮助,我是真的想使用你的 setup file !

做事和做学问的艺术。

  1. 选择项目,在众多开源项目中选择一个能够满足自己需求的项目。
  2. 确保自己的选择是科学的,一旦选中,就将其应用到自己的项目。
  3. 遇到问题,首先要做的是对照官网文档仔细检查操作有没有问题,而不是直接去问别人要答案。
  4. 在检查完使用方法完全符合文档要求后问题依旧,把解决问题的思路继续向周边扩散(不要局限于依托文档解决问题,比如文中提到的检查端口等等)。
  5. 穷尽个人知识结构,仍不能解决问题,用笨办法(排除法,如尝试自己的SSH是否可以连接上其他服务器等等)开始逐个检查相关环境是否有问题。
  6. 排除法也不能定位问题,开始google求助,筛选和识别出哪些搜索结果有可能解决自己遇到的问题。
  7. 对筛选出的可能可行的解决方案进行尝试,仍然没有直接去开 issue 寻求答案。
  8. 通过 google 依然解决不了问题,并已穷极所能。此时,只能问人要答案了。
  9. 答案不是随便要的,你得明白应该去找谁要答案。不是随便找个人讨论就能解决问题,所以他到github提交了issue。
  10. 最后才是提问的艺术,比如措辞、表述等等。

提问的艺术

先立足于自己解决,确定通过一己之力无法处理问题,对外寻求帮助。一定要有自己思考的过程,这个方案可能不是最高效的,但对提高处理问题能力大有帮助。提出问题请求帮助时,要注意以下几点:

  1. 背景说明:尽可能详细的描述你做了什么
  2. 问题本身:尽可能详细的描述问题本身
  3. 环境信息:尽可能详细的提供有利于别人判断问题所在的关键点