当前位置:网站首页>为什么新手在编程社区提问经常得不到回答,甚至还会被嘲讽?
为什么新手在编程社区提问经常得不到回答,甚至还会被嘲讽?
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
边栏推荐
- How to handle the timeout of golang
- leetcode先刷_Maximum Subarray
- Poj1149 pigs [maximum flow]
- 数据的同步为每个站点创建触发器同步表
- Digital triangle model acwing 1018 Minimum toll
- Poj3617 best cow line
- Case ① | host security construction: best practice of 3 levels and 11 capabilities
- Database specific interpretation of paradigm
- 腾讯架构师首发,2022Android面试笔试总结
- 爬虫(14) - Scrapy-Redis分布式爬虫(1) | 详解
猜你喜欢
(3) Web security | penetration testing | basic knowledge of network security construction, IIS website construction, EXE backdoor generation tool quasar, basic use of
Learn to punch in Web
枚举根据参数获取值
New generation garbage collector ZGC
beegfs高可用模式探讨
Anaconda安裝後Jupyter launch 沒反應&網頁打開運行沒執行
棋盘左上角到右下角方案数(2)
Node.js: express + MySQL实现注册登录,身份认证
Introduction of Xia Zhigang
Configuration and simple usage of the EXE backdoor generation tool quasar
随机推荐
Linear distance between two points of cesium
POJ1149 PIGS 【最大流量】
Web security - payload
Cesium 两点之间的直线距离
Special topic of rotor position estimation of permanent magnet synchronous motor -- fundamental wave model and rotor position angle
技术分享 | 抓包分析 TCP 协议
[network planning] Chapter 3 data link layer (3) channel division medium access control
SSH connection denied
01 基础入门-概念名词
Web开发小妙招:巧用ThreadLocal规避层层传值
Groovy basic syntax collation
夏志刚介绍
[cloud native and 5g] micro services support 5g core network
5. Nano - Net in wireless body: Top 10 "is it possible?" Questions
Tencent T4 architect, Android interview Foundation
RT thread I2C tutorial
Technology sharing | packet capturing analysis TCP protocol
Leetcode brush first_ Maximum Subarray
An East SMS login resurrection installation and deployment tutorial
[Yann Lecun likes the red stone neural network made by minecraft]