保持简单 ——关于生活,关于算法

终于完成了图像处理库的升级,这个任务整整历时一年,从算法的预研到最后的实施,从汇编语言的学习到指令集加速的实现,其中滋味自然是五味杂陈,从没想过要放弃,也没意识到遇到的问题竟然可以通过简单的修改几行代码就能解决,从开始的生搬硬套,到中间的批量堆代码,再到最后的代码重构,我深深地体会到保持简单的重要性。算法,甚至于生活,化繁为简,更需要功夫。

从技术的预研开始说起,其实任务的要求很简单,让程序更快一些,因为客户反映现在的图像处理算法速度太慢。那么怎么才能使算法更快呢,两种方式,其一,从算法核心思想着手,尽量采用简单且易于代码实现的方法,即在算法层面上进行优化;其二,在编码实现上着手,尽力采用更适合编译器优化的编码方式,目前主要采用C语言来实现,C语言的是一门高级语言,编译器需要将其翻译为汇编语言然后转成机器语言才能使CPU执行,这个转换过程显然降低程序的性能,不如直接采用汇编语言直接实现算法,但是这种加速效果的提升显然使很有限的,无法达到客户的期望,于是想到了采用SIMD指令集来对算法加速,充分发挥CPU的性能。所谓穷尽CPU的手艺,不过如此。根据网友的说法,CPU指令集编码可以达到数十倍的性能提升,这正是客户所需要的,也是我们所追求的,试想一下,原先一秒只能处理7帧,现在同样的时间可以处理20帧,再也没有这种性能的翻倍更能让产品经理兴奋了!

但是,前景是丰满的,现实则是骨感的,周围没有人专门研究过这东西,甭说是指令集,单说汇编这东西,熟练掌握的人就不多,幸好有人还是知道些的,遇到问题还是很方便问的,不过话说回来,入门还需靠自己,这显然是一个艰难的过程。如果说经验的积累只是一个不可逾越的过程的话,那么程序问题的排除和调试则是一个几近考验人耐性和定力的经历了。掌握一门编程语言可能只需要一个月,但熟练应用它则至少需要一年。

其次,一个比较拧巴的过程则是对于汇编技巧的掌握只是很小一块,却要实现一些繁琐甚至于重复的功能,于是乎堆代码成了一个比较简单易用的选择,但是这对于汇编技巧的掌握显然没有任何的益处,原因在于所谓的对代码无非就是代码的简单拷贝,而其实根据后期的经验来看这些简单的代码粘贴除了增加代码维护的难度之外还降低了代码的可复用性,于是乎在代码出现bug之后,不能不选择唯一的一条路,那就是代码重构,增加代码的可复用性,删除冗余代码显然是逃不掉了。显然代码重构是利大于弊的,从修正后期测试遇到的bug来看,在定位程序问题之后,只需修改有问题的模块即可,而不需要像前期堆的代码那样每个算法流程都要对此出问题的模块进行一遍修改,算法模块的巧妙封装和调用显然是一个编码的必备技能。

我曾经听一位大师级的程序员这样称赞到,“我通过删除代码来实现功能的提升。”而法国著名作家兼飞行家Antoine的说法则更具代表性,“只有在不仅没有任何功能可以添加,而且也没有任何功能可以删除的情况下,设计师才能够认为自己的工作已臻完美。” 某些时候,在软件中根本就不存在最漂亮的代码,最漂亮的函数,或者最漂亮的程序。我们所能完成的只是在时间和性能之间折中后的代码而已,还远远谈不上漂亮,甚至于简洁。

开始的开始,我们在写文档,最后的最后,我们在删除编好的代码,因为最后的测试遇到了各种各样的问题,为了解决这些问题或者使问题尽量的少,我们所做的就是使代码尽量简洁,算法的逻辑尽量简单。受制于诸位能力有限,无法将代码一次写对,并尽量使任务不至于一而再的延期,于是删除冗余代码成为了一个手刃般的抉择。需求的更改类似于刮风下雨,而程序要的承诺则类似于天气预报,一个是肯定会发生的,一个是肯定不可靠的。

保持一颗简单的心,平静地解决各种问题,时间会磨平各种记忆,也就解决了这些问题,是为经验也。我总希望寻求各种挑战,解决各种问题,最大的快乐莫过于自己做的算法应用到了产品中并实实在在地解决了客户的问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值