一、对Android工程师来说,2017年是怎样的寒冬
起因:这次大家都感觉工作比较难找了,这是怎么发生的呢,又是什么导致的呢?
初创公司倒闭,大公司裁员,这些人就会闲下来,所以工作会变得比较难找。由于这个原因,所以这次的寒冬是有特点的,靠等是等不过去的,只能是主动出击。
因为这不是现实中的冬天,只是一个比喻而已。实际上是因为人员过剩,导致的竞争加剧。以前由于大家都在创业,所以大家都往这个行业涌,工资高又缺人嘛,那么就必然出现新手很多的局面。创业公司对此事是不在意的,或者说不得不在意。因为由不得你挑,人不够用啊,而现在市场冷静了,创业的人少了很多,那他们之前的员工就被剩了下来,另外任何事情它的结果,总是要比起因慢一步反应,在互联网市场变冷的时候,工程师的数量并没有相应减少。之前为市场提供了很大帮助的培训机构,他们还在继续的量产初级工程师,而且当年报考了工作比较好找的“计算机专业”的大学生,他们也还在一届一届的毕业,有些还没毕业,他们就一届届的出现在市场上。这就加剧了人员过剩的状况。人多羹少怎么办,竞争呗!
这种状况就是大家遇到了一个共同的槛,槛相当于一个筛选器,垮过去的人就垮过去了,没垮过去的人就被淘汰了。当这波筛选过程结束,“冬天”就结束了。这个过程可能不会很快,可能一两年吧,但你是不能靠等的啊!想着熬过这段艰难期就行了,这样不行,因为这次相当于是一个末尾淘汰的竞赛,就像高考一样,如果熬的话对你自己是不利的。
这就是前面所说的,靠等不行,必须主动出击,自己去击破这个点。
二、什么样的人能在这个冬天能轻松舒适的生存下来?
实际上列举这些人,没有什么指导性的意义,但你可以感受一下自己在不在这个行列,或者离他们有多远。
一个词概况——强人!前面说了这是一个末尾淘汰的事。所以强人是不怕这个冬天的,他们甚至感觉不到冬天的到来。可能你找一个这样的人问一下,现在的工作好难找啊,你感觉到了吗?他肯定说,有吗?没有啊。换句话说,这个冬天是有针对性的,他只针对经验相对少的工程师,对于高级人员来说感觉不到。事实上现在还有很多团队,不管是大公司还是小团队,都还在四处寻觅中高级工程师,但是找不着。
强人是我说的一个词,那么强人是怎么强法呢。主要就是两点,一个是能做出别人做不出来的东西;另外他做出别人能做出的东西时,他比别人做得快。
他们具体是谁呢,主要有这么几类人:1、大公司的多数人,你别觉得BAT的人都很平庸,他们多数人的水平还是很不错的,因为毕竟大公司筛选人是有它的标准的。2、第二类是那些在小公司但比较精的公司,小而精的公司的人。其它这两类人是很相似的,都是被公司的招聘标准已经衡量过的人。他们的水平一般来说都是足够的。3、除此之外还有一些小型创业微型创业公司的人,他们可能对自我提升比较注重,并而掌握了自己的方法,然后他们就在不停的进步。
这几类人,他们在这个冬天就会很舒坦的生存下来,或者说他们感觉不到。
前面我说了,列举这些人并没有什么指导性意思,我说这个主要是你可以给自己大概定个位,心里大致有个谱我是什么位置,我和他们是一个行列不是比他们差点差多少。
这个问题就到这了,就是有哪些人能比较轻松舒适的生存下来。
三、怎样可以成为这样的 Android 工程师呢?
这个可能是今天的重点。我先来个概况,主要有三点,一点是你有提升的意识,一点是你有好的时间安排,第三就是你要有具体的合适的计划。
第一点意识,连想法都没有别人怎么帮你啊,不过你们既然来了,明显都是有提升的意识,所以这个我也不多说。
第二点时间安排,这个每个人都不太一样,有的人朝九晚五正常上班,有的人996,有的人单身,有的人要陪男朋友、女朋友,有的人已经有家有孩子,时间花的多就提升的快,花的少就提升的慢,只要花时间就可以。
接下来第三点,具体的规划。这个是我要重点说的,因为这是最关键的也是最难的。而且我想大家来,主要是冲着这点,我想变强,我愿意花时间,花精力,但我不知道该怎么办。很多个甚至不是刚刚发现这个问题,很多人发现自己不能像当年刚刚入行那样,每天都在学到新东西,每天都在进步,而是不知道从什么时候开始,自己慢慢进入了停滞状态。没有技术的进步了,有的人经历这种状态甚至已经两三年了。但是感觉没什么办法,好像自己遇到了瓶颈一样经常尝试学习很多天,甚至很多次下来都发现自己并没有什么实质性的进步,怎么办呢,我告诉你们怎么办。在说怎么办之前,我必须得先说一下为什么,我得说这是正常的这非常正常,因为你进步了,初入门的时候学的东西很简单,什么都是知识比较容易有提升的感觉。而在达到一定水平之后学习知识就会变得困难,这是很正常的。但这就是所谓的瓶颈,你不是好像遇到了瓶颈,你是真到了瓶颈,如果你突破了,你就会进入新的高速提升的阶段,就会在一段时间内行云流水的学习进步,但能不能突破瓶颈怎么突破往往是最大的问题。
接下来说怎么办,每个人都有技术瓶颈大家各不相同,我也没有办法解决每个人的问题,但是对于这次所谓的寒冬,感受到了冬天的人,感觉冬天到了也就是发现现在竞争压力变大了,工作很难找,对这些人来说要突破瓶颈,在人群中脱颖而出,最关键的只有一点——补基础。
先说下基础是什么,有很多人经历过大公司面试,大公司面试就是考基础,考数据结构考算法什么的,为什么?基础到底有什么用,有人会觉得我们是做事的,要这么多基础干什么,能把事情做出来不就行了。
我举个例子,我小时候喜欢跟我爸妈去广场上玩,我在广场上有一段时间会看见一个武术教练带着一帮小孩教武术,他们怎么学的呢,先练扎马步练好几天,然后练基本拳法,然后是各种格斗的招式,那么扎马步和基本拳法这两个是比较基本的东西和打架基本的招式哪个有用呢?你这么想如果两个人,每个人只学一天,一个学扎马步,一个直接学格斗,第二天让两个人面对面打,谁赢?肯定是那个学格斗的。但是如果学一年,同样是两个人,一个先学扎马步再学习基本拳法,然后再学习更高级的招式,而另外一个人一年都在学习高级招式,这个时候两个人再打谁能赢呢,那就第一个人。这就是基础的作用,基础本身并不能给你带来看得到的能力,但它能够让你再学习更高级的东西,有更高的效率、更快的速度。而且基础的强弱虽然不能给你一个可见的高度,但它在一定程度上决定了你能达到的高度。
我再说回 Android 开发。数据结构和算法能有什么用。再你连一个有界面的软件都写不出来的时候,没有任何作用,真的没有任何作用。但当你有了一定的水平,它就会越来越有用。我有个朋友给我讲过一件事,他是做后端的,有一次他要做一个新的模块,这个模块在他看来规则很简单,但是逻辑有点复杂,他想了半天都想不出来,然后他就喊他的一个同事来,说你有空吗,来帮我一起看一下这个问题。他同事听完,想都没想,说这不就是写一个什么什么查找算法吗?我来吧,你不用管了,然后闷头两个小时就写出来了。这就是基础,当你没有你应该有的基础的时候,你甚至很难想像到它的作用,但当你有了,那种能力的提升真的不是一个等级的。
刚才说了基础是什么,接下来说,我们为了过冬需要准备什么基础?
对于感受到冬天来了的人,你要提升什么基础呢。主要是和 Android 相关的几个基础,UI、网络、线程。如果你说别的方面,另如数据结构、算法,或者说操作系统、计算机原理,你如果说这些都重要,当然不能说这些是错的。但就当下来说,为了过冬,明确一下是为了过冬,那么最终就是要的就是这么几个,Android 相关的东西:UI、网络、线程。
对于这三点,我分别说一下:
1、首先说UI,也就是界面,一般的界面我们都会做,一些流行的效果也可以通过Google 的 support 包,以及一些第三方库来解决。但如果设计师给你一个很新颖的效果,或者对某个第三方库进行一些细节的调整。如果发生这种情况,如果你不懂UI的原理,你只能跟设计师说声,不好意思太难了,我实现不了。设计师可能不会怪你,公司可能也不会怪你,因为他们发现不但你做不了,其它人也做不了。但你和别人没有区别,你怎么脱颖而出。
至于UI具体要学习的方面,要提升的方面,主要是和View相关的那三点,View的绘制、View的布局、View的触摸反馈。
绘制就是你怎样让界面画出你想要的内容;布局就是让所有的控件他们之间有一个你想要的排列关系,按照你想要的方式排列;触摸反馈就是怎么滑怎么点,然后他们按照你想要的方式来反馈。其实UI最关键就这么点东西,但学起来还是挺难的,所以很多人看一看也就不看了,但你真突破这一点,真把它学过去了,改变非常大,它对你的作用很大。
2、第二是网络,我们现在都会用 okHttp、Retrofit,你使用OkHttp、Retrofit能够实现大部分的网络需求,但如果你们的Web 接口的设计和你所期望的不太一致,导致你不太会用,或者你们的接口出现在一些只在Android 上有 iOS上没有的问题。这可能很多人遇到过,如果你不懂 Http 的原理你怎么办,你是让后端的人帮你解决问题吗,就算人家愿意和你一起解决一个由于你一个人水平不足所导致的难题,你也起码要把问题描述清楚,但如果由于你对原理的不清楚,导致你都不知道问题出在哪。这时候大家都等着你把问题抛出来,然后一块解决,但你说不知道我找不出来,多尴尬。我说的这些都是很常见的问题,很多公司都会遇到的问题。
在网络方面,我们迫在眉睫需要补的基础是什么呢。Http、TCP/IP的原理,知道原理就行,大致是怎么回事就行。例如,http各个方法 get是什么 post是什么,之间的区别是什么,web接口一般会怎么设计,然后http的header是什么意思,就是这些大致明白就行不需要了解得多深。在 Android 上面Http、TCP/IP它们是怎么用的。了解得越多越好,但对目前来说了解这些是必须的。
3、第三点是线程,前面两个说的都是功能方面的,你不会你就做不出来,第三个我说的是线程,是性能和稳定性方面的。Java和Android对于线程的封装已经是比较好用了,用 Thread、Handler、AsyncTask都能很快的上手来使用,而且看起来也没什么问题。但很多时候,程序的内存泄露,程序的卡顿很多时候都是因为线程的不规范操作引起的,你可以在网上搜到最常见的解决方案,你一搜他也遇到了,并且他解决了,把他的代码给拷过来,但更多的问题并不是那么普遍的,你们公司的运营人员只会告诉你,用户反馈软件太卡了,或者说我们软件经常崩溃,这时候面对运营不断施加的压力,你怎么办。
我们现在比较紧要的需要了解的是什么呢,线程、线程池的原理,Handler的原理,AsyncTask的原理。多了解一些,对你很有帮助。
上面这三个我所总结的,对于多数感受到冬天来临的Android工程师来说最需要关注的技能点,这三个技能点你掌握了,你就会发现你比以前厉害多了,你屌的不行,但这仅是相对以前来说,很多人他们各方面都非常厉害的,你要真正的成为高手还有很多的路要走,但是把这三个掌握了,你就能实现一个跳跃。你会发现你比大多数人强了,这当然还不够,这是通用的关键技能点里面最要紧的,就是现在就要去掌握它们的。至于一些和公司相关的,例如斗鱼的工程师你得多掌握一些视频相关的技术;相机的公司你得多掌握一些相机相关的技术。这些你们比我清楚,我就不多怼了。
我再总结一下我的建议,学基础但不是非常基础的数据结构什么的,这些很重要,但不是现在最关键的,最关键的是我说的这三个,和Android相关的基础:UI、网络、线程。
另外关于新技术,我觉得选择性的了解吧,不要跟风,不然你会发现光是学新东西都学不完,精力白白浪费了。
其它我知道啊,说的轻巧动动嘴,我说这三个很重要,你们去学吧。但是学起来是很难的,而且这些往往是卡着一些人的地方。并不是说我没有学过,而是说我各方面都学了,就这三个没有过去,或者说就这十个我没过去,其中这三个你提到了,今天直播中你提到了。不是我不学,而是我学不会,所以很多人,你能手把手,你多说点具体点告诉我怎么学怎么做。关于这个我确实在准备,不是目前我还拿不出什么实质性的东西。所以我不多说了,过一段时间我会公布的,在这之前你们自己想想办法吧。
四、5年之后还需要 Android 工程师吗?
我要说的是也许需要,也行不需要,需要的可能性大一点,但是这不重要,我知道你们真正关心的问题是,怎么保持越爬越高,并且不会突然坠落。主要是两点:保持嗅觉、持续提升。这个说起来有点像废话,不过可能更多的人是不知道这两点应该怎么做到。
首先是嗅觉,也就是在感觉到自己的技术方向即将要不行,即将要坠落的时候,及时转型。这个谁都知道,这很浅显嘛,眼看要不行了我就转型,关键是什么呢,你要有判断力,不要别人说啥,哦,对对对。这个是需要判断技巧的,可能有的人有自己的技巧,我的技巧是什么呢。预演式的推测,就是什么呢,有人说这个事情要怎么发展了,要出大新闻了,要出大事了。那么我会想如果真的像他说的那样要发生了,那么接下来会有什么事,以及他说的这个事会怎么实现,那么其它人市场啊、人员公司、用户啊他们会有什么反应,是不是真像他说的那样发展,往往你这么一想,你会发现他说的这些站不住脚。
我顺带的说一下我自己对于Android的判断,我目前是没有看到Android会在短期内灭亡的迹象,塞班当时的快速消亡不太会被谷歌重现。现在格局太稳定了,除非出现什么颠覆性的新对手,不然Android、iOS都不太可能快速消亡,如果出现,我们应该非常强烈的感受到,到时候只要不求一时的舒服,我现在拿多少多少工资,到时候我一转型转到一新系统上面没有人要,我不转吧,只要别这样就行。不过有一句说一句,这种情况短期内真的不太可能发生。
接下来说一下第二点持续提升,关于持续提升有一个很简单的原则就是,长期来看针对下层的基础去提升;近期来看针对上层的那些最表面的东西来提升。实质上最高效的策略,是先把底层的都学了,然后再学上层你会觉得学什么都超级轻松,我遇到过这样的人,但是这样做在多数情况下有它的不现实性。例如时间紧迫,我现在已经迫在眉睫了要改变改变了,你让我把下层学了,已经两年过去了。还有什么呢,坚持不住。坚持不住这个事,大家都不会说,其实多数人他的毅力都是有限的,你可能感觉只有你坚持不住,其实大家都不说而已,这是很现实的问题。它不是一个自尊心竞赛,我非要不说我坚持不住。这是事实:时间紧迫、坚持不住。这就是两个很现实的问题。所以先把下层全学完,再学上层,是一个理想性的少数人能做到的事情。但是比较现实的是分两部分,长期来说针对下层,近期来说针对上层。
具体的做法,怎么在近期学习上层,学什么上层。怎么计划远期的下层以及怎么分配时间。我也在想办法总结,不确定什么时候能总结出来。如果我总结出来,在今后会陆续把后面的总结放出来,可能会放在知乎、微博。今天我准备的内容就是这样的,接下来回答下大家的问题。
Q:什么样的程度才叫掌握?
A:例如,我举个例子,我给出一个正常的界面,不是为专门难为你的界面,它有什么动画,有什么布局间的关系,显示什么画面效果,我给出一个界面你不能跟我说你做不到。前提是我不是出了一个专门为难你的界面,是个正常的界面。我就认为你的View算是掌握了,另外的两个差不多是同理。
Q:大三了,明年春招想拿到BAT级别的Offer,需要从哪些方面发力呢。以及Android方面怎么进阶学习?哪些新技术可以学习下?
A:关于大公司的校招,一般看重的是基础能力,你把在学校的基础学好了,几乎是随便闯天下,例如对于做Android的来说,把Java、数据结构算法以及网络学好了最重要,其它的专业知识,操作系统,离散数学,多多益善。有了这些技能,再配上点Android的技能,那大公司的Offer会相对容易很多。关于第二个问题,进阶学习前面说过了。至于新技术,还是我说的那个,其实自己判断就好了,不要盲目追新。例如 Rxjava 虽然是我写了那篇文章,React Native这些,你觉得它对你没有用,你就先别看了,有个简单的原则如果一样东西你只要看它流不流行,而不是好不好,但你手头又有重要的基础技能需要学习,那么可以先不理这些新技术,如果某个新技术对你真的很有用,当它找个门让你学的那天再学也不迟。
Q:Android 底层需要怎么去学习呢,代码太多如何找合适的内容进行学习?
A:其实这个问题,应该很多人都想问。实质上Android底层这个词是很大的,很少有人能把Android底层这个概念学全了。你应该是想掌握一些更深入的东西,但你最好先确定要学习的底层这个底层是什么。把它明确成具体的任务,例如我想了解WebView是怎么工作的,或者我想知道Activity的工作原理,然后你根据你的习惯来做就好,具体到底是看文档、看你信任人的博客或者是看源码,取决于你对深度知识的要求,把大词换成小词,往往你就知道你该怎么做了。
Q:前端技术越来越成熟,客户端需求感觉在减少。
A:另外还有一个相似的问题,Android 好像在被前端挤。这个其实是个老生常谈了,就是今年这个火,明年这个火,大家好像被这种新技术挤来挤去的好痛苦啊。其实就像我今天讲的被挤的只是一部分人。你进级了就不会被挤了。而进级的方式我刚刚已经说过了。另外说一下,我说的这种被挤和刚刚说的那个某项技术会不会被淘汰是否会过时,是不一样的。如果你真的感觉它过时了,不是一些初级人员被挤出去了,那么它是另外一个话题就是怎样提前跳出来。
Q:Android程序员,如何权衡其他技术栈的积累,如前端、后台开发。又或者说有没有必要学这些,程序如何?
A:这个其实其它领域你稍微了解一下会比较好,没有必要太多了解,主要是对合作同事的了解方便你们沟通合作,以及有触类旁通的作用,就是你了解了这个它会辅助你学那个。那么你了解其它的一个东西,它会反过来辅助你了解当前你主力在做的这个东西。主要是辅助作用,稍微了解一下会比较好,前提是你有空,如果没空,只能二选一的话,我的建议是选择当下不去触类旁通。
Q:Android + H5 一起搞得话会不会多加点竞争力。
A:这个问题可能和我前面说的问题比较相似,但有些人可能认为不一样。就是H5这个非常火的东西,它该不该学,该不该会。还是那个问题就是,新技术我到底学不学。还是我说的那个,如果你只是听说一个东西很火,你先别理它,当你感觉到一东西很火了,就是你公司或者你自己不用它不行了,那么你需要“浪费”一段时间,来学这个你必须要掌握的东西来做它。是否需要“浪费”?需要!但如果你只是听说一个东西很火,学不学?不学!
Q:怎么看小程序对Android开发的影响?
A:其实这个倒不是对Android开发的影响,而是微信的小程序对Android APP 有什么影响。应该是没什么影响,我自己的意见。有很小很小的影响,可以认为是被忽略的影响,我认为是这个级别。所以因此所导致的Android岗位减少,对于Android开发的影响可以忽略不记,这是我的理解。
Q:一般作为中层级别的开发是公司业务开发的骨干,时间非常有限,凯哥有什么方式可以让知识的获取效率更高么。
A:对于我自己来说,我怎么提升呢。我从网上找东西,免费的收费的我都看,我倾向于收费的,由于收费会花很多精力去做,比我自己去找快很多。
Q:假设对于今天担的三点有一定基础了,接下来的学习方向和规划有什么建议吗?
A:这个问题我前面简单说了一下,就是长期来看针对下层。至于具体的方案,今天没有准备,我也没有想太多,因为这个其实是比较针对个人的了,下层的东西大家的差异是很大的。
Q:个人觉得Android的单元测试不应该过分看重,但如果写的话,怎样写出可测试的代码?
A:单元测试主要是为了防止做项目的时候,半路出现一些之前没有出现的Bug。例如,你登录的时候输入密码你有做检查,但做着做着你可能不知道什么地方一改,密码检查没了,单元测试可以防止这样的问题。同样需不需要单元测试,你自己来判断,根据不同的需求来判断,它就是为了项目的稳定,不会因为之前没有的问题后来出问题了。
作者:Tyler
链接:http://www.jianshu.com/p/6d291d6dee2d
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。