最近加了很多新人朋友,大部分都是初级开发者。都想要加入开发者群交流讨论平时遇到的问题。新人朋友有这种想法其实蛮好的,但是很多人似乎都不知道如何有效提出自己的问题,他们往往一张图或者一句话就往群里一扔,并且希望能有群友给自己解答。
大部分情况这种问题都会石沉大海,少部分情况下会有一些热心肠的群友会指出他们的问题描述不够有效,进而 引导他完善自己的问题。可后来新人越来越多,这种新手问题似乎总是充斥在群里,慢慢得,没有人愿意在给新人做解答了。
再举个例子: 我是一个技术群群主,看到了一个新手提出了不知头尾的问题,我起初热心教导他得先完善问题描述,并且耐着性子引导他解决问题,然后他一句话也没说消失在了群里,最后我发现他似乎是得到问题答案后就退了群。大家会觉得我怎么想,我以后还会愿意帮助这些新手嘛?
上面这个例子虽然比较极端,但是我想表达得是提问者作为被帮助得一方,最基本得道德底线就是对帮助自己的人持有礼貌得态度。同为开发,我本无私,不求回报,没想到你却如此绝情!
自人类社会诞生以来,人情世故就充斥其中。
好啦,上面说完了,我写这篇文章得目的就是想在 it 领域告诉那些不擅长向别人提问得开发者,如何做一个优雅(礼貌且有效)得提问者。接下来,我会按照为什么要提问、自我解决、礼貌且有效的提问这三个部分来给大家讲解。
为什么要提问
自参加九年义务教育起,老师通常都会在上完课后问底下得同学们,大家还有什么问题吗?
读书时,有些同学可能一年也提不出一个问题,有些同学则几乎每节课都会提出问题,若干年后,哪些提问较多得同学大部分都比不爱提问题得同学混得好。
在开始学习如何提问之前,我们需要理解为什么提问如此重要:
- 加速学习过程: 通过提出正确的问题,可以更快地理解复杂的概念和技术。
- 解决实际问题: 在遇到技术难题时,有效的提问可以帮你更快地找到解决方案。
- 建立专业网络: 高质量的问题可以吸引同行的注意,帮助你建立专业人脉。
- 提高沟通能力: 学会清晰表达技术问题,这项技能在职业生涯中至关重要。
提问题不仅是为了解决问题,也是体现你的专业能力以及沟通能力,你不问是没人会主动来问你的!在这里送给大家一句话 "勇敢的人先享受世界"。
尝试自我解决
在向他人寻求帮助之前,最好先自己在网上搜索一番,毫不夸张得说,it 领域中大部分人遇到得问题在网上都有 现成得答案。只是大家可能没有掌握正确得搜索方法,导致得不到想要得答案。
所以在大家自我解决问题之前,我得先给大家讲讲怎么搜索问题!
怎么搜索问题
搜索引擎
在国内最常用的就是百度了,大部分人都知道百度的存在,那为什么在得到控制台一串报错后,不舍得喂给百度,而是丢到群里一大串 error log?有条件的开发者也可以使用谷歌搭配英文搜索,得到的搜索结果会更准确一些。
官方文档
大部分热门的语言、框架、中间件都提供了官方文档,官网通常是最权威、最新的信息来源,并且许多项目的官网中都有 FAQ 部分,里面包含了最常见的问题和解答,浏览这些,就可以解决大部分人的疑问。
浏览相关论坛和社区
如 Stack Overflow, GitHub Issues, Reddit 等平台上可能已经有人问过类似的问题。如果有,那么评论区里往往就包含了现成的答案。
通常情况下我搜索问题的优先级就是按照搜索引擎 -> 官方文档 -> 浏览相关论坛和社区。大部分问题都可以在前两步找到答案。只有当我遇到框架、中间件中一些罕见的报错时,我才需要在 Github Issues 区寻找相似问题是否已经有人提出以及解决方案。
复现和分析问题
复现问题
首先检查是必现问题还是偶现问题,这有助于别人帮你解决问题时,节约时间。
分析问题
查看错误消息、日志、堆栈跟踪等信息。大部分框架、语言返回的错误信息实际上已经告诉了你们问题产生的原因。只不过现代操作系统起源与国外,大部分编程语言的关键词都是英文。这对于国人新手学习一门编程语言确实是一种阻碍,相比之下,隔壁阿三把英文作为官方语言,在 it 领域确实比国内人更有优势一些。
幸运的是,现如今各种翻译软件层出不穷,对于大部分编程语言的报错,你只需要动动手把这一段英文翻译一下就能知道这个问题根源是什么,进而联系代码查看问题出在哪里。
优雅的提问
当你自己确实解决不了一个问题时,那么是时候该向别人请教了。虽然我建议能自我解决的问题就尽量自我解决,但是考虑到时间成本和实现成本,我建议大家给自己设置一个 end time。当超过这个时间还是解决不了又或者实现成本巨大的话,就直接去寻求外部帮助把,这一点也不丢人,因为你也付出了努力。
有效的问题
问问题谁不会啊,但是大家要清楚,问题是你提的,你当然知道这个问题的产生背景、上下文、代码等。但是对于被提问者,他知道这些吗?你有考虑过被提问者能第一时间理解你提的问题吗?对于一些不知道头尾、一句话描述的问题,被提问者有必要为你解答吗?
接下来我通过两个真实例子告诉大家什么是有效的问题什么是无效的问题。
无效的问题 1
这是群友某日在群里发的一个问题,上来就是一段经典的英文 log。随后问怎么解决?说实话,对于这种问题我都是默认不予理睬的,这个问题激发不了我得助人欲。我来讲讲我为什么。
- 问题背景:这个日志在在什么环境在产生?是 Java、Javascript 还是 Python 又或者是浏览器。
- 提供上下文 : 解释你试图实现什么,以及在哪一步遇到了问题。
- 可复现的代码:提供足够重现问题的最少代码。
- 礼貌用语:寻求帮助的话得保持礼貌。而不是一段 log 接一句怎么解决。别人凭什么给你解决?你连最基本得礼貌都没有。
看了我不予理睬得原因后,大家应该也能理解我了把。那么怎么把这个无效得问题变成一个有效得问题嘞?我在用搜索引擎直接搜索这段 log 后得到了问题得上下文以及复现代码(这个问题别人早已经遇见过了,并且提供了解决方案。。。)后,重新编写了一个有效得问题如下,
有效的问题 1
对比无效问题 1 大家可以看到我提出得问题有哪些改变吗?
- 问题背景:前端开发在浏览器 chrome 控制台有报错。
- 提供上下文 :使用 element ui 提供的单选框组件 el-radio-gruop 时,点击单选框报错。
- 可复现的代码:问题代码已经提供。
- 礼貌用语:开头第一句话就是大佬们,满满得求知欲。
无效的问题 2
这是某日群友在技术群直接 at 我发的一张图,问我 xxl-job 后台账号密码多少,我在仔细看完他发的图后,寻思 xxl-job 后台的登录框也不长他图里这样啊!我怎么给你回复嘞?后面的对话更像是加密通话一般,
在这个问题里,提问者一开始就缺失了问题背景、上下文,最后一句我知道啥问题了,结束了话题收了场,对他而言相当于自己灵光一闪,迅速解决了问题,但是对于那些想帮他解决问题的人而言只能说是莫名其妙。
我在尝试理解他这个问题得背景、上下文后,得出的结论是,可能他一开始就把 xxl-job 后台与其他系统后台地址搞错了,登录其他系统后台时输入 xxl-job 后台的账号密码就登不进去了,其实就是一个乌龙。那么这种乌龙问题能不能变成一个有效的问题,让大家不在感觉莫名其妙?
有效的问题 2
对比无效问题 2 得改变如下,
- 问题背景:xxl-job 后台登陆失败
- 提供上下文 :后台地址 http://localhost:8081/login,使用 xxl-job 默认账号密码 admin/123456
- 可复现的代码:这个问题暂不不需要。
- 礼貌请教:开头第一句话就是大佬们,满满得求知欲。
总结
OK,本文到这里也就结束了,针对如何做一个优雅得提问者这个话题,我来给大家做一个总结。
- 遇到问题不要慌,善用搜索引擎、官方文档、技术论坛社区如 Github 等,查找是否有现成答案。
- 分析问题原因,遇到错误时分析错误日志,联系代码,尝试定位问题原因,自我解决。
- 提出问题时要携带背景、上下文信息,便于他人理解,礼貌得寻求他人帮助,不要吝啬谢谢两个字。
如果觉得这篇文章写的不错的话,可以关注我的公众号【程序员wayn】,第一时间更新更多技术干货、项目教学、经验分享的文章。