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

作为一名开发者,如何解决遇到的问题、异常或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. 2.7. 属性的各种设置选项(Core Data 应用程序实践指南)

    可供配置的选项根据属性类型的不同有所变化,并不是每一种属性都能配置下列选项 Transient:勾选该选项,表示该属性不写入“持久化存储区”,这听起来很奇怪,但有时候,只需要把特性留在托管对象上下文就 ...

  2. java me 旋转的X案例

    package com.xushouwei.cn; import javax.microedition.lcdui.Command;import javax.microedition.lcdui.Co ...

  3. Git 入门 ---- Git 与 SVN 区别

    一. Git 是什么?        Git 是目前世界上最先进的分布式版本控制系统     二. 基础知识 有中心的 SCM(Software Configuration Management) 服 ...

  4. spring mvc handler的三种方式

    springmvc.xml 三种方式不能针对一个controller同时使用 <?xml version="1.0" encoding="UTF-8"?& ...

  5. (二)Windows下Redis的主从复制

    Redis拥有非常强大的主从复制功能,而且还支持一个master可以拥有多个slave,而一个slave又可以拥有多个slave,从而形成强大的多级服务器集群架构.目前在同一台window下安装三个r ...

  6. MySQL管理命令

    1.验证MySQL安装 在成功安装Mysql后,一些基础表会表初始化,在服务器启动后,你可以通过简单的测试来验证Mysql是否工作正常. 使用 mysqladmin 工具来获取服务器状态: 使用 my ...

  7. 用keychain这个特点来保存设备唯一标识。

    由于IOS系统存储的数据都是在sandBox里面,一旦删除App,sandBox也不复存在.好在有一个例外,那就是keychain(钥匙串). 通常情况下,IOS系统用NSUserDefaults存储 ...

  8. 阿里巴巴Java开发手册———个人追加的见解和补充(一)

    先上干货,<阿里巴巴Java开发手册>的下载地址 https://yq.aliyun.com/articles/69327?spm=5176.100239.blogcont69327.15 ...

  9. Python package install血泪史

    [前言][絮絮叨叨篇]:说实话,不是第一次安装Python库了,但是貌似没有特别顺利的时候,可能还是遇到的困难不够多咯.配置环境真是个糟心的事儿,不过作为菜鸟,还是得磨练磨练,毕竟某人云:" ...

  10. Ioc容器依赖注入-Spring 源码系列(2)

    Ioc容器依赖注入-Spring 源码系列(2) 目录: Ioc容器beanDefinition-Spring 源码(1) Ioc容器依赖注入-Spring 源码(2) Ioc容器BeanPostPr ...