“创业吃过饼,国企养过老” 架构师的头发不是一天掉完的!

“创业吃过饼,国企养过老” 架构师的头发不是一天掉完的!

https://blog.csdn.net/Androidxox/article/details/114640508

床上等你来学习 2021-03-10 17:09:58  34  收藏 9
分类专栏: 程序员 Android 移动开发 文章标签: 程序人生 android 移动开发 java
版权
罗马不是一天建成的,也不知从何时起,已经没办法将头发梳成大人模样了。是彻夜研究Framework内核的那个晚上吗?还是坚持读完所有开源框架源码的那3个月?算了,不管了,好在我变强了!

前言
我们做技术开发的,大部分人都有个习惯,那就是喜欢不定期地进行总结,当然我也不例外。我有个特别的爱好,那就是把我一年前的代码拿出来和我现在写的代码进行对比,看是否有所长进。

一个人回首过去,如果发现现在的自己和一年前或者更久前的自己没有任何积极的变化的话,那么你这些年就算是虚度光阴了。 回首我这五年,如果说前三年我是野蛮生长、疯狂撸码、较为浮躁的三年,那么这三年我就是沉下心来,潜心修炼积累经验的三年。

工作环境发生变化
我从事Android开发的前三年只在一家公司待过,每天都做着几乎相同的工作,做的项目也是较为简单的小项目,一两个人就能承担的应用开发,用的也是相对简单,没有什么核心竞争力的技术。

但是这三年来,我接触到了不少的公司。它们有改革的老国企,有刚刚成立的创业公司,也有已经上市的公司。不同类型、不同行业、不同规模的企业,必然导致工作内容、团队、企业文化的不同。

相比较我待的第一家公司来说,后面的几家公司更加尊重我的个人看法,这也是我决定跳槽的原因。虽然我也非常感谢我的第一家公司给予我更多的机会去成长,但是我们出来工作本质上还是要挣钱糊口的,光谈理想而不给予现实的恩惠,一味强调你是公司培养出来的,时间长人是会“饿死”人的,自然也就留不住人了。

老旧国企
俗话说:“跳槽是有成本的”。由于工作内容、团队的变化,我需要重新学习特定行业的专业知识,重新建立自己的同事关系,这就要求我需要非常强大的学习能力和适应能力。

我的第一次跳槽相对来说是比较失败的,因为没有经验,我居然跳槽到了一个严重老龄化的前国企公司,这是一家做汽车硬件的企业。周围的同事平均年龄35岁以上,每天他们讨论的话题都是自己家小孩的学习教育,这让我这个连女朋友都没有的单身汪情何以堪。更让我无法适应的是它那非常慢的工作节奏,一周的工作半天就完成了。剩下的时间完全不知道做什么…真的是无事可做。

创业公司
后来我被一位非常赏识我的老板看中,加入到他的创业公司,成为了一名创业者。这是一家从事儿童可穿戴设备的公司,作为最早加入的员工之一,我可谓是见证了一家创业公司从起步到发展再到衰落的全过程,而这仅仅只需要一年的时间。

创业公司的坑虽然不少,不过这对我们个人的成长还是非常有价值的。在创业公司的这一年,我做了很多普通程序员这一辈子可能都无法触及的工作内容,也积累了很多人生哲学。

1.应用开发框架的搭建
2.产品需求讨论
3.企业文化建设
4.企业税务处理
5.应用的上架和运营
6.产品生产、组装、销售和售后维护
7.企业商标、专利注册
在创业公司,职位没有明显的划分,很多时候你需要做很多与你岗位无关的工作。从好的角度来说,这可以极大地丰富个人的人生阅历,提升一个人独立思考、自主学习和解决问题的能力。如果你的经济能力有一定的支持,那么去创业公司历练一把也是非常不错的,万一它日后发展成为一家独角兽呢?


上市公司
之后我来到了我现在待的这家公司。比起我之前待的创业公司就我一个Android开发,在这里我算是找到了失去很久的团队归宿感。大公司除了人多以外,工作的强度和难度也大大地增加,加班当然也成为了家常便饭,当然与之相对应的福利也是提升了不少。

在大公司,技术水平并不是决定这个人发展潜力的决定性因素。要知道大公司最不缺的就是人才,能进大公司的,哪个不是有两把刷子的呢?对于大公司而言,他们需要的是拥有极强责任心以及任劳任怨的员工,能否承担某一模块功能的稳定性就直接决定了你的去留。

除此之外,沟通能力也是非常重要的能力。因为大公司的项目功能相对复杂,参与的人员众多,很多复杂的问题往往可以通过沟通予以解决。而且及时表达出你的想法,主动承担一些紧急的任务都能给你很多的加分。可以说在大公司的这些日子里,让我学习和领悟到了很多非技术方面的能力:

语言表达能力(大公司经常需要在很多人面前发言)
与不同人沟通的能力
复杂问题的定位和解决能力
团队协作能力
帮助(指导)他人的能力
团队建设和管理的能力
上面的这些能力,很多是仅仅靠撸码是无法获取到的。

心态上发生变化
我从事Android开发的前三年,之所以那么拼命地工作和学习,一部分是出于兴趣,而另一部则是想要证明自己。

对于公司而言:我要证明自己是公司不可或缺的人才
对于领导而言:我要证明自己的技术水平是组内第一
对于家人而言:我要证明自己有能力养活自己
对于女友而言:我要证明自己有能力独自照顾一个人
**马斯洛需求层次理论告诉我们,当一个人的需求得到满足之后,他会追寻更高层次的需求。**当这些都被我一一证明了之后,一切都变了。

证明自己已经显得不那么的重要,追求自身价值的体现成为了我现阶段的目标。于是,我离开了当年的那家公司,放弃了父母规划的道路,离开了女友,开始遵从着自己的内心,寻找人生的答案…

此时的我,需要的并不是别人的肯定。我并不会在意别人的赞赏或者是诋毁,我所做的都是发自内心的事情,而不随外物而影响。于是,我选择成为了一名开源项目的创作者和布道者。将我平时积累的技术经验全部分享出来,目的就是帮助全世界所有热爱技术的人士,同时让我的价值在别人身上得到体现。

在这三年内,我积极维护我开源的项目,同时还在各大技术社区和论坛上发布一些相关的技术文章,同时还运营了自己的微信公众号。近期,我还积极创作一些开源技术相关的视频。这样做的目的,一方面是可以把自己的经验和技术分享给更多需要的人,让知识发挥它更大的作用(知识在于传承), 另一方面也是满足了自己的虚荣心,让自己的价值得以体现。


夹带私货,欢迎来我主页关注,点赞,可点击上文蓝色字直达。
思维方式发生变化
从事Android的前三年,我的想法是相对激进的。那时的我,对所有的新技术都是那么的趋之若鹜,而对于那些相对陈旧的技术是嗤之以鼻。我天真地认为那些新技术都是革命性的,都需要去掌握、学习并运用到实际的工作中去,而那些旧技术就是需要替代的对象。

于是,我就不计代价,大张旗鼓地把公司之前使用的旧技术一股脑地都准备换了,而当时领导的处处阻挠在我看来就是技术上的不思进取,中间还闹了不少矛盾,这也成为了我后来离开公司的原因之一。现在想来,当时的我想法真的是非常的幼稚!

技术不是唯一的生产力
技术是生产力,但并不是唯一的生产力。

在创业公司的那一年里,让我彻彻底底地明白了,技术并不是唯一的生产力。一家公司的发展,更多靠的是强力的融资能力(资本),强大的渠道推广能力(营销),很多时候技术只是其中的一部分,充当的仅仅是工具人的角色。

当年那个极力崇尚技术至高无上的青年被现实狠狠地教育了一把。那时的我认为只有纯做技术的才能被人尊重,而那些在产品线做业务、测试,或者跑业务跑市场的人都是不值一提的。然而也正是我那时瞧不起的那些人,直接导致了我待的那家创业公司的衰败。

技术没有好坏
技术没有好坏,更没有高低贵贱,有的只是合适与不合适。

新技术一定比旧技术好吗? 如果这个问题在两年前问我,那么我的回答一定是肯定的!但如果你现在问我,我的回答就不一样了。任何的新技术一定是在旧技术上有了一些改进,否则它就不为是一项新技术。那么我们为何不直接使用它呢?因为这里我们考虑的更多是成本的问题:

新技术必然带来更高的学习成本
新技术的引入必然带来更多的替代成本
新技术如果尚未成熟,当遇到一个坑时必然带来更大的解决成本
如果使用新技术遇到一些无法解决的问题,会带来一些风险成本
当一项技术的使用所带来的收益要远远大于它带来的成本时,这个时候我们才会考虑采用这项技术.可以看到上述我列举的成本对于大公司来说是相当巨大的:

大公司的人员较多,新技术的学习成本非常高(不可能全裁了重招吧)
大公司的项目通常偏大,替换的成本相对较高
大公司产品的功能较为复杂,碰到一些没人遇到过坑也是常有的事
大公司对项目的风险一般是零容忍的:宁可不做也不能冒风险
这也是为什么很多大公司不愿意采用新技术,而是选择沿用之前成熟的技术的原因。所以我们在思考一项技术能否被我们采用的时候,压根就没有考虑过这项技术的新旧以及高低贵贱。至于那些成天在技术社区里发一些技术焦虑文章的人,我觉得社区就应该屏蔽他们,以免误导那些刚入门的小朋友。

追本溯源
当你抛开事物的表面,去追寻其本质之后,你会发现很多东西都是相通的。

两年前我在学习和使用技术的时候,更多的是遵循拿来主义和实用主义,天真地认为我会用这项技术就等于我掌握了这项技术。之所以这么想,归结原因还是见的世面太小了。之前待的小公司,业务并没有那么复杂,用例也没那么多,遇到的情况也相对简单单一,所以简单地使用基本就完事了。

然而,到了大公司之后,那业务的复杂程度以及用例覆盖到的场景远远是你所想象不到的。很多时候,一些问题你是不能通过简单的使用就能解决的。尤其是发生一些诡异的问题时,你不阅读源码了解其实现原理,是无法进行解释的。

举个例子,我们做Android的都用过RecyclerView,可你有阅读过RecyclerView的源码,了解其缓存机制吗?相信你看完RecyclerView的源码之后,你就会知道,其实你所谓的掌握RecyclerView,只不过是RecyclerView的冰山一角。

学习一项技术,如果你只是掌握了如何去使用,那么这只是你迈出去的第一步,后面更重要的是要追本溯源,深究其底层实现原理,这个时候你才会发现,很多技术原来是相通的。

最后
作为一名Android开发的热爱者,只要Android不死,我就会一直在Android开发的道路上前行。无论前途如何曲折,我相信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文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。


————————————————
版权声明:本文为CSDN博主「床上等你来学习」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Androidxox/article/details/114640508

猜你喜欢

转载自blog.csdn.net/z136370204/article/details/114653838