基础不稳,地动山摇!
好比我们学习数学,大家都是先学:
阿拉伯数字 -> 数学符号 -> 加减法 -> 乘除法 -> 九九乘法表 -> 方程式 -> 公式定理
从小我们学习,在学校里就是从难到深,那为啥放到软件领域,编程行业,我们就忘了呢,大家总是着眼于最顶层的东西,总也看不到技术基础在哪里呼喊你赶紧关注它 ┻━┻︵╰(‵□′)╯︵┻━┻
我们平时用的开源框架/库,这些都是软件领域最终的成品了,就好比是数学中的公式定理
,小白学习这些源码就是一个剥开公式定理
外皮一层层深入的过程,随着学习的深入,这过程是这样的:
公式定理 -> 方程式 -> 九九乘法表 -> 乘除法 -> 加减法 -> 数学符号 -> 阿拉伯数字
这个过程就是我上面说的反向学习,在没完全成熟、完善的、从头到位的学习课程的技术领域,这个逆向的过程是不可避免的,但是我们必须知道这种逆向学习有多大威海
- 当你越多很多技术文章,你忽然发展了一个技术点,这个好比你看到了一个新的
公式定理
- 你打算深入去学习其中实现原理提升自己水平,那会发现这里需要
方程式
方面的知识,但是方程式方面的知识我没学过,也不了解,我也不知道有多少知识点,于是我阅读大量文章,囫囵吐枣的把2元1次方程式学会了,但我其实不知道还有3元1次方程式、3元2次方程式,所以我看着很费劲、费解,总觉得自己能力不行,殊不知其实这里除了2元1次方程式,还需要3元1次方程式的知识点 - 当我历经千险终于把2元1次方程式、3元1次方程式的技能树都点开了,我想再深入的看一下,我突然发展还有一个
九九乘法表
的东西,还好这个东西比较好学,有规律,知识点都在一起很好学 - 但是在我高兴的时候,我发现九九乘法表里还有大量的各种符号和简单的计算公式,但是这些我都不了解哎,于是我一个个对着查找baidu,又是一阵血雨腥风,终于,半斤八两的我终于可以能勉强看懂这个符号和公式了
- 但是最终我有对这些数字产生兴趣了,没办法也不是我想看的,是因为大家都说面试要问,没办法只能硬着头发花时间查资料去看
以上就是反推式学习的过程,很多时候我们的确能研究到及其指令这一层,但是当我们翻回头,我很难把这些知识点全部串起来搞清晰,最多我只能比较清晰的明白部分,这就是大多数人学习的常态:耗费大量时间,总也学不明白,学不通透
但是大家再看,阿拉伯数字 -> 数学符号 -> 加减法 -> 乘除法 -> 九九乘法表 -> 方程式 -> 公式定理
这些东西就是基础知识啊,当我们把这些基础知识都掌握了(网络编程、设计模式、操作系统),你再去看这些框架, 你就会时不时大声呼喊:原来是这样啊,我get到了,也没有太复杂啊,我都大概都串起来了
学习基础知识还有一个非常NB的地方,就是当你把基础知识都搞定的时候,一定形成自己的一套行之有效的学习方法,这会让今后的学习、工作路程走上快车道
具体到 Android 学习
总听别人说基础、基础、底层、底层的,啥是基础,啥是底层?根据我近3年的经验来看,所谓的基础、底层就是完整的大学课程 ->
C/C++
计算机导论
计算机组成/微机原理
操作系统
网络编程
数据结构
设计模式
多线程
加上语言、平台基础(JAVA 、Android) ->
JVM
反射
泛型
注解、AOP、APT、JIT
Android 操作系统
学习是有顺序的,至少我经过亲身学习后,大概摸索出一个适合的大多数人的学习路径:
C/C++
一定要先看这个,也不用看多深,知道语法,能看懂代码,能在 Android 上写.cpp
文件,能跑起来就行计算机导论
看看这个,大多数人对于计算机整个结构都不清楚,好的计算机导论内容很全,会把计算机组成的部分也笼统的介绍一边,要是对硬件没什么兴趣,计算机组成/微机原理
可以略过,有计算机导论部分介绍的硬件知识就够了操作系统
就是学 Linux 操作系统,这个很重要,后面的内容随随便便、不经意间都会涉及到操作系统的数据结构
、设计模式
这2部分学习没有前后,没时间的同学数据结构可以放放,不影响后面学习网络编程
这个算是基础部分最后的点了,但是非常重要,一定要学清楚、学明白多线程
不用说了吧,JVM
深化对 JAVA 的理解,最好的方式就是把 JVM 从头到位的学习一遍,到这里你就能体会到学习操作系统
带给我们的感受,java 就是对 C 的简化,JVM 就是用C++写的,java 的一切都是跑在C上的反射
、泛型
这2个是很多人都欠缺的,一定要会,Android 的黑科技哪个离得开反射了注解、AOP、APT、JIT
这部分从注解开始会连带很多东西,这部分是所有 Android 开源框架/库的基础,请好好学习,黑科技也不离不开它Android 操作系统
最后就是这个了,学过操作系统
这里就不会再出现学不明白了的问题了,其实有操作系统知识打底,Android 操作系统好理解多了,没有多少难理解的点了
带着上述学习成果,再去学习 Android 应用层的东西,你会发展,学习原来是这样爽啊,看一个会一个,看一个明白一个,看每一都能理解通透,爽死了 ヾ(≧O≦)〃嗷~
学习资料:
这其中很多还没整理或者还没看完,大家见谅,我长期更新,肯定会把学习资料这块都写全的,并且这些资料都是我亲身学习、品鉴过的,保证质量,保证小白都能看懂,我的资料就是给小白准备的,因为我自己就是小白 (ノへ ̄、),干了好几年了,还是小白,感觉对不起社会的栽培啊,没办法我是跨界过来的,可不是科班出身
本文重在思想,资料不全不要开喷,也欢迎大家给我补全资料
C/C++
暂时空缺
计算机导论
视频:
- 计算机科学速成课 40集全/精校
这个是最好的计算机入门课程了,内容之丰富远超3本书,国外科普视频,这套视频享誉全球,内容精炼,绝对没有废话,看不懂的同学请多看几遍,我学习这块也是反复看了有4.5遍,绝对推荐 ♪(∇*)
操作系统
视频:
- 南京森林警察学院-杨老师的Linxu课程博文:
- android 筑基 - 操作系统(1)
我就是看杨老师视频把整个 linux 系统看明白的,内容质量非常高,一反大学课程啰嗦、混乱的常态,讲的就是干练、明白,然后大家结合我做的笔记博文,这块就没问题了~
数据结构
还没看
设计模式
待整理
网络编程
完成部分:
博文:
- android 筑基 - 网络编程基础
多线程
待整理,这里东西太多,我要好好整理下
JVM
视频:
- 尚硅谷-2020最新版 Java虚拟机从入门到精通【全203集】
博文:
- 再看 JVM(1)
- 再看 JVM(2)
- JVM 面试题【初级】
- JVM 面试题【中级】
- JVM 面试题【高级】
- JVM 角度看代码优化
尚硅谷的这套JVM视频我去实在太好了,JVM所有的点都说到了,203集,40+小时,值得你耗费时间去学习,看完之后,JVM不再迷茫
反射、
泛型
待写
注解、AOP、APT、JIT
还没看完
Android 操作系统
还没看完
代码封装、优雅
这块就是推荐大家看书了,系统的去看优雅的代码都基于哪些考虑
- 《JAVA 开发手册-嵩山版》
- 《代码整洁之道》
- 《代码质量》
- 《重构与模式》
- 《企业应用架构模式》
- 《大话设计模式》
最后
最后了我再抒发下感想~
前路明显,努力学就行了
技术这条路相对其他行业是最好走的一条路了,起薪高,不需要人脉,仅凭自己努力就能走的很高,只要不退缩,前路是明显可见的,就在那摆着呢。只要一路勇往直前,不给自己留退路,稳扎稳打你一定会比从事别的行业强
这行很干净
程序员的世界虽然也有996,007这样的残酷,但是相比别的行业这个行业太干净了,我之前是做港口物流的,也自己卖过水果、蔬菜,我见过太多的黑暗、剥削、残酷、无情、擦边球、不法、勾结… 心累了,就干程序员这行来了 ( _ _)ノ|
学习淂有章法
每个行业都有自己的学习脉络,程序员这行的学习脉络就是上学的那套,从基础开始一点点积累,就是这样,切忌胡乱学习浪费了宝贵的时间
为啥有的大厂校招进来的会有导师带,就是怕你自己长歪了~
学习就是一个拼图的过程,即时你把拼图都点开了,你也淂去找拼图之间淂顺序,才能得到最终淂景象,这是个非常耗时的事,没有前辈指导自己胡来是铁定要废的,只要有正确的指导,每个人都可以成为大神,这一点我是体会出来了
积累不光有面,还得有深度
看过马士兵老师的公开课,马老师说,硅谷那边面试只考2样:算法和系统设计
,
- 算法代表技术深度,算法NB的人,技术基础一定好,至少美国人学习路线的就是这样,算法好的基础都好,当然投机取巧的中国人除外
- 系统设计代表全局能力,综合应用能力,一般会通过项目来考你
软件编程这行最终就是个理论结合实践的过程,基础能力和经验同等重要,也是我们要追寻的东西
再次强调下基础知识的重要
上层知识、应用很复杂,特别丰富,各种标签、技术,各种换来换去。但是底层知识其实很少,就是我说的上面那些,学会了你就会了,你基础就扎实了,就是这么简单明了的事
底层的知识你会了,就不怕面试官刨根问底了。面试管问你 netty、redis、kafka、es、nginx,你都可以聊 mmap、select、epoll 这些底层的东西,这些都来自于系统的内核调用
大多人能是站在上层回答的,NB的面试官想听的不是这些,这些人所共知,他们觉得你肯定会,你也没必要回答太过表面的东西,他们想听见就是你从底层说起,接个技术做概括性描述
巧的是现在行业里,底层基础扎实的人实在太少了,你会了优势是很大的,不仅仅面试有用,平时学习应用也是受益匪浅~
形成适合自己的学习方法
技术是学不完的,我们在学习的过程中,必须形成一套自己的学习方法。我的方法就是从基础开始,务求学习系统,有遗漏再补充,追求知识点之间的融会贯通。通过写博客的方式,分享出来,有时大佬们也会交流一下,支持问题或是鼓励鼓励,这样对于学习非常有效,我最求的是极致的效率,适合跨界过来的小白们
程序员分级
这是看B站心静思远-9527
同学说的,感觉get到点了,希望大家体会下:
- 初级程序员
面向功能实现
那代码烂的糟糕,只要业务能跑通代码不封装
相同、近似的代码哪里都是,一改起来哪个费劲啊,满世界找抄
抄百度,抄同事,不敢自己写,不敢有自己的想法面向百度编程
…
面试复习笔记
这份资料我从春招开始,就会将各博客、论坛。网站上等优质的Android开发中高级面试题收集起来,然后全网寻找最优的解答方案。每一道面试题都是百分百的大厂面经真题+最优解答。包知识脉络 + 诸多细节。
节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。
CodeChina开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》
《960页Android开发笔记》
《1307页Android开发面试宝典》
包含了腾讯、百度、小米、阿里、乐视、美团、58、猎豹、360、新浪、搜狐等一线互联网公司面试被问到的题目。熟悉本文中列出的知识点会大大增加通过前两轮技术面试的几率。
《507页Android开发相关源码解析》
只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。
真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。
nU-1631106106600)]
《507页Android开发相关源码解析》
只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。
真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。
[外链图片转存中…(img-OhwXWytq-1631106106602)]