Android 知识体系
实际上在开发 Android 的过程中,需要很多知识,而有些知识也很难为其分类,但是总体上来讲可以分为上述五部分。
首先—UI 方面,如果你将来的工作是开发 Android 应用的话,UI 的知识你是必不可少的。
UI 的知识大体也可以分成三部份——基础控件、自定义控件、动画。其中每个部分几乎都需要花费巨量的时间去学习,如果你写出非常漂亮的控件或者动画框架并开源出来,相信找份好工作是不在话下的。
第二点—架构方面,随着工作的需要及阅历(看代码)的增长,你可能会越来越不满意你自己写的代码模块了。这个时候,你可能就会涉及到架构方面的知识了。架构方面的知识主要包括设计思想,及选择合适架构的能力,这两者通常来讲是相辅相成的。每一种新的架构或设计思想问世往往是用来解决实际问题的,他们解决问题的侧重点各不相同,因此在什么时候采用什么架构或设计就非常考验程序员的阅历了。通常这部分的知识学起来最为困难,因为他仅仅是一种思想,如果你的代码量不多,或是接触的项目都比较小的话,你往往会觉得这部分的知识没什么用,最后自然而言又会忘记了。
第三点—性能方面,同样随着工程的体量越来越大,开发功能越来愈多,你会发现原来非常流畅的 App 可能会出现卡顿、OOM、ANR 等现象。你百思不得其解,每次 Google 后,你可能会发现——原来实现功能的方式存在着许多性能问题。因此,在这个过程中了你得学会使用各种工具去分析代码的效率等。这部分的知识相对比较零散,也很难总结,更多的是一种经验的积累过程,因此工作多年以上的程序员都很吃香。
第四点—NDK 方面,这一部分知识比较特殊,很多 Android 工程师在初中级阶段可能都不会涉及到。只有你在某些领域亦或是特殊的场景的时候才有可能使用 NDK 进行开发,比如说像流媒体、图像处理等场景你才会去进行 NDK 开发,它通常需要你有良好的 C/C++基础,因此这算是一个比较大的知识体系了。
技术分析
总体上,目前市面上可以将互联网公司分为两类:
A. 没有实体产品的,以软件产品为主的互联网公司
B. 有实体产品的,将硬件和软件结合起来的互联网公司
A 类公司往往偏向于 UI 及架构,性能稍次,并且大多数中小型企业会要求应聘者能熟练掌握市面上流行的开源库以节约开发成本。这类公司开发的 App 往往是纯虚拟的产品——社交通讯、各类工具、资源聚合等。这些产品因为竞争激烈,功能需求变化也快,所以版本迭代的速度会非常快。这个时候,一个好的架构就可以节省许多时间,它能快速的响应需求,并迅速添加新的功能模块。UI 也是重点,在两个 App 功能差不多的情况下,拼的就是用户体验了,其中用户最能感受到的就是两点,首先是界面是否美观,动画是否自然;其次才是 App 是否流畅。
他们一般对人才的需求是这样的:
B 类公司因为有实体产品,因此往往会要求应聘者具有某些特殊的技能,例如 BLE、WIFI 等。这类公司往往偏向于性能及 NDK,UI 稍次。在目前的大环境下,这类公司多数都在物联网产业链上,以智能硬件、智能家居、机器人居多,而这类公司的话,大部分其实都是传统企业转型而来,因此其开发的产品比较注重功能的完善及响应速度,UI 的话反而会稍微丑陋一些。毕竟消费者买的是实体产品,配套的 App 就算再丑也得用不是么。
他们对人才的需求往往是这样的:
明确自己想去什么样的公司,或者对哪一类的业务更感兴趣,会有助于你更有的放矢地学习技能。
如何搭建自己的知识体系?
对于初学者来说,因为目前网络上充斥着许多免费的资源,无论是入门的还是进阶的都应有尽有,找到学习资料不难,难的是如何有选择地进行学习,并把知识纳入到自己的知识树上,而不是让众多知识点彼此孤立、零散地分布在自己的脑海中。
涉及到学习目标不同、基础不同,每个人的学习路径会不太一样,这里我以一个现成的学习路径为例,来说说如何从零基础开始,完成比较“通用型”的 Android 入门。
话不多说,先上知识体系示例:
用 3 个月的时间,认真学习完大概可以达到下面的技能状态:
学完后的状态大概是:
你会发现,Google 官方推出的 Android 开发的进阶课程中,主要提升的还是 UI 方面的知识——材料设计(Material Design)和动画框架。
需要说明,这两门课程都没有涉及到 NDK 开发,是因为刚刚步入职场的 Android 工程师并不特别需要掌握 NDK 开发技能,你完全可以在找到相关工作后再继续深入自学。
而在技术领域内,没有任何一门课程可以让你学完后一劳永逸,再好的课程也只能是“师傅领进门,修行靠个人”。“学无止境”这句话,在任何技术领域,都不只是良好的习惯,更是程序员和工程师们不被时代淘汰、获得更好机会和发展的必要前提。
网友评论