职业进阶,职业规划与计划(3年,5年,10年计划等),个⼈
(中年)危机
-- 制定⽬标必须要遵循SMART原则:
1.⽬标必须是具体的(Specific)
2.⽬标必须是可以衡量的(Measurable)
3.⽬标必须是可以达到的(Attainable)
4.⽬标必须和其他⽬标具有相关性(Relevant)
5.⽬标必须具有明确的截⽌期限(Time-based).
-- ⾛技术还是管理路线
⾼级⼯程师之后可以有两种侧重⽅向或者说两种发展路线。
1. 第⼀种是管理路线,⾸先要对移动端和前端有⼀个系统的认知,并⾮说要完全掌握移动端和前端 co
ding 的能⼒,更多可以侧重于扎实的技术基础,再加上对技术的理解和融会贯通,就算不能快速地写出 iOS 和前端的代码,也应该对实现流程有⼀个清晰的认识,并且能够快速定位问题。
同时要熟悉服务端开发流程,负责移动端项⽬管理,最终成为移动端研发经理,如果你不打算学习后端知识基本⽌步于此了。不满⾜于此的可以继续去学习后端开发,拓宽之后的职业发展可能性。
2. 第⼆种是纯技术路线,往往是⼀个专业细分领域⽐如⾳视频、三维图形、逆向安全、性能优化等,根据不同的细分领域,市场上有需求的⾏业和公司数量也会不⼀样,但若是该公司的核⼼需求,⼀般也会是公司的核⼼技术岗位,成为该领域市场上少有的精通⼈才的话,不可替代性也会很⾼。如果想⼀直 coding 下去,那么打好基础、准⽅向是没有错的。
明确了⽅向之后,具体怎么做呢?可以分成⼏个⽅⾯。
⾸先,技术基础是必不可少的。刚开始进⼊公司写业务功能的时候,可能会觉得数据结构、算法、操作系统、编译原理之类的基础对⾃⼰⽇常的⼯作内容没有什么影响,知道怎么⽤就好了。
实际随着⼯作内容的深⼊,以及对不同技术的涉猎,会发现技术看似⼀直在发展、创新、变化,⽽底层的逻辑和原理是不太会变化的,越是不断变化的东西,理解它底层的原理就越是重要,这时候再去看待和学习它的变化就会轻松许多。
其次,要深⼊学习⾃⼰的“⼀技之长”,对 Android 开发⼯程师来说就是 Android 的相关知识:UI、底层原理、NDK、架构、调试实战经验等等。
业务或者技术⽅案,站在不同的时期和视⾓上看,难免会有不同的意见,但是技术是不会模棱两可的,会就是会,不会就是不会。
如果考虑管理路线的话,有⼏年⼯作经验的 Android coder,此时应该更加主动参与项⽬、承担⼯作、积极沟通需求和实现,对业务培养起⾃⼰的理解。架构孵化于业务,并且服务于业务,技术和业务齐头并进才能更好地发展(对于公司和个⼈都是如此)。
同时,多观察你的 Leader,看他是怎么协调整个项⽬向前推进,怎么不让项⽬进度失控,怎么和产品讨论需求,什么时候该重构等,这些都是细节也都是宝贵的经验。
⽆论选择哪个⽅向,都要保持对新技术趋势的敏锐度。纯技术路线对新技术的关注⾃是不必说,管理岗需要在做技术⽅案时考虑新技术,同时提升⾃⼰的移动端/前端全栈能⼒。
> 计划(3年,5年,10年计划等)
-- 2013-2016(1-3)年:
我认为三年对于程序员来说是第⼀个门槛,这个阶段将会淘汰掉⼀批不适合写代码的⼈。这⼀阶段,我们⾛出校园,迈⼊社会,成为⼀名程序员,正式从书本 上的内容迈向真正的企业级开发。我们知道如何团队协作、如何使⽤项⽬管理⼯具、项⽬版本如何控制、我们写的代码如何测试如何在线上运⾏等等,积累了⼀定的 开发经验,也对代码有了⼀定深⼊的认识,是⼀个⽐较纯粹的Coder的阶段。对开发者来讲,⼀年左右经验,多数⼈处在第⼀个阶段——专项能⼒提升的阶段,熟悉某种编程语⾔,可以完成别⼈安排的⼀个⼩模块的开发。
-- 2016-2018(3-5)年:
五年⼜是区分程序员的第⼆个门槛。有些⼈在三年⾥,除了完成⼯作,在空余时间基本不会研究别的东西,这些⼈永远就是个Coder,年纪⼤⼀些势必被 更年轻的⼈给顶替;有些⼈在三年⾥,除了写代码之外,还热衷于研究各种技术实现细节、看了N多好书、写⼀些博客、在Github上分享技术,这些⼈在五年 后必然具备在技术上独当⼀⾯的能⼒并且清楚⾃⼰未来的发展⽅向,从⼀个Coder逐步⾛向系统分析师或是架构师,成为项⽬组中不可或缺的⼈物。三年及以上的经验,就应该进⼊到第⼆个阶段了。当你在某个技术⽅向上构建了技能体系,就可以完成相对复杂的⼯作,可以独⽴的做⼀些事情,甚⾄可以辅导初级开发者来完成⼯作。这个时候,你往往已经是团队⾥富有⽣产⼒的成员了。
-- 2018-2023(5-10)年:
⼗年⼜是另⼀个门槛了,转⾏或是继续做⼀名程序员就在这个节点上。如果在前⼏年就抱定不转⾏的思路并且为之努⼒的话,
那么在⼗年的这个节点上,有些⼈必然成长为⼀名对⾏业有着深⼊认识、对技术有着深⼊认识、能从零开始对⼀个产品进⾏分析的程序员,这样的⼈在公司基本担任的都是CTO、技术专家、⾸席架构师等最关键的职位,这对于⾃⼰绝对是⼀件荣耀的事,当然⽼板在经济上也绝不会亏待你。
考察⼀些初级数据结构与算法的概念,别考的太深太偏。准备⼀些具有“可伸缩性”的算法题,看看被⾯者如何分析问题,如何分析算法复杂度,以及如何⽤其选择的语⾔实现算法。
## 系统设计
这个主要是考察被⾯者在⾯向对象软件设计⽅⾯的能⼒,⼀般针对⾼级⼀些的职位。
可以先了解⼀下被⾯者对⾯向对象设计的基本概念与原则的了解,然后让其谈谈他之前项⽬中做过的设计;并准备⼏道可以逐步深⼊的设计题让其当场设计。哦,别忘了问问他为什么这么设计。
需要注意是,要了解⾯试者真实的实⼒,你必须要好⾮常好的临场应变的能⼒,善于从⾯试者的回答中提取有⽤信息并加以追问。
## 各个招聘⽹站的相关要求:1-3年、3-5年、5-10年。当然就国内的情况下⽽⾔,很少有 10年+ 的开发岗位:
1~3 年,我们已经成了⼀个⼊门级的搬砖⼯⼈,变成了⼀个熟悉的搬砖⼯⼈。我们开始承担⼀些重要的开发⾓⾊,如主⼒开发,但是多数时候还是个⼈开发者。
3~5 年,我们开始寻求技术之外的突破,并且精⼒有限不再单打独⽃。前三年的经验,让我们有能⼒区分⾃⼰未来适合什么路线:技术、技术管理还是纯管理。但是不论怎样,我们在提升⾃⼰技术的同时,还需要指导、带领组织内他⼈的成长。
5~10 年,我们开始站在更⾼的层⾯考虑问题。我们的系统在整个⼤系统的架构,整个系统架构的未来,⾏业发展的趋势、架构的演
进,blabla。我们开始去证明、追求⾃我的价值。
10年+,未来太远,我编不下去~。
## 每当我们在讨论编程能⼒的时候,我们讨论的能⼒基本上是和编程⽆关的:
我们讨论程序设计的时候,讨论的是:抽象思维、归纳能⼒、设计能⼒……。
我们讨论解决 bug 的时候,讨论的是:如何寻问题、分析问题,然后解决问题、归纳问题。
## 额外的技能:做 PPT、做技术分享、沟通、时间/精⼒管理等等。“精通 one,学习 another,关注 next ”。对能⼒进⾏分类就是:
1.专业知识技能。
2.可迁移技能。可在不同⾏业中使⽤的技能。
3.⾃我管理技能。即⾃我认知和⾃我约束、调整等能⼒。
## 在进⾏技术选型的时候,我们很容易陷⼊ HDD(热闹驱动编程)的影响。贸然地决定使⽤⼀个新的框架,于是:
1.在⼯作上,我已经偏向于使⽤已有的框架,不再从零尝试新的可能性。
2.在业余时,我则偏向于不使⽤已有的框架,从零尝试更多的新可能性。
## 造轮⼦依旧是我深⼊学习的⽅式。虽然,我不是学院派,但是我习惯性的会写博客来总结学到的知识。
-
- ⼗年⼜是另⼀个门槛了,转⾏或是继续做⼀名程序员就在这个节点上。如果在前⼏年就抱定不转⾏的思路并且为之努⼒的话,那么在⼗年的这个节点上,有些 ⼈必然成长为⼀名对⾏业有着深⼊认识、对技术有着深⼊认识、能从零开始对⼀个产品进⾏分析的程序员,这样的⼈在公司基本担任的都是CTO、技术专家、⾸席 架构师等最关键的职位,这对于⾃⼰绝对是⼀件荣耀的事,当然⽼板在经济上也绝不会亏待你。
php工作岗位⽐如你做了 2 年 PHP 开发,可能你处于从第 1 阶段向第 2 阶段转型的过程中,此时提升的⽅向,就可以考虑和php相关的技术栈,⽐如了解 HTTP 服务器如何和PHP整合在⼀起,⽐如了解数据库,⽐如了解操作系统,这样你就可能会定下掌握 LAMP
(Linux/Apache/MySQL/PHP)或者 LNMP(linux/Nginx/mysql/PHP) 技术栈的⽬标。
-- 10年以上
10 年以上的⼯作经验,在⼤公司当过螺丝钉,也在创业公司做过技术 leader,有过⼀两段不算成功的创业经历。
质量包括:可维护性、扩展性、算法\渲染效率,还有就是bug与崩溃率。
会做⼈⽐会做事还要重要百倍。到⼀个合适的职业⽬标,对于很多迷茫中的⼈来说可能并不是容易
的事;但学会做⼈,则是你在任何公司、任何时候都可以修炼的⼀种职业素养。
2. 实践提升:合适的机会跳槽到感觉不错的创业或者⼩型公司争取能够担任相关的岗位。
-- 职业规划的建议是:
1.想清楚这⼀份职业或者下⼀份职业你的⽬标是什么?你想得到什么?区分⽬标和路径
2.现在的能⼒和技能是不是可以达到?⽽这些技能和能⼒我预估都是在⼀定时间内可以掌握的和达到的
3.除了技能,这份⼯作还会给我带来什么其他价值?这些价值是不是符合我对于未来职业状态的实现?
4.确认后,只做⼀个可以落地执⾏的实⾏计划,并完成。⽐如改准备简历的就去准备,改跳槽的去跳槽,该竞聘的就竞聘等等
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论