资讯专栏INFORMATION COLUMN

编程新手如何更好地提问

Salamander / 1875人阅读

摘要:如果你也曾遭遇这样的问题,或今后打算在编程社区里成长,请务必看看我接下来要说的东西如何正确地在编程社区提问绝大部分得不到满意回答甚至引来不满的问题,都是问题本身的原因。对新手来说,的可能性更大。

学编程难免遇到问题,遇到问题难免要上网求助。然而有过不少同学向我诉苦,说 在网上提问没有人回答,有的还收到一些不是很友好的回复 。我自己也在经常上的论坛上目睹过类似的帖子。以至于有人说,程序员社区就是对新人不友好,不愿帮助新人,甚至说这是怕别人学会了来抢饭碗。

对此我想正名一下,程序员们大多很单纯,而且这或许是 这个星球上最乐于分享的群体 。但在这个充满理性、逻辑至上的群体里,有着自己一套规则。当一个不懂规则的人出现在群体中,往往会被“教做人”。

如果你也曾遭遇这样的问题,或今后打算在编程社区里成长,请务必看看我接下来要说的东西:

如何正确地在编程社区提问?

绝大部分得不到满意回答甚至引来不满的问题,都是问题本身的原因。我本人在网上回答了这么多年问题,也经常是深感困扰。提出一个好问题,对于提问者和回答者,都有很大帮助。

提问前准备

当你打算上网求助前,先问自己2个问题:

搜索 了没有?

检查 了没有?

学编程,你不是一个人。几乎所有你遇到的坑,都有前人踩过,搜索一下就会有答案。各种文档、教程里的内容也都会包含在网页结果中。搜索的关键是如何描述问题,所以要学会看报错,能找到报错中的关键信息。关于更多搜索的技巧,参考之前的文章《编程初学者如何使用搜索引擎》。

编程届有两个词: RTFMSTFW ,含义我不解释,自己去查。当有人在你问题下回复类似词时,想想自己有没有动手搜索过。

如果网上找不出你的问题,有几种可能:1.关键词选得不准确;2.你确实碰上了特殊情况;3.你犯了某些低级错误。对新手来说,3的可能性更大。所以请务必自己检查下, 单词拼写对不对、标点是不是英文、缩进空格对不对、括号引号是否成对、文件路径是否正确 ……

排除低级错误外,你还应当对错误做定位,尽量缩小范围,增加必要的输出。这在提问时也会极大方便回答者。而且我也经常跟人说,当你自己把必要的值都输出出来看清楚后,通常问题已经很明显了。关于 debug 的技巧,参考之前的文章《开发5分钟,调试2小时 - 该如何debug?》

提问的内容

一个好的问题,应当是 准确、具体、简洁、完整 ,也就是既要清楚地表达了问题涉及的信息,又不要夹杂无关的噪音。

具体来说,通常应包括这几种信息:

问题的表现

平台版本

输出的 报错信息

相关部分的 代码

最好还附上你的 屏幕截图 (避免你没意识到的错误)以及中间变量的 输出 (方便回答者,同时也说明你自己尝试过)。

特别说一下附上的代码。对新手来说,最好 同时提供截图和代码文字 ,截图是展示电脑上的真实情况,文字是方便别人复现。如果你的代码短,就全部发上;如果是很多代码文件的项目,请自己先做初步的定位,只发关键部分的代码。

如果你是在论坛、问答网站上发帖,取个好标题很重要。 把问题在标题里简要描述清楚 远好过“求助!在线等!挺急的”这种无意义的标题。

提问的形式

提问时,要选择 合适的地方,说合适的话

比如你在一个进阶论坛中问初学者的问题,往往会遭到排斥。反过来也不合适。比较可惜的是,在编程届,进阶、深入的论坛更多,初学者论坛则较少。所以如果你愿意, 欢迎来我们的论坛提问 ,当然别忘了上面说的几点。

而至于什么才是合适的话,这个比较难把握。总的来说, 礼貌永远是好的 ,没人愿意搭理傲慢、粗鲁的提问。但有时候, 效率比礼貌更重要 。比如 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

上述这一切,不仅针对编程。

════
其他文章及回答:
如何自学Python | 新手引导 | 精选Python问答 | Python单词表 | 人工智能 | 嘻哈 | 爬虫 | 我用Python | 高考 | requests | AI平台 | 计算机视觉
欢迎搜索及关注: Crossin的编程教室

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42634.html

相关文章

  • 机器学习自学指南

    摘要:机器学习的四个层次根据能力可以将学习过程分成四个阶段。中级阶段的目标是学习如何实现并使用准确合适健壮机器学习算法。学术研究参加学术会议,阅读研究论文和学术专著,与机器学习领域的专家交流学习。 事实上有许多的途径可以了解机器学习,也有许多的资源例如书籍、公开课等可为所用,一些相关的比赛和工具也是你了解这个领域的好帮手。本文我将围绕这个话题,给出一些总结性的认识,并为你由程序员到机器学习高...

    YFan 评论0 收藏0
  • [译] 如何恰当学习 JavaScript

    摘要:原文链接恰当地学习适合第一次编程和非的程序员持续时间到周前提无需编程经验继续下面的课程。如果你没有足够的时间在周内完成全部的章节,学习时间尽力不要超过周。你还不是一个绝地武士,必须持续使用你最新学到的知识和技能,尽可能地经常持续学习和提高。 原文链接:How to Learn JavaScript Properly 恰当地学习 JavaScript (适合第一次编程和非 JavaSc...

    Jason 评论0 收藏0
  • Python

    摘要:最近看前端都展开了几场而我大知乎最热语言还没有相关。有关书籍的介绍,大部分截取自是官方介绍。但从开始,标准库为我们提供了模块,它提供了和两个类,实现了对和的进一步抽象,对编写线程池进程池提供了直接的支持。 《流畅的python》阅读笔记 《流畅的python》是一本适合python进阶的书, 里面介绍的基本都是高级的python用法. 对于初学python的人来说, 基础大概也就够用了...

    dailybird 评论0 收藏0
  • UCloud用户社区UClub新手使用指南

    摘要:用户社区的使用用户社区为实名制社区,在提问回复或发文评论前必须绑定手机号才能够正常发帖。官方有权对灌水违法违规不文明内容进行删除。亲爱的小伙伴你好!首先感谢你来到UCoud用户社区,期待你的加入!UClub用户社区旨在为UCloud用户及广大云计算爱好者提供一个开放的学习交流平台。为了你能更好地使用UCloud用户社区,请你花费3分钟仔细阅读,阅读完成后将获得10积分。UCloud用户社区的...

    Tecode 评论0 收藏0
  • Java 学习资料总结

    摘要:三进阶阶段这个阶段主要是靠我们自己学习总结,可以通过前辈们的博客或者自己研究源码,这些非常有利于我们快速的成长。让自己保持永远学习的精神。五零基础学习资料最后给大家准备了一份不错的学习资源,里面有很多学习视频和资料,后台回复资源,即可获取。 showImg(https://segmentfault.com/img/bVbauV8?w=1212&h=816); 前两次给大家分享了关于 j...

    FleyX 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<