最近遇到了一些人、一些事,然后就想着拿出来总结总结,并谈谈自己的一些看法,所以就有了这篇文章。
首先,我们来看看下面遇到过的两种情景。
情景1:
在工作中经常会遇到这样一些人:要他们实现一些功能,敲个代码跟挤牙膏一样,还不一定能挤得出。
让他们维护一个项目,却总是夸大口的吹嘘着软件中各种算法实现是多么多么的简单,最后还唠叨着什么高级点的人工智能技术会更厉害、效果更好,然后你让他去实现一下,却无从下手。
说实在的,都挺尴尬的~
情景2:
一同事负责项目的识别功能,由于识别的情景比较复杂,前期相关的处理和容错机制都做得不是很完善,终于加班加点最后达到了用户测试标准。
然而,此时项目经理也算是嘘寒问暖:“小刘,你这块代码识别大概有多少代码呀?”小刘笑了笑回答道:“也就几百行吧”。
项目经理歪嘴一笑:“那你这个还得完善一下呀,之前我见过人家的识别算法都是上千上万行代码呢”。
小刘脸上的笑容消失了~
以上这两个情景,相信有多年经验的朋友都多多少少遇到过吧,那时那刻也是血压上升,气得心里在滴血。
在这两个情景中,有一个重要的相似处:在这些人的观念中,把算法的品质与代码量紧密的结合,且成正相关。
也就是说,代码量少,那你这个算法就不咋样了。
首先,这样的观念我不说错误吧,至少是非常的不严谨。举个简单的例子,同样是实现一个冒泡排序算法,不同水平、不同编码习惯和思维逻辑习惯的程序员所编写出来的代码都是有长有短。
代码量的多少根本没法评估算法的好坏,甚至有些长的代码太多重复的逻辑,直接影响到平台上的运行效果。
算法是数学的产物,是一种解决问题的通用方法提炼,本质上与编码没有半毛钱关系,甚至一些优秀的算法被优化得特别简单。
特别是一些控制和滤波算法都特别的简洁,甚至只有10多行,却能够获得非常满意的效果,也被大部分称之为“高级算法”。
因为这些算法都根据其所使用的环境和对象配置有合适的参数,每个参数都是与系统匹配,从代码上看似乎就是0.002或者1.22之类的数值,而在它们被写入程序之前都经过了大量的仿真、测量和测试,编码的过程仅仅只是这算法实现中一个小阶段罢了。
这也说明了算法都要基于一定的条件的,没有万能的算法。就像世界上没有完全一样的树叶一样,有差别就要分情况考虑,那算法就不一定通用了。
所以,如果要真的理解一个算法,首先就需要了解到它所适应的场景,再去了解其具体的实现。
同样也没有哪个所谓高深的算法是从0直接跳到1的,复杂的算法都是基于简单的算法不算的推导、归纳、演变、组合而来,从0到1的过程还经历非常多的数字,甚至可能你正在学的算法就处这个过渡过程中。
都是一个由简及繁不断积累的过程,切不可眼高手低!
END
作者:bug菌
来源:最后一个bug
版权归原作者所有,如有侵权,请联系删除。