微信号:programmer_club

介绍:程序员第一自媒体,与你探讨码农人生路上遇到的各类泛技术话题,定期为你推荐码农人生思考、感悟以及启迪!

程序员们,曾经是否有个bug让你开始怀疑人生

2018-03-04 22:00 程序员之家

相信程序员们都有一个共同的女朋友。这个女朋友总是阴魂不散,时不时还不忘调戏下男朋友程序员,而且你依然对她欲罢不能、想入非非。

不瞒大家,最近这个女朋友找上俺了。她就是StringIndexOutOfBoundsException:

       优秀的程序员们一看就知道,你这是越界问题啊!还有的可能是工具类问题、逻辑问题、字符串截取,索引越界等等,说实话都对。然而 ,问题到现在仍然没解决掉;什么回事?先简单说下bug的由来,那是6月2号的上午11点钟左右,依稀记得当时是在写RecyclerView上拉加载和修改数据对应的数组位置,(时间有些长了,记得不是很清楚),写完马上弹出bug,时间已经到12点就没有当时解决,出去吃饭了,想的是先吃饭下午回来再解决。哪知道下午回来之后就解决不了,正好当天下午要搬家,回来简单百度查阅资料,有个前辈博客说那是越界问题,因为你获取的数据大于数组本身的长度大小而抛出异常,例如,String.length()<10;而你又要取index>=10的字符。心想,这个bug情况似乎有些不一样!修改数据对应的数组位置,在之前也改过几次,而且没有问题,且这个数组是集合数组List<NewsBeanData>[] msgSt;我只是修改了数组的位置【0】。

if (msgSt!=null) {    
nowList.clear();//清空缓存
for (int i = 0; i < nowNum; i++) {
nowList.add(msgSt[0].get(i));
}

}

       那好,我们看第二中情况,当时不是在写RecyclerView上拉加载吗,搬好家之后,我把相关的代码注释掉,重新运行,问题依旧。情绪开始失控,接下来几天,又把一部分代码注释掉,开始进行排查,发现一个问题,在程序运行到报错那行就崩溃,后面的代码没法排查,注释也没有用。后来,重新又梳理一遍,思索,这个情况不太像网上大牛们说的那样越界的问题,首先能确定的是,逻辑代码没有问题,索引也没有问题,在bug出现之前是可以运行起来的,bug出现最大可能是后面新增的代码功能有误引起异常,最让人头疼的是,报错行代码没有问题,问题出现在其他地方,程序运行到报错行,后面代码没有执行,无法进行Debug调试。

       排查几日无果,情绪越来越不好,开始胡思乱想,为了逃避问题而选择玩游戏;在游戏里并不得到解脱,常常匹配到坑爹队友,情绪反而更加低落,破口骂人少不了,浪费时间不说,除了口出狂言,出言不敬之外束手无策,情绪下的言语和行动只不过是证明自己的弱小、证明自己没有办法解决问题而已。

      这让我想到了习得性无助。如果你每次去上高数课都发现自己什么都听不懂,每次做高数作业都像是看天书一样,那么你还愿意去上高数课吗?你还愿意去做高数作业吗?这种经历了挫折和失败之后,面对问题时无能为力的心理状态和行为就是习得性无助。习得性无助的人们往往不能给自己确立恰当的目标,遇到困难时容易自暴自弃,他们对于失败的恐惧远远大于对成功的渴望。他们不相信自己能够按照指定水平来执行某个行动,即自我效能感低,面对需要高质量完成的任务时他们有经常很强的焦虑感。期末考试时朋友圈流行的“我可能有一个假脑子”系列表情包便是低自我效能感的一种体现。

      话说今年的一期一会的谷歌大会,真的不把咱们程序员当人看啊!说什么人工智能、VR也就算了,居然在本次大会宣布 Kotlin成为Android 开发的1级编程语言,更好笑的是,你谷歌跟人家甲骨文公司干架就算了,居然搞个Kotlin编程语言还和Java互通。。。。。等等,谷歌干什么咱管不着,想想自己又要从零开始,又要多学一门语言,大写的尴尬啊!

      未来的世界变化不仅会变化得越来越快,估计还会让人丧心病狂。生活不都这样吗?

       本来改变就不易,我想现在的人们对未来更多的不是满怀信心、满怀希望,更多的是担忧吧!不敢说别的,估计上个厕所都能错过一个亿!你觉得这个很恐怖吗?不~~不不不~~~~~~,人家王思聪他爸一个小目标就是一个亿。人类就是一个自作孽的物种,为咋这么说?咱也不想这么说呀,要知道说一句谎话,要用十句谎话来说明这句谎话。喂~~喂喂~~~~言重了吧!好像有点了过了,来点正能量激励一下,担心什么呢?活在当下就好了,反正

再说了,今天不开心没关系,反正明天也不会好过。

       程序员是吃青春饭的,干这一行很难吃到退休。江山代有才认出,一代比一代浪,请做好从入门到被裁员的觉悟吧!

       通过二十多天的沮丧,问题终于解决了,但不是我解决的,说起来很奇葩,是bug自己不见 了。是这样的,首先声明代码没有太大的问题,只是之前有写错代码,可能真的是字符串截取索引越界,不过当时很快改过了,然而,运行程序bug一直存在,就好像Android Studio有记错功能一样,一直保存这个错误。那几天没法解决,沮丧几天后想了个办法,把报错的地方注释掉,先写其他的功能;写着写着,奇迹发生了,bug不见了,然而我并不高兴,总感觉有个更大的bug要发现,这时候还得 问问度娘,百度搜索:Android Studio run多次,经过一番查阅,终于知道问题发生的原因所在,他就是Android Studio2.0之后的逆天功能Instant Run。Instant Run作用是节约程序员在花大量的时间bulid,使用instant run, 在第一次运行之后,就可以快速的在真机中(或模拟器)看见修改后的结果。也正因为这样,instant run可能会有记忆功能,把错误也记住了(我是我的一种猜测),你接下来修改了代码,增加了代码,还会报错。如果大家以后遇到这样的情况,可以这样做,在Run菜单中Clean and Rerun找到它,点它运行程序

这是我在网上找到了一种解决方案。


出现bug的因素及解决方案:

1.80%的bug是程序员自己不小心、不认真、不负责出现的。这种情况解决方法就是多检查代码,检查再检查。

2.有些bug是工具出了问题。解决方法是检查、升级、换工具、百度

3.咱们程序员不怕bug,就怕不知道bug出在哪里。这种bug很难解决,最快最好的解决方法就是注释掉(别打我别打我,我也是这样过来的),注释排除法:重要功效就是确认bug出现在哪里。简单的说是找bug的方法。

.

.

.

.

N-2.转移伤害。当你绞尽脑汁还是没解决bug,这是你可以换个想法,假设你的一位程序员女同事出现了这么个bug,且她正在向你求助,你考虑如何帮助她。这样的话,你的注意力会转移,压力会得到一些缓解,且你的想法会更大胆,思路会更宽阔。

N-1.求助。向同事或者朋友求助,也可以到技术讨论区把遇到的问题拿出来大家帮忙,总之利用一切能利用的资源进行求助,大牛技术QQ群,微信公众号、知乎、CSDN等等。

N.重写代码

一个小小的bug不值得你怀疑人生,不过人生还是值得你去怀疑的。

公众号内回复“1”带你进粉丝群

 
程序员之家 更多文章 猿宵节,推荐几个经常更新、助你涨薪的公众号! 如果金融男和IT男同时追你,你选谁? 108个程序员的笑话,你都看得懂吗? 2018年Java、Web以及移动程序员们应当掌握的12套框架 公有云四大阵营背后:半壁江山之外的厂商过得咋样
猜您喜欢 罗磊观点丨编程3年:我的程序员成长经历 【每日图表】中国手机用户增长率遭遇“腰斩” 大数据免费视频 史上最全容器技术大盘点,没有之一 【测试职涯】郑伟 | 软件测试的历练之路