我从事Android开发的前三年只在一家公司待过,每天都做着几乎相同的工作,做的项目也是较为简单的小项目,一两个人就能承担的应用开发,用的也是相对简单,没有什么核心竞争力的技术。
但是这三年来,我接触到了不少的公司。它们有改革的老国企,有刚刚成立的创业公司,也有已经上市的公司。不同类型、不同行业、不同规模的企业,必然导致工作内容、团队、企业文化的不同。
相比较我待的第一家公司来说,后面的几家公司更加尊重我的个人看法,这也是我决定跳槽的原因。虽然我也非常感谢我的第一家公司给予我更多的机会去成长,但是我们出来工作本质上还是要挣钱糊口的,光谈理想而不给予现实的恩惠,一味强调你是公司培养出来的,时间长人是会“饿死”人的,自然也就留不住人了。
老旧国企
俗话说:“跳槽是有成本的”。由于工作内容、团队的变化,我需要重新学习特定行业的专业知识,重新建立自己的同事关系,这就要求我需要非常强大的学习能力和适应能力。
我的第一次跳槽相对来说是比较失败的,因为没有经验,我居然跳槽到了一个严重老龄化的前国企公司,这是一家做汽车硬件的企业。周围的同事平均年龄35岁以上,每天他们讨论的话题都是自己家小孩的学习教育,这让我这个连女朋友都没有的单身汪情何以堪。更让我无法适应的是它那非常慢的工作节奏,一周的工作半天就完成了。剩下的时间完全不知道做什么…真的是无事可做。
创业公司
后来我被一位非常赏识我的老板看中,加入到他的创业公司,成为了一名创业者。这是一家从事儿童可穿戴设备的公司,作为最早加入的员工之一,我可谓是见证了一家创业公司从起步到发展再到衰落的全过程,而这仅仅只需要一年的时间。
创业公司的坑虽然不少,不过这对我们个人的成长还是非常有价值的。在创业公司的这一年,我做了很多普通程序员这一辈子可能都无法触及的工作内容,也积累了很多人生哲学。
- 1.应用开发框架的搭建
- 2.产品需求讨论
- 3.企业文化建设
- 4.企业税务处理
- 5.应用的上架和运营
- 6.产品生产、组装、销售和售后维护
- 7.企业商标、专利注册
在创业公司,职位没有明显的划分,很多时候你需要做很多与你岗位无关的工作。从好的角度来说,这可以极大地丰富个人的人生阅历,提升一个人独立思考、自主学习和解决问题的能力。如果你的经济能力有一定的支持,那么去创业公司历练一把也是非常不错的,万一它日后发展成为一家独角兽呢?
上市公司
之后我来到了我现在待的这家公司。比起我之前待的创业公司就我一个Android开发,在这里我算是找到了失去很久的团队归宿感。大公司除了人多以外,工作的强度和难度也大大地增加,加班当然也成为了家常便饭,当然与之相对应的福利也是提升了不少。
在大公司,技术水平并不是决定这个人发展潜力的决定性因素。要知道大公司最不缺的就是人才,能进大公司的,哪个不是有两把刷子的呢?对于大公司而言,他们需要的是拥有极强责任心以及任劳任怨的员工,能否承担某一模块功能的稳定性就直接决定了你的去留。
除此之外,沟通能力也是非常重要的能力。因为大公司的项目功能相对复杂,参与的人员众多,很多复杂的问题往往可以通过沟通予以解决。而且及时表达出你的想法,主动承担一些紧急的任务都能给你很多的加分。可以说在大公司的这些日子里,让我学习和领悟到了很多非技术方面的能力:
- 语言表达能力(大公司经常需要在很多人面前发言)
- 与不同人沟通的能力
- 复杂问题的定位和解决能力
- 团队协作能力
- 帮助(指导)他人的能力
- 团队建设和管理的能力
上面的这些能力,很多是仅仅靠撸码是无法获取到的。
心态上发生变化
我从事Android开发的前三年,之所以那么拼命地工作和学习,一部分是出于兴趣,而另一部则是想要证明自己。
- 对于公司而言:我要证明自己是公司不可或缺的人才
- 对于领导而言:我要证明自己的技术水平是组内第一
- 对于家人而言:我要证明自己有能力养活自己
- 对于女友而言:我要证明自己有能力独自照顾一个人
**马斯洛需求层次理论告诉我们,当一个人的需求得到满足之后,他会追寻更高层次的需求。**当这些都被我一一证明了之后,一切都变了。
证明自己已经显得不那么的重要,追求自身价值的体现成为了我现阶段的目标。于是,我离开了当年的那家公司,放弃了父母规划的道路,离开了女友,开始遵从着自己的内心,寻找人生的答案…
此时的我,需要的并不是别人的肯定。我并不会在意别人的赞赏或者是诋毁,我所做的都是发自内心的事情,而不随外物而影响。于是,我选择成为了一名开源项目的创作者和布道者。将我平时积累的技术经验全部分享出来,目的就是帮助全世界所有热爱技术的人士,同时让我的价值在别人身上得到体现。
在这三年内,我积极维护我开源的项目,同时还在各大技术社区和论坛上发布一些相关的技术文章,同时还运营了自己的微信公众号。近期,我还积极创作一些开源技术相关的视频。这样做的目的,一方面是可以把自己的经验和技术分享给更多需要的人,让知识发挥它更大的作用(知识在于传承), 另一方面也是满足了自己的虚荣心,让自己的价值得以体现。
- 夹带私货,欢迎来我主页关注,点赞,可点击上文蓝色字直达。
思维方式发生变化
从事Android的前三年,我的想法是相对激进的。那时的我,对所有的新技术都是那么的趋之若鹜,而对于那些相对陈旧的技术是嗤之以鼻。我天真地认为那些新技术都是革命性的,都需要去掌握、学习并运用到实际的工作中去,而那些旧技术就是需要替代的对象。
于是,我就不计代价,大张旗鼓地把公司之前使用的旧技术一股脑地都准备换了,而当时领导的处处阻挠在我看来就是技术上的不思进取,中间还闹了不少矛盾,这也成为了我后来离开公司的原因之一。现在想来,当时的我想法真的是非常的幼稚!
技术不是唯一的生产力
在创业公司的那一年里,让我彻彻底底地明白了,技术并不是唯一的生产力。一家公司的发展,更多靠的是强力的融资能力(资本),强大的渠道推广能力(营销),很多时候技术只是其中的一部分,充当的仅仅是工具人的角色。
当年那个极力崇尚技术至高无上的青年被现实狠狠地教育了一把。那时的我认为只有纯做技术的才能被人尊重,而那些在产品线做业务、测试,或者跑业务跑市场的人都是不值一提的。然而也正是我那时瞧不起的那些人,直接导致了我待的那家创业公司的衰败。
技术没有好坏
新技术一定比旧技术好吗? 如果这个问题在两年前问我,那么我的回答一定是肯定的!但如果你现在问我,我的回答就不一样了。任何的新技术一定是在旧技术上有了一些改进,否则它就不为是一项新技术。那么我们为何不直接使用它呢?因为这里我们考虑的更多是成本的问题:
- 新技术必然带来更高的学习成本
- 新技术的引入必然带来更多的替代成本
- 新技术如果尚未成熟,当遇到一个坑时必然带来更大的解决成本
- 如果使用新技术遇到一些无法解决的问题,会带来一些风险成本
当一项技术的使用所带来的收益要远远大于它带来的成本时,这个时候我们才会考虑采用这项技术.可以看到上述我列举的成本对于大公司来说是相当巨大的:
- 大公司的人员较多,新技术的学习成本非常高(不可能全裁了重招吧)
- 大公司的项目通常偏大,替换的成本相对较高
- 大公司产品的功能较为复杂,碰到一些没人遇到过坑也是常有的事
- 大公司对项目的风险一般是零容忍的:宁可不做也不能冒风险
这也是为什么很多大公司不愿意采用新技术,而是选择沿用之前成熟的技术的原因。所以我们在思考一项技术能否被我们采用的时候,压根就没有考虑过这项技术的新旧以及高低贵贱。至于那些成天在技术社区里发一些技术焦虑文章的人,我觉得社区就应该屏蔽他们,以免误导那些刚入门的小朋友。
追本溯源
两年前我在学习和使用技术的时候,更多的是遵循拿来主义和实用主义,天真地认为我会用这项技术就等于我掌握了这项技术。之所以这么想,归结原因还是见的世面太小了。之前待的小公司,业务并没有那么复杂,用例也没那么多,遇到的情况也相对简单单一,所以简单地使用基本就完事了。
然而,到了大公司之后,那业务的复杂程度以及用例覆盖到的场景远远是你所想象不到的。很多时候,一些问题你是不能通过简单的使用就能解决的。尤其是发生一些诡异的问题时,你不阅读源码了解其实现原理,是无法进行解释的。
举个例子,我们做Android的都用过RecyclerView,可你有阅读过RecyclerView的源码,了解其缓存机制吗?相信你看完RecyclerView的源码之后,你就会知道,其实你所谓的掌握RecyclerView,只不过是RecyclerView的冰山一角。
学习一项技术,如果你只是掌握了如何去使用,那么这只是你迈出去的第一步,后面更重要的是要追本溯源,深究其底层实现原理,这个时候你才会发现,很多技术原来是相通的。
最后
作为一名Android开发的热爱者,只要Android不死,我就会一直在Android开发的道路上前行。无论前途如何曲折,我相信Android会变得更加美好!同时我也愿意持续的帮助更多想在Android这条道路上持续走下去的朋友,这也是我一直坚持写作,做技术和经验分享的初衷。
最后的话我想将上文中提到,我这些年来整理的一套Android进阶学习方法及笔记分享出来,如果你瞧的上的话,记得三连这篇文章支持下我,然后在文末自取便是!
- 架构师筑基必备技能
目前Android APP开发主流语言就是Java语言,Java语言最大的特性就是提高了软件的交互可能性,可以说安卓手机几乎所有应用程序都是利用Java语言来进行编写的。
- 设计思想解读开源框架
随着互联网企业的不断发展,产品项目中的模块越来越多,用户体验要求也越来越高,想实现小步快跑、快速迭代的目的越来越难,插件化技术应用而生。如果没有插件化技术,美团、淘宝这些集成了大量“app”的应用,可能会有几个g那么大。
所以,当今的Android移动开发,不会热修复、插件化、组件化,80%以上的面试都过不了。
- 360°全方位性能调优
在不同层次的开发工程师手里,因为技术水平的参差不齐,即使很多手机在跑分软件性能非常高,打开应用依然存在卡顿现象。
另外,随着产品内容迭代,功能越来越复杂,UI页面也越来越丰富,也成为流畅运行的一种阻碍。综上所述,对APP进行性能优化已成为开发者该有的一种综合素质,也是开发者能够完成高质量应用程序作品的保证。
文末
初级工程师拿到需求会直接开始做,然后做着做着发现有问题了,要么技术实现不了,要么逻辑有问题。
而高级工程师拿到需求会考虑很多,技术的可行性?对现有业务有没有帮助?对现有技术架构的影响?扩展性如何?等等…之后才会再进行设计编码阶段。
而现在随着跨平台开发,混合式开发,前端开发之类的热门,Android开发者需要学习和掌握的技术也在不断的增加。
通过和一些行业里的朋友交流讨论,以及参考现在大厂面试的要求。我们花了差不多一个月时间整理出了这份Android高级工程师需要掌握的所有知识体系。你可以看下掌握了多少。
混合式开发,微信小程序。都是得学会并且熟练的
这些是Android相关技术的内核,还有Java进阶
高级进阶必备的一些技术。像移动开发架构项目实战等
Android前沿技术;包括了组件化,热升级和热修复,以及各种架构跟框架的详细技术体系
以上即是我们整理的Android高级工程师需要掌握的技术体系了。可能很多朋友觉得很多技术自己都会了,只是一些新的技术不清楚而已。应该没什么太大的问题。
而这恰恰是问题所在!为什么别人高级工程师能年限突破30万,而你只有十几万呢?
就因为你只需补充你自己认为需要的,但并不知道企业需要的。这个就特别容易造成差距。因为你的技术体系并不系统,是零碎的,散乱的。那么你凭什么突破30万年薪呢?
我这些话比较直接,可能会戳到一些人的玻璃心,但是我知道肯定会对一些人起到点醒的效果的。而但凡只要有人因为我的这份高级系统大纲以及这些话找到了方向,并且付出行动去提升自我,为了成功变得更加努力。那么我做的这些就都有了意义。
喜欢的话请帮忙转发点赞一下能让更多有需要的人看到吧。谢谢!
易造成差距。因为你的技术体系并不系统,是零碎的,散乱的。那么你凭什么突破30万年薪呢?
我这些话比较直接,可能会戳到一些人的玻璃心,但是我知道肯定会对一些人起到点醒的效果的。而但凡只要有人因为我的这份高级系统大纲以及这些话找到了方向,并且付出行动去提升自我,为了成功变得更加努力。那么我做的这些就都有了意义。