积累技术是害你吗?你就算再牛逼,这三个阶段也是Android开发者必经的,步步沉淀,不要再走弯路了!
Posted Android-until
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了积累技术是害你吗?你就算再牛逼,这三个阶段也是Android开发者必经的,步步沉淀,不要再走弯路了!相关的知识,希望对你有一定的参考价值。
引子
最近一直在思考,作为一名软件开发工程师,到底应该如何实现自我成长,是否有捷径而言?其实断断续续有过很多思考,也有和各种年龄段的同学们做过不少交流,结合自身的经历,有一些感悟和思考。
本文可能可以适用到其他端,不过由于自己是一名 android 开发工程师,所以就姑且从一名普通的 Android 开发工程师的角度来进行表述吧。
整篇文章可能读下来会比较啰嗦和白话,但句句真言,字字真心,欢迎大家一起交流。整文也只代表个人观点,同学们都可以发表自己的观点即可。
由于感悟文字很多,所以今天来第一篇文章就是:工程师所必经的三个阶段。
工程师必经的几个阶段
我认为每一名软件开发工程师都需要必经三个阶段:
- 不知道自己不知道啥
- 知道自己不知道啥
- 不知道自己知道啥
看起来很绕,但实际真实如此。
不知道自己不知道啥
对于大多数刚刚接触到 Android 开发的学生来说,软件开发是一片浩瀚的海洋,这是一片全新的领域,有着自己的生态圈。所以初入开发行业的学生们,完全不知道自己还有哪些是需要学习的,所以这些同学通常会陷入一个非常迷茫的阶段,尤其是在校学生。
自己当初也是如此,天真的以为计算机专业就是开发游戏,倒腾电脑的专业,所以自己就成了计算机学院的一员。上大学后,才发现和自己想象的完全不一样,依然要学习好多的数学专业课和语言专业课,只是这个语言不再局限于英语了,而是一些从未听过的 C/C++、C#、Java、Python。
在学校的时候完全不知道自己应该学习什么,只能按照教学的安排一节课一节课的学习和实践,学校老师布置的任务也一如既往的简单,然而大家一片茫然,依然有很多的同学完全学不明白。努力得不到结果的感受,让一些同学越来越厌倦去上课,越来越厌倦考试。尤其是遇到编程操作性科目,更是大脑一片空白。
大学阶段学生们的普遍情况是,不知道社会需要怎样的人才,需要怎样的情况才能做一名合格的软件开发工程师,在懵懵懂懂中就毕业了。
一部分在校学习刻苦,比较有远见的同学在即将毕业的一年抓住了公司的实习机会,这时候他们先人一步接触到了商业项目。会发现公司的软件开发又是另一番景象,也许在学校学习的 Java 和 Python,但在公司却要承担起一名 ios 开发的角色,于是在这里开始了他们的二轮学习。
因为身边有一群有经验的导师,这时候学习起来比学校轻松了很多,但依然是大多数时候不知道应该学习什么,对于自己而言,哪些是需要现在学习的,哪些是未来应该学习的。
如果这些同学足够幸运,遇到一个优秀的 mentor,可能会轻松许多,应该 mentor 会授人以渔,在给你安排工作的同时,还会教给你做自己的职业规划的方法论。
有了一个详细的学习规划,会轻松很多,自己的学习还有 mentor 的定期 review 和反馈,这时候成长起来更快。这也是为什么我建议职业生涯初期的学生挤破头皮也应该进入大厂的原因。
大厂通常都有足够完善的新人成长机制,而且身边的同学都是足够自驱和优秀的,在这样的环境中成长,真的是如同脚踏白云,一飞冲天。
通常而言,职业生涯的前两年也会一直有这样的状况,不清楚自己到底还有哪些知识需要学习,在完成了交代的开发任务后,就会陷入一个怀疑人生的阶段,不知如何提升自己的能力。
这时候大多数同学就会靠踩坑提升自己的实力,踩一个坑记一次,有的坑记忆不够深刻踩 3 次怎么也够了,但这些同学会发现,职业生涯成长非常缓慢,如果不幸,可能 10 年的开发经验,不过是一年的经验重复使用了 10 年而已。
学习填充
在这个阶段的同学如果看的博客文章比较多,可能会陷入一个恐慌的阶段,因为制造焦虑的文章实在是太吸引眼球了,它们是心灵鸡汤,不断地博取你的共鸣,从而消耗你的信心。
这时候,对自己要求比较高的同学就开始不断学习,却没有任何规划。他们可能会选择看很多博客,给自己收藏很多标签,看到优秀的博主就赶忙关注,不关心博客的每一篇文章的质量,而盲目地迷信权威,反正别人说的,就一定是对的,很少有自己的思考。
所以只要文章涉及范围越广,就越容易得到别人的认可,GitHub 上的 Star 也从来不会吝啬。而我就是这样一个博主,早些年靠文章的数量取到了数百万的阅读量。
除了博客学习,一些同学还会选择一些在线教学视频网站,比如 mooc 网,网易云课堂,腾讯课堂,扣丁课堂等。这些网站上通常都有成套的语言教学,老实说,这上面的部分课程质量确实比学校教学的更加全面一些,但知识内容真的很多,一顿学习下来少了实践确实性价比不高。
所以一部分同学把希望寄托给了书籍。
读书是一个好习惯,书籍也是一个好东西。很多专业性的书籍,都写的非常好,也非常全面,因为是文字性的描述,所以相对于视频学习起来时间成本更低。但书籍的内容质量也是良莠不齐,除去其他同学的推荐,自己很难真正感悟到书籍的内容对自己的帮助。这时候可能你就需要看一下《如何阅读一本书》,提升自己的读书效率。但又发现,读书真的很难坚持。
大多数人把上面这种方式归咎为没有学习氛围,无法驱使自己认真学习,加上没有健全的交流群,没人给自己解惑,有些书籍偏向于基础知识的讲解,根本学不到真正的实践技术。
所以一部分同学把希望又寄托给了培训机构和一些专注于提升能力的收费课程。
大部分知识付费的项目还是非常不错的。但比较遗憾的是,它们可能都是为大多数人制定的,而缺乏私人定制,可能并不适合现在的你。
知道自己不知道啥
大多数人工作 3 年后,会陷入这个阶段:知道自己不知道啥,明白自己的薄弱之处。
这个时候其实很好办,因为自己知道问题出在哪里,当然好对症下药,刚好我也就是处于这个阶段。
不过依然有其他方式。这个阶段的同学最大的问题是时间不够用,大多数这个阶段的同学可能都已经濒临成家养家的压力,生活中的琐事和压力都多了起来,工作中可能也已经成为主程,除了要完成一些技术难题的攻坚,可能还需要指导一下新人,所以一定会出现时间极度不够使用的情况。
时间不够是最难解决的问题,可能也是最好解决的问题。时间确实就像海绵,挤挤总是有的,即使有时候我们会出现挤不动的情况,但那一定只是一个短期状况。
这个阶段的同学最需要读书,因为这些同学通常都已经有了自己的知识体系,也明白自己的薄弱之处在哪里,这时候就需要做专项提升,越到这个阶段,就会越发现基础知识的重要性。很多东西,真的需要学懂本质,这也是为什么大多数面试官都喜欢考察基础问题,因为真的基础才是根本,一个基础优秀的同学从来都不会太差。
我也是最近半年通过部门开展的读书活动才爱上了读书,书读百遍,其义自见是真理。很多书籍需要你反复软磨硬泡几次,每一次阅读都是一次认知的提升,而认知的提升最终会带给你财富的变现。
我希望自己在这一个阶段能产出更多有价值的文章,在这之前,我当然也需要做知识的基础夯实,于是有了系列,扫盲。
是的,设计模式就由于武功秘籍的内功,可能大多数时候我们都用不上或者足够理解它们,但这些招式在某些时候真的就是会让你的程序足够精美和安全。
我们不需要去纠结每一个设计模式的使用场景,我们只需要始终记住,设计模式就源于生活,我们不需要去背诵每一个定义,只需要弄清楚它们大概的意义即可。
不知道自己知道啥
工作很久后,不少工程师会陷入第三个阶段:不知道自己知道啥。
这时候,因为大多数知识已经成为了自己的血肉,很多设计理念和架构都会让自己觉得理所当然,但真要较真起来,可能自己也弄不清楚到底是源自于哪里。
很多时候,这些同学会更加明白自己的不足之处在哪里。但时间却更不够用了,他们大多数都已经成为了团队的领袖,成为了队伍的灵魂,开始负责起团队的大小事务,不能只关注到技术本身,而要关注很多技术之外的东西,比如产品感,项目推动能力,管理能力。大多数时候,Leader 决定了团队的天花板,一个好的 Leader 能让团队的天花板更高。
但非常尴尬,这个阶段的同学基本都有了自己的孩子,需要拖家带口,需要处理人情世故,很难再把技术做的足够纯粹,即使很明白自己的技术不足之处在哪里,却很难抽出时间去处理,因为这时候,可能软素质的提升才是当务之急。
Android到底该怎么学习?
总的来说,一名工程师都会经历上面的三个阶段,我们不能去扭转什么,我们唯一能做的,就是让每个阶段提前,这样才可以让自己的精力在技术上投入更多。
Android需要打好哪些编程基础
- Java基础(Kotlin)
- OOP思想与设计模式
- Android基础
- 数据结构与算法
- 其他,比如JVM相关
除了编程基础,我们还需要补充哪些能力
- 喜欢钻研的兴趣
- 良好的英语理解能力
- 善于思考和总结的习惯
- 高效率的学习方法
- 能够机智地利用Google搜索
- 善于利用工具
- 和现实事物关联类比的能力
- 对待问题的态度
遇到瓶颈的时候,不要想太多,只管努力就是了
编程是需要积累的,而积累的反馈是具有延迟性的,一点点的量变引起质变。
比较常见的情况是,可能好几天都没有啥突破,然后过了一段时间后,突然发现自己已经进步了不少。
做好技能储备
不用多说,相信大家都有一个共识:无论什么行业,最牛逼的人肯定是站在金字塔端的人。所以,想做一个牛逼的程序员,那么就要让自己站的更高,成为技术大牛并不是一朝一夕的事情,需要时间的沉淀和技术的积累。
关于这一点,在我当时确立好Android方向时,就已经开始梳理自己的成长路线了,包括技术要怎么系统地去学习,都列得非常详细。
很多人在刚接触这个行业的时候或者是在遇到瓶颈期的时候,总会遇到一些问题,比如学了一段时间感觉没有方向感,不知道该从那里入手去学习,对此我针对Android程序员,我这边给大家整理了一套学习宝典!
- Android学习路线图
首先,对于没有学习方向,知识不体系的人,我把我工作几年整理的学习路线分享给大家,做一个借鉴作用,还不知道怎么学习的人可以直接照着我这个学习路线一个个的去学习,知识不体系的人可以参考下我整理路线的方式,总之希望能够帮到你们!
- 模块化学习资源
接下来是每个模块我整理出来的文档学习资料,帮助大家更细致化的学习。
《Android汇总复习资料—Java》
《Android汇总复习资料—Android》
《Android汇总复习资料—Android扩展》
《Android汇总复习资料—Kotlin》
《Android汇总复习资料—Flutter》
《Android汇总复习资料—算法》
除了上面的学习路线,还可以额外的配合以下方式学习,效果翻倍~
Android进阶学习
①看视频进行系统学习
前几年的Crud经历,让我明白自己真的算是菜鸡中的战斗机,也正因为Crud,导致自己技术比较零散,也不够深入不够系统,所以重新进行学习是很有必要的。我差的是系统知识,差的结构框架和思路,所以通过视频来学习,效果更好,也更全面。关于视频学习,个人可以推荐去B站进行学习,B站上有很多学习视频,唯一的缺点就是免费的容易过时。
另外,我自己也珍藏了好几套视频,有需要的我也可以分享给你。
②读源码,看实战笔记,学习大神思路
“编程语言是程序员的表达的方式,而架构是程序员对世界的认知”。所以,程序员要想快速认知并学习架构,读源码是必不可少的。阅读源码,是解决问题 + 理解事物,更重要的:看到源码背后的想法;程序员说:读万行源码,行万种实践。
主要内含微信 MMKV 源码、AsyncTask 源码、Volley 源码、Retrofit源码、OkHttp 源码等等。
③面试前夕,刷题冲刺
面试的前一周时间内,就可以开始刷题冲刺了。请记住,刷题的时候,技术的优先,算法的看些基本的,比如排序等即可,而智力题,除非是校招,否则一般不怎么会问。
关于面试刷题,我个人也准备了一套系统的面试题,帮助你举一反三:
④2020大厂面试高频知识点
- 图片
- 网络和安全机制
- 数据库
- 插件化、模块化、组件化、热修复、增量更新、Gradle
- 架构设计和设计模式
- 性能优化
- Android Framework
- Android优秀三方库源码
以上这些内容均免费分享给大家,需要完整版的朋友,点这里可以看到全部内容。或者点击 【这里】 查看获取方式。
成功不可复制,但是从现在开始为将来的自己做累积永远是没有错的,把握不住以前就把握好现在。
以上是关于积累技术是害你吗?你就算再牛逼,这三个阶段也是Android开发者必经的,步步沉淀,不要再走弯路了!的主要内容,如果未能解决你的问题,请参考以下文章