Android 开发者,如何提高本身的职场竞争力?

前言

该文章是笔者参加 Android 巴士线下交流会成都站 的手写讲稿虚拟场景,因此你们将就看一下。git

开始

你们好,我是刘世麟,首先感谢安卓巴士为咱们创造了此次奇妙的相遇。现场的氛围也让我十分激动。程序员

职场竞争力,历来都是咱们关注的话题,因此我今天给你们分享一下:《Android 初学者,如何快速提高职场竞争力》。github

在今年 4 月,全球互联网引来了一个历史性的转折点:随着流量分析工具 StatCounter 的报告,Android 首次超越 Windows,成为用户访问互联网最经常使用的操做系统!Android 不只在移动领域,在全操做系统内,都成为了当之无愧的霸主!不管你有志于成为领先企业的 Android 工程师,仍是想成为改变世界的独立开发者,我但愿大家为此而骄傲!!!网络

即使如此,你们以为 Android 开发就业形势可观吗?架构

答案是不可观。我这绝对不是危言耸听,随着近年来 O2O 公司的大幅度倒闭,互联网公司烧钱严重,不少公司根本烧不起,因此不少开发者随着企业的倒闭再次卷入了求职的浪潮之中。框架

我想请问一下,在场的各位,如今用的共享单车都用的是哪家的?工具

想必基本都是小黄车和小橙车。如今 ofo 和膜拜两家独大,前段时间还能看到的悟空单车如今已经销声匿迹,由于它烧不起钱,ofo 和膜拜一个月免费骑行足以让它直接倒下,而就任于悟空单车的 Android 程序员可能所以被辞职。布局

Android 行业发展年限并不久,因此最开始接触 Android 的那一批人,如今极有可能还在 Android 领域,再加上近年来各大培训机构和高校向社会中注入了很大一部分的 Android 开发人才,因此形成了如今供大于求的窘境。可能有人经历或者据说过 14 年 Android 会写一个 ListView 的适配器就能找到不错的工做吧,你如今会用这些能找到工做吗?post

因此这个时候,出色的开发能力能让你的开发职业生涯更加顺风顺水。性能

下面我想结合个人经历给你们讲一下几点:

  • 如何系统化学习 Android 技术?(Android 知识体系)

  • 企业到底须要什么样的 Android 开发人才?(Android 市场行情)

  • Android 学习的方式都有哪些?(Android 学习方式)

  • 对 Android 学习和提高的一些建议。(Android 提高建议)

Android 知识体系

Android 知识体系.png

重点看咱们 PPT 中的图。在 Android 开发的过程当中,须要不少不少的知识,而有些知识也很难为其分类,在这里,我把它们分为上述五个部分:UI、架构、性能、NDK、其余,其余则能够细化为代码风格,学习能力,第三方库等。

  • UI方面
    首先是 UI 方面,我相信大多数人都是开发 Android 应用的,因此 UI 的知识,必不可少。UI 一共分为三部分:绘制、布局和触摸反馈。要想写出漂亮的 UI 搭配动画,这须要花费巨量的时间,可能已经有特别多的朋友和我同样,在一直跟进扔物线(朱凯)的 HenCoder 系列了。若是你能够写出很是漂亮的控件或者动画框架并开源出来,我相信,你找份好工做已经没有问题了。

  • 架构方面
    这个方面是卡年限的一个东西。随着工做的须要以及阅历(看代码)的增加,咱们老是会愈来愈不满意本身写的代码模块,好比我,就深受这个的苦恼,我常常会出现三个月前写的代码,本身都看不下去,强迫症的我,必定会把它翻写的。但若是项目周期短的你,千万不要像我同样作。

当你不断改写封装本身的代码的时候,你可能就已经涉及到了架构方面的知识啦。架构方面的知识主要包括设计思想,及其选择合适架构的能力,这二者一般来说是相辅相成的。每一种新的架构或设计思想问世每每是用来解决实际问题的,他们解决问题的侧重点各不相同,所以在何时采用什么架构或设计就很是考验程序员的阅历了。一般这部分的知识学起来最为困难,由于他不只仅是一种思想,若是你的代码量很少,或者接触的项目比较小的话,你每每会不多触及到这部分的知识,最后天然而言又忘了。
因此在这方面我建议你们在工做之余,多参考 GitHub 上开源的完整项目,也要多写点本身的项目,提高本身的代码量和架构能力。

  • 性能方面
    性能方面相信开发稍大型 APP 的工程师体会尤为深入了。随着 APP 工程的体量愈来愈大,开发功能愈来愈多,你会发现原来很是流畅的 APP 可能会出现卡顿、OOM、ANR 等现象,除了前面韩神所提到的内存泄漏,可能你还会由于其余问题致使性能表现不够优秀。而这部分的只是相对比较零散,也很难总结,更多的就是你的经验积累,因此多年经验的程序猿更受企业的青睐。

  • NDK方面
    这一方面的知识比较特殊,不少 Android 开发工程师在初中级阶段可能都不会涉及到。在开发中咱们可能只会在特定的领域才会用到 NDK 进行开发,因为我也没遇到过,因此暂很少讲。

Android 市场分析

整体上,目前市面上能够将互联网公司分为两类:

  • 没有实体产品的,以软件产品为主的互联网公司(其中至关一部分为外包);

  • 有实体产品的,将硬件和软件结合起来的互联网公司。

咱们暂且把它们称呼为 A 类和 B 类。

A 类公司每每偏向于 UI 及其架构,性能稍次,而且大多数中小型企业会要求应聘者能熟练掌握市场上流行的开源库以节约开发成本。这类公司开发的 APP 每每是纯虚拟的产品 —— 社交通信、各种工具、资源聚合等。这些产品由于竞争激烈,功能需求变化也快,因此版本迭代的速度会很是快。这个时候,一个好的架构就能够节省许多时间,它能快速的响应需求,并迅速添加新的功能模块。UI 也是重点,在两个 APP 功能差很少的状况下,拼的就是用户体验了,其中用户最能感觉到的就是两点,首先是界面是否美观,动画是否天然;其次才是 APP 是否流畅。

A 类公司对人才的需求大概是这样。

A 类公司.png

而对于 B 类公司,他们由于有实体产品,所以每每会要求应聘者具备某种特殊的技能,例如蓝牙,WIFI等。

这类公司每每偏向于性能及 NDK,UI 稍次。在目前的大环境下,这类公司多数都在物联网产业链上,以智能硬件、智能家居、机器人居多,而这类公司的话,大部分其实都是传统企业转型而来,所以其开发的产品比较注重功能的完善及响应速度,UI 的话反而会稍微丑陋一些。毕竟消费者买的是实体产品,配套的 APP 就算再丑也得用不是么。

他们对人才的需求每每是这样的:

B 类公司.png
明确本身想去什么样的公司,或者对哪一类的业务更感兴趣,会有助于你更有的放矢地学习技能。

Android 学习方式?

我认为最主要的一点就是主观能动性,或者说兴趣,若是你对 Android 开发没有太大的兴趣,那么仍是尽早换方向吧。有了兴趣,天然是确立一个比较正确的学习路线。听说咱们参会的还有一些应届毕业生或者还没开始工做的朋友。可能还在学习中很迷茫,我这里先给你们说一下个人学习经历。

学习 Android 无非几种方式:

  • 看书类
    此类可能比较全面,但也意味着过期的问题,我不是很是提倡,但书籍是人类进步的阶梯,大家能够考虑。其实我也买了挺多相关书籍,但自从习惯在网络上学习后就不看了。

  • 线上课程直播或者录播
    这个多是初学者当下比较受欢迎的学习方式了,但所讲知识一般比较基础,并且学习速度慢,但效率确实挺高的。这也是我在入门 Android 的时候用的最多的方式。采用这种方式学习的时候一般会有一个毛病,就是喜欢边看边写,这是我不提倡的,我提倡看一段写一段。在前期你能够不用一整段都看完,以小节的方式学习后再写代码。前期可能你会以为本身像在背代码同样,但我不能否认,这确实是效率挺高的方法。但真的太费时了,至少我在工做后没用过这种方案。

  • 看博文、看别人的开源项目、看官方文档、官方例子代码
    这是我如今用的最多的一种学习提高方式。通常能够经过上面的看书或者看录播的方式学习到完整的基础组件和代码编写,但这时候你用基础的组件实现出来的东西美观度一般比较局限。但当你加入公司后,产品会设计出各类新颖的效果,而这些效果并不能经过原生控件实现,这时候,网上超大量的资源就涌现出来了。掌握 GitHub 正确的搜索姿式,一般能让你事半功倍。而这个时候,一个熟悉的英文阅读能力和理解能力将展示的淋漓尽致。随着开发经验的积累,你会发现你的开发速度直线飙升。

Android 提高建议

成为一名Android开发者很容易,可是要成为一名成功的、突出的Android开发者却不那么容易。这须要付出不少的努力,耐心,奉献和毅力才能作到。

我并无什么捷径或者简单的方法来告诉你让你成为一名成功的开发者。但若是你愿意全身心投入并付出努力的话,你确定会获得你应得的成功的。

应你们的请求,我这里给你们提供一些提高建议,仅供参考。

  • 开始阅读更多的代码
    大部分的开发者都不会抽时间去阅读其余开发者所写的代码,他们大多数时间只是花在写他们已经知道的事情上。但那并不利于你成长为一名优秀的开发者,也不会增加你的见识。我建议你们阅读同事的代码,让你对大家的项目更加了解,当你对公司的产品代码足够了解后,你给老板提加薪的时候才更有底气。

有的人会说,我们公司就我一个 Android 开发者,我看谁的代码呢?GitHub 上那么多优秀的开源应用和类库,我建议大家去阅读并开始学习它们,天天 30 分钟的代码阅读量是个很是好的开始。你将会惊讶的发现,还有如此多美妙的东西是你没见过的。

  • 克服对未知的惧怕
    Android 系统很大,很是大。你不可能在一两个月内彻底掌握它。随着学习越深刻,你会发现越多的内容须要学习。做为一名初学者,很容易也很正常地出现这种对未知恐惧的惧怕。我也不例外,曾经我学习 RxJava 的时候,我看了不少不少的博文,包括扔物线朱凯的那篇出名的《给Android开发者的RxJava详解》,但持续了整整一个周,依然不懂,这时候以为 RxJava 真是太难了。在这种时候,不妨先放下它一段时间,过些日子再去学习你会以为如鱼得水的。好比我,前面就在GitHub 上开源了 RxJava2Examples(附带整个系列 RxJava 2 文章) 尝试去克服对未知的恐惧吧,学习那些你确实须要用到的东西,可以让你开始手头正在构建的应用,而后慢慢地开拓你的视野。

  • 尝试开始写博客
    写博客或许是一件至关费时的事,或许你写的博客只是阅览了多篇文章后的总结而以,或许你写的博客一点都不深刻,但可是!!!别人的永远是别人的,做为一个已经写了不少博文的我来讲,我所收获到的东西,不是这点时间能比拟的。由于只有你足够懂了,你才能讲给别人听。

  • 开始贡献开源库
    GitHub 上有不少很棒的开源库,但因为一些特殊的缘由可能做者并无时间维护它。尝试去为开源库贡献你的源码,你会获得很是很是很是大的反馈的。可能这里有的人也知道,我在去年有维护 ImagePicker 图片选择库,我在里面贡献了很多代码,虽而后面因为一些时间缘由中止维护了,但我收获很是大。具体收获,这个只能意会。

除了为别人开源库贡献,你也能够开源本身的代码。图片压缩在项目中挺经常使用的,在编写咱们公司的项目的时候,我本身写了图片压缩,后面以为挺好用的,因此直接把它开源到了 GitHub 上。这个过程很是的 nice,不只学习到了特别多的知识,并且经过你们的测试,个人开源库的伸展性更佳。开源的过程有不少的东西是须要你学习的,并且这有助于你成为一名优秀的开发者。

  • 花一些时间来学习Android最佳实践

要使本身比其余开发者更加出众,并能构建出整洁美观而又功能完善的应用,你须要开始学习一些Android开发最佳实践。除此以外,你还应该多去关注市场发展,看看最近流行的库都是怎么用,并尝试阅读它们。

写在最后

本次个人分享也接近尾声了,感谢大家在百忙中花上一下午来这里聆听咱们的宣讲,但愿在接下来的日子,咱们共同成长,一块儿进步!!!

相关文章
相关标签/搜索