`

编程问题难解决,学会提问是关键!

阅读更多

引言:自学编程是个困难的事情,因为你可能找不到人来帮你解决编程问题。幸运的是,我们有互联网,所以尽管你个人并不认识任何程序员,你还是可以向真人提问编程问题,并且得到真实的(好)答案。不过获得问题答案的关键在于在什么地方、什么时间,以及如何问问题。本文选自《一路编程》。

什么地方

  找到正确的地方问编程问题可能和问对问题一样重要。如果你跟错误的人问了正确的问题,也许得到了答案,但你不会得到一个好答案。因为你想要一个好答案,就需要知道在哪里问问题。

1. 打电话给朋友

  如果你是因为没人教你、指导你或者引导你而自学编程,那就要改变一下了。事实上,你可以一个人走得很远,但你如果有个朋友可以帮你指点正确方向,你会学得更多更快。有时候,你已经认识一两个程序员,他们可能会很高兴回答你的问题(特别是现在你有了基础,你可以问出好问题)。如果你不认识任何程序员,就去认识一个。多亏了像 www.meetup.com/这样的网站,你可以找到很多在你这个领域的程序员会议。找一个那样的群组,认识些人,跟他们学学。 
  问真人问题是学习和寻找答案的昀高效方法。一个真人可以看你的代码,帮你调试,以及帮你找到解决方案。一个真人可以给你量身定制的帮助,因为那个人知道你的背景,以及你当前的知识等级。因为他已经回答了你的其他问题,并且熟悉你工作的项目。朋友可以教你和帮你找到自己的答案,而不仅仅是给你针对你当前问题的答案。如果有一点点可能,一定要问朋友。

2. StackOverflow

  即使你有程序员朋友,他不可能回答你所有的问题。所以 StackOverflow(http://stackoverflow.com/)是一个很棒的资源。 StackOverflow是一个在线的程序员问答社区。网站上的每个东西都通过点数来评分。如果你问了一个问题,很多人都觉得有用,那些人会给你的问题投赞成票。 
图片描述 
  如果你对一个问题提供了很好的答案,人们会给你的答案投赞成票。 
图片描述 
  相反,不好的问题和不好的答案会得到反对票。昀好的问题在搜索结果中会获得高优先级,而昀好的答案会被显示在页面的昀顶部。声望点会奖励给(或者移除)用户的每一个赞成 /反对票,累积的声望值还会显示在页面上所有的用户名旁边。所有这些投票和点数的背后理念,是要让好东西浮现出来,而不好的东西逐渐隐藏起来。这个系统非常好;你几乎可以找到任何编程问题的答案。如果问题还没有被问过,你可以问一下,通常可以在一小时内得到答案。

3. 论坛

  在我刚开始编程的时候,在线论坛是当时找到编程问题答案的昀佳方式。在我学 Perl的过程中,我在 Perl论坛花了很多时间。 
图片描述 
  尽管我很感激这些论坛,我还是很高兴 StackOverflow及其他类似的问答排名网站很大程度上取代了论坛。你知道,论坛很难做信息筛选。一个问题可能会得到好多页的回答,而问题的昀佳答案可能在任意一页,或者可能根本就没有昀佳答案。要想知道答案的唯一方式,就是通读每一页的每一条回复。如你在上图中看到的,论坛通常都不怎么好看。然而,论坛的一个优势是它们一般是针对某个特定的编程语言,因此,论坛会吸引这门语言的世界级专家。专家的聚集会让论坛变成一个对初学者不友好的地方。一般我建议就用 StackOverflow来解决问题,但论坛在 StackOverflow没解决的情况下可能会有帮助。

什么时候

  程序员很看重效率,不仅在代码上,也在生活中。他们愿意提供帮助,但也会珍惜他们的时间。在你尽全力自己寻找答案之前,不要问问题。我在 StackOverflow上问问题之前,会问自己:

  1. 我 Google了吗?从 Google上得到了什么结果,为什么这些结果没有回答我的问题?
  2. 我读过文档了吗?我读了文档的哪一节,为什么文档没有回答我的问题?
  3. 有人问过同样的问题吗?为什么之前问题的答案在我这个场景不能工作?

作为程序员,我也看中效率。我想要自己找答案,但我不想没有目的的搜索,所以如果我已经试过了 Google,试过了文档,也试过了搜索 StackOverflow,还是找不到答案,那我知道,是时候问一个问题了。

玩具鸭 
通过问问题,你可以经常找到答案。不断地尝试用简洁的语言描述问题,可以帮你更好理解你的问题,也许甚至可以揭示问题的答案。找一个毛绒玩具(鸭子就不错),放在电脑旁边,当你遇到问题的时候,问问鸭子。玩具鸭是一个好的倾听者,而且有很多空闲时间。如果问了鸭子之后你还没有搞清楚,去问一个真人吧。告诉他你已经问过鸭子了。

怎么问

  当要问问题的时候,你应该意识到“世界上没有愚蠢的问题”这种说法在像 StackOverflow这种编程论坛上并不适用。我这么说并不是因为刻薄,而是让你知道,如果你问了一个坏问题,你可能会被上课而不是得到答案。社区成员会专注于如何修复你的坏问题,而不是如何修复你的问题。另一方面,如果你问了个好问题,你会得到好答案,看你的问题有多好,你也许还能得到些奖励。

1. 尽量简单

  在 StackOverflow和其他论坛上回答问题的人都是志愿者,他们不会因为回答你的问题而得到补偿(除了声望点),所以你应该尽可能让你的问题更容易回答。写一个清晰的问题描述,列出在你自己搜索答案时找到的资源,以及为什么那些资源没有回答你的问题。你的问题应该全面但不要长篇大论,如果问题很长,你应该加一个概述,读者理解你的问题所花时间越少,他们用来找解决方案和写答案的时间就越多。

2. 不要害羞:贴出你的代码

  我第一次在 StackOverflow上问问题的时候,没有包含我的代码,因为我不太好意思。我怕人们会取笑我的代码,而不是回答我的问题。事实上,在没看到导致问题的代码时,编程问题是很难回答的。这就像是医生用电话进行诊断,“听起来你有胃肠感冒,或者也许是阑尾炎。 ”贴出跟你问题相关的代码会帮助你得到更好的答案。

通过教别人来学习

  通过做项目,你可以学到很多,但你可以通过教别人学到更多东西。在你学习如何编程的过程中,正是昀适合教别人如何编程的时候。通过把刚学到的东西及你正在学的东西教给别人,刚好是你以一个初学者需要的视角理解这些知识。老程序员们也许比你知道得更多,但那也意味着他们解释问题的方式会很复杂,而且难以理解。这么看来,你要比其他人更适合教初学者。

1. 回答问题

  你不需要找一个编程老师的工作来开始教学。你可以通过回答问题开始。在 StackOverflow上找找你能回答的问题。你已经了解了一些关于 HTML、JavaScript,以及 Google Chrome扩展的知识,你可以尝试回答跟这些相关主题的问题。如果你不习惯在 StackOverflow上回答问题,你还是可以回答问题。找其他在学编程的人(或者说服一个朋友学习编程),然后你们可以互相回答问题。你们两个会比各自独立学习学到的东西更多。

2. 写博客

  写作也是个学习的好方法(我猜这就是为什么你上学时要写那么多论文的原因)。你已经学习了很多可以写得好内容,比如 JavaScript的函数如何工作,源代码是什么,以及为什么要使用 Grunt和如何使用 Grunt,如何使用 Chrome开发者工具,以及如何创建 Chrome扩展。在你开始写这些主题时,你会发现你的理解是有缺口的。在你尝试填补这些缺口时,你会更深刻地理解这个概念。记住,你具有教别人的昀佳角度,因为你自己正在学习这个概念。如果你不习惯写一个给全世界看的博客,你可以给你的玩具鸭写封信,它是个很好的聆听者。 
  本文选自《一路编程》,点此链接可在博文视点官网查看。 
                     图片描述 
  想及时获得更多精彩文章,可在微信中搜索“博文视点”或者扫描下方二维码并关注。 
                      图片描述

分享到:
评论

相关推荐

    给程序员的话《编程新手真言》(PDF)

    编程不仅是写代码,更重要的是培养解决问题的逻辑思维能力。通过编写程序,学习如何将复杂问题分解为可处理的小部分,运用算法和数据结构来解决。 4. 版本控制与Git: Git是现代软件开发中的必备工具,用于版本...

    PHP开发程序员解决问题的能力编程小技巧共3页.pdf.z

    2. **代码优化**:高效编写代码是解决问题的一部分,避免冗余,合理利用缓存,了解数据结构和算法,以及使用PHP内置函数,都能提升代码性能。 3. **框架和库的运用**:熟练掌握常见的PHP框架(如Laravel、Symfony)...

    怎样学好编程? 这个文档将告诉你怎么样去学编程。

    首先,我们要理解编程不仅仅是关于语法和代码,它更是一种解决问题的思维方式。 一、理解编程基础 编程的基础包括计算机科学的基本概念,如数据类型、变量、控制结构(如条件语句和循环)、函数等。学习这些基础...

    编程语言快速记忆手册

    如果编程语言里面的所有英语单词你都不认识,那么很难想像你怎么可能学会编程语言。 特别是当看别人的源码或自己写源码时,会用到很多的英语单词来命名变量名称、类名称、字段名称等的,如果单词量达不到的话,会...

    Python编程基础全册电子教案完整版.docx

    学习材料包括《Python编程基础(第2版)(微课版)》教材、配套PPT、代码示例、引导性提问、探究性问题和拓展性问题。这些资源旨在辅助教学,帮助学生深入理解和实践。 【问题设计】 课程设计了引导性、探究性和...

    教你怎么去学一门编程语言

    当程序出错时,学会分析错误信息,找出问题所在,这将极大提升解决问题的能力。 项目驱动学习也是有效的学习策略。尝试参与开源项目,或者创建自己的小项目,如个人网站、手机应用等。这样可以将所学知识应用到实际...

    DSA和竞争性编码路线图、资源、实践问题和解决方案_C++_下载.zip

    - 排序和搜索:快速排序、归并排序、二分查找等算法是解决大量数据处理的关键。 - 动态规划:通过构建状态转移方程来解决具有重叠子问题的优化问题,如斐波那契数列、背包问题。 - 回溯法:在解决问题时,通过...

    学一下提问的智慧值得一看

    无论是寻求帮助、解决问题,还是推动创新和学习,有效的提问都能带来巨大的价值。"提问的智慧"这一主题深入探讨了如何提高我们的提问能力,以达到更好的沟通效果。 首先,提问的智慧在于明确问题的焦点。一个清晰、...

    编程培训心得3篇.docx

    即使在没有个人电脑的情况下,通过共享资源进行编程练习,作者也学会了如何解决问题。 - **学习过程**:从基础的SQL语句和session对象开始学习,逐步掌握更复杂的概念。作者在实践中遇到困难,但坚持不懈,逐步解决...

    编程初学者易犯的毛病

    初学者应该学会批判性思考,勇于提问,通过实践来验证理论,这样不仅能更好地理解知识,还能培养独立解决问题的能力。 最后,"缺乏持久性"是学习任何技能的大忌。编程需要时间和精力的投入,断断续续的学习方式很难...

    (完整word版)编程几个阶段.doc

    这个阶段的学习者需要学会独立解决问题,而不仅仅是跟随教程。调试代码成为常态,同时他们需要学习如何有效地提问和寻求帮助,这是一个重要的转折点,许多人在此阶段感到挫败。 第三个阶段是“绝望的迷茫期”,在这...

    ChatGPT如何提问.zip

    10. **代码和编程问题**:对于编程问题,提供具体的代码示例或错误信息,这样ChatGPT可以给出针对性的解决方案。 总之,向ChatGPT提问是一门艺术,需要结合明确性、具体性和深度来构建问题,以便从这个强大的工具中...

    浅谈数控编程的教学方法.doc

    通过实际操作,学生可以更好地理解各种编程指令的应用场景,并学会如何优化编程过程。这种方式不仅能够提高学生的动手能力,还能增强他们解决实际问题的能力。 #### 四、正确处理好各种“关系” **1. 新旧知识的...

    afn.rar_C++_Lost!

    " 这个标签可能意味着用户在理解和解决问题上遇到了困扰。在C++中,常见的困惑可能来自于语法的复杂性,比如指针的使用、作用域规则、模板、异常处理等。理解和掌握这些概念是成为熟练C++程序员的关键。 文件名为...

    问题请教工程,问题请教工程

    首先,有效的提问是解决问题的第一步。在提出问题时,应清晰、详细地描述遇到的问题,包括错误信息、操作步骤、环境配置等,以便他人能准确理解并提供帮助。例如,如果是关于编程问题,应提供代码片段、报错信息、已...

    热门ChatGPT提问指令.zip

    综上所述,ChatGPT作为一个强大的工具,其潜力在于能够协助我们在多个领域获取信息和解决问题。通过了解和掌握有效的提问技巧,我们可以更好地利用这一技术,提高工作效率和创造力。而"热门ChatGPT提问指令.zip"文件...

    《C语言程序设计》教学探讨 (3).pdf

    在所有教学环节中,教师应当鼓励学生独立思考,积极提问,并在教师的引导下解决问题,从而让学生学会独立分析问题和解决问题的方法。同时,教师应设计多样化的教学活动和实践项目,使学生在实际操作中培养良好的编程...

Global site tag (gtag.js) - Google Analytics