不懂得产出学习,只能原地眼红别人成长过快!老板:新来了一个Android高级开发你收拾一下提前过年吧!

牧云@^-^@ 提交于 2021-02-14 16:00:52

有朋友吐槽,工作几年每天做着crud的工作,渐渐的没有了成果产出,学习能力也退步了,每天做着重复的工作等着下班,结果有一天被老板炒鱿鱼了,仅仅是因为招来了一个好学的Android高级开发。。。。被辞之后他才意识到要技能提升,所以问我有没有什么好的学习路线或者什么学习的捷径。

大家都清楚,我们提升自己的学习方式,一般分为:

1. 自学,自我提高的一个过程;
2. 跟着公司项目成长,就是我们所说的做业务迭代的过程。

算了算,我也快工作七年了,这七年在不同时期有着不同的认知,也浪费了不少的学习机会,不过也总结了一些良好的学习习惯,今天跟大家分享下如何正确的利用工作环境学习。

一、线上疑难杂症

首先工作环境下,和自学是不同的,这里是实战,也就是将你所学的知识应用到线上,经过无数用户对你的代码进行验证,在不同配置的机型,不同的使用习惯,不同的网络环境下,会遇到很多问题:

① crash ,一般为应用添加监控主动上报
② 兼容性问题,一般由用户主动反馈

以上两类,一般业务上引发的问题,都能解决。

最后在平台上,都会剩下一些非常难解决,影响也不大的,我们称之为线上疑难杂症。

这类问题,想必大家都会遇到,很多时候,我们的态度是:

"没什么影响,大家都有"

"又不是我搞得,不管"

这样的态度是极其不正确的,这些问题才是学习的非常好的材料。

很久以前,曾经我参加过一次面试,问题就是有没有遇到过一些难搞的异常,是如何解决的?

当时我参与业务开发并不多,一时语塞,自己好像并没有特别关注过这些。

现在想想,是极其不应该的。

很多时候,我们抱怨做业务没有成长,恰恰相反:

我们在业务过程中,面临百万甚至千万级用户,总会遇到各种各样难解的问题,这些问题恰好是帮主我们成长的非常好的学习资料,而往往被我们自己懒惰 or 逃避的心态放弃了这样的学习机会。

所以,如果你看到这篇文章,不妨多关注这些问题。

有一个好消息是这些方案,一些业界大厂都会比较追求极致,往往也会分享一些技术性文章解释如何解决,我简单举几个例子:

1. finalize time out Exception

滴滴曾经分享:

  • 滴滴出行安卓端 finalize time out 的解决方案

2. bad token Exception

bugly 也分享一篇 window 的文章,其中对 token 也有一定的解释:

  • 浅析 Android 的窗口

也有一些非常优秀的个人开发者,针对 toast bad token exception 开源自己的方案:

https://github.com/PureWriter/ToastCompat

3. SharedPreference 导致的anr

头条技术团队,对于 SharedPreference apply 引发的 ANR 问题的分析与解决。

  • 剖析 SharedPreference apply 引起的 ANR 问题

4. webview的一些崩溃与兼容性问题

5. RxJava 使用不当引发的一些奇怪的问题

...

这些疑难杂症就摆在你的面前,而且有非常多的解决方案,可以让你去尝试解决,线上的环境又可以支撑你去验证。

不妨追求极致,尝试去修复这些问题。

这些可是自学环境下学不到的,即使你自学学到了这些问题的解决方案,也没有足够的条件让你线上验证。

另外,在工作中有什么追求极致的想法,例如一些极致的优化方案等,千万不要藏着掖着,尝试干一波,上线验证一波。

不经过线上验证的都是纸老虎,你永远没有办法了解方案的稳定性。

二、线下疑难杂症

另外,我们在正常的业务迭代过程中,自己或者同事,偶尔也会遇到一些比较难搞,或者极度不符合预期的问题,一般有:

1. 正常开发过程中遇到的难搞的需求;
2. 实现过程中与预期极其不匹配的情况;
3. qa报的比较偶现的bug;

这些问题,可以适当的关注一波,当然并不是把这个问题揽过来,可以去了解下这个问题,尝试自己解决下,或者思考为什么会这样,有结论了可以和同事讨论一下,共同解决。

没有结论,作为未知知识,后续同事解决了,问一波,再看下代码,也算学到了。

不是所有的需求都能遇到疑难杂症,遇到了不要退缩,反而应该庆幸,感觉要学到了,今天又赚到了。

记得有一次,我们遇到一个非常奇怪的线上问题,和同事一起搞了好多天,连续发了多个版本验证,针对遇到的问题,各种猜想、验证。顶着压力解决后,后面回顾这段时间,都会说道:

这波不亏,学到了。

在一个团队中,这样做事不设边界,除了能学到更多,也能和同事相处更加融洽。

三、总结

很多时候,有同学问我

「有哪些具体的知识学了之后就能成为高级工程师呢?」

没有。

职级都是公司赋予你的,并没有什么具体的知识学完就是高级工程师了,更多的还是要结合实际的项目经历,所以选择一个自己认可的公司,不断学习与积累,跟随项目成长,最终得到认可,赋予你 "高级"的 title。

而想要快速成长,文中给出了两点可以借鉴的方案。

其次,咱们这一行,绝大多数问题都不需要拼智商,90%的你遇到的问题,别人都遇到过,都能靠着搜索引擎解决。

但是每次解决后,如果你有心,去探索背后的原理:

1. 为什么会有这个问题?
2. 这个解决方案,最终解决问题的本质是?
3. 了解了本质后,是否还有更佳的解决方案。

长此以往,差距慢慢就显现出来了。

”有些同学遇到问题,依旧依靠搜索引擎“

”有些同学遇到各种问题,基本上看一眼报错,结合上下文,马上能想到问题的本质。“

想要快速技术成长,先摆正自己的态度,做好长期积累的准备。

四、如何长期的技术积累?

绵薄之力:

不知不觉自己已经做了几年开发了,由记得刚出来工作的时候感觉自己能牛逼,现在回想起来感觉好无知。懂的越多的时候你才会发现懂的越少。

不用多说,相信大家都有一个共识:无论什么行业,最牛逼的人肯定是站在金字塔端的人。所以,想做一个牛逼的程序员,那么就要让自己站的更高,成为技术大牛并不是一朝一夕的事情,需要时间的沉淀和技术的积累

关于这一点,在我当时确立好Android方向时,就已经开始梳理自己的成长路线了,包括技术要怎么系统地去学习,都列得非常详细。

至此,做为一名Android开发者,在工作项目上可能给不了大家太多实质性的帮助,只能在同学们自学的路上尽自己一点绵薄之力,接下来我想分享一下这些年来,我对于技术一些归纳和总结,和自己对作为一名Android高级开发者需要掌握那些技能的笔记分享,希望能帮助到有心在技术这条道路上一路走到黑的朋友!

  • 架构师筑基必备技能

目前Android APP开发主流语言就是Java语言,Java语言最大的特性就是提高了软件的交互可能性,可以说安卓手机几乎所有应用程序都是利用Java语言来进行编写的。

知识要点:
1、深入理解Java泛型
2、注解深入浅出
3、并发编程
4、数据传输与序列化
5、Java虚拟机原理
6、高效IO





设计思想解读开源框架

随着互联网企业的不断发展,产品项目中的模块越来越多,用户体验要求也越来越高,想实现小步快跑、快速迭代的目的越来越难,插件化技术应用而生。如果没有插件化技术,美团、淘宝这些集成了大量“app”的应用,可能会有几个g那么大。

所以,当今的Android移动开发,不会热修复、插件化、组件化,80%以上的面试都过不了。

知识要点:
1、热修复设计
2、插件化框架设计
3、组件化框架设计
4、图片加载框架
5、网络访问框架设计
6、RXJava响应式编程框架设计





  • 360°全方位性能调优

在不同层次的开发工程师手里,因为技术水平的参差不齐,即使很多手机在跑分软件性能非常高,打开应用依然存在卡顿现象。

另外,随着产品内容迭代,功能越来越复杂,UI页面也越来越丰富,也成为流畅运行的一种阻碍。综上所述,对APP进行性能优化已成为开发者该有的一种综合素质,也是开发者能够完成高质量应用程序作品的保证。

1、设计思想与代码质量优化

2、程序性能优化

  • 启动速度与执行效率优化
  • 布局检测与优化
  • 内存优化
  • 耗电优化
  • 网络传输与数据储存优化
  • APK大小优化

3、开发效率优化

  • 分布式版本控制系统Git
  • 自动化构建系统Gradle

4、项目实战

  • 启动速度
  • 流畅度
  • 抖音在APK包大小资源优化的实践
  • 优酷响应式布局技术全解析
  • 网络优化
  • 手机淘宝双十一性能优化项目揭秘
  • 高德APP全链路源码依赖分析
  • 彻底干掉OOM的实战经验分享
  • 微信Android终端内存优化实践

  • Android框架体系架构

Android框架体系架构(高级UI+FrameWork源码) 这块知识是现今使用者最多的,我们称之Android2013~2016年的技术。

Android开发者也往往因为网上Copy代码习惯了而导致对这块经常“使用”的代码熟悉而又陌生:熟悉的是几乎天天在和它们打交道, 天天在复制这些代码 ;陌生的是虽然天天和这些代码打交道,但是并没有深入研究过这些代码的原理,代码深处的内涵。

本篇知识要点:
1、高级UI晋升
2、Android内核组件
3、大型项目必备IPC
4、数据持久与序列化
5、Framework内核解析




  • NDK模块开发(音视频系列)

NDK(Native Development Kit缩写)一种基于原生程序接口的软件开发工具包,可以让您在 Android 应用中利用 C 和 C++ 代码的工具。通过此工具开发的程序直接在本地运行,而不是虚拟机。

在Android中,NDK是一系列工具的集合,主要用于扩展Android SDK。NDK提供了一系列的工具可以帮助开发者快速的开发C或C++的动态库,并能自动将so和Java应用一起打包成apk。

本篇知识要点:
1、NDK开发之C/C++入门
2、JNI模块开发
3、Linux编程
4、底层图片处理
5、音视频开发
6、机器学习





  • Flutter学习进阶

2019 年无疑是 Flutter 技术如火如荼发展的一年。

每一个移动开发者都在为 Flutter 带来的“快速开发、富有表现力和灵活的 UI、原生性能”的特色和理念而痴狂,从超级 App 到独立应用,从纯 Flutter 到混合栈,开发者们在不同的场景下乐此不疲的探索和应用着 Flutter 技术,也在面临着各种各样不同的挑战。

本篇知识要点:
1、Flutter跨平台开发概述
2、Windows中Flutter开发环境搭建
3、编写你的第一个Flutter APP
4、Flutter Dart语言系统入门





  • 微信小程序开发

微信小程序作为现在比较火的编程开发应用场景之一,深受市场的青睐,这让不少开发者眼馋不已。但是对于初学者来说,就完全摸不着头脑了,不知道微信小程序开发制作需要学习那些知识,有需要的朋友可以参考本篇。

本篇知识要点:
1、小程序概述及入门
2、小程序UI开发
3、API操作
4、购物商场项目实战



  • Android相关源码解读

只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。

以上内容均免费分享给大家,需要完整版的朋友,点这里可以看到全部内容

技术之路就是漫长的打怪升级,不断学习前人的踩坑经验才能提升自己,切忌闭门造车。所谓独乐乐不如众乐乐,分享以上学习资料,希望小伙伴们能在 coding 的路上走的更远!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!