2016 May 07 —— android; java; performance

为什么开发者需要做性能优化?

其实性能优化是一项很繁杂的活,常常干的事是为前人填坑,看很多不规范的代码,那么为什么从开发者的角度而言,我们需要或者说应该做性能优化实践,或者说我怎么会干这个活儿乐在其中呢?最近突然在想这个问题,觉得有了一些眉目所以写这一篇文章来整理此时自己的思路历程:

训练一种理念

事实上,编程是一项依赖于计算机的科学工作,由于编程门槛的降低,以及摩尔定律所预言的计算机性能的不断强化,就我所感受到的,其实很多人真的是在靠感觉编程,靠感觉编程其实还有很大一部分原因是由于原理不清晰,或者说自己没有深入思考过——为什么要这样?很多时候我们只知道或者从业务的角度也只需要知道如何做,而不关心为什么要这样做。就比如 从大的方面说Java究竟是为什么这么庞大复杂,为什么新功能推出这么困难,不断Delay?从小的面说如之前我提到的 ThreadLocal 线程隔离究竟是解决什么问题的?等等……就如做Java的我认为应该至少熟读 Java编程思想以及 Effective Java ,这类书籍的阅读并不是一刀切的,很多东西需要自己不断的去回味,一遍一遍的去阅读思考才能去想透彻里面的东西,一点一点的依赖源码去回味思考,才能去做好后续的开发工作;

编程是一项,做中学,学中思,思中辨,辨而明过程,回过头来说靠感觉编程的很多东西就是猜测,其实猜测并不是坏事,在解决分析Bug的逆向过程中,大胆猜测小心求证确实是一个很重要的技巧,也非常有助于逻辑思维的完善;但是就性能分析来说,这是一项数据为王,一切以数据为指导的过程,很多你感觉的东西最终并不是你所想的那样,当数据出来之后,这些东西是站得住脚的,是有实际理论依据的。在习惯性能优化之后,会容易树立一种尊重自己所写的代码的感觉,因为每一行代码在计算机处理时,对于计算机都是实际性能可测的;

从这个角度来看,性能优化能帮助我们树立一种以科学的数据指标去衡量我们所编写的代码,进一步梳理编程思路,同时一定程度上抑制以感觉去猜测,基于猜测去编程的Sense

但是说回来,感觉其实又是一个很奇妙的东西,完全依赖感觉不行,但是没有感觉也不行。自己从去年来上海之后开始烹饪,并且逐渐开始喜欢上烹饪,自己在烹饪的过程中发现了一些与编程的共通,我觉得事实上烹饪和编程这种很依赖实践,又有完善的理论体系的事情,又恰恰是很需要想象力与创造性思维的,我喜欢烹饪的很大一部分原因,是我在烹饪的过程中能够沉浸在自己的味觉系统里面,会去想这种辣味配合这种肉的味道加上老干妈的味道应该是什么味道?我应该放什么调料?在合理的试错成本上去创作一些东西,去尝试我所没有尝过的味道,虽然结果并不总是令人满意的,但是一些东西在我思考之后,我明显感觉到我烹饪开始有了一些自己的想法;而且这些生活中的理念会反过来反哺其他的生活和工作但是无论无何,在我不熟悉的菜色面前我还是会利用网络去尽可能的检索了解相关的信息,创造其实不是凭空的,是需要站在足够的理论依据上,合理的创造,所以知识的积累在创造阶段尤为重要,尊重科学的基础上合理的创造,杜绝凭空揣测;

培养一种态度

编程需要一种态度,一种对于自己所写代码精益求精的态度,一种追求完美的态度,其实根本上说是要尊重自己的职业,事实上我认为以此为生而又不给予足够的尊重事实上是对于自己的一种不重视。性能优化涉及的东西方方面面,不简单是几个工具所显示对应的数据就能够完全解决问题的,其实我们在性能优化的过程中是可以通过更多的去问一些诸如为什么当初没有正确的处理这部分逻辑之类的问题,来横向获取更多上下文环境,最后我发现大部分情况是偷懒了或者说没有性能的理念,凭感觉认为这部分开销会很小,但是事实上并不是的。

在性能优化过程中,你会看到各种各样的代码,尤其在大项目中,就比如CC中就有6年前的代码,一份工程经历很多人之后,就开始变得奇怪起来,看习惯了奇怪的代码你就会反思,我个人而言是一个不喜欢给别人添麻烦的人,一旦想到自己的代码在可能的将来会成为他人吐槽的点时(其实这个很难避免,脱离了具体的业务环境,很多代码就是会变得奇怪),是会对自己不满意的。

所以性能优化能够帮助我们建立一种基于优秀理念的基础上的写出更具可读性(性能优化会让你读到各种其他人的代码,你会知道可读性多么可贵),更加规范,更高性能的代码,而且这种东西是会上瘾的,一旦你尝到了这种东西带来的好处。

自己认为自己在编程领域的路还有很长,还需要学习的东西也还很多,但无论如何,编程并不仅仅是编程,既然自己选择了这条路就应该尊重自己,尊重自己所选择的路,以比较高的标准去要求自己,因为这是一种很宝贵的习惯。

上一篇
下一篇
Loading Disqus comments...
Table of Contents