道阻且长,行则将至。埋头苦干,不鸣则已,一鸣惊人!加油,骚年!

1 前言

  每个人在学习编程时都会遇到困难,因此作为程序员,需要学习的最重要的技能之一是如何高效地摆脱困境。

  在实际生活中,你寻求帮助的方式是怎么样的?有没有对自己提问的方式做一些思考?有没有想过要做出一些改变?前几天在社区看到一张很有意思的图片,叫做《提问的艺术》,这里也贴出来让大家看一下,然后我们再步入正题。

 

2 第一步

  陷入困境之后,首先需要判断形势。我必须能够明确地回答如下三个问题,才能够从他人那里获得帮助。

  • 我想要做什么?需求是什么?
  • 我已经尝试了哪些方式?
  • 结果如何呢?

  答案应该尽可能的具体。

  • 对于第一个问题,像 “我要在我的 windows10 电脑上安装最新版本的 XX 软件” 这样明确的陈述足够详细,让其他人能够施以援手;而像 “我要安装 XX 软件” 这样的陈述没有提供足够的信息,别人没有办法了解到更多的内容,也就无法提供太多的帮助。
  • 对于第二个问题,我的答案应该提供足够多的细节,这样做有什么好处呢?很明显了,这样别人就不会建议我去重复已经尝试过的方式;相比于方式A:“我访问了一个网站,然后下载了一个安装程序”,方式B:“我访问 A 网站,并点击 B 中的下载按钮,然后运行了这个安装程序”提供的信息更加详细。
  • 对于最后一个问题,如果我们能知道准确的错误消息等一系列失败后的提示,对我们在线搜索解决方案或者寻求帮助很有用!比如尝试 A 操作,运行后生成了失败信息 B 等等。

  通过回答上述三个问题后,我们可能就会发现自己遗漏了什么东西,从而无需再做其他的事情就能摆脱困境。程序员甚至还给这种情形提供了一个名称,称之为橡皮鸭子调试法(参考文章:程序员必备技能:橡皮鸭程序调试法)。如果我向一只橡皮鸭子(或任何无生命的东西)清楚地阐述自己的处境,并向它提出具体的问题,我们常常就能够自己回答这个问题。

有意思的事情是:有一些公司真的在办公室放置一个橡皮鸭子,旨在鼓励程序员 “与这只鸭子交流”。

2.1 再试试

  很多时候,只需要回过头去重新再来一次,就足以解决很多问题。假设我们正在写一句代码,可能遗漏了某种简单的东西,比如语句结尾的分号等,再试一次可能就会使我们避免重复同样的错误。

  再举个例子,可能我要给我的 Linux 开发板打包一个 bin 文件,第一次操作,实际把两个文件的顺序放错了,然后把程序烧录进去,结果板子就是无法运行,此时我在按照自己总结的步骤,仔仔细细再来一次,可能就会避免之前添加文件顺序错乱的情况了。

2.2 歇一会儿

  如果我很长时间内一直在试图解决同一个问题,那么休息一会儿实际上是我可采取的最佳战术。因为我们在长时间从事一个任务时,极有可能会变得一根筋,脑子里想的都是一个解决方案。此时我对所做的假设(前提条件)往往会视而不见,而休息一会儿有助于我从不同的角度看问题。不用休息很长时间,只需要让我能够摆脱当前的思维方式就行。如果我坐了很久,起来做做运动。溜达溜达,跟同事交谈一下。或者去外面待一会儿,也可以起来去接杯水,喝喝茶,吃点喜欢的健康的小零食~~~,都是很不错的选择。

  如果我心情很沮丧,也许应该把工作放到一边,整天都不考虑了(实际工作往往很难,但是到一个时间节点的时候,比如快下班,又或者晚上的时候,我觉得是可以的)。在晚上睡一个好觉,做一个好梦之后,第二天再来做这件事,往往会发现真的没有那么难。

  记得我在学校的时候,有一次晚上搞一个东西到 10 点左右,就是找不到解决方法,就决定暂时放弃,不想了,抛到脑后,回去跟室友聊聊天,看他们打打游戏,换换脑子,睡个好觉。第二天再去工作室的时候,发现,咦,这个问题从这个角度看怎么这么简单???看来昨天晚上是陷入了一个思维定式,陷入死循环跳不出来了。。。

2.3 参考官方资料

  如果我是在看书中遇到一些问题,那么去找找与书本配套的在线资源/社区,上边往往有很有用的答案。

3 在线搜索

  不知道我有没有听过这么几个词:“百度三连”,“谷歌三连”…,其实说的都是让我们好好利用在线搜索功能。很可能有人以前遇到过我们此刻正面临的问题,并且还在网上发表了相关的文章。良好的搜索技能和具体的关键字对我解决当前面临的问题很有帮助。

  如果当前有一些错误提示,那么直接把提示的内容拿去搜索,通常也是很有用的,在我们实际使用过程中,往往有很多网站会反复出现。

3.1 Stack Overflow

  Stack Overflow 是一个很受程序员欢迎的问答网站之一,当使用 Google 来搜索某些问题时,此网站的答案往往就会排在第一的位置。

  官方网站链接:传送门???? StackOverflow

https://stackoverflow.com/

3.2 官方文档

  如果是跟编程语言相关的,去找对应的官方文档;如果是软件相关的,可以去看软件对应的帮助(大部分都是“F1”);如果是硬件产品,电子模块等,可以去找相关的官方数据手册/开发文档等等,都是很不错的帮助;

3.2.1 C++ 开发

  关于C++语言开发,可以去下边这几个网站找找帮助

https://zh.cppreference.com/w/cpp
  • C++那些事,这个是一个开源项目,传送门:C++那些事
https://light-city.club/sc/

3.2.2 QT 软件

  学习 QT 时,最最推荐的就是软件自带的帮助,当对一个关键字有疑问时,只需要把鼠标放在这个单词上,然后点击 F1 ,即可看到对应的帮助文档,非常详细!

  也看了一些其他的评价,说买的一些 QT 相关的书籍,大部分也都是看着帮助文档进行翻译,然后结合自己一些事件经验总结而来,由此可见,帮助文档真的很有用!

3.2.3 Python 开发

  Python 开发也一样,官方文档很重要,不仅仅是 Python 自身的一些语法,周围相关的库文件,对应的也都有官方文档,可以自行去查找,学习!

3.3 博客

  很多程序员大佬都有博客,特别是一些大公司的,很资深的一些牛人,都有写博客的习惯,目的就在于与人分享针对其使用的语言部分撰写的帖子。

  如果使用百度搜索,在查找与编程相关的问题时,CSDN 往往会在前边,下边推荐一下常用的博客网站

  • 简书,这个里边的内容就很多样化了,不单单只是偏向技术,传送门:简书
https://www.jianshu.com/
  • V2EX,这个也是一个技术类的论坛网站,也是从公司前辈那里得知的,传送门:V2EX
https://www.v2ex.com/
4 总结
  1. 学会提问的艺术很重要;
  2. 向他人寻求帮助时,自己应先做好一切力所能及的准备;
  3. 他人没有义务帮助我;
  4. 自学能力很重要;
  5. 自己内功也还不够,还需要继续学习呀!
5 附录
  • 程序员必备技能:橡皮鸭程序调试法
  • 本文是在翻阅《Python编程:从入门到实践》一书中的附录时,发现了《寻求帮助》这篇文章,觉得很有用,就结合自身实际情况,总结而出此文,希望对你有一些帮助~

如果文章内容有误,麻烦评论/私信多多指教,谢谢!如果觉得文章内容还不错,记得一键三连哦(点赞、收藏、留言),您的支持就是对我最大的鼓励,谢谢您嘞!