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

自以为的理解

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

真正的问题

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

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

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

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

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

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

找到问题为什么这么难

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

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

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

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

想复杂了

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

其中一个朋友写的代码

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

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

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

理解能力有限

评论:

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

个人技术所限

有位朋友写了如下代码:

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

沉静

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

打赏支持我写出更多好文章,谢谢!

打赏作者

打赏支持我写出更多好文章,谢谢!

任选一种支付方式

1 4 收藏 1 评论

关于作者:追梦子

快乐一直在我们身边,不管你身处何地何时,只要心是快乐的,一切都是快乐的。是那一秒,也是那一秒,都不会改变。 个人主页 · 我的文章 · 8 ·    

可能感兴趣的话题



直接登录
最新评论
跳到底部
返回顶部