所谓的编程,找到真正的问题为什么那么难

浏览:
字体:
发布时间:2017-10-26 19:19:07
来源:

本文作者: 东方联盟 - 追梦子 。未经作者许可,禁止转载!
欢迎加入东方联盟 专栏作者。

自以为的理解

当拿到一个需求时,总是自以为是的理解了这个需求以及要解决的问题,再不经过思考就盲然的开始了这个项目,然而往往会遇到巨多的bug,让你头疼。

真正的问题

是的,真正的问题是什么?这一直是我的一道坎,不幸的是今天又遇到了,幸运的是我开始懂得重视这个问题,如下这个需求:

 

是一个进度条,就是当前音乐播放的时间比,一开始的想法是这样的:

(当前播放的长度 / 音乐总长度) * 进度条的宽

但这是有很大的问题的,根本行不通,实际上应该是这样:

(总路程 / 总时间) * 当前播放的长度

总路程 / 总时间 算出每一秒的路程 然后乘以当前播放的时间,这样就完成了。

找到问题为什么这么难

当你真正找到要解决的问题时,所有的问题就会变得简单许多,比如上面我所需要解决的问题是,获取每一秒走了的长度,再乘上当前走了的时间。但往往我们看不到真相,而这其中有很多原因,常见的有下面几种:

1、没经过思考
2、想复杂了
3、理解能力有限
4、个人技术所限

这是大部分程序员所会触犯的错误,第一种,比较难发现但一直就在身边,比如说你学一个东西,你有问过自己为什么要学它吗?大部分人没有想过的,工作需要吧?那么问题就来了,你为什么学习前端,不学后端,又如你为什么学后端不学前端,可能觉得前端入门简单,以及等等原因,但如果你当初真的是这么想的,那么就错了,前端可不简单,有时可能比后端还复杂。导致这个情况的出现是什么?当初就没有认真的想过,如果你是想找一门比较简单的语言,那你应该去想哪些语言比较简单啊,而不是直奔前端。

又如你学习新技术,往往又出现了这种情况,api,api,看文档,看视频。但真的这是正确的学习方式吗?不一定,为什么你永远不质疑一个问题?以前写的好好的,老来新的api做什么?之所以某个语言不断的更新,很大情况下,都是因为之前版本有bug,或者有些不足,如果你是做前端的,你会发现各种技术再不断的更新,它不断的更新还不是因为之前的不足,比如javascript中的forEach。forEach是es5新增的,确实好用,但es6又新增了一个for of迭代器,假如你没有经过思考,感觉这是理所当然的事,那就大错特错了,forEach虽然好用但它也不是无所不能的,缺陷也很多,比如break;continue;在forEach中这些就不能用,那你可能会想可以使用for in啊,但for in也是有问题的,自己搜索去吧,在这一切的技术中,思考往往比任何都重要,一个语言的设计者,如果思考不当,造成的结果是无数的程序员得背负同样的后果,而我们不思考,那就是只好在原地了,来一个学一个,别人说什么好,什么就是好。

想复杂了

这是前几天在网上找的一道题

其中一个朋友写的代码

123456789101112 function indexOf(arr, item) { for(var i in arr){    if(arr[i]==item){                return i;    }else if (i==arr.length-1){        return -1;            }     }}

实际上它的代码可以写成这样

12345678 function indexOf(arr, item) { for(var i in arr){    if(arr[i]==item){        return i;    } } return -1;}

为什么他会那样去写,首先他写了一个for in,再想他为什么使用循环对象的方式来写,而不直接用for来写,我猜测是因为,他觉得直接写for循环,看起来代码多了一些,还需要加啊,减啊之类的。另外一方面,对for in理解的比较浅。这还不足以引起我的好奇,而是下面那一段它用了else if,顺着他的想法就是,如果当前项等于传进来的值,那么就返回,否则接着判断它是不是最后一位(因为如果它走到了最后一位,说明前面都没有成立的),如果是,那么就说明这个数组中没有我要找的东西,可以返回-1。

这种思维方式,看似很清晰,但如果细想就很容易发现问题,他这里每次都去判断是不是最后一项,但这完全没有必要,因为如果说它整个循环完了都没有返回出去,那么就说明这个数组中没有匹配的项,我们在循环外部直接返回就可以了。看似一个很小的问题,但在其他方面,我们同样也会犯很多这样的错,我并不觉得写这个代码的人很笨,如果说他笨,我觉得自己笨的要死了。正如写这篇文章,是我犯了无数的错误之后才开始重视起来的,可想而知,我想那位朋友一定忘了思考吧。在编程的生涯中,想复杂的事情远远不止这一个,有些严重些,也有些微不足道,但我想只有真正的开始学会思考以后,我们才能在这场战争中,看的清,看的明。

理解能力有限

评论:

 

这个题虽然没有说出是用原生的方法还是自己模拟一个,但如果我是一个面试官,大部分情况是想让你模拟一个数组的indexOf方法,而不是原生方法,这里也说明,理解也是一种硬伤,往往产品经理等,他们觉得你应该可以理解,但往往背道而驰。

个人技术所限

有位朋友写了如下代码:

12345678910111213 var ary = [ 1, 2, 3, 4 ];function indexOf(arr, item) {     for(var i=0;i<arr.length;i++){         if(arr[i]==item)         {            return i;            break;         }             }    return -1;} indexOf(ary, 3)

但有点javascript经验的,肯定能看到这里面有个多此一举的代码块,break;是不需要的,因为函数一旦返回,后面的代码不会被执行,这或许是因为对技术了解的比较少吧。

沉静

在实际工作中,找到问题所在确实不易,但也唯有解决这个问题,我们才能前进,反之,永远也在原地,难道不是吗,所谓的编程不过是突破那重重的阻碍,一开始我们以为学习语法是一切,但后来,发现那只是很小的一部分,我们需要有很多突破,比如刚接触AJAX时的茫然,再到后来前端与后端的混乱,对于大部分人来说,遇到困难,都想逃避,这很正常,但如果想解决这个问题,我们只能硬着头皮往前走,是的,它之前是我的一道坎,不知困了我多少个日夜,但一切都过来了,而这思考又将会是我的一道坎,但那又怎么样呢,因为有明天,解决只是时间。

 

>更多相关文章
24小时热门资讯
24小时回复排行
资讯 | QQ | 安全 | 编程 | 数据库 | 系统 | 网络 | 考试 | 站长 | 关于东联 | 安全雇佣 | 搞笑视频大全 | 微信学院 | 视频课程 |
关于我们 | 联系我们 | 广告服务 | 免责申明 | 作品发布 | 网站地图 | 官方微博 | 技术培训
Copyright © 2007 - 2024 Vm888.Com. All Rights Reserved
粤公网安备 44060402001498号 粤ICP备19097316号 请遵循相关法律法规
');})();