工作中的一些思考

  程序猿们可能是最善于讲段子,最喜欢自黑的一个群体,网上流传着很多黑程序猿或者程序猿自黑的段子,以至于计算机专业马上要毕业找工作的表妹,看多了这些段子后跑来问我转行的事情。记的一个讲的是一名经验丰富的老程序猿和刚入行的年轻程序猿之间的对话,老程序拍着刚入行不久的小菜的肩膀说,小菜啊好好干,咱们这行会让你成长很快的,小菜当时没领会前辈的深意,过了两年后照镜子,发现自己老了十岁。

  到了我照镜子的时候,除了看到岁月留下的该有的痕迹外,庆幸自己的发际线还没后移太多。回想自己的职业生涯,展望以后的道路,一种危机感油然而升。虽然基本上每天都在忙碌中度过,但是专业技能提升的明显没有那么多,虽然有量的积累,但还没达到质变的临界点。Android 开发早已过了会做出一个 app、能写出来美观的页面就能立足的年代,如果没有核心竞争力,能力跟不上年龄的增长,被后浪拍在沙滩上是早晚的事情。

  最近看到这么一段文字:巴菲特选股的时候把护城河 、保持它的宽度和保持它不被跨越作为一个伟大企业的首要标准,如果护城河每年都变宽,企业的经营将会非常好。当我们看到的是一条很狭窄的护城河——那就太危险了。对个人来说何尝不是同样的道理,思考片刻,危机感就是内心的声音在提醒自己,以前没认真考虑过修建自己的护城河,如果再不认真考虑并付诸行动,马上就要被后浪碾压了。

  回顾自己的代码生涯,庆幸进入了计算机互联网行业,虽然大学里c语言学的云里雾里,搞不懂指针是怎么个回事(现在也还没懂),但工作后跌跌撞撞,靠自己还不算懒惰的双手,勉强成为了一个合格的工程师。做 Android 开发也几年有余,自己的成长比优秀的同龄人慢了不少,也算是稳中有进,一步一步的在提升,可以用这么几个阶段来概括

  1. 学习 Android 平台的编程语言,jave,kotlin;
  2. 熟悉 Android 平台提供的 API,如:UI 库,网络,文件,数据库, 图片处理,多媒体处理等等;
  3. 掌握平台相关的特性、框架和原理,如:Android 的四大组件,MVC、MVP、 MVVM、Clean Architecture等框架的演进;
  4. 通过具体的项目,熟悉和练手,达到可完成任意功能的开发。

​ 期间换了两家公司,经历了完全不同的企业文化和技术氛围。

  一家公司偏重业务,产品技术部门的任务很明确,老板说做什么就要做什么,老板说要多长时间做完,项目组就得加班加点做完,在这样的大环境下如果不是一个有心人,很容易被牵着鼻子走,失去自己的节奏,每天疲于应对老板安排的任务,忙的根本没时间思考自己的方向是什么,成长了多少,遇到问题只是去搜索别人怎么解决这个问题的,没有思考和记录为什么这么能解决,有没有别的方法,自己几乎变成了一个工具,被安排什么任务就去做什么。这种情况下,很多时候我不是在学习如何编程,而是在学习如何完成任务。

  另外一家公司以工程师团队为核心,工程师团队内部以数据为核心,践行工程师文化。公司提倡工作和生活的平衡,注重和鼓励工程师的个人成长,相信工程师的成长会给公司带来额外的价值。公司和员工相互信任,公司给员工很大的自主权,大部分员工也把公司的命运和自己的工作联系在一起。工程师团队里从上到下在强调多思考,多问为什么,想明白为什么做一个功能以后再开始编程,有充分的时间思考,公司文化也在驱动你去思考更多。在这里我甚至喜欢上了工作和编程。

  两家公司里学到的是不一样的东西,第一家公司学到更多是不应该做什么,第二家公司学到更多的是应该做什么,无论好坏,都是成长过程中的经验。很多人会有一个 todo list 告诉自己该做什么,有一个 stop doing list 知道不该做什么也非常重要。期间的经历体会深刻的有这么几点:

  1. 工作和生活是长跑,不是短跑,如果没有朝目标持续努力,就算偶尔冲刺那么几下,也只是像一壶没有持续加热的水,永远也烧不开。记的在高速路上开车的经历,当我全神贯注,摒弃凝神,油门踩到底的一通变道和超车,把前面两公里的车都超了个遍,可一不留神放慢了速度后,没过多久就发现刚被甩在身后的那几辆车又纷纷跑到了我前面。

    颜真卿在古诗里写到:

    ​ 三更灯火五更鸡,正是男儿读书时。

    ​ 黑发不知勤学早,白首方悔读书迟。

    后来毛主席写了自己的看法:苟有恒,何必三更眠五更起;最无益,莫过一日曝十日寒。

  2. 一万小时法则和十万行代码的说法让我明白勤奋和努力的重要性。但专业知识的成长,和写的代码量没有绝对的线性关系,我倒觉的能力的提升和思考了多少,解决了多少问题,沉淀了多少有最直接的关系;

  3. 如果整天疲于应付工作,慌慌张张的加班加点完成需求,每天下班后累的只想刷会儿手机倒头就睡,这样的生活过了一个月、半年、一年,甚至两年以后,回顾这两年的工作里学到了什么,提升了多少的时候,如果觉的做的只是大量重复的工作,成长很少,多半是需要放慢节奏,思考些东西了。只有重复的工作,没有思考、沉淀和提高,和毛驴拉磨,原地打转没有太大区别。

  自己的四个学习阶段走的不一定牢固,但如果往长远考虑,到了能完成任意功能的开发以后,下一阶段该怎么走才能进一步提高呢,这也是自己最近一直在思考的问题。

  综合考虑,加上一些前辈的指引,觉的要想有进一步大的提升,就要选一个 Android 细分领域专研下去了。基于平台的 API 做应用开发,并不是一个可以走的多远的方向,真正有价值的地方在于与具体的业务方向结合,比如:音视频,安全,智能硬件,深度学习,大数据,金融、即时通信等。在具体的业务领域,慢慢沉淀下来,用自己的努力和时间换来对领域知识的深入理解和积累,逐渐从一个开发小白走向最懂这个行业的专家。日积月累,自己的护城河足够宽、足够深,才能和别的开发者区分开来,在激烈的竞争中保持绝对的优势。

  记的一年前一名用户在 app store 上给我们的产品打了个一星差评,原因是他在我们平台上看电影,用的流量比在 Netflix 上多很多。后来我在两个平台上选了两部同样的电影播放做对比,虽然最终结果没有太大差别,但我们的产品在弱网下的卡顿,缓冲等播放体验和 Netflix、hulu 的播放体验是有不少差距的,因为对音视频底层知识一无所知,也就不知道该怎么改善这个问题。作为一家流媒体公司,产品的核心就是内容和观影体验,如果我们的播放体验做的更好一些,就能给用户带来更加流畅和顺滑的观影体验。这也许是自己选择音视频作为沉淀方向的驱动力。

  种一棵树,最好的时间是十年前,其次是现在。既然选定了方向,就一砖一瓦开始动工。