对于成长瓶颈的思考

初学编程,感觉每天都有新的收获,每天都有新的目标。可是一段时间后,掌握了几门语言,实现了几个项目,开始认识到代码是写不完的,很多工作都是重复的或者已经有人做过的。简单的已经会了,想要深入挖掘却又困难重重。一边踌躇满志,一边又不知所措。

以上便是我现阶段的状态,或许我还有一个进步期是工作后几年,但肯定几年后我还是会再次遇到瓶颈。其实大概一年前我就开始感受到这种瓶颈了,只不过后来实习之类的事情减缓了这个阶段的到来,但是在大学的最后一个寒假,我最深刻地感受到了自己目前所处的状态。前两年(2015、2016)在技术上的积累正在消耗殆尽,如果不突破现在的瓶颈,终会沦为平庸。
思来想去,我觉得作为一个资质平平的程序员,有三个恶习造成了今日的瓶颈。这三个恶习或许只是我的情况,也可能普遍存在。这三个恶习分别是:不重性能、不知优雅、不求甚解。一些细枝末节的陋习大致也可以归到此三类里面。逐条分析一下。

不重性能

这个问题有两个层次:

  1. 不重视性能
  2. 不知道怎么重视性能

第一个问题在最早期的时候存在,而且存在也并没有什么坏处,那时候刚刚学编程,自然应该先实现功能,过于追求什么性能反而是舍本逐末,容易挫伤积极性。在一段时间后这个问题本来应该消失,但自己总是急于完成一个项目。写代码前急,就不会有好的规划;写代码过程中急,就容易引入拙劣的代码;写完代码急(于收工),就丧失了最佳的反思、优化的机会。所以,以后要注意的第一点:

在开发的全过程中要有性能优化的意识。

第二个问题是后两年存在的问题,有时候也想优化性能,可是却无从下手。这个问题的根源还是基础和眼界的问题。所谓基础,比如C程序要对操作系统、网络等有深入了解才能有针对性的优化;Android的性能瓶颈,往往涉及网络问题或者需要了解Android系统(架构、源码);Java程序的性能瓶颈自然需要了解虚拟机。而自己在学校对操作系统、计算机网络等没有透彻的掌握(教学水平是一方面,自己懒惰是另一方面)。所以没有优化性能的坚实基础。所谓眼界,比如我是最近才知道性能分析器之类东西,以前我最多分析下源码哪里可以降低一下复杂度;又比如,因为毕设关系读了一些检索系统的源码,发现用缓存来提高检索速度的代码(和Cache的哲学类似),自己却没有有意识的如此审查自己的程序。工业界和开源社区是拓展眼界的两个重要途径,自己一直以来也没有足够的毅力去持久地关注学习。所以,以后要注意的第二点:

向内打好基础,向外开拓眼界。

不知优雅

最近在看《黑客与画家》,我开始第一次较为严肃地思考编程(不是编程语言)的优雅性。我想在本文中讨论的不是“Java傻逼,Lisp是编程语言发展地终点”之类的问题,而是自己因为懒惰而放弃优雅。
先不说编程语言,优雅这个问题在编辑器领域也同样存在,Vim像Lisp,Emacs像C,古老不衰并占据这两种哲学的极端情况;Python就像Sublime Text,漂亮简洁、开箱即用且拥趸无数;C++有点像Visual Studio,强大但复杂。大概就是这么个意思,我也不想仔细推敲这些类比。而我在自己的第一个编程黄金阶段学会了Vim,放弃了带领自己入门的Notepad++,放弃了人见人爱的Sublime Text,因为我感受到了Vim的优雅,并在那段时间战胜了Vim陡峭的学习曲线。

但是,过了这段黄金时期,我来到了一个舒适区:这个问题Java也能完成,只不过啰嗦了一点;这个项目这么架构也没事,以后出了问题再说吧。于是,我第一次学Lisp就半途而废了。在掌握了几门语言,开发了几个项目之后我开始停留在这个舒适区。个人感觉,拒绝学习是一个程序员平庸的开始。目前,这种微妙的状态正悄悄生根发芽。之所以这么看中编程语言,是因为这是程序员最重要、最实用的表达媒介和生产工具。Vim是自己追求优雅的一个成功案例,Lisp则恰恰是反面教材。
另一方面,一门语言的实用也有优雅与生硬之分,或者说设计模式。由于项目规模和阅历,自己对设计模式的切身体会还不是太多,但是开源项目是一个很好的学习途径,但自己一直以来没有足够的毅力去坚持探索。
基于以前的经验,解决这种困境的方法还是有的:激情。曾经很有激情,所以C语言的指针也不那么可怕,反倒是写出真正的C风格代码的钥匙。只有保持足够的激情才能攻克那些看似复杂、晦涩实则无比优雅的概念。所以,以后注意的第三点:

保持激情,保持追求。

不求甚解

这个问题在上面很多论述中都已有所表现。举个例子,在Java里,要读取一个文件的时候,我总是直接网上copy一份,也不管其原理;Android更是如此,为了实现一个功能搜索尝试了半天,终于解决,却多半是组合粘贴别人的代码,自己对原理依旧不懂,知识匆忙实现了这个功能,事后也缺少回顾总结。很多时候,急于完成功能;又或者看书看到晦涩处,直接跳过,只求“看过一遍”这个结果;等等。这里有个矛盾,一方面想学的太多,另一方面能拿出来的时间太少。但最愚蠢的就是不求甚解,实则更本没有吃透,完全背离了本意。所以,以后注意的第四点:

求甚解,知其所以然。

其他

最重要的是心态。叫醒一个人起床的不是闹钟,而是自己执着追求的梦想。心态足够笃定,信念足够执着,时间自然会挤出来,效率自然会提上去。
以上。