解决问题的思路

当我们面对编程上的问题时,我们应该如何快速的解决掉它,从而开启摸鱼状态。如何通过解决一个又一个问题,总结一套自己的经验。我们从以下几点开始讨论

1.问题是什么

工程师遇见的问题叫做bug,bug的产生是必然的,难以避免,想要解决bug,首先要知道问题是什么,要学会描述问题bug。

描述问题,首先要用一句话概括,“我跑程序报错了,我想做什么什么事情,结果他怎么怎么样了”,“我的程序没有得到预期的结果,我是这样做这样做的......”当你能描述清楚你的问题,就可以请教别人或者和别人讨论。

就好比提需求,如果需求不明确,事情就做不好,如果问题描述不清楚,就很难展开讨论。

描述问题,关键在于清楚自己做了哪些操作,熟悉可能在什么地方会出问题,掌握自己所做的业务

2.问题在哪

排查问题,找到问题在哪是一种非常重要的技能,最简单的思路就是二分排查

要在熟练业务和知识的基础上,根据出现的问题,找到一些可能出现问题的地方,然后控制变量,一个一个排查可疑点。就好比排查嫌疑人在哪,讲究的是知道哪些小区没有嫌犯,哪些还没有排查,不能没有头绪的找问题,甚至反复找。不要在整个城市,整个程序里找,而是分片的找。

找问题,要多调试,输出结果,看看结果哪里没对上,程序运行到某一行的结果符合预期吗?函数输出符合预期吗?哪一步是正常的,到了哪里开始有问题了,哪些函数和语句写的很可疑,哪些经过排查已经明确没有问题了。

是哪里的问题?我们知道程序的运行是依赖源码,输入数据,运行环境等各方面因素的,程序出了问题是代码写错了?还是输入的数据不对,还是环境不对,甚至是程序执行的顺序不对。

控制变量排查,可以帮助定位问题。

找到问题,离解决问题已经非常接近。

定位到问题,无非就是哪里错了改哪里,很多问题都在知识范围内,只是程序的运行或者代码的编写出乎意料,或者函数接口不熟悉写错了,并不是知识不会,代码不会写。

如果定位到问题,明确知道问题的来源了(已经定位到非常具体,只差修改),但却不知道问题产生的原因,如何修改,就是下一节,怎么找到解决办法讨论的事情

3.怎么找到解决办法

在射程范围内的问题,我们可以自己就解决了,当遇到不再射程范围内的事情,就要注意了,这是个困难,也是学习进步的地方。

面向搜索编程
很少有人会记住每一个函数接口,每个类的使用方法,每个数据定义,哪里不清楚就去查哪里,不要凭借自己想当然的思路。公司内部特定的问题,问熟练的同事,公共的知识先去google,百度搜索。

怎么在google百度搜索问题?
程序员问答网站stackoverflow,一个非常重要的功能就是问问题,当你去该网站尝试新建一个问题,他会要求你描述清楚问题分类,问题描述,不符合的问题甚至根本无法创建,重复提问也无法创建。另外,好回答会被点赞,好问题也会被点赞。

我们可以发现,原来问个问题也有大学问,那么怎么在网上搜索问题呢?
关键词定位
我们用人话和搜索关键词来举例,首先要问得出人话,人话有的可以直接搜索,有的太长不好描述,就用搜索关键词

  • 我想在linux上把这个文件移动到那个位置
    linux移动文件
  • python里我想读一个txt文件,每一行怎么读怎么读,读完了又要干啥干啥? 这类长问题,注意划分小问题逐个解决,先解决一部分,再解决一部分
    拆分为,python按行读取txt文件,再去找要干啥的问题

  • xxx操作之后,yyy怎么样了,不符合预期
    xxx操作后,yyy怎么

  • 报错信息有输出,简单举例

>>> a = 1
>>> b = 'ss'
>>> a+b
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'

int类型和string不能相加,直接搜索
TypeError: unsupported operand type(s) for +: 'int' and 'str'
或者熟悉了,自己直接看报错都知道问题了
注意
你说,不对啊,我的a和b明明都是int,怎么这样呢?ok那你输出一下a是什么,b是什么,a从哪里来的,产生a的代码是不是出问题了,b从哪里来的,是不是有问题。其实这里是在定位问题了,所以切记,定位问题一定要准确,不要粗心大意

4.轻松点的思考

解决问题,首先要说清楚自己遇到了什么问题,先把自己做了什么,发生了什么描述清楚;其次要定位问题具体在哪,哪里有可能出问题,要调试,分块,二分,逐一的排查问题,问题可能在代码,输入数据,运行环境,依赖关系;最后,找到问题后,熟悉的问题直接解决,不熟悉的问题通过搜索,询问,讨论解决。

我认为最重要的是在排查问题,因为人脑毕竟不是电脑,不能够模仿程序的运行,所以需要熟悉代码,调试程序,精确定位,这也是为什么有很多调试工具的原因。

程序的运行总会有各种意想不到的结果,所以才需要有测试开发,软件更新,bug修复,无论谁写的代码,都会出现bug,所以当我们的程序出问题了,也不必焦虑。

最后我想说,程序员,工程师最讨厌八阿哥......


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,258评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,335评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,225评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,126评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,140评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,098评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,018评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,857评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,298评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,518评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,400评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,993评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,638评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,661评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容