当前位置:网站首页>为什么新手在编程社区提问经常得不到回答,甚至还会被嘲讽?
为什么新手在编程社区提问经常得不到回答,甚至还会被嘲讽?
2022-07-06 12:23:00 【Crossin的编程教室】
零基础python入门教程:python666.cn
大家好,欢迎来到 Crossin的编程教室 !
学编程难免遇到问题,遇到问题就需要上网求助。然而有过不少同学向我诉苦,说在网上提问没有人回答,有的还收到一些不是很友好的回复。我自己也在经常上的论坛上目睹过类似的帖子。以至于有人说,程序员社区就是对新人不友好,不愿帮助新人,甚至说这是怕别人学会了来抢饭碗。
对此我想正名一下,程序员们大多很单纯,而且这或许是这个星球上最乐于分享的群体。但在这个充满理性、逻辑至上的群体里,有着自己一套规则。当一个不懂规则的人出现在群体中,往往会被“教做人”。
如果你也曾遭遇这样的问题,或今后打算在编程社区里成长,请务必看看我接下来要说的东西:
如何正确地在编程社区提问?
绝大部分得不到满意回答甚至引来不满的问题,都是问题本身的原因。我本人在网上回答了这么多年问题,也经常是深感困扰。提出一个好问题,对于提问者和回答者,都有很大帮助。
提问前准备
当你打算上网求助前,先问自己2个问题:
我搜索了没有?
我检查了没有?
学编程,你不是一个人。几乎所有你遇到的坑,都有前人踩过,搜索一下就会有答案。各种文档、教程里的内容也都会包含在网页结果中。搜索的关键是如何描述问题,所以要学会看报错,能找到报错中的关键信息。关于更多搜索的技巧,可参考之前的文章《编程初学者如何使用搜索引擎》。
编程界有两个词:RTFM、STFW,含义我不解释,留给你自己去查。当看到有人在你问题下回复类似词时,想想自己有没有动手搜索过。

如果网上找不出你的问题,有几种可能:
关键词选得不准确;
你确实碰上了特殊情况;
你犯了某些低级错误。对新手来说,3的可能性更大。所以请务必自己检查下,单词拼写对不对、标点是不是英文、缩进空格对不对、括号引号是否成对、文件路径是否正确……
排除低级错误外,你还应当对错误做定位,尽量缩小范围,增加必要的输出。这在提问时也会极大方便回答者。而且我也经常跟人说,当你自己把必要的值都输出出来看清楚后,通常问题已经很明显了。关于 debug 的技巧,参考之前的文章《开发5分钟,调试2小时 - 你的问题在哪里?》。
提问的内容
一个好的问题,应当是准确、具体、简洁、完整,也就是既要清楚地表达了问题涉及的信息,又不要夹杂无关的噪音。
具体来说,通常应包括这几种信息:
问题的表现
平台和版本
输出的报错信息
相关部分的代码
最好还附上你的屏幕截图(避免你没意识到的错误)以及中间变量的输出(方便回答者,同时也说明你自己尝试过)。
特别说一下附上的代码。对新手来说,最好同时提供截图和代码文字,截图是展示电脑上的真实情况,文字是方便别人复现。如果你的代码短,就全部发上;如果是很多代码文件的项目,请自己先做初步的定位,只发关键部分的代码。
如果你是在论坛、问答网站上发帖,取个好标题很重要。把问题在标题里简要描述清楚远好过“求助!在线等!挺急的”这种无意义的标题。
提问的形式
提问时,要选择合适的地方,说合适的话。
比如你在一个进阶论坛中问初学者的问题,往往会遭到排斥。反过来也不合适。比较可惜的是,在编程届,进阶、深入的论坛更多,初学者论坛则较少。所以如果你愿意,欢迎到 bbs.crossincode.com 上提问,当然别忘了上面说的几点。
而至于什么才是合适的话,这个比较难把握。总的来说,礼貌永远是好的,没人愿意搭理傲慢、粗鲁的提问。但有时候,效率比礼貌更重要。比如 StackOverflow 就禁止打招呼、感谢,因为这会带来无效信息。你只需要精确描述问题、采纳优秀回答即可。同样,当你给别人提问时,直接了当地说明问题,绝对不要一句“你好,在吗?”,等到回复再来一句“我可不可以问你一个问题?”这样留言。或许你觉得这是礼貌,但对于别人来说,本来一次就可以回复的事情,硬生生被拖成几个小时,可能根本就不理你了。
而当你发布在网上的问题最终被解决后,在问题后附上解法说明,按社区规则采纳/点赞有用的答案,是值得推荐的做法。对于回答者来说,这比一句口头赞赏更礼貌。
提问的禁忌
上面说了些建议,如果你还不够理解,那么请记住,不要像这样提问:
搜一步就可以解决的问题。比如“Python 里怎么读取一个文件的内容?”
X-Y 问题。所谓 X-Y 问题,就是你要解决 X 问题,你认为可以用 Y 方法解决,然后你就问怎么实现 Y,但其实 X 问题根本就有更合适的解法。比如“我怎么取一个字符串的后3位?”,而实际他想解决的是“怎样获取文件的文件类型?”
笼统而抽象的问题。比如“我能不能学会 Python?”。这个问题被问的频率很高,但这不该问别人,问你自己。
不要乱猜原因,甚至声称是别人代码的 bug。你需要客观描述和分析问题。比如“我一输比10大的数就不对,是不是 Python 在我电脑上有问题?”
不要把多个问题混为一谈,分清楚因果。代码有不止一个错误是很正常的,如果别人的方法让你的报错发生变化,说明对上一个问题起了作用,这种情况需要进一步分析,而不是立刻回复一句“按照你的方法改了还是不行”。(这种属于真的不礼貌,会让回答者不想再理你)
在开放的论坛、讨论组、问答网站,尽量不要通过发私信、加好友的方式来提问。(事实上,这种方式大多也无效)
不要妄想让别人替你调试 bug、写作业、开发。
一个糟糕问题的例子:
哪位懂Python的帮我看下这是什么问题?
(一张几十行的代码截图)
一个好问题的例子:
我的程序里将输入和变量比较大小,结果报错,请问是为什么?
我是Python3
报错:TypeError: '<' not supported between instances of 'int' and 'str'
(代码+输出的截屏、代码文本)
一个更好问题的例子:
我的程序里将输入和变量比较大小,结果报错,请问是为什么?
我是 Windows 下的 Python 3.7
报错:TypeError: '<' not supported between instances of 'int' and 'str'
提示是第11行:if answer < num:
我在前面加了 print,两个变量都是有值的。
(代码+输出的截屏、代码文本)
提问的本质还是思考。如果你能提出一个好问题,必定是对问题思考后的结果。这对你本身也是一种练习。不思考就直接提问,既浪费了锻炼的机会,也很难得到满意答复。
从另一个角度来说,天下没有免费的午餐(也许有,但肯定有人付了钱),不要把别人回答你当做一件理所当然的事情。所以请尊重别人的劳动,并尽可能让别人乐于回答你。不要提糟糕的问题就是最基本的要求。
说了这么多,你也不要因此而不想提问题。该问的还是得问,要敢于提问和讨论,甚至要上 StackOverflow 等英语网站去问。不然怎么提高自己?不但要问,还要回答,“教”是最好的“学”。当你能向别人解释清楚一个东西时,才是你真的理解了它。既回馈了社区,又提升了自己,何乐而不为?
Crossin的编程教室永远欢迎好问题。
最后,编程有篇很经典的文章,推荐给大家:
How To Ask Questions The Smart Way
http://www.catb.org/~esr/faqs/smart-questions.html
【中文版】提问的智慧
https://github.com/FredWe/How-To-Ask-Questions-The-Smart-Way/blob/master/README-zh_CN.md
PS:本篇内容,不仅针对编程。
感谢转发和点赞的各位~
_往期文章推荐_
如需了解付费精品课程及教学答疑服务
请在Crossin的编程教室内回复: 666

边栏推荐
- 转让malloc()该功能后,发生了什么事内核?附malloc()和free()实现源
- POJ 3207 Ikki&#39;s Story IV – Panda&#39;s Trick (2-SAT)
- Node.js: express + MySQL实现注册登录,身份认证
- Guangzhou's first data security summit will open in Baiyun District
- 8086 instruction code summary (table)
- Jupyter launch didn't respond after Anaconda was installed & the web page was opened and ran without execution
- Finally, there is no need to change a line of code! Shardingsphere native driver comes out
- Linear distance between two points of cesium
- Synchronization of data create trigger synchronization table for each site
- A5000 vgpu display mode switching
猜你喜欢

02 基础入门-数据包拓展

【计网】第三章 数据链路层(4)局域网、以太网、无线局域网、VLAN

Le lancement du jupyter ne répond pas après l'installation d'Anaconda
腾讯T2大牛亲自讲解,跳槽薪资翻倍

永磁同步电机转子位置估算专题 —— 基波模型与转子位置角

Tencent T3 teaches you hand in hand. It's really delicious

Example of applying fonts to flutter

redisson bug分析
![[Yann Lecun likes the red stone neural network made by minecraft]](/img/95/c3af40c7ecbd371dd674aea19b272a.png)
[Yann Lecun likes the red stone neural network made by minecraft]

5. 無線體內納米網:十大“可行嗎?”問題
随机推荐
22-07-05 upload of qiniu cloud storage pictures and user avatars
POJ 3207 Ikki&#39;s Story IV – Panda&#39;s Trick (2-SAT)
HMS core machine learning service creates a new "sound" state of simultaneous interpreting translation, and AI makes international exchanges smoother
Learn to punch in Web
5. 無線體內納米網:十大“可行嗎?”問題
腾讯架构师首发,2022Android面试笔试总结
棋盘左上角到右下角方案数(2)
Node.js: express + MySQL实现注册登录,身份认证
Deep learning classification network -- zfnet
新一代垃圾回收器—ZGC
Appx代码签名指南
JS implementation force deduction 71 question simplified path
Tencent T3 teaches you hand in hand. It's really delicious
Tips for web development: skillfully use ThreadLocal to avoid layer by layer value transmission
BeagleBoneBlack 上手记
Vscode debug run fluent message: there is no extension for debugging yaml. Should we find yaml extensions in the market?
Maximum likelihood estimation and cross entropy loss
JVM_ Common [interview questions]
B-杰哥的树(状压树形dp)
Groovy basic syntax collation