文章目录
- 前言
- 应该关注哪些技术?
- 应该如何学习?
- 怎么样更容易坚持?
- 为何分享?
- 总结
前言
在这个行业,每隔一段时间都会出现新的技术,好焦虑呀,到底该学什么?14年移动开发出现了大量的泡沫,随便一个培训几个月出来的在北上广都是8k起,现在感觉移动开发工程师供应需求方都要饱和了。招聘公司每天简历都要收到上百封,很多移动开发面试都接不到电话。该怎么办?要学习RN吗?要学习后台吗?在校的准程序员们学习android还合适吗?现在移动端不景气,是不是要学习新的语言,逃离移动端技术?
应该关注哪些技术?
这些问题,每天都会有人在群里议论,也会有人经常在群里求工作职位坑。那么我的看法是不要纠结学什么,先学了再说,与其抓住变量(新的技术手段)还不如好好学习,我特别喜欢《暗时间》的一段重视知识的本质:对于程序员来说这一点尤其重要,程序员行业的知识芜杂海量,而且总是在增长变化。很多人感叹跟不上新技术。应对这个问题的办法只能是:抓住不变量。
底层知识永远都不过时。算法数据结构永远都不过时。基本的程序设计理论永远都不过时。良好的编码习惯永远都不过时。分析问题和解决问题的能力永远都不过时。强大的学习能力和旺盛的求知欲永远都不过时。你大脑的思维方式永远都不过时。
我在刚入行时,一直在追逐最新最热的技术,几年过去了,才发现在,新的知识永远在增长,感觉自己很无力,有一天无意间在网上看到Google的面试问题类型,我惊讶的是在面试题中没有最新的技术,甚至不是在某一种语言下的知识,而是通用的知识,算法数据结构,设计理论,编码规范,那时我懂了,想起刚出来的时候去一些公司面试被问到算法,一脸懵逼,并且还理直气壮和面试官说“开发用到算法的地方不多呀,记不住也很正常。”,现在回想起来当初的想法真是给自己找借口,因为算法本身比调用API要难,你连难的东西都学好了,还学不会简单的API调用吗?本质上面试官是想看看你的学习能力和逻辑能力。
如果学好底层不变量,现在的大数据,云计算, AI 学习起来都是事半功倍,你以为你没有基础就能学好大数据,云计算,AI?我们不要拘泥于某一门语言而是先修炼好内功,你的在这门语言的造诣是否高深,最终还是由你的内功深厚程度来决定的。
Android的核心知识点
做Android 开发,无外乎那么一些知识点:(这里先放上一份知识大纲)
- 各大开源框架的研究,包括但不限于下面几个
OKhttp、Retrofit、eventbus、Glide、eventbus、Rxjava、blockcanary、mvvp、dagger2等。 - 组件化是基本要会的,插件化大公司要求会实操的。
- java 部分,包括 常见的数据结构和算法,hashmap,二叉树,红黑树,apt 注解,aop插桩,整套多线程知识点,包括ThreadLocal实现原理
- flutter/Dart 大家要开始学了,就和当年我们学 kotlin 一样,flutter 基本一锤定音了,google 下一代就是 flutter 的天下。
- android 的系统原理,Lru算法,Binder机制,EventBus实现原理和为什么不能跨进程,跨进程几种方式,AIDL,handler机制。
- 音视频开发,直播、点播、音视频通话、音视频会议,短视频,这些不一定要多深入,但是基本的各大平台的 SDK 要会集成,能根据开源的 哔哩哔哩IJKMediaPlayer 编写自己的视频,音频播放模块。
- 最后,就是Android的优化了,Android的优化无外乎以下几个方面:内存优化(稳定性)、交互优化(流畅度)、耗电优化(省电)、安装包大小优化、网络优化、应用启动优化等几个方面。
如果大家想要深入的话,可以重点关注下以下几个方面的内容:
- 图形图像开发,不限于OpenGL ES,EGL,GLSurfaceView,滤镜,美颜,canvas,paint
- 应用层开发。主要还是原生开发,提高性能优化技能(启动耗时、内存、耗电、网络、数据库、稳定性等),达到高级开发者的水准
- 深入Android专业技能提升。主要是阅读源码,理解透Android开发常见的流程和原理(activity启动流程、事件分发机制、广播机制、Binder机制、内存管理机制等)
向Android架构师发展。从平时的一点一滴开发中,有意训练Android架构设计能力,这需要站在一个更高的角度来统筹App开发。
- 跨平台开发能力。如RN、Weex、Flutter等。大部分公司目前都需要有跨平台开发能力,所以我们很有必要提高这方面的能力
- SDK和框架开发。可以通过研究开源项目或者实际项目开发,抽象提取有用SDK和框架供其他人使用
- 研究Android安全开发。App加固原理和实现,熟悉常见加密方式(如:RSA、DES等)、Https、支付安全等。
- Android自动化测试工具开发。这需要对ADB、Android截图、Android布局解析、Android测试框架等相当熟悉
- 音视频开发。前两年比较火的直播,还有这一两年比较火的短视频,都是与音视频相关。所以,我们可以了解音视频的编解码以及传输协议等。
- 手游开发。游戏给鹅厂带来了稳定的收入,所以这也是不错的方向。这就需要熟悉常见的游戏开发框架cocos2d-x、Unity3D
- 图像开发。比如美图秀秀、天天P图,都用到图形的合成、滤镜等技术,对图像处理有很高要求。
- Android Framework 开发
除此之外,要成长为一个架构师,还需要开发者具备系统设计能力。具体来说,为如果你仅仅是对各种各样的技术都熟悉,有技术广度,也有一定的技术深度,实际上是不够的。如果你的系统设计能力不到位,可能导致你在开发系统的时候会乱用技术。
比如说,有的系统他有一些自己特殊的业务场景和技术挑战,实际上在这个场景之下比较合适的是采用 “缓存 + 数据库” 的技术方案来应对。但是呢,有的工程师会很多技术,但是缺少这种准确的分析系统问题,提出合理的技术方案的能力,也就是缺少系统设计能力,导致他可能会引入Elasticsearch这种技术来尝试解决这个问题,那么结果必然是失败的。
应该如何学习?
我们知道该学习什么了,那么如何学习了?
在这个信息爆炸时代,我们每天阅读大量的信息(微信公众号、微博、简书、今日头条、微信读书、得到 .....),阅读过后总感觉自己学习到了很多新知,但是一周过后我们能说出来的收获又有多少呢?
这不禁让我想起塞内加的《论生命之短暂》中的一句话“如果一个人出海遇到狂风暴雨,被变换肆虐的风吹得团团转,你可能会觉得他航行了很远。其实航行得并不远,只是浮沉动荡的时间长而已。”,没错如今的知识就像出海时遇到的狂风暴雨,我们只是被吹的原地团团转而已,并没有在知识的海洋航行很远。
互联网的强大足以让我们查找到我们想要学习的资料,但是太多垃圾信息也掺杂在其中,如:大数据广告,错误的资料,恶意的评论,吸引注意力的热点信息,这些东西无疑是对我们有百害而无一利的,那么如何避免出现这些信息呢?看本书吧,成体系,由浅入深,循序渐进,没有我刚才所说的垃圾信息,只需要支持几十元的书籍费用,让你的学习事半功倍。
现在网上的视频也很多,牛人的收费课程也不少, 要不要去参与?
以通过阅读书籍为主。市面上的视频和收费课程,大多是内容都是来自书籍中的,太阳底下无新事。
以终为始先定一个目标,比如学完后写一篇教程,然后去学习,这样更加有动力,有意思的刻意练习,更为有效。知识经过整理,才更容易理解,容易理解的只是才更容易记忆。你想想所谓的高手是不是本质上就是在遇到对应问题场景的时候,能够快速调起自己的脑海中的解决方案,并且成功的解决掉这个问题。
管理学中有个很不错的模型,它非常适合用于学习,PDCA。
PDCA循环又叫质量环,是管理学中的一个通用模型,最早由休哈特于1930年构想,后来被美国质量管理专家戴明博士在1950年再度挖掘出来,并加以广泛宣传和运用于持续改善产品质量的过程。
PDCA是英语单词Plan(计划)、Do(执行)、Check(检查)和Adjust(纠正)
P (plan) 计划,包括方针和目标的确定,以及活动规划的制定。
D (Do) 执行,根据已知的信息,设计具体的方法、方案和计划布局;再根据设计和布局,进行具体运作,实现计划中的内容。
C (check) 检查,总结执行计划的结果,分清哪些对了,哪些错了,明确效果,找出问题。
A (Adjust)纠正,对总结检查的结果进行处理,对成功的经验加以肯定,并予以标准化;对于失败的教训也要总结,引起重视。对于没有解决的问题,应提交给下一个PDCA循环中去解决。
以上四个过程不是运行一次就结束,而是周而复始的进行。
总结:前期准备、中期执行、后期回顾
如何应用呢?
假设要学习设计模式。
-
step1 计划:明确目标,分别把常用的23种设计模式列出来,一周学习一种。
-
step2 执行:按照计划学习,学习完成之后写一篇自己对设计模式的理解。
-
step3 检查:写完之后,请朋友阅读,自己和别人的文章对比进行多维度的比较。
-
step4 纠正:现在大家都喜欢看写的有趣的,可以改改自己的写作风格迎合大众的喜好。这个类图画的不错,以后每篇都要画类图。
有人肯定会说了,我也知道学习很重要,但是我就是坚持不下来。
没错,我们人性天生懒惰,大部分的人都是半途而废的专家,其实很多时候,不是我们比别人笨,而是别人比我们更坚持。高德纳先生曾经说过“过早退出是一切失败的根源。 兴趣遍地都是,专注和持之以恒才是真正稀缺的。”,可见坚持的重要性那么接下来我们就来说说如何更容易坚持。
怎么样更容易坚持?
《暗时间》中提到过这样的一个方法给自己设立一个进度条:
如果你把任务分割了,你就有了进度条,你就知道,事情在不断的进展,你总会完成任务或到达你的目标,你会有一个时间估计。反之如果没有这个分割,整个的任务或目标对你来说就只有两种状态——“完成”和“未完成”,如果不幸是一个比较漫长的目标,那么你会发现你的进度条总是“未完成”,一次又一次的等待未果会耗尽你的耐心,让你下意识的产生“这事什么时候才能完呢?”的疑惑,没有分而治之,你就不知道未来还需要付出多少努力才能达到目的,这就会让你心生怯意,不敢进一步投入时间,免得血本无归。在这样的心理下,不少人就会选择保守策略——退出,以免到头来花了时间还一事无成。
当你已经能够坚持下来持续的学习了,那么最后我建议你把你的学习成果分享给其他人,为什么?请看下面。
为何分享?
我是一个喜欢分享的人,以下是我的分享经历。
- 14年写博客
- 15年录制教学视频
- 16年写开源项目
- 17年做直播、公众号
从最开始的写文章(只需要写),到录视频(先写好讲稿,然后开始讲,要注意声音节奏),再到直播(直接面对听众)。通过不断跳出自己的舒适区,使得自己快速的成长。
这里是一部分我自己录制好的视频:
以下是我在分享得到的好处:
-
没写文章的时候感觉自己很厉害啥都懂,但是写的时候却写不出来,这其实就是对这个知识理解的不过透彻,从而可以认识自己的不足。
-
每个人都是从不懂到懂,写出好的文章可以帮助他人理解这个知识点,助人为乐。
-
当你的文章得到曝光之后,会有更厉害的人指出你文章的错误,从而获取反馈提升自己。
-
一个人的能力边界很小,认识更多人志同道合的朋友,可以组织齐心合力把分享做的更好。
-
更多的面试机会,让你的简历众不同,上面说了每天简历这么多,你要是有自己的博客你就更容易被选出来。
-
出版社编辑主动找上来,约你出书。
-
各大相关平台运营找你合作。
-
你会被更多人知道。
总结
通过本篇文章我们知道了
1.关注哪些技术?
底层知识。
2.如何学习?
阅读书籍结合PDCA学习方法。
3.怎么样坚持?
加强反馈,给自己设置一根进度条。
4.为何分享?
提升自己,帮助他人,构建个人影响力。
请注意以下2个重点:
1.请把注意力放在真正值得的事情上。
2.贵有恒何必三更起五更睡,最无益只怕一日曝十日寒。-- 毛泽东
最终达到在寒冬中破冰而出!
最后的最后
对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!
当你有了学习线路,学习哪些内容,也知道以后的路怎么走了,理论看多了总要实践的,我在这里给你们整理了我自己的Android 学习,面试文档,视频收集大整理,提供给大家参考学习下。
最后,互联网不存在所谓的寒冬,只是你没有努力罢了!!!
网友评论