事件

  很久很久以前……咳咳,在群里面有人问了一个问题,关于Java代码运行为什么报错,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Main {

//具体内容对方没有发,所以我就捏造一个吧
public static void main(String[] args) {
List<String> list = IntStream.range(0, 10)
.mapToObj(String::valueOf).collect(Collectors.toCollection(LinkedList::new));
for (String s : list) {
if ("5".equals(s)) list.remove(s);
else System.out.printf("%s ", s);
}
}

}

  他刚开始是给了一张模模糊糊看都看不清的手机拍的代码局部图片,于是我说:“麻烦把所有代码截图”,但是其并不买单,后续一番争论后总算给出了异常名称。于是我们得知,这个代码在运行过程中抛出了java.util.ConcurrentModificationException异常,我在群里说:“你百度一下异常名字就知道为什么了”。但是他根本没有付诸行动,直接反过来质问我“你是不是不会?”、“不会可以不说话”、“就不允许小白问问题?”等等诸如此类的言语。

  本来我的想法是他自己查完有什么不懂的地方再说,但是其态度实在令人想要敬而远之,所以我也没有怎么搭理他,但是其不仅不收敛反而变本加厉。后来在我们的一再要求下,其终于百度搜索了一下这个异常名字,并“非 常 简 单”地阅读了一下,然后就反过来嘲讽我的“无 知”。因为我之前跟他说这个问题和多线程没有关系,但是他百度查到的该异常出现的原因是“多线程并发异常”,这段代码显然没有涉及多线程问题。

  他对于问题本质的误解究其根本就是没有仔细查阅资料,网上有相当多的文章描述了关于单线程下抛出该异常的原因、底层原理以及解决方案,但是我也想不通为什么他会只看到“多线程并发”并且还紧抓住“并发”不放。

  为了照顾他不太够用的脑袋,我在回击的时候回避了“协程”这个概念,质问:“单线程下你怎么并发?”。这时候突然有人跳出来指出“协程”这个玩意,在我解释后提出问题的人也就事了拂尘去,没有深究,但是他又抓住了这个问题不放,说我“不 懂 装 懂”。

  后续我和一位群友便开始和众多群友进行对线,对方歪曲事实,强调是“我们不允许小白问问题”,并且偷换概念,说“我们的观点是问问题就是伸手党”,对此,我觉得有一个表情包非常试用我当时的感受。(后面这件事就不了了之了。)

???

伸手党

  关于伸手党的概念我不多说,网上对伸手党有如下定义:

  • 任何问题的答案都只想经过他人直接获得而不自己思索
  • 理直气壮、毫无感谢之心地随意向别人索要他人成果

  具体内容参见:伸手党_百度百科

根本

为什么这么多人支持伸手党

  因为后续很多人根本没有了解到事情的真相,只是跟风的和我们作对,中间也有一些明眼人翻看了聊天记录,发现了问题的根本并且嘲讽了那个伸手党。这也给我们提了个醒,如果在群里看到有人吵起来,一定要弄清楚原因再下结论。

为什么会发生这件事

  抛开伸手党是伸手党的问题,最开始的问题是我要求其补上一张完整的、清晰的代码图片并简单描述他的问题,后续其恶劣的态度严重地引起了我的不满,所以我对他说的话也没带多少好意。


提问的艺术

  经过这个事情之后,我一直想要写一篇关于“提问的艺术”的文章,今天总算下手写了出来。

  注:有钱能使鬼推磨,给钱了的话请无视下面的内容。

目的

  掌握提问的艺术是为了让被你提问的人更舒适,表面上是对对方好,实际上是对自己好,因为只有对方舒适了才能更好的给你解决问题,对于没有礼貌、无理取闹的人高手是傲慢的。

礼貌

  时刻铭记你是提问的,他人没有回答你问题的义务,回答你的问题只是出于好心帮助你,要对对方保持礼貌的态度(关系好的话可以适当放松)并且要懂得感谢(不一定要直接表现出来,但是从一个人的平常的言语就能察觉到对方的态度)。

绝对避免

在不

  不要只问“有没有人在?”、“在不?”等诸如此类的问题。如果要打招呼的话直接在打招呼的话后面加上你的问题,因为如果是在群里,你问有没有人在,如果别人出来说他在但是你问的问题他不会,就很容易会显得很尴尬。同时如果当时如果没有人看到你的消息,当你离开的时候有人看到了也无法回答你的问题。为了避免尴尬和打时间差,直接说出问题更为高效。

为什么有问题

  不要只问“为什么我的代码有问题”一类的问题。你这么说别人根本不知道你是什么问题,是编译错误,是答案错误,是运行错误,还是说是时间超限?要么通过其它方式暗示你是哪种问题,要么就直接指出来。

哪里错了

  不要只问“我哪里错了”一类的问题,除非你的代码十分简单,一眼就能看出来问题。因为没有目的的排查错误会比有目的更加费时费力。

只贴代码

  不要只贴出你的代码,至少要标明题号,最好直接给出题目截图。因为没有题目的话别人需要从你的代码中揣测你的意图,如果你的代码逻辑有问题的话有时候会很难看出来你要干什么。同时问问题的时候你肯定是开着题目页面的,你截题目只是几秒钟的事情,但是对于有些人如果只有题号可能需要费半天事来查看题干。

喂,你过来

  不要粗鲁对待给你解答问题的人。如果不是对方提出不合理的要求,尽量满足对方的条件(这个条件是指关于解题的内容,而不是所谓的报酬)并有礼貌的对待对方。这样有利于给对方留下一个好的印象,方便以后问问题。

1+1=?

  不要问白痴问题。对于一些简单到不能再简单,随便搜一下就能找到答案的问题不要问!(除非你真的是无敌小白什么都不知道)。不要逼对方对你说“你TMD百度啊!”。

尽量避免

乱七八糟的代码

  提问前规范你的代码,实在不会规范可以用一下IDE自带的格式化功能,然后抽时间看一下规范内容。因为不规范的代码看起来“非 常 难 受”。所以除非有人需要复制你的代码,也不要直接把你的代码复制到聊天框发出来,这样子发出来的代码和没有规范没啥区别,甚至更过分。

拍照

  能截图就截图,拍照很容易拍不清楚,甚至有可能泄露你的隐私。

对着一只羊使劲薅

  薅羊毛要换着羊薅,别一直盯着一个人使劲问,留给对方一些自己的时间优先在群里问问题。

今日好图

提问的艺术


旧版内容

  这个问题其实不应该出现在这里,但是单独写一篇博客篇幅又太短,就一起说了。

  问问题之前请注意以下事项

  1. 不要只问“我这个哪里错了?”之类的问题,明确自己的问题是什么
  2. 不要只问有没有人在
  3. 不要单独给出题号,贴出题目截图,因为不是所有人都能便捷的通过题号去看题目
  4. 贴代码请使用截图(除非别人要复制你的代码),文字消息中的代码可读性极差
  5. 给出预期结果和实际结果,信息越多越容易让别人定位错误位置
  6. 贴代码之前先规范自己的代码,不规范的代码看起来 非 常 难 受
  7. 别人没有为你解答问题的义务,注意礼貌用语
  8. 提问之前自己先好好思考以下,很多问题自己可以解决