这篇文章是我的一个朋友写的,总结了这些年的技术成长之路,我觉得对于很多技术人都有借鉴的作用,技术是相通的,不要整天想一口气吃成一个胖子,不积跬步无以至千里,既然选择了技术这条路,就不畏艰辛,苦中有甜,甜中有苦,我看了小二哥的总结,自己也觉得很羞愧,我看书的毅力没有二哥这样强。

每个人的学习方法可能存在一些差异,但是目的都是一样的,你觉得你看书很容易进入状态,那就去看书,如果你看视频很容易进入状态,那就去看视频,如果你动手操作很容易进入状态,那就买开发板回来研究。但是,一定要有自己的积累。

下面文章中的我,指的是作者王小二C。


前言

我是一个已经接近6年工作经验的Android工程师,我想通过分享一下个人的成长之路,帮助大家可以少走一些弯路,或者有一些新的启发。

2014年2月-2015年1月:

当时我是大四下半学期,公司希望我去实习,因为我之前是做javaweb方向的,所以我在寒假里差不多7天时间,学完了《疯狂android讲义》,刚开始实习,主要是解决bug,这时候改一个UI的字符串的异常,就已经很开心了,正好有同事要离职,他把一个已经开发差不多的APP交给我开发,这个时候我渐渐掌握了自定义控件,动画,Handler,四大组件的基础用法。由于是在手机厂商工作,所以也有了APK编译流程的概念,了解源码下编译APK和Eclipse编译的相似之处。

2015年2月-2015年5月:

去印度出差,增长了很多见识,也是第一次知道什么叫native crash,发现高通工程师分析log的能力非常强,这个时候我对整个android系统有了一丢丢的概念。最关键是了解到高通在手机厂商中角色。

2015年5月-2017年5月:

从印度回来之后,我被分配到了FWK组,主要是负责手机的稳定性,这个时候就会有大量的crash,手机重启等问题,渐渐的对system_server进程,开机流程,开机动画,zygote进程,Input子系统有了一些概念,幸运的是我参加了一个有关于VR的项目,让我对SurfaceFlinger有了一定的概念,但是这个时候说实话,我对native开发能力,也就能看看代码,有时候还看不明白,而且找了好多资料,都无法掌握native的开发能力,而且我持续不断的在学Binder机制,但是总是感觉没有学明白,老罗的《Android系统源代码》无数次的打开,又失望的合上。

2017年6月-2018年6月:

我认真的研究JNI,等研究完JNI之后,我发现不管是Binder机制,还是原来一些看不大懂的FWK的native代码,也能看懂了,还有Looper源码也更加理解了,但是说让我去开发一个native的程序,还是有一点虚的

2018年6月-2019年6月

我开始慢慢接触Linux kernel,复习C语言,慢慢的了解了Linux的一些IO复用机制例如Epoll机制,跨进程通信例如socket通信,pipe,匿名共享内存,对Binder驱动也差不多理解了百分之70,一下子把我前几年所学的知识串联起来了。
Looper:Epoll + Pipe
Input子系统:Socket + Epoll + Binder机制
Surface GUI:Binder + 匿名共享内存
虚拟机的fork:Socket

2019年6月-至今

我开始正式学习Linux kernel,主要方法是IO方向,正好学习了VFS,也看了Linux驱动开发的书籍,一下子发现了差不多完全理解Binde机制,而且通过Binder机制反过来了解Linux的进程管理,内存管理,同步锁等,我又看了《程序员的自我修养》这本书,对一个C语言程序在Linux系统上运行的状态,有了一个充分的了解,一下子我发现自己把整个Kernel+Fwk+App都打通了。脑海中可以浮现出整个手机运行状态的每个进程,每一个线程在干嘛。

借用gityuan的一段话描述我目前的一个状态:

Android系统之博大精深,包括Linux内核、Native、虚拟机、Framework,通过系统调用连通内核与用户空间,通过JNI打通用户空间的Java层和Native层,通过Binder、Socket、Handler等打通跨进程、跨线程的信息交换。只有真正阅读并理解系统核心架构的设计,解决问题和设计方案才能做到心中无剑胜有剑,才能做到知其然知其所以然。当修炼到此,恭喜你对系统有了更高一个层次的理解,正如太极剑法,忘记了所有招式,也就练成了太极剑法。

再回过头去看看那些API,看到的将不再是一行行代码、一个个接口的调用,而是各种信息的传递与交互工作,而是背后成千上万个小蝌蚪的动态执行流。记得《侠客行》里面的龙木二岛主终其一生也无法参透太玄经,石破天却短短数日练成绝世神功,究其根源是龙木二岛主以静态视角去解读太玄经,而石破天把墙壁的图案想象成无数游动的蝌蚪,最终成就绝世神功。一言以蔽之,程序代码是死的,系统运转是活的,要以动态视角去理解系统架构。

未来

目前我的主要工作是负责android手机的性能优化,kernel的IO优化,我发现工作那么多年,只能说目前的自己真正有能力去研究一些东西了,自己的知识体系已经建立起来了,可以添砖加瓦了。

这些年我看过的书

但是我还是推荐这五本书

目前在看的书



总结

1.从APP层-FWK层-Kernel层打通的难度和周期远远大于Kernel层-FWK层-APP层,我就是属于前者,走了太多的弯路,后者的发展之路,我相信会比我快很多,gityuan就是属于后者。

2.Binder机制一定能要研究,否则你基本不可能可以打通整个android系统。跨进程通信,跨线程通信都是我们需要去仔细研究的。

3.你可以不精通C++,但是一定要达到Linux C语言的开发能力,其实我们缺的不是Android NDK的能力,而是缺的是Linux C的开发能力。

4.多看看书,我文章中用了好多次的一下子,整个一下子真的是一下子顿悟了,因为我之前已经有大量知识的积累了,所以捅破窗户纸,就可以豁然开让,当然我的同事也很牛逼,也帮我捅破的很多窗户纸。

5.多去回答同事和网友的问题,在一次次回答问题,被反问中,你自己对知识的理解会不断的加深。

6.当你发现自己不懂的知识越来越多的时候,证明你懂的知识越来越多。


扫码或长按关注

回复「 篮球的大肚子」进入技术群聊

一个大神的Android成长之路相关推荐

  1. 王小二C:一个大神的Android成长之路

    这篇文章是我的一个朋友写的,总结了这些年的技术成长之路,我觉得对于很多技术人都有借鉴的作用,技术是相通的,不要整天想一口气吃成一个胖子,不积跬步无以至千里,既然选择了技术这条路,就不畏艰辛,苦中有甜, ...

  2. 一个女测试工程师的成长之路

    一个女测试工程师的成长之路 的主人公从刚毕业时的多次失败,通过自己的努力一步步走向成熟,其毅力令人敬佩. 文中多次鼓励读者要自信.自强,"人得自已成全自已". 文章有点长,请慢慢品 ...

  3. 【网络文摘】一个大神程序员的使命感究竟应该是什么

    来源:一个大神程序员的使命感究竟应该是什么 工作了五年的工程师,算不算高级开发者?归类开发者不是简单地看工作年限,因为经验这种东西千金难换但又一文不值. 我们现在工作的行业很奇怪.明明每年都有新的从业 ...

  4. 一个大神的twitter

    今天看见一个大神的twitter,居然能够拿到微软win10各种版本的update ISO,还能拿到微软各种最新软件的release和preview版本,是黑客还是内鬼. twitter的地址: ht ...

  5. android无线充电技术,国外大神发现Android 11隐藏功能:反向无线充电

    中关村在线消息:近日据悉,谷歌正式发布了Android 11开发者预览版,不过国外XDA大神在研究Pxiel 4的Android 11系统时,发现了隐藏的新功能--Battery share. 国外大 ...

  6. android 无线充电节点,国外大神发现 Android 11 隐藏功能:反向无线充电

    中关村在线消息:近日据悉,谷歌正式发布了 Android 11 开发者预览版,不过国外 XDA 大神在研究 Pxiel 4 的 Android 11 系统时,发现了隐藏的新功能-- Battery s ...

  7. android 无线充电架构,大神发现Android 11隐藏新功能:反向无线充电放心了

    原标题:大神发现Android 11隐藏新功能:反向无线充电放心了 今天,谷歌正式发布了Android 11开发者预览版,不过XDA大神在研究Pxiel 4的Android11系统时,发现了隐藏的新功 ...

  8. 阿里 10 年:一个普通技术人的成长之路

    作者 | 宋意  阿里巴巴高级技术专家 来源|阿里巴巴云原生公众号 导读:不管是什么角色,成长是我们每个人都必须经历的过程.作为一个技术人,成长不仅是技术上的不断精进,也包括日常工作中的方方面面.本文 ...

  9. 阿里10年:一个普通技术人的成长之路

    简介:不管是什么角色,成长是我们每个人都必须经历的过程.作为一个技术人,成长不仅是技术上的不断精进,也包括日常工作中的方方面面.本文分享阿里巴巴高级技术专家在阿里10年的成长之路,分享他从一个普通技术 ...

最新文章

  1. shell shocked什么意思_Shell 启动类型探究 ── login interactive
  2. JS---设计简易日历
  3. debian 7上安装svn
  4. js 加入debug后可以进入controller_新手入门Nest.js(四) 控制器路由
  5. 怎样提高团队管理能力5
  6. 关于AutoResetEvent 和ManualResetEvent
  7. 左侧固定 右侧自适应三种方法
  8. 2022翼支付产业合作解决方案发布 权益累计发展用户超1.36亿
  9. mysql 添加删除权限_MySQL实例讲解:添加账户、授予权限、删除用户
  10. VS里面关于.cpp文件与.cu文件混合编译问题---不要在.cpp文件声明核函数(__device__()和global__())
  11. MySql性能优化学习路线图
  12. 十大免费java开源商城系统
  13. java的帮助文档(API)
  14. 语义分割系列5-Pspnet(pytorch实现)
  15. Springboot系列-自定义starter
  16. 零基础怎么学习平面设计
  17. 仿xp画板、画图重绘、五子棋总结
  18. 面试官:软件测试没搞懂这些,哪里来的自信投简历? 刁钻问得高频的面试题(含答案)
  19. 关于烛光斧影——赵光义是否谋杀赵匡胤,是否合法继位
  20. 区块链项目ICO评估模型

热门文章

  1. ***PHP 去除换行符
  2. python读取postgresql数据库并发送相关提醒邮件
  3. 摈弃 Windows 低效率的工作方式,发掘 Linux 身上的 UNIX 气质
  4. TurboMail手机客户端—强大的附件文档阅读能力
  5. Diango博客--7.自动生成文章摘要
  6. python面试题总结(5)--数据类型(字典)
  7. 【python】逻辑运算符总结
  8. linux :vim 实现命令行下输出进度条
  9. 什么可以作为gcroot_面包果既能当水果又可以作为粮食,国内却无法普及,这是为什么?...
  10. frp对http协议应用