问题可以在提出之前被解决 - 提问的艺术 - to:程序员们

1,493 阅读9分钟

提问的艺术

此文转自我的CSDN同名文章,点击查看

问题可以在提出之前被解决

说出来可能你不信,但作为程序员,你很可能因为太阳底下没有新鲜事这一哲学,而使得你的问题在向大佬提出来之前就被你先行解决了。

——如果没有,请你想想:

  • 你是不是放弃了在某个可能性上的进一步思考(比如这很可能是个低级错误)
  • 你是不是正在犯懒(比如你觉得这个方案太过复杂,比如你根本就不想再尝试其他方向)
  • 你是不是认为这个问题【询问他人】的代价远低于【自己找到答案】不会过度叨扰他人 (比如你觉得这个方案太过复杂且肯定有更好的方案,但你没有头绪)

如果你是因为前两点,现在、马上、立刻,去延伸你的思想,去行动起来! 如果你是因为第三点且不期望立刻获得答案确保问题不会过度占用他人时间确保问题的数量不会使对方感到绝望和厌烦确保问题的难度对于对方属于"手到擒来",那么直接询问当然也是个不错的主意。但你会不会因此错失进一步加深对问题本质的理解的机会呢

问题的表象是什么?

对于程序员

有以下可能:

  1. 这个问题是某种报错
  2. 需要实现某个需求但你不会
  3. 你需要通过提问来了解某个知识点
  4. 你想通过抛出这个问题来和别人进一步讨论?比如它的优化策略?它为什么要这么做?

对于其他人

*待补充 / 可能我之后也会懒得补充 / 要不……你阅读全文后、在提出要我补充之前——自己先总结总结?

对应表象下应该如何操作——我先自己解决试试?

遇到报错的自我救赎

先看堆栈信息 堆栈中定位出错代码的位置是基本能力 不会吧不会有人定位不到出错位置吧?

有可能里面根本不是你代码实际出错的位置

  • 卧x 真定位不到!
  • 怎么办?
  • 找啊!
  • 怎么找?
  • 好问题。那么你有没有——
  1. 尝试过阅读报错英文原文呢?

  2. 这段英文原文有没有引发你的某些联想呢?比如你才往哪里加了个数组,它就报“index”相关的问题,虽然可能出现index错误的地方离你添加数组的地方十万八千里,但你有没有通过这个联想找找你这个数组的原因呢?

  3. 如果没有相关联想,英文原文不知所谓,你经过翻译之后还是毫无头绪,那你有没有把这报错关键字和报错类型拿去搜索呢?

  4. 如果解决方案寥寥,也看不出共性,甚至根本就是另一个平台/SDK出现的相同报错内容,但真的没有参考性吗?他的问题是因为什么引发的呢?你的问题有没有可能也是因为这个问题或者类似的问题引发的呢?

  5. 好,上述都操作了一遍,你说没有办法——那你回头想想,你最近做了什么操作呢?要不回滚着对比一下?

  6. 哦,你说这是全新搭建环境出现的问题

    那么除了重装之外,要不你理解理解教程里各个步骤的出现是为了配置什么,然后看看电脑当前情况能否满足各个步骤可能存在的隐性需求

    以及这些步骤真的配置成功了吗?如何验证它配置成功了呢? 思考到这里,你自然能够隐约知道这一步出错是因为什么了,如果不知道,从第一点开始再来一遍 什么,关于第七点你理解不能?

那就搜,狠狠地搜,作为程序员你不懂点windows和搜索引擎使用策略,怎么应付过年的亲戚

寻求方案时的自我反思

  1. 你这个问题,你手头有相应的教材吗?——看书去!
  2. 你这个问题,脑子里有隐约的关键字吗?——搜索去!

不知道具体知识点的自我拷问

换几个关键字描述着搜索看看?说不定你直接找到对应知识点的准确学名了呢? 找到学名了,直接开学还不是一大堆教程?!

只想和别人讨论时的摸鱼时光

好吧好吧,你继续往下看吧

诶,慢着

慢着慢着,先等等,你用搜索引擎了吗? 要不先搜搜看? 搜过了?那你往下看——

  • 嫌搜的东西太老?要不限定一下时间区间
  • 嫌搜的东西太杂?要不精简一下关键词
  • 嫌搜的东西答非所问?要不换些含义类似的关键词再试试?或者可能你不小心进"小编也不知道呢,一起来和小编看看吧"这种文章里面了?
  • 怎么搜就是没有,要不google一下试试?
    • 搜索时的双引号会用不? site命令会用不?
    • goole + 问题+site:stackoverflow.com 试过了么?这时候可别用中文啊

拒绝搜索,总嫌已有教程/文章不够好,不能入口即化

那你意思是他们写的都是辣鸡,你看多了辣鸡已经PTSD了呗? 那弄明白后你写一个啊! 别跟我说什么写一个多麻烦,人家不嫌麻烦写一个分享出来也没见着你爱看,而且——

  1. 只要你写的比别人好,肯定有市场
  2. 只要有市场,肯定有粉丝
  3. 只要有粉丝,肯定有利于你的工资提升
  4. 又嫌别人写的不够好、又不愿意自己搞、等到自己弄明白了也往往不分享一篇文章,那活该你总是找不到入口即化的教程/文章

爷搞不定了,开问!

自己解决什么啊,两嘴一张直接开问不就得了吗,作者你前面那些废话我都不想看~

问题描述

  • 什么场景?
  • 什么前提?
  • 什么环境?
  • 什么操作?
  • 怎么复现?
  • 什么报错?
  • 当前遇到的不符合你预期的结果是什么?
  • 你预期的结果是什么?
  • 你做了哪些努力?

这些就是信息共享

问的时候,你得保证被提问人的已知条件需要尽量和你一致

  1. 他知道你的关键代码吗?
  2. 你让他看到了完整的堆栈信息吗?
  3. 你的关键代码里面有非典型/可能有副作用的操作吗?他知晓吗?
  4. 说到这里——你自己尝试过排除变量,在一个相对clean的环境中排除这些副作用代码,去干净地run一run吗?
  5. 啊,说到这里就懒了对不对?懒得做了对不对?
  6. ——那你去问吧,然后万一发现真是和副作用代码起了冲突导致的,如此的问题多来几遍,你看他耐烦不耐烦就完事了

让他看到你的努力

这其实也是信息共享的一部分,但它值得被拎出来单独说。

可能有人要问了—— 我都开始问问题了,我还努力啥呀,这不就表明我不想努力了!让他看到我的努力还有意义吗? 有的! 当你努力的心路历程和实际行动被你陈述一遍后, 不仅能让他对你当前的进度有一个直观的认识, 还能节省沟通成本

比如“我已经重启和重装过了,也重置缓存了,但问题还存在” 这能表明你是深思熟虑后对他展开的提问,还能表明你是实在没办法的时候对他展开的提问——尽管你们此时可能都知道这个问题经过仔细地使用搜索引擎一定能被解决,但愉快地提问和解答需要这种心照不宣

为什么要'让他看到你的努力'

为了让他一定程度上知道和肯定你的能力

为了让他知道自己在一定程度上比你更有能力

——就好比一个大佬找你问问题,你肯定是受宠若惊,并且会努力用尽毕生所学帮助大佬解决问题

——怎么成为“大佬”?可能你现在还不是,但你得在一定程度上表现出你的思考能力,说得文青一点:

智慧的光芒熠熠生辉,谁都无法阻挡它散发出来的魅力

这一切都是——

为了让他能在一个相对愉快的前提下解决问题

为了让你能在一个相对被尊重的前提下解决问题

问题问得太没水平是会被鄙视和质疑能力的,亲

不要引入无关变量

  • 交流时尽量避免信息的曲解和一些“不言自明”的东西,请尽量说明 比如对方找你要堆栈你就别给图片,也方便你懒得搜索的时候对方决定搜索时能方便一点,少打两个字

比如对方找你要资源文件验证你就想办法给无损的资源文件, 尤其是图片/文字,一定要注意维持编码不变保证无损地传递信息

  • 交流时尽量避免让对方通过对方的环境验证你的问题
    • 能给的资源你就给人家,万一就是你资源的问题?
      • 哦你说不是,那你验证过了吗
    • 能给的源代码你就文本给人家,万一就是你语法/用法的问题?
      • 哦你说不是,那你敢保证吗
    • 有可能相关的信息你也主动告知,万一就是你觉得理所应当的地方出了问题?
      • 哦你说不是,那你这么肯定,你怎么还是出了问题

问问题要有问问题的态度,他做、你也做,才是他帮你

你随便甩个东西指望人家能一步到位,那是到“胃”,那是喂你,你爷爷在你这个年纪都不会再追着喂你

提问是在求人帮忙,要让人看到你的诚意