4

做了五年Android,我顿悟了…

 2 years ago
source link: http://www.androidchina.net/11723.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

两年前, 我写过一篇《我的三年Android开发总结》,时光流逝, 转眼间我已经从事Android开发已五年有余,很庆幸我依然从事着我热爱的Android开发.

我们做技术开发的人都有个习惯,那就是喜欢不定期地进行总结,当然我也不例外.我有个特别的爱好,那就是把我一年前的代码拿出来和我现在写的代码进行对比,看是否有所长进.

一个人回首过去,如果发现现在的自己和一年前或者更久前的自己没有任何积极的变化的话,那么你这些年就算是虚度光阴了.

回首我这五年, 如果说前三年我是野蛮生长,疯狂撸码,较为浮躁的三年,那么这两年我就是沉下心来,潜心修炼积累经验的两年.

工作环境发生变化

我从事Android开发的前三年只在一家公司待过,每天都做着几乎相同的工作,做的项目也是较为简单的小项目,一两个人就能承担的应用开发,用的也是相对简单,没有什么核心竞争力的技术.

但是这两年来,我接触到了不少的公司.它们有改革的老国企,有刚刚成立的创业公司,也有已经上市的公司.不同类型、不同行业、不同规模的企业,必然导致工作内容、团队、企业文化的不同.

相比较我待的第一家公司来说,后面的几家公司更加尊重我的个人看法,这也是我决定跳槽的原因.虽然我也非常感谢我的第一家公司给予我更多的机会去成长,但是我们出来工作本质上是出于经济目的的,光谈理想而不给予现实的恩惠,一味强调你是公司培养出来的,时间长了是留不住人的.

俗话说,跳槽是有成本的.由于工作内容、团队的变化,我需要重新学习特定行业的专业知识,重新建立自己的同事关系,这就要求我需要非常强大的学习能力和适应能力.

我的第一次跳槽相对来说是比较失败的,因为没有经验,我居然跳槽到了一个严重老龄化的前国企公司,这是一家做汽车硬件的企业,周围的同事平均年龄35岁以上,每天他们讨论的话题都是自己家小孩的学习教育,这让我这个连女朋友都没有的单身汪情何以堪.

更让我无法适应的是它那非常慢的工作节奏,一周的工作半天就完成了,剩下的时间完全不知道做什么…真的是无事可做.

后来我被一位非常赏识我的老板看中,加入到他的创业公司,成为了一名创业者.这是一家从事儿童可穿戴设备的公司,作为最早加入的员工之一,我可谓是见证了一家创业公司从起步到发展再到衰落的全过程,而这仅仅只需要一年的时间.

创业公司的坑虽然不少,不过这对我们个人的成长还是非常有价值的.在创业公司的这一年,我做了很多普通程序员这一辈子可能都无法触及的工作内容,也积累了很多人生哲学.

  • 1.应用开发框架的搭建.
  • 2.产品需求讨论.
  • 3.企业文化建设.
  • 4.企业税务处理.
  • 5.应用的上架和运营.
  • 6.产品生产、组装、销售和售后维护.
  • 7.企业商标、专利注册.

在创业公司,职位没有明显的划分,很多时候你需要做很多与你岗位无关的工作.从好的角度来说,这可以极大地丰富个人的人生阅历,提升一个人独立思考、自主学习和解决问题的能力.如果你的经济能力有一定的支持,那么去创业公司历练一把也是非常不错的,万一它日后发展成为一家独角兽呢?

之后我来到了我现在待的这家公司.比起我之前待的创业公司就我一个Android开发,在这里我算是找到了失去很久的团队归宿感.大公司除了人多以外,工作的强度和难度也大大地增加,加班当然也成为了家常便饭,当然与之相对应的福利也是提升了不少.

在大公司,技术水平并不是决定这个人发展潜力的决定性因素.要知道大公司最不缺的就是人才,能进大公司的,哪个不是有两把刷子的呢?对于大公司而言,他们需要的是拥有极强责任心以及任劳任怨的员工,能否承担某一模块功能的稳定性就直接决定了你的去留.除此之外,沟通能力也是非常重要的能力.因为大公司的项目功能相对复杂,参与的人员众多,很多复杂的问题往往可以通过沟通予以解决.而且及时表达出你的想法,主动承担一些紧急的任务都能给你很多的加分.

可以说在大公司的这些日子里,让我学习和领悟到了很多非技术方面的能力:

  • 语言表达能力(大公司经常需要在很多人面前发言).
  • 与不同人沟通的能力.
  • 复杂问题的定位和解决能力.
  • 团队协作能力.
  • 帮助(指导)他人的能力.
  • 团队建设和管理的能力.

这也是为什么我去年写了那么多经验感悟文章的原因.而上面的这些能力,很多是仅仅靠撸码是无法获取到的.

心态上发生变化

我从事Android开发的前三年,之所以那么拼命地工作和学习,一部分是出于兴趣,而另一部则是想要证明自己.

  • 对于公司而言: 我要证明自己是公司不可或缺的人才.
  • 对于领导而言: 我要证明自己的技术水平是组内第一.
  • 对于家人而言: 我要证明自己有能力养活自己.
  • 对于女友而言: 我要证明自己有能力独自照顾一个人.

马斯洛需求层次理论告诉我们, 当一个人的需求得到满足之后,他会追寻更高层次的需求.

当这些都被我一一证明了之后,一切都变了.证明自己已经显得不那么的重要,追求自身价值的体现成为了我现阶段的目标.

于是,我离开了当年的那家公司,放弃了父母规划的道路,离开了女友,开始遵从着自己的内心,寻找人生的答案…

此时的我,需要的并不是别人的肯定.我并不会在意别人的赞赏或者是诋毁,我所做的都是发自内心的事情,而不随外物而影响.

于是,我选择成为了一名开源项目的创作者和布道者.将我平时积累的技术经验全部分享出来,目的就是帮助全世界所有热爱技术的人士,同时让我的价值在别人身上得到体现.

在这两年内,我积极维护我开源的项目,同时还在各大技术社区和论坛上发布一些相关的技术文章,同时还运营了自己的微信公众号.近期,我还积极创作一些开源技术相关的视频.这样做的目的,一方面是可以把自己的经验和技术分享给更多需要的人,让知识发挥它更大的作用(知识在于传承), 另一方面也是满足了自己的虚荣心,让自己的价值得以体现.

思维方式发生变化

从事Android的前三年,我的想法是相对激进的.那时的我,对所有的新技术都是那么的趋之若鹜,而对于那些相对陈旧的技术是嗤之以鼻.我天真地认为那些新技术都是革命性的,都需要去掌握、学习并运用到实际的工作中去,而那些旧技术就是需要替代的对象.

于是,我就不计代价,大张旗鼓地把公司之前使用的旧技术一股脑地都准备换了,而当时领导的处处阻挠在我看来就是技术上的不思进取,中间还闹了不少矛盾,这也成为了我后来离开公司的原因之一.现在想来,当时的我想法真的是非常的幼稚!

技术不是唯一的生产力

技术是生产力,但并不是唯一的生产力.

在创业公司的那一年里,让我彻彻底底地明白了,技术并不是唯一的生产力.一家公司的发展,更多靠的是强力的融资能力(资本),强大的渠道推广能力(营销),很多时候技术只是其中的一部分,充当的仅仅是工具人的角色.

当年那个极力崇尚技术至高无上的青年被现实狠狠地教育了一把.那时的我认为只有纯做技术的才能被人尊重,而那些在产品线做业务、测试,或者跑业务跑市场的人都是不值一提的.然而也正是我那时瞧不起的那些人,直接导致了我待的那家创业公司的衰败.

技术没有好坏

技术没有好坏,更没有高低贵贱,有的只是合适与不合适.

新技术一定比旧技术好吗? 如果这个问题在两年前问我,那么我的回答一定是肯定的! 但如果你现在问我,我的回答就不一样了.

任何的新技术一定是在旧技术上有了一些改进,否则它就不为是一项新技术.那么我们为何不直接使用它呢?因为这里我们考虑的更多是成本的问题:

  • 新技术必然带来更高的学习成本.
  • 新技术的引入必然带来更多的替代成本.
  • 新技术如果尚未成熟,当遇到一个坑时必然带来更大的解决成本.
  • 如果使用新技术遇到一些无法解决的问题,会带来一些风险成本.

当一项技术的使用所带来的收益要远远大于它带来的成本时,这个时候我们才会考虑采用这项技术.

可以看到上述我列举的成本对于大公司来说是相当巨大的:

  • 大公司的人员较多,新技术的学习成本非常高(不可能全裁了重招吧)
  • 大公司的项目通常偏大,替换的成本相对较高.
  • 大公司产品的功能较为复杂,碰到一些没人遇到过坑也是常有的事.
  • 大公司对项目的风险一般是零容忍的:宁可不做也不能冒风险.

这也是为什么很多大公司不愿意采用新技术,而是选择沿用之前成熟的技术的原因.

所以我们在思考一项技术能否被我们采用的时候,压根就没有考虑过这项技术的新旧以及高低贵贱.至于那些成天在技术社区里发一些技术焦虑文章的人,我觉得社区就应该屏蔽他们,以免误导那些刚入门的小朋友.

当你抛开事物的表面,去追寻其本质之后,你会发现很多东西都是相通的.

两年前我在学习和使用技术的时候,更多的是遵循拿来主义和实用主义,天真地认为我会用这项技术就等于我掌握了这项技术.

之所以这么想,归结原因还是见的世面太小了.之前待的小公司,业务并没有那么复杂,用例也没那么多,遇到的情况也相对简单单一,所以简单地使用基本就完事了.

然而,到了大公司之后,那业务的复杂程度以及用例覆盖到的场景远远是你所想象不到的.很多时候,一些问题你是不能通过简单的使用就能解决的.尤其是发生一些诡异的问题时,你不阅读源码了解其实现原理,是无法进行解释的.

举个例子,我们做Android的都用过RecyclerView,可你有阅读过RecyclerView的源码,了解其缓存机制吗?相信你看完RecyclerView的源码之后,你就会知道,其实你所谓的掌握RecyclerView,只不过是RecyclerView的冰山一角.

学习一项技术,如果你只是掌握了如何去使用,那么这只是你迈出去的第一步,后面更重要的是要追本溯源,深究其底层实现原理,这个时候你才会发现,很多技术原来是相通的.

作为一名Android开发的热爱者,只要Android不死,我就会一直在Android开发的道路上前行.无论前途如何曲折,我相信Android会变得更加美好!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK