35aae7c2a38986663c0132a3d6f22082
004 | 我是如何发展成全栈的

我2009年刚毕业的时候是做Java Web的,那时候还没有什么前后端分离,即前后端是一体的,并没有前端工程师和后端工程师之分。那时候流行的框架就是Struts+Spring+Hibernate,简称SSH。如果按全栈=前端开发+后端开发的定义来说的话,那时候的工程师都是全栈工程师,而且那时候真的是前端、后端、数据库、运维全都搞。但是,就算如此,按照专栏《发刊词》里所说的标准来衡量的话,那时候的我也是还没达到合格全栈的要求的,因为技术上也还没精通,不少问题依然无法独立解决。

不过,有一点需要明白,今天的Web全栈和那时候的Web全栈是不一样的。放到今天,如果你依然只精通SSH框架体系就说自己是全栈工程师,估计没几个人会认同。因为今天的Web全栈技术和2009年那个时代的全栈技术已经完全不同了。同样的,今天的App全栈和五年十年后的App全栈也肯定会不一样,所以我们在全栈之路上也应该要不断精进、不断往上走,不能只停留在精通各种技术栈的层面上。下面,我将以我自己的经历和经验为例,简单聊聊在进阶全栈的路上要如何逐步精进。

从确定长远的目标开始

你必须先想清楚自己为什么想发展成全栈,尽量往深远一点去想。这个长远的目标必须是你自己发自内心热烈渴望想要达到的,而且应该是努力个三五十年有能力达成的目标。当然,具体需要多少年还是因人而异,但最少不要少于三年,最长也尽量不要长于十年。比如说,你的目标可以是创业、成为CTO、做技术管理、做架构师等这些努力个几年有能力实现的,但不要说你的目标是先赚它一个亿、或成为中国首富、世界首富这种有可能努力一辈子也很难实现的幻想。另外,如果说目标是为了拿更高的工资,这样的目标其实并不好,比如说明年公司给你加薪了,加了500块,你的目标是否就算实现了呢?不要忘了,好的目标应该满足SMART原则,你的目标应该更明确,比如可以是:三年内年薪达到50万。

我在2011年的时候就确定了一个长远的目标:十年内创业成功。要想创业,能力上至少应该要达到五级工程师的第三级才行,即能独立设计和实现产品,并且在市场上获得成功。就是说要懂得如何设计和实现优秀的产品,以及如何推广产品,还要了解市场。要具备技术技能、产品技能、营销技能等。

我是先有了这个目标之后才转行到了移动互联网,因为那时候正是移动互联网的朝阳期,存在很多创业机会,所以就一头扎了进去。不过,那时候,自己没钱、没资源、没能力,不可能马上自己创业,所以就去寻找一家合适的初创公司,先跟着别人参与创业。另外,移动互联网的产品,主要就是移动App,而且因为熟悉Java语法,所以就选择了Android作为登陆点。

设置阶段性目标

我想在这里引用古典《超级个体》所提出的车日路模型:车就是你自己,日就是你的长远目标,路则是去往那个目标的路径。如下图所示:

不同的目标,路径自然就不同,这一点毋庸置疑。但就算是相同的目标,因每个人的起点和能力不同,合适的路径也会有所不同。如果你是一辆小轿车,那去走越野路则不合适。什么样的车就走什么样的路,所以,要达到目标应该要选一条适合自己的路。当然,很多时候,在路途期间你是需要不断升级你的车的,这样你才能走得更快更远。另外,去往那个长远目标的路径——即阶段性目标越清晰越好,这样就不会走很多弯路。如果你自己无法想清楚应该走怎样的路,也可以去请教下导师。如果依然无法制定出清晰的路径,那至少离你当前最近的阶段性目标要明确,然后在路上不断去完善你的路径。

我则是走过弯路的,因为对自己的路径设置得不够清晰。我的路径是在沿途中逐步调整和清晰起来的,道理虽然有些曲折,但因为方向很明确,所以就没有偏离目标。那么,为了实现我“十年内创业成功”的长远目标,我很明确知道第一个大的阶段性目标就是:能够自己做出优秀的产品。那么,我就需要知道怎样的产品才算优秀,以及应该如何去实现。不过,我没有给这个阶段性目标设置时间,因为我那时候并不清楚需要多少时间才能达成。不过,我把目标再进行了拆解,分技术和产品两个方向,技术上要往架构师方向发展,产品上要具备产品经理的能力,具体来说,拆解后的阶段性目标主要有以下几个:

  1. 在Android应用开发领域达到精通;
  2. 具备iOS应用开发能力;
  3. 具备架构能力;
  4. 具备产品设计能力;
  5. 具备UI设计能力。

每个阶段性目标看起来好像是相互独立的,但实际上,后面的学习都是在前面的基础上去迭代的,是有关联性的,这和单独发展每个独立领域的专家们不同。举个例子,当你做产品设计思考要做某一个功能时,有了前面技术的基础,你就能预估实现这个功能需要多少成本,然后可以根据实际情况调整功能要做到什么样的程度,这一点,不懂技术的产品经理是很难把控的。再例如,做UI设计时,有了技术的基础也知道一个UI效果实现起来需要多少成本,而有了产品设计基础的话则更懂得如何设计符合产品定位的UI作品。当然,最重要的是,具备了产品设计和UI设计的工程师,就知道如何去做正确的事,而不只是正确地做事。因此,当全部实现这些目标后,自然而然也具备了全栈的能力。

不过,我也算是幸运的,因为遇到了不错的上司,不管是在2011年刚开始参与创业时,还是在现在的公司,总是给我机会让我能够全面发展,从而我才有能力根据我的经验给你们提供指导,帮助你们少走弯路。

精通Android应用开发之路

请注意,我的目标是精通Android应用开发,不是精通Android游戏开发,更不是精通Android系统开发,要清楚其中的差异。何谓精通,其实最简单的标准还是:是否有能力独立解决Android应用开发中的任何问题。随着Android系统的不断升级、各种技术框架的不断出现和成熟、以及应用本身的不断完善,需要解决的问题也会不同。

其实,现在还是有不少人对于精通Android应用开发存在误区。他们觉得熟悉各种系统库、开源库的用法就是精通了,对于这些库背后的实现原理则是不甚了解,知其然不知其所以然。这些人开发那些初期或短期的应用一般不会有太大问题,因为初期一般要求能实现功能就可以了,对质量和性能等要求不会太高。但随着应用的不断迭代,对质量和性能要求越来越高的时候,很多问题就会逐渐暴露出来,而且他们通常还不知道应该如何解决这些问题。他们一般工作了两三年后,就会开始进入瓶颈期而很难突破。想要突破就必须要去了解那些库背后的原理,虽然没必要去重造轮子,但你只有了解轮子是怎么造的,当轮子出现BUG时才知道怎么修,以及当前轮子无法满足需求时知道怎么造更好的轮子。

top Created with Sketch.