移动互联网寒冬
关于 Android 市场需求,其实从前年开始 Android 就处于寒冬的境地,最直观的标志就是,工作不那么好找了。因为前几年移动互联网开始流行,很多创业公司都是想抓住这个风口,所以就开始招 Android 和 iOS 工程师来开发 App。而且很多培训机构也大量地培训 Android 工程师,等到这一两年需求慢慢饱和了,移动互联网这一块其实已经被 BAT 和其他的一些巨头公司瓜分了,所以很多创业公司都倒闭了,导致很多 Android 工程师失业了,这是市场需求不高、移动互联网寒冬一个很重要的原因。
如何在技术瞬息万变中不被淘汰
最近 Python 最近很火,人工智能很火,区块链更火,其实每一个时期都有比较火的技术,就像 Android 在 5 - 10 年前也是很火一样,这是非常正常的,技术变化很快是互联网行业一个很大的特点,作为一个搞 IT 的,其实在很早就应该认清这种局势。互联网是变化的最快的行业(没有之一),互联网本来就汇聚了世界上大部分的脑力精英,特别是硅谷的那些人,创新的能力不是我们能想象的。而且世界上排名前十的大公司,如:苹果、微软、Google、FaceBook、腾讯、阿里 清一色都是 IT 公司,他们有着巨大的资金让他们去研究新技术,技术变化不快才怪呢。
我们要做的只能是提高自己的实力,以及适当的紧跟趋势,这里说的实力主要有两方面
- 软实力(沟通、合作、创新、思考、情商)
- 内功(数据结构、算法、计算机网络、操作系统等)
软实力不用说,这是每一个行业都需要具备的东西,内功的话,我这里说的都是抛开具体的实际应用(Android、前端、后台)的计算机知识,因为技术总在变,但是这些根本的东西,其实是不变的,我们真正要掌握的其实就是这些不变的东西。
只要你这些基础的东西都学得很好,管他技术怎么变,其实都是底层知识在某些方面的具体应用而已,或者说这么难的底层知识都学会了,你还怕学不会那些应用层的东西吗?
理论结合实际
Android Training 是 Android 官方推出的,面向 Android 开发者的教程,一开始看 Training 可能会发现很多没用过的知识,这很正常。因为这一份资料虽然是面向 Android 的。但 Android 里面有很多方向,除了常见的手机应用开发(App)之外,还有 Android TV、Android Watch、Android 平板、甚至车载系统,Android 音箱其实都是 Android 的应用,我们现在很多人也只是学 Android App 开发而已。
所以在学习 Training 的过程中,其实那些有关 TV、ChromeOS 的内容,可以不用去管他,只要看跟 Android App 有关的就行了,但是这些有关的内容必须过一遍,即使你看了就忘,但是至少你在实际开发的过程中,遇到某个开发点,然后会回想起我好像在 Training 里面看过,然后重新找回来看,这样就够了。
所以关于 Android Training 以及 Github 上某些框架(如:okhttp、Matisse、GreenDao等)的 wiki,我的建议是:先通读一遍,然后在实际开发中去熟悉它的用法,等开发结束后,再回来重新看一遍 wiki,因为你在开发中其实会遇到很多疑问的,这时候带着问题来看 wiki,你其实会发现之前第一遍看的时候没发现的很多东西。这时候你才会对这个知识点、这个框架有了一个更好的把握。当然,如果想去更深一层的把握,就只能通读它的源码,这个过程很辛苦,但是真正啃下来,收获真的很大,而且这也是内功的积累,也是所谓的核心竞争力。我自从撸了 Volley、Matisse 的源码之后,就感觉现在看源码的速度比以前快了很多,但之前看这些框架真的累的要死。
顺便讲一下我对一些技术书籍的看法,像《Android 开发艺术探索》,这本书写的非常好,但是呢,它对于刚入门不久的新手来说很难,或者说并不是当前等级应该刷的关,说实话,里面我也有很多不懂的地方,这本书本来就是面向高级工程师的。但阅读技术书籍的话,我的建议跟看 Training 和 wiki 的看法是一样,先通读一遍,让自己有个印象,等你实际开发中真的遇到了相应的问题,再回来看一遍,你就会有一种豁然开朗的感觉。所以,有的时候学技术,不要太拘泥于细节,如果真的啃不下,就先放下,可能等过段时候再回头看看就会觉得特别简单。就像现在去写「天气预报 App」一个道理,相信现在手撸个「天气预报」是分分钟的事,但是在刚入门那时候,相信「天气预报」也折腾了我们不少精力,现在回头看看是不是觉得很简单了。
所以如果真的想做一个比较好的工程师,所谓的核心竞争力其实就是我在上面提到的「软实力」和「内功」。这些不变的东西,才是我们最需要花时间去提升的东西。但是呢,这些所谓的内功又比较「虚」,为什么这么说呢,就比如我现在让刚入门的新手把计算机网络这本书给读了,可能就屁颠屁颠看完,就这么过去了,然后就好像什么都没发生过一样。就像现在很多大学的课程一样,其实都存在一个很大的问题,就是老师只给你讲理论的知识,却很少给你讲理论在实际中的应用。或者他们也确实不会,现在很多老师都是一毕业就来学校教书,其实大部分已经跟实际的开发脱轨了,最常见的例子,现在大部分教 Android 的老师,都是用 Eclipse 来上课。
上面我讲的例子,主要是为了说明这些学这些所谓的内功的一些常见困惑,但很多时候其实不是我们不想学,而是不知道学了有什么用而不想学,这时候「项目开发」的作用其实就出来了,理论和实际是真真正正需要结合才能发挥它最大的用处。就像在还没怎么开发过项目的情况下,让新手去学计算法网络、设计模式,其实效果是很差的,因为此时对网络的理解其实很模糊,但是经过一定时间的项目开发,我们有了一定的代码积累,也在调接口的过程中,遇到了一些有关网络的问题,所以这时候再去看计算机网络,就比较有用了,这时候其实我们会在看书的过程中找到自己遇到的问题本质的理论基础,然后理论结合实际,你就会理解的更加深刻。
所以,想成为一个比较优秀的工程师,具体要怎么走呢?相信我上面的例子,也能看出我的一些想法,我的建议是:在前进的路上,偶尔停停。什么意思呢?在新手这个阶段还是以项目驱动为主,慢慢积累自己的代码量,然后在有疑惑的时候就用搜索引擎,找问题的答案。在项目没什么需求的时候,就可以静下心来学我提到的数据结构和算法、设计模式、计算机网络这些东西,在这些基础的东西中,找到自己在项目开发过程中,遇到问题的本质,这样才能对知识掌握的更好。
任何一个行业都是不容易的,唯有持续的「有效」努力,才能走得更远。