文章转载自「开发者圆桌」一个关于开发者入门、进阶、踩坑的微信公众号

作为一名开发者,如何解决遇到的问题、异常或Bug,是开发者必须要面对的,尽管问题很多,情况复杂,但还是有方法和技巧可寻的。

问题无非是易解决和难解决的两种,如何界定它们其实也非常简单,搜索引擎得到结果越多,表明该问题大家都遇到过,基本上按照别人的经验都是可以解决的,对于搜索结果很少的问题,表明遇到类似问题的人不多,经验也非常少,可能无法快速解决问题。

有时不能仅仅依据搜索结果的多寡来判断问题的难易,最根本的还是看能否解决你遇到的问题。如果尝试了几次都没有解决,基本上可以断定这个问题有点难度了。

对于易解决的问题基本上尝试一到二次后就可以解决掉,而对于难解决的问题,该如何解决呢?

对于复杂和难度都非常高的问题,单单依赖搜索引擎给出的结果已经无法满足解决问题的需要了。但是我们可以遵循一套流程来解决这类问题。即「解决问题基本准则:先思考,然后查找资料,最后再求助他人」。

可能大部分开发者遇到问题的第一反应就是去各种搜索引擎搜索,一个一个解决方案的尝试,可能在尝试了几次后,问题得到了最终的解决。我们不妨回头总结一下,其实有些问题非常简单,不需要反复的尝试,甚至在高可用的生产环境下不会给开发者很多尝试的机会。

问题得到解决后,大部分开发者第一感觉应该是这样的:「众里寻他千百度,蓦然回首,那人却在,灯火阑珊处。」

为什么问题解决后都会觉得“哦哦,原来如此。”这样的感叹呢?原因是我们没有遵守上述解决问题的基本准则,导致走了很多的弯路。

独立思考

我遇到许多开发者不做任何的分析,不思考问题发生的原因,就把异常信息贴到搜索引擎里面去搜,最后搞了N次尝试还是没有解决问题。这属于盲目搜索,完全依赖搜索引擎的错误做法。

思考很重要,一方面可以确定问题的根源,另一个方面还可以帮助你使用更加合理和精准的关键字进行搜索,事半而功倍。

当然,有些非常简单的问题,可以直接去搜索,简单的问题或者大家经常遇到的问题可能在尝试一次或者二次后就解决了,对于这样的问题,搜索是可以带来效率的提高的,「对于易解决的问题建议这样做,效率非常高」。

然而,一旦有些问题进行了三次以上的尝试还是没有解决,这个时候就需要思考了,思考问题的根源,调整自己的搜索关键字甚至是思路等。

查找资料

查找资料大家都会,但是怎么去查才能有效率,才能最快解决自己的问题,大部分初中级开发者都会遇到疑惑。其实,查资料是有技巧的。

首先,要分析一下问题的根源,然后去官方文档中查找对应的资料,官方文档是最权威的,一般情况下,基本上能找到你需要的问题解决方法。

国内开发者大多受限于英文语言障碍,很少去查阅英文官方的文档,而是一味地在中文论坛,搜索中进行,错过了很多有用的关键信息。遇到英文官网不要害怕,其实就那几个单词,搞明白了就海阔天空了,实在不行就借助在线翻译功能,基本上机器能翻译一个大概,够用。

其次,使用搜索引擎,关键字很重要,因此还是要思考问题发生的根源,这样才能使用最合适的关键字进行搜索,才能有好的结果,才能进一步快速解决问题。

最后,把官方资料、搜索结果、中文论坛等多种资源集中一起,互相验证和分析,找到解决问题的最终的方案。

对了,版本。很多你遇到的Bug已经在新的版本中解决了,如果条件允许的话,不妨升级一下版本试试,「版本问题可能是大家都踩过的坑」。

求助他人

经过上面2个步骤的探索,如果还是没有能解决问题,说明这个问题可能太难或者遇到的人很少,又或者是开发者自身的知识有限无法找到合适的解决方案。

这个时候就要带着对问题的思考去求助他人,而不是一味地贴出异常信息求助,这样才能有助于问题的解决和自身技术能力的提升。

关于如何求助他人以及注意事项,可以参考我的另一篇文章「如何请教别人问题?」。

无论遇到多么难搞定的Bug或者问题,上述思路都可以发挥它的作用,有时遵循一定的问题解决流程体系或者科学的方法,是可以快速解决问题的。

又见Bug的更多相关文章

  1. bug管理工具之禅道的测试模块的使用

    https://www.cnblogs.com/evablogs/p/6785017.html 角色:产品经理PO,项目经理PM,开发,测试 测试任务: bug: 1.维护bug视图模块:[测试]-[ ...

  2. 原创科幻短篇《Bug》

    这回不是纯科幻,夹了点玄幻. 以下正文: 大一的时候,李双休谈了个女朋友,俩人学校相距不远,周末约一起看电影.那是李双休第一次自己坐公交,坐反了,绕城一周,电影开始后一个小时才到,就赶上看了个片尾彩蛋 ...

  3. C/C++ 笔试题

    /////转自http://blog.csdn.net/suxinpingtao51/article/details/8015147#userconsent# 微软亚洲技术中心的面试题!!! 1.进程 ...

  4. 总结oninput、onchange与onpropertychange事件的用法和区别,onchange

    前端页面开发的很多情况下都需要实时监听文本框输入,比如腾讯微博编写140字的微博时输入框hu9i动态显示还可以输入的字数.过去一般都使用onchange/onkeyup/onkeypress/onke ...

  5. C/C++笔试题(很多)

    微软亚洲技术中心的面试题!!! .进程和线程的差别. 线程是指进程内的一个执行单元,也是进程内的可调度实体. 与进程的区别: (1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位 (2 ...

  6. PHP适合做大型网站吗?

    1. 对递归的不良支持 递归是一种函数调用自身的机制.这是一种强大的特性可以把某些复杂的东西变得很简单.有一个使用递归的例子是快速排序(quicksort).不幸的是,PHP并不擅长递归.Zeev,一 ...

  7. MySQL · 引擎特性 · InnoDB 事务子系统介绍

    http://mysql.taobao.org/monthly/2015/12/01/ 前言 在前面几期关于 InnoDB Redo 和 Undo 实现的铺垫后,本节我们从上层的角度来阐述 InnoD ...

  8. 总结oninput、onchange与onpropertychange事件的用法和区别 书写搜索的神奇代码

    总结oninput.onchange与onpropertychange事件的用法和区别 最近手机开发一个模糊搜索的功能组建,在网上就找到这篇文章! 前端页面开发的很多情况下都需要实时监听文本框输入,比 ...

  9. js监听input等表单输入框的变化事件oninput

    js监听input等表单输入框的变化事件oninput,手机页面开发中使用到文本框textarea输入字符监听文本框变化计算还可以输入多少字符,如果使用onkeyup的话是无法监听到输入法输入的文本变 ...

随机推荐

  1. HTML5定稿:手机App将三年内消失,互联网世界的第二次大战

    HTML5与app以对立竞争的产品形态展现在大众视野.从去年开始又有一大批技术派或者创业者盯向html5领域,移动游戏的爆发和微信朋友圈等众多平台为HTML5导流,能不能颠覆,或许只是时间上的问题. ...

  2. oracle存储过程中文乱码问题

    设置环境变量,新建变量,设置变量名:NLS_LANG,变量值:SIMPLIFIED CHINESE_CHINA.ZHS16GBK word哥,还是不行呀: 参考:http://idata.blog.5 ...

  3. 其实想要完全理解MVC框架并不是太容易

    完全理解MVC并不是很容易.使用MVC需要精心的计划,由于它的内部原理比较复杂,所以需要花费一些时间去思考.同时由于模型和视图要严格的分离,这样也给调试应用程序带来了一定的困难.每个构件在使用之前都需 ...

  4. I帧/P帧/B帧---术语解释

    视频压缩中,每帧代表一幅静止的图像.而在实际压缩时,会采取各种算法减少数据的容量,其中IPB就是最常见的.  简单地说,I帧是关键帧,属于帧内压缩.就是和AVI的压缩是一样的. P是向前搜索的意思.B ...

  5. DataTables学习:从最基本的入门静态页面,使用ajax调用Json本地数据源实现前端开发深入学习,根据后台数据接口替换掉本地的json本地数据,以及报错的处理地方,8个例子(显示行附加信息,回调使用api,动态显示和隐藏列...),详细教程

    一.DataTables  个人觉得学习一门新的插件或者技术时候,官方文档是最根本的,入门最快的地方,但是有时候看完官方文档,一步步的动手写例子,总会出现各种莫名其妙的错误,需要我们很好的进行研究出错 ...

  6. nodejs 中使用 mocha + should + jscoverage 生成 单元测试覆盖率报告

    最近一直在做nodejs,而关于js的单元测试覆盖率网上资料比较少而且吧比较零散,我从网上找来一些资料整理一下分析给大家,希望大家可以少走弯路. 首先我是从windows环境下测试的,用到的工具有 m ...

  7. es6笔记5^_^set、map、iterator

    一.set 1.基本用法 数据结构Set类似于数组,但是成员的值都是唯一的,没有重复的值. let s = new Set(); [2,3,5,4,5,2,2].map(x => s.add(x ...

  8. 在GEM5模拟器运行时,对Kill命令的使用

    在Linux下开发执行GEM5程序时,需要先启动GEM5,然后使用telnet对GEM5进行连接,才能看到串口信息.因为操作步骤多,所以写了脚本用来运行GEM5和Telnet程序,并且对两个程序进行监 ...

  9. IOS隐藏navigationItem左右按钮的方法

    在移除一个View的时候或者根据需要希望让navigationItem的rightBarButtonItem或者leftBarButtonItem处于隐藏状态,一个简单的方法如下:   self.na ...

  10. C/C++中的联合体

    C/C++中的联合体 利用union可以用相同的存储空间存储不同型别的数据类型,从而节省内存空间.当访问其内成员时可用"."和"->"来直接访问. 当多个 ...