最近跟一些网友交流,有一位网友的经历让我记忆深刻:
“有一次和大学同学聚会,和几个在 BAT 的同学聊了聊技术,发现自己在创业公司这几年,完全是吃老本的状态,没有什么机会精进技术,同样是工作了三年,和同学的差距越来越大”
我继续问他,他说真正让他受打击的是这个月的一次面试。
“面的是一个大厂,面试官问了很多问题,一大半的问题我都是一知半解,回答上来问题也是特没底。
大概回顾了这场面试:上来先是问了 Java 基础知识,jvm、字符串、集合、线程、四大组件等等,这部分我还算准备的充分。
第二部分开始复杂了,主要是设计模式、原理方面的问题,像是你说你做过自定义View,那麻烦说一下为什么Activity中有dispatchTouchEvent();?
你说你当初用了volley,那你在技术选型时有什么考虑?你知道volley有什么缺点吗?为什么有这样的缺点?
okhttp的原理是什么?相对之前的网络请求框架的优势是什么?
主流的热修复技术都有哪些?各自的原理是什么?各自的优缺点是什么?为什么你采用这个方案而不是别的?我之前工作上经历的少,加上自己技术储备浅薄,到这部分时我就感觉自己快凉了。面试到最后,问了设计方案相关的,当时已经懵了,我die了…
面完后他说,觉得自己在技术上欠了很多债,最惨的是,在这之前他根本不知道。
听了这位网友的经历,大家是不是仿佛看到了自己的下场,很多工作了 1-3 年的Android人,想够一够 3w 月薪的岗位,但在底层技术上却有很大的问题:
毕业几年,表面上用过很多技术,但都没能深入学习,一年的工作经验,干了好几年。结果就是遇到实际问题时无从下手,最终还是走着普通工程师的道路,和高手的距离越来越远。
都说三年是程序员的一个坎,能否晋升或者提高自己的核心竞争力,这几年就十分关键。
技术发展的这么快,从哪些方面开始学习,才能达到高级工程师水平,最后进阶到 Android 架构师/技术专家?我总结了这 8 大能力——
当然,想要深入学习并掌握这些能力,并不简单。关于如何学习,做程序员这一行什么工作强度大家都懂,但是不管工作多忙,每周也要雷打不动的抽出 10 小时用来学习,不出半年,你就能看出变化。
那么问题来了,工作中怎样提高自己?来不及解释了,赶快上车!
如何高效的学习
一、认清自己
1.1
认清自己最关键的一点是【要知道自己到底想要什么】。这是第一步,也是最重要的一步。因为这关系到你能够够选对学习方向,能否沉下心来去学习。
我们都知道,做自己感兴趣的事情的时候,是可以事半功倍的,因为你愿意去做它,而不是出于某种原因不得不去做。
经常会有人问我,现在Android找工作好找么?java 找工作好找么?我要不要学前端呢?这些问题的答案其实大家心里都明白:只要你足够优秀,学什么都能够找到一份好的工作。
所以说,不要因为某一个方向火,而盲目的去追;也不要因为某一个方向可能不容易找工作而不去学。
记得我有一次这么回答一个朋友的时候,他和我说:很多时候,选择远比努力重要,我选一个我不喜欢但是火的方向也许比我选一个我喜欢但是不火的方向赚的更多。这种想法很多人应该都有,但是我觉得,选择远比努力重要的前提是你这个选择得正确,但是能够做出正确的选择的人,他本身就已经是一个优秀的人了。抛开这点不谈,在一个自己不喜欢的领域你能走的多深入呢?
对一个搞技术的人来说,年龄的增长其实不是那么可怕,可怕的是你没有匹配自己年龄的技术深度。当你的工作换一个刚毕业的学生都能做的时候,你很快就会被淘汰了。所以,选方向一定要选自己感兴趣的方向,因为只有这样,你才有兴趣去往深入了学,你才不会在未来被年轻人挤下去。
1.2
认清自己的第二点是【认识到人外有人】。自满,自大,自欺欺人是影响自己进步的绊脚石。如果你觉得,你现在已经很了不起了,你能做到这个程度已经很不错了,你就会停滞不前,然后浪费大把的时间。
这是我自己的亲身经历。我的学校是一个双非大学,计算机也不是学校很好的专业,消息也比较闭塞。在我的圈子里,我觉得自己已经很不错了,我之前也一直这样认为。但是,当我开始准备春招准备校招的时候,我发现我错了,和真正优秀的人比起来,我什么都不是。以前觉得自己会的东西,出去一看,大家其实都会;以前觉得很多知识等工作了再去学也不迟,出去一看,发现早就有人学会了。但是,现在认识到这些已经有点晚了,因为已经开始找工作了,没有时间再去让你从头开始学了。
所以说,永远不要自满,要知道人外有人。如果有一天,你觉得周围没有人比你更厉害了,一定要记得,不是你走到巅峰了,而是你的圈子,应该扩大了。只有你的周围,有很多更厉害的人,你才能意识到自己的不足。这也是我常挂在嘴边的:你想变成什么样的人,你就要去认识什么样的人,你的周围是什么样的人,你就会变成什么样的人。要知道,人以群分。
二、学习的目的
为什么要学习呢?学习的目的,根本上是为了获取竞争优势,增加选择机会。你比别人懂得多,比别人学的深,你就更有竞争力。对于程序员来说,不懂得学习是没有办法在这个行业混下去的。技术的更新换代,技术的深入掌握都需要去不断的学习,如果你不学,很快就会被淘汰了。
找工作的时候,有其他专业的朋友会羡慕的和我说:“你这个专业真好,一毕业月薪就上万,我才3、4千”。其实我想说的是,如果不好好学习技术,搞技术的也会失业。大部分的人都只看到一部分计算机的应届生工资很高很羡慕,却忽略了他们这四年是怎么度过的。天上是不会掉馅饼的,计算机专业的每天看剧打游戏,毕业一样找不到工作。希望以后你不会是那群天天打游戏看剧最后抱怨自己工资低的那群人中的一个。
三、时间管理
知道了自己的方向,知道了为什么要学,那么我们接下来谈一谈,怎么安排自己的时间,或者说,怎么制定一个计划。
很多人应该都有过这样的经历:我现在很无聊,不知道做什么好,学习吧,不知道学什么,打开电脑也不知道做什么,打开手机也不知道做什么,然后只能选择看个直播,看个电视或者打个游戏来打发时间。当一天过去以后,突然后悔,觉得自己当时要是学习就好了。
为什么会这样呢?是因为你自己没有一个计划,如果你每天都有一个按时间段安排的计划的话,你就不会迷茫了,你就会知道这个时间点自己应该做什么,而不是用看剧打游戏来打发时间。
关于时间的管理。首先,要有一个大一点的计划,比如年计划,月计划,周计划。这一年大体上要达到什么目标,这个月要学习哪些知识。然后是精确到小时的日计划。每一天,哪个时间段做什么都详细的列出来。
其次,不要太盲目自信。很多人其实从来没有完成过自己的计划。如果你真的能够完成你制定的每一个计划,那现在的你一定已经很了不起了。如果你几乎没有完成过自己的计划,那么你一开始制定日计划的时候,不要给自己太多的任务。因为如果你一旦完不成,就会影响自己的信心。最好的方式是,一开始制定一些简单的计划,然后每天很容易就能做到,然后慢慢的去增加自己每天的任务量。最后找到一个最适合自己的节奏。这个过程可能需要很长的时间,因为你要不断的去尝试,去改进。找到最适合自己的作息时间去休息,找到自己工作状态最好的时间去工作等等。
关于时间管理以及计划的制定,每个人都应该有一套自己的计划,因为每个人的情况不同。
最后,不要把你的计划当摆设。虽然我上面说过,很多人其实从来没有完成过自己的计划。但是我还是希望你能够认真的去对待它,因为受益的有且只有你自己。
四、学习方法
盲目的学习效果并不好。以前看书的时候,看完一遍再从头看,感觉就像是在看一本新书,完全没有印象。看似自己学了不少,其实真正掌握到的并不多。学习不是你看得书越多,读过的文章越多你就学的越好,而是看你究竟掌握了多了。那么,怎么才能有效的去学习一门新的技术呢?我总结了以下几个步骤。
4.1 学习的步骤
- 确认学习目标
首先,你需要确认你要学什么,切记不要三心二意。学习最好一个时间段专一的去研究一个知识点,不要今天学 python 明天又想学 java 了。做什么事都有有一个目标,不然容易成为无头苍蝇。目标往大了说,可以是成为某一个领域的大牛,往小了说可以是今天的一个学习计划。
hr 面的时候,一个常见的问题是:你的职业规划是什么。一个优秀的人,必然会有一个属于自己的职业规划,知道自己在什么时期要做什么,知道自己每个时期要完成什么样的目标。学习也一样,当你有了一个清晰的目标的时候,你才不会迷茫,才不会不知道做什么好。
- 制定学习计划
上面也提到了这点,计划可能赶不上变化,也许今天正好有别的事情导致今天的计划没有完成,但是至少大方向是有的,你不会不知所措,不知道最近应该做什么,这才是计划的根本价值。所以,不要担心计划完不成,这是给你自己学,一天的计划完不成又能怎样呢?
- 自己找资料开始学习
很多朋友不是没有资料,大多都是有几十上百个G,但是杂乱无章,不知道怎么看从哪看起,甚至是看后就忘,在网上找的资料非常杂乱、不成体系,在脑袋里形成不了一套知识体系,所以系统的资料是非常重要的。
- 脑图与流程图
学习从来都不是只看看书就能学会的,自己构建相关知识脑图和相关步骤的流程图是非常有必要并且非常有效果的。比如你要学习Android,你可以先从网上找一找脑图,对Android有一个大致的了解,每学一个小的知识点,就自己绘制一个该知识点的脑图,学完之后,自己再画一个整个Android体系的脑图,这样你会对Android非常的熟悉。比如你学GC,光看书或者博客是很难记住那些流程的,这个时候,你自己画一个流程图,我保证你对这个过程会很清晰。记住:就算是有现成的图,你也应该自己画一个,你画出来的就是自己的。
- 编码
上面的那些,都是掌握理论知识的步骤,是骡子是马还得拉出来溜溜。编码才是重中之重,就算你能把一个知识点吹得天花乱坠,但是一句代码不会写依然没有卵用。
- 笔记
好记性不如烂笔头,学完的知识,然后记录下来,自己总结一遍,收获有多大你们试试就知道了。
- 回顾
如果你学的东西,很久都没用,突然有一天你又要捡起它,你会发现,你之前做的努力,太特么值了,你有资料!有脑图!有流程图!还有笔记!分分钟就记起来了。
自己写一个有实际应用的demo
如果有必要,可以写一个有趣的应用,不是简单的范例。
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618165277)
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!