报错:一个由Error引发的思考

浏览: 1765

作者:林筱越

在对程序语言学习的过程中,遇到一个最有趣的问题就是报错。

 

你没有听错,对我来说报错确实很有意思。

 

想想我们在上学的时候,课后作业、测验、期末考试等,无时无刻不在检验着我们对知识的掌握能力;当然,不会做、写不出来的题目也是一抓一大把。学习R语言或是其他编程语言也是如此,看却不一定能掌握,动手实践反而才可能真的掌握。可仔细想一想,从菜鸟到大神,生疏只会随着运用地频繁而逐渐变得熟练,可报错却永远像个初恋的情人,永远让人手足无措。

 

然而,报错不可怕,如何解决报错才是提升自己技能水平的关键。那么当遇上报错时,我们应该怎么解决?这是本文写作的出发点。

 

全文结构如下,全篇阅读大约会花费10分钟左右:

报错:一个由Error引发的思考
       前言
       一、先看看“说明书“
              1.1 官方文档
              1.2 帮助文档
       二、善用搜索引擎
       三、issue报告和邮件
              3.1 Github报告
              3.2 邮件联系相关包的开发者
       四、无解?做一个提出问题的人
       结语

一、先看看“说明书”

也许对每个人来说,每次消费购买一件东西时,随之而来的说明书可能随开箱后就再也难以重见天日。可是,当所购买的东西有着繁复功能又或是操作时,说明书可以说是帮助我们解决问题的第一手资料。当然,我这里所指的说明书也主要有两类:

  •  官方文档

  • 相关包的文档


1.1 官方文档


可以说,无论是R语言、Python还是其他软件,都会有一份官方的参考文档,这就相当于可供参考的说明书,当中也罗列了最为核心的要点。

 

当然,基本上编程语言的大多数文档资料都是英文的,或许对于英语不好的朋友可能是个挑战,但这也丝毫不会阻挡你求知的步伐。寻找民间”汉化版本,或是遇上看不懂的是复制到Google翻译(没被墙)翻译也完全可行。


但是我相信,官方文档虽然内容庞杂,但如果能合理运用目录索引,还是可以能马上找到一些解决问题的可行方案。


1.2 帮助文档


虽说官方文档囊括的内容很多,但大多数时候我们再遇到问题时更偏好直接查看报错命令的帮助文档。

在R中通常使用?和??问号来查看某个函数的具体介绍和用法。但需要注意的是,问号在前

?summary #直接显示summary函数的帮助文档
??summary #两个问号时会寻找一系列可能与summary有关的帮助文档

 

帮助文档可以帮助我们快速浏览相关函数的略缩信息,又或者是查看其他可用参数以及用法。这应该是我们在学习R语言最初常常用来排查错误的主要途径之一了吧。

二、善用搜索引擎

曾在朋友圈里看到这么一张图:

虽然是个段子,但是毕竟再优秀的程序员遇上自己解决不了的问题时,也仍然会搜索看看是否也遇到过同样的问题,以及是否有解决方案;同样的,当“说明书”对于问题的解决毫无帮助时,可能我们就需要借助搜索引擎来寻找答案。

 

在互联网出现后,搜索引擎可以说是人类获取知识最为重要的途径之一了。好的搜索引擎可以直接将你导向你想要的结果,作恶的搜索引擎嘛……你懂的。
所以,引擎的好坏可以节省你寻找到解决方案的时间。就我个人而言,经常使用的搜索引擎主要有以下几个,次序如下:

  1. Google(谷歌)。某些原因,可能没办法细谈如何上谷歌的方法,但是相信聪明的你们一定有办法跨越某道屏障来获取想要的知识的。谷歌在搜索引擎上的算法可以说是顶尖的,基本上无论是寻找资源,还是答疑解惑,都可以显示出高度相关的结果。

  2. Bing(必应)。目前我已经把浏览器的默认搜索引擎设定为微软家的必应,原因很简单,我不喜欢百度那么多的广告。必应只能算是半个谷歌,而且国际版也输出一些不错的结果,但是总觉得和谷歌还有一定的距离。不过话又说回来了,还要什么自行车?

  3. 百度。尽管百度有作恶,但是我相信大多数人还是很难离开它。“百度一下,你就知道”的口号已经是深入人心,通常我只用来寻找国内的资源。当然,遇上问题时用来寻找一下解决办法还是可以的,不过更多可能会显示的是CSDN的方案。

 

我相信,当人类的求知欲被唤起时,总会激发着人们怀揣着最强烈探索精神去寻找最终的答案,而这一过程也是成长和学习的必由之路。

三、issue报告和邮件

随着对于R语言学习的深入,我们也渐渐地了解到更多优质、高效的包,但是在使用这些包的时候不免又会遇到问题。那么这时除了用搜索引擎寻找答案之外,还有其他的路子可以走:

  •  Github上报issue

  • 邮件联系相关包的开发者


3.1 Github报告


对于不熟悉甚至是不了解Github的读者,本文可能没办法能让你快速了解到这个和某hub名称这么近似的东西是什么。这里我只给出自己的理解,我们可以把Github可以简单看成是一个托管平台。也许有机会后面可以给不了解的朋友写一篇“傻瓜式”的文科生Github使用教程。(算是挖了个坑?)

 

目前许多开源的项目都可以在Github上进行托管,然后供人们下载使用或是编译。(需要遵守一定的开源协议)。R语言的许多包也是这样的,比如jiebaR、ggplot2等。有些包可能不一定会在R语言官方CRAN上发布,那么这时候就可以上Github上搜索一下,然后用下面的函数下载下来:

1# install.packages('devtools') 需要预先安装devtools包
2library(devtools)
3install_github('tidyverse/ggplot2'#填写在Github上搜索到的项目名称

我们在使用别人发布的包的过程中,如果遇上某些问题,可以直接在Github上的项目中找到“Issues”界面提交问题,然后就等待别人给出你解决方案啦!


3.2 邮件联系相关包的开发者


无计可施?直接向作者发送邮件询问解决方法或许是最为简单粗暴的方式。当然最好是自己已经搜索不到合理有效的解决办法的时候再发邮件是最好的方式。

 

当我从Windows换到macOS后,发现在使用ggplot2作图时中文乱码问题特别烦,其实中的一个办法就是使用showtext包。但是在使用showtext包过程中,我发现我渲染出的图像还是无法正确显示中文字体。于是我就找到了作者的联系方式并给作者发了一封邮件。

 

不过当时没注意到作者是国人,于是并以蹩脚的英文描述了一下自己的问题(捂脸.jpg)。好在他很快就中文回复了我下载一个叫XQuartz东西,我的问题也随之解决。

 

所以给作者发邮件不失为一种直接有效的方式,但需要要强调的就是:尽量不要给别人添麻烦。如果自己的遇上的问题完全可以在网上搜到现成的解决方案,那么就完全没有必要再去问别人了,因为你已经能够自己解决问题了!

四、无解?做一个提出问题的人

如果能通过搜索引擎搜索到合理有效的解决办法,那就再好不过了。但是可偏偏世界上没有两片完全相同的叶子,每个人所造成的Error也可能不尽相同。那么这个时候最好的方式不是在花时间自己寻找答案,而是把自己的问题暴露出来,让别人给出你解决方案!

 

但希望大家在提问的时候能够至少遵循以下原则:

  1.  贴出报错结果(或者显示结果)截图

  2. 把自己的代码贴出

  3. 问题用词清楚确切凝练

 

经常在群里看到许多朋友提问时没有能够遵循以上几个原则,然后就开始将自己遇上的问题在微信群中提问,这其实是最坏的方式:

  •  因为首先大家一看到你的问题时,不清楚你的整个代码的运行状况或是运行的整个结果如何,不一定会及时给出你遇上的问题到底是怎样的问题;

  • 其次,提问的语句如果没有清楚表示,那么别人也可能会误解你的意思甚至是给出错误的回答。(现实中与人交往也是如此)

 

因此,如何提问也是一门学问,每个人需要好好学习。

 

一般来说遵循我上面所说的原则后,那么就把自己的问题大胆的说出来吧。通常寻求别人回答的地方还是挺多的,以下是我知道的(但不限于此):

  •  知乎

  • Stackoverflow

  • SegmentFault(思否)

  • 统计之都论坛

 

除了Stackoverflow以外,其他三个都是国内的网站,用中文提问即可。Stackoverflow覆盖面广,而且可以说是编程学习问答比较全面的网站了。(个人见解)。但由于是国外的网站(不需要科学上网),免不了要使用英语来进行提问;可是不要忘了我前面说的,在看官方文档的时候如果看不懂时怎么办?用Google翻译!

 

Google翻译最骚的地方是什么,它还能帮你自动调整语序!我毕业论文的英文摘要有一部分都是用Google翻译直接将中文进行转译的。所以这对于使用英语有困难的朋友来说,毫无门槛(但是学习英文是有好处的)。

本文主要围绕如何解决报错问题来进行展开,大致可以总结为这么几部分:

  1. 看文档

  2. 善用搜索引擎

  3. 提出问题

               

其中最为重要的当然还是会利用搜索引擎,其次是学会提问。能将利用搜索引擎和提问二者相结合起来,我相信没有什么问题时解决不了的,因为你不是一个人在冥思苦想,而是借助广大网友的聪明才智来帮你Debug。

 

我曾在以前的文章说过, Hadly Wickham 说他也经常报错。这就说明即使是技术大牛,也总有遇到问题的时候。因此从学习的角度来说,不要认为报错是一件不好的事情,报错并不可怕,可怕的是当报错出现的时候,我们视若无睹。这不仅不利于我们提高自我,甚至在某一天一不小心就导致了可怕的Bug。

 

但是是否说我们有了别人为我们提供的解决方案后,我们就应该一遇到问题就不加思索的“百度一下”呢?绝不应该这样,这样只是本末倒置的。我在大一上《社会工作概论》时,学到这么一个词——“助人自助”。

 

“助人自助”是社会工作的最基本原则,社会工作者期望通过其帮助,使服务对象(案主)增强其独立性,而非增强其依赖性,以能够在日后遇到类似的生活挫折和困难时,可以独立自主地加以解决。——源百度百科

 

很显然,助人自助这一词就很好说明了,别人为我们解决问题最终是希望我们日后在遇上同样类似的问题时,能够独立自主的解决,能够自我Debug,让自己的技术越发娴熟。

 

如果有一天,我们看见了一个小白提了一个我们自己都曾经遇到的问题,并且能顺利的给出解决方案时,那么我们是否会意识到,我们自己其实也已经在不知不觉中变得越来越优秀了呢?

——————————————

往期精彩:

天善智能每日一道算法题,打卡学习小程序

推荐 0
本文由 R语言中文社区 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册