编程问题难解决,学会提问是关键!
引言:自学编程是个困难的事情,因为你可能找不到人来帮你解决编程问题。幸运的是,我们有互联网,所以尽管你个人并不认识任何程序员,你还是可以向真人提问编程问题,并且得到真实的(好)答案。不过获得问题答案的关键在于在什么地方、什么时间,以及如何问问题。本文选自《一路编程》。
什么地方
找到正确的地方问编程问题可能和问对问题一样重要。如果你跟错误的人问了正确的问题,也许得到了答案,但你不会得到一个好答案。因为你想要一个好答案,就需要知道在哪里问问题。
1. 打电话给朋友
如果你是因为没人教你、指导你或者引导你而自学编程,那就要改变一下了。事实上,你可以一个人走得很远,但你如果有个朋友可以帮你指点正确方向,你会学得更多更快。有时候,你已经认识一两个程序员,他们可能会很高兴回答你的问题(特别是现在你有了基础,你可以问出好问题)。如果你不认识任何程序员,就去认识一个。多亏了像 www.meetup.com/这样的网站,你可以找到很多在你这个领域的程序员会议。找一个那样的群组,认识些人,跟他们学学。
问真人问题是学习和寻找答案的昀高效方法。一个真人可以看你的代码,帮你调试,以及帮你找到解决方案。一个真人可以给你量身定制的帮助,因为那个人知道你的背景,以及你当前的知识等级。因为他已经回答了你的其他问题,并且熟悉你工作的项目。朋友可以教你和帮你找到自己的答案,而不仅仅是给你针对你当前问题的答案。如果有一点点可能,一定要问朋友。
2. *
即使你有程序员朋友,他不可能回答你所有的问题。所以 *(http://*.com/)是一个很棒的资源。 *是一个在线的程序员问答社区。网站上的每个东西都通过点数来评分。如果你问了一个问题,很多人都觉得有用,那些人会给你的问题投赞成票。
如果你对一个问题提供了很好的答案,人们会给你的答案投赞成票。
相反,不好的问题和不好的答案会得到反对票。昀好的问题在搜索结果中会获得高优先级,而昀好的答案会被显示在页面的昀顶部。声望点会奖励给(或者移除)用户的每一个赞成 /反对票,累积的声望值还会显示在页面上所有的用户名旁边。所有这些投票和点数的背后理念,是要让好东西浮现出来,而不好的东西逐渐隐藏起来。这个系统非常好;你几乎可以找到任何编程问题的答案。如果问题还没有被问过,你可以问一下,通常可以在一小时内得到答案。
3. 论坛
在我刚开始编程的时候,在线论坛是当时找到编程问题答案的昀佳方式。在我学 Perl的过程中,我在 Perl论坛花了很多时间。
尽管我很感激这些论坛,我还是很高兴 *及其他类似的问答排名网站很大程度上取代了论坛。你知道,论坛很难做信息筛选。一个问题可能会得到好多页的回答,而问题的昀佳答案可能在任意一页,或者可能根本就没有昀佳答案。要想知道答案的唯一方式,就是通读每一页的每一条回复。如你在上图中看到的,论坛通常都不怎么好看。然而,论坛的一个优势是它们一般是针对某个特定的编程语言,因此,论坛会吸引这门语言的世界级专家。专家的聚集会让论坛变成一个对初学者不友好的地方。一般我建议就用 *来解决问题,但论坛在 *没解决的情况下可能会有帮助。
什么时候
程序员很看重效率,不仅在代码上,也在生活中。他们愿意提供帮助,但也会珍惜他们的时间。在你尽全力自己寻找答案之前,不要问问题。我在 *上问问题之前,会问自己:
- 我 Google了吗?从 Google上得到了什么结果,为什么这些结果没有回答我的问题?
- 我读过文档了吗?我读了文档的哪一节,为什么文档没有回答我的问题?
- 有人问过同样的问题吗?为什么之前问题的答案在我这个场景不能工作?
作为程序员,我也看中效率。我想要自己找答案,但我不想没有目的的搜索,所以如果我已经试过了 Google,试过了文档,也试过了搜索 *,还是找不到答案,那我知道,是时候问一个问题了。
玩具鸭
通过问问题,你可以经常找到答案。不断地尝试用简洁的语言描述问题,可以帮你更好理解你的问题,也许甚至可以揭示问题的答案。找一个毛绒玩具(鸭子就不错),放在电脑旁边,当你遇到问题的时候,问问鸭子。玩具鸭是一个好的倾听者,而且有很多空闲时间。如果问了鸭子之后你还没有搞清楚,去问一个真人吧。告诉他你已经问过鸭子了。
怎么问
当要问问题的时候,你应该意识到“世界上没有愚蠢的问题”这种说法在像 *这种编程论坛上并不适用。我这么说并不是因为刻薄,而是让你知道,如果你问了一个坏问题,你可能会被上课而不是得到答案。社区成员会专注于如何修复你的坏问题,而不是如何修复你的问题。另一方面,如果你问了个好问题,你会得到好答案,看你的问题有多好,你也许还能得到些奖励。
1. 尽量简单
在 *和其他论坛上回答问题的人都是志愿者,他们不会因为回答你的问题而得到补偿(除了声望点),所以你应该尽可能让你的问题更容易回答。写一个清晰的问题描述,列出在你自己搜索答案时找到的资源,以及为什么那些资源没有回答你的问题。你的问题应该全面但不要长篇大论,如果问题很长,你应该加一个概述,读者理解你的问题所花时间越少,他们用来找解决方案和写答案的时间就越多。
2. 不要害羞:贴出你的代码
我第一次在 *上问问题的时候,没有包含我的代码,因为我不太好意思。我怕人们会取笑我的代码,而不是回答我的问题。事实上,在没看到导致问题的代码时,编程问题是很难回答的。这就像是医生用电话进行诊断,“听起来你有胃肠感冒,或者也许是阑尾炎。 ”贴出跟你问题相关的代码会帮助你得到更好的答案。
通过教别人来学习
通过做项目,你可以学到很多,但你可以通过教别人学到更多东西。在你学习如何编程的过程中,正是昀适合教别人如何编程的时候。通过把刚学到的东西及你正在学的东西教给别人,刚好是你以一个初学者需要的视角理解这些知识。老程序员们也许比你知道得更多,但那也意味着他们解释问题的方式会很复杂,而且难以理解。这么看来,你要比其他人更适合教初学者。
1. 回答问题
你不需要找一个编程老师的工作来开始教学。你可以通过回答问题开始。在 *上找找你能回答的问题。你已经了解了一些关于 HTML、JavaScript,以及 Google Chrome扩展的知识,你可以尝试回答跟这些相关主题的问题。如果你不习惯在 *上回答问题,你还是可以回答问题。找其他在学编程的人(或者说服一个朋友学习编程),然后你们可以互相回答问题。你们两个会比各自独立学习学到的东西更多。
2. 写博客
写作也是个学习的好方法(我猜这就是为什么你上学时要写那么多论文的原因)。你已经学习了很多可以写得好内容,比如 JavaScript的函数如何工作,源代码是什么,以及为什么要使用 Grunt和如何使用 Grunt,如何使用 Chrome开发者工具,以及如何创建 Chrome扩展。在你开始写这些主题时,你会发现你的理解是有缺口的。在你尝试填补这些缺口时,你会更深刻地理解这个概念。记住,你具有教别人的昀佳角度,因为你自己正在学习这个概念。如果你不习惯写一个给全世界看的博客,你可以给你的玩具鸭写封信,它是个很好的聆听者。
本文选自《一路编程》,点此链接可在博文视点官网查看。
想及时获得更多精彩文章,可在微信中搜索“博文视点”或者扫描下方二维码并关注。
推荐阅读