Android程序员的进阶之路——不止编程
Posted 上马定江山
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android程序员的进阶之路——不止编程相关的知识,希望对你有一定的参考价值。
假设你已经从事程序员这个工作有一段时间,对这个行业有了一定了解,也许你觉得你已经是这一领域的大牛,也许你觉得你还有很多不足,但是不管你当前的位置如何,你都面临着一个同样的问题:接下来自己该怎么走?
认识自己
作为程序员,你需要回答这些问题来认识自己:
- 我愿意从事程序员工作多久?
- 我想要成为一个专才,还是一个通才?
- 我是一个内向的人,还是一个外向的人?
- 我是一个面向技术和产品的人,还是一个面向商业的人?
- 我是喜欢稳定的工作,还是喜欢充满冒险的工作?
能够回答上面这些问题,你就完成了大部分的认识自我。
认识行业
接下来自己该怎么走?
换句话说,你要考虑的不是某个函数的代码怎么写,也不是接下来一个项目流程图怎么画,你要考虑的是,未来 10 年、20 年,你该何去何从。
这就是职业规划,恭喜你,如果你能够考虑到这个层面,意味着你开始认真思考自己的人生了,这是一个好的开始。
程序员的职业发展路径并不单一,甚至要比其他职业有更多选择,你可以选择在程序员的道路上持续走下去,也可以转到管理岗位,也可以选择成为产品经理或者项目经理,这些职业发展路径都是程序员这个职业的延伸,你需要付出一些努力,也要接受一些改变,但是绝不是从零开始。
程序员的级别划分
接下来,我们就分别介绍这些不同的发展路径。成为更高阶的程序员 成为更高阶的程序员,这是最直接的发展方向,也是大部分程序员的选择,这就像是一个游戏,通过不断完成更有挑战的任务,获得级别的提升。
每个成熟公司都会有级别划分,比如,刚招募的大学毕业生是「初级软件工程师」,工作一两年之后,会被提升为「软件工程师」,再工作几年,会被提升为「资深软件工程师」,当能力和影响力进一步提升,成为「首席软件工程师」……我这里只是举了一个很粗略的层级晋升制度,实际上每个公司的层级数量要多得多。 这样的晋升制度,是程序员职业生涯的一部分,但不是全部,等级制度只是为了方便管理,一个「资深工程师」头衔的工程师未必能力就比「软件工程师」更高,这一点我们首先要有清晰认识。
当然,我们应该努力提升自己,向更高级别迈进,因为这样我们在团队中可以获得更大的话语权,也可以获得更多的薪水,但是,我们不要买椟还珠忽略了关键,职业发展并不只是与资历和金钱相关,更多的是关于你的能力和影响力,这很重要。 如果你身处成熟型公司,你需要去阅读一下公司对各个级别程序员的职业要求,如果你找不到,就去找管事的 HR 要,公 司 HR 必须对每个级别的要求有一个明确定义,这种定义将指导你如何提高各方面的能力和影响力。
如果你身处创业型公司,或者你所在公司真的拿不出像样的级别定义,那么,可以参考下面的级别定义:
-
初级程序员,掌握基本的编程技能,但是需要别人的辅导才能完成给定的任务,不能独立自主完成项目。程序员应该尽早超越这种状态。
-
中级程序员,能够独立完成一个特定领域的项目,知道如何安排优先级,知道如何处理预料不到的情况,靠谱完成任务。
-
资深程序员,可以融会贯通各个领域,不光可以完成任务,还能够影响一个团队,帮助整个团队完成任务。 首席程序员,不光可以影响一个团队,还可以影响一个公司或者大部门,可以对程序员团队的工程策略进行指导,保证整个大团队都按照最合适的实践方式前进。
-
合伙人级别程序员,这可能是程序员职业的顶点了,你的影响不只是一个公司范围内,而是整个行业范围内,你的工作是开辟新的领域。要注意,并不是说在互联网上吵吵的网红就是这种级别,能达到这种级别的是 Linus 这种开创某个领域的人。
能力与影响力
从上面的级别描述可以看出,每一个级别有两个关键元素,一是「能力」,另一个是「影响力」,能力代表你一个人能做什么,影响力代表了你能够让别人做什么,以及你能够影响多少人。
程序员段位的成长,其实就是提升自己「能力」和「影响力」的过程。根据上面级别能力和影响力的描述,你可以衡量你目前居于什么级别,就知道自己下一步应该到什么级别,对应发展自己相关的能力和影响力。比如,你此时只是「中级程序员」的水平,就应该有目的地培养自己影响其他人的能力,着眼点就是自己所在的团队,不只是自己要做好,也要让自己的组员能做得更好,当你达到这个目标,你才能升级为「资深程序员」;当年你成为「资深程序员」,你就需要考虑更进一步提升自己的知识储备,影响一个大部门甚至整个公司。
尝试其他岗位
成为管理层
从程序员转变为管理者,决不是编程比其他程序员编得更好就行,自己做程序员,和管理程序员完全是两码事。目前行业还是普遍缺乏对管理能力的培训,所以,一些公司会让一些出色的程序员仓促成为管理者,但是实际上他们没有准备好,这样给团队和个人都会带来很多问题。所以,如果要转型成为管理者,请先问自己这几个问题:
- 我是否更愿意处理琐碎的管理工作,而不是长时间专注在编程上?
- 我是否更愿意帮助别人完成任务,而不是事必躬亲自己完成?
- 我是否认为只有团队成功,才是真的成功?
只有你对上面三个问题的回答全部都是肯定的,你才从态度和心理上做好了成为管理者的准备,因为成为管理者之后,真的大部分时间都在处理琐碎的工作,你没有多少时间亲自动手编程了,因为总会发生各种各样的意料之外的事情,处理这些事情才是管理的常态;而且公司评判你工作是否做得好的标准,完全看你所领导的团队的业绩,你一个人编程能力如何已经不重要了,做程序员的时候,你的成功就是你自己的成功;当你成为管理者的时候,你的成功必须是整个团队的成功。
有一条管理的精髓:
没有放之四海而皆准的管理方法,管理的奥义就是具体情况具体分析,不同的场景用不同的管理方法。
成为产品经理
产品经理的职责是定义产品需求,在我国 IT 圈中,流传着很多产品经理和程序员水火不容的故事,这些故事并非意味着这是相克的两种岗位,这些冲突是因为两个位置上的人互相不理解。从这个意义上说,程序员转型为产品经理具有天然的优势,因为他们更懂技术人员的思维,在和程序员的交流沟通中,更能照顾到程序员的体会。
业界曾有这样一个故事,产品经理和程序员打起来了,因为产品经理给 ios 程序员提了一个功能需求「识别手机壳的颜色」,这样缺乏技术常识的需求,很容易激怒程序员,从而引发冲突。而一个有程序员经历的产品经理,具备基本的技术思维,绝不会犯这种错误。
如果要转型为产品经理,思维方式必须完成下列转变:
- 程序员关注的是「怎么做」,产品经理需要回答「为什么要这么做」;
- 程序员追求技术的卓越,产品经理要把给用户带来的价值放在首位;
- 程序员看到的是具体实现方式,产品经理看到的是市场的风向。
成为项目经理
项目经理和产品经理的责任不同,虽然在我国有些企业中,这两个角色很可能落在一个人身上,但是这并不是一个合理的做法,因为产品经理负责「做什么」,项目经理负责「以什么进度做」,如果一个人身兼两职,相当于一个人既当裁判又当球员,会制定出不合理的计划进度,也更容易和程序员产生冲突。
程序员转型为项目经理,需要具备这些方面的能力:
- 组织会议的能力;
- 协调多方进度的能力;
- 编写工作进度报告的能力。
最后
android学习进阶之路任重道远,如果你选择了Android,那就要一鼓作气,不能半途而废。Android的技术更新得非常快,但有兴趣才是坚持下去的动力,一起加油。
在这里分享一份由字节跳动大佬亲自收录整理的Android学习PDF+架构视频+面试文档+源码笔记,高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料这些都是我现在闲暇时还会反复翻阅的精品资料。
里面对近几年的大厂面试高频知识点都有详细的讲解。相信可以有效地帮助大家掌握知识、理解原理,帮助大家在未来取得一份不错的答卷。
当然,你也可以拿去查漏补缺,提升自身的竞争力。真心希望可以帮助到大家,Android路漫漫,共勉!
下面是部分资料摘要(文末有免费获取方式):
1.Jetpack架构组件从入门到精通
- Android Jetpack - Navigation
- Android Jetpack - Data Binding
- Android Jetpack - ViewModel & LiveData
- Android Jetpack - Room
- Android Jetpack - Paging
- Android Jetpack - WorkManger
- Android Jetpack架构组件之Lifecycle
- Android Jetpack Compose 最全上手指南
2.Framework精编内核解析
主要内容包含:
- 深入解析Binder
- 深入解析Handler
- Dalvik VM 进程系统
- 深入解析 WMS
- PackagerManagerService
3.Kotlin强化实战(附Demo)
- 第一章 Kotlin入门教程
- 第二章 Kotlin 实战避坑指南
- 第三章 项目实战《Kotlin Jetpack 实战》
- 从一个膜拜大神的 Demo 开始
- Kotlin 写 Gradle 脚本是一种什么体验?
- Kotlin 编程的三重境界
- Kotlin 高阶函数
- Kotlin 泛型
- Kotlin 扩展
- Kotlin 委托
- 协程“不为人知”的调试技巧
- 图解协程:suspend
4.Android设计思想解读开源框架
- 热修复
- 插件化
- 组件化框架设计
- 图片加载框架
- 网络请求框架
- RXJava 响应式编程框架设计
- IOC 架构设计
- Android架构组件Jetpack
5.NDK模块开发
- NDK 模块开发
- JNI 模块
- Native 开发工具
- Linux 编程
- 底层图片处理
- 音视频开发
- 机器学习
6.高级UI,自定义View
UI这块知识是现今使用者最多的。当年火爆一时的Android入门培训,学会这小块知识就能随便找到不错的工作了。
不过很显然现在远远不够了,拒绝无休止的CV,亲自去项目实战,读源码,研究原理吧!
7.深入理解Android插件化技术(附Demo)
第一章 插件化技术的前世今生
第二章 插件化原理
第三章 Android插件化初探
第四章 架构演化(大厂篇)
- 360插件开发之DroidPlugin
- 滴滴VirtualApk实战
- 基于VirtualAPK Android重构之插件化
- 爱奇艺插件化原理分析之 Neptune框架
- 腾讯插件化框架 Shadow项目解析
8.高级Android组件化强化实战(附源码)
第一章 Android组件化初识
第二章 Android组件化初探目录
第三章 架构演化(大厂篇)
- 从智行 Android 项目看组件化架构实践
- 得到 App
- 微信 App
- 蘑菇街 App
- 爱奇艺 App
- 美团 App
- 携程App
- 支付宝 App
- …
凡事要趁早,特别是技术行业,一定要提升技术功底,丰富项目实战经验,这对于你未来几年职业规划,以及技术掌握的深度非常有帮助。
最重要的一点,接受现实,世间不会有永恒的繁荣。人同样如此。
人生不易,且行且珍惜。
以上是关于Android程序员的进阶之路——不止编程的主要内容,如果未能解决你的问题,请参考以下文章