自从硕士毕业后,一直从事算法方面(视频编解码,深度学习,全景VR)的工作,目前人到中年,感觉有点在十字路口,不知道未来规划是什么样的,因为最近搜索了网上关于程序员的职业生涯规划。
根据自己理解,找出我认为值得我后面注意的地方,记录下来,朝着正确的方向前行。目前下面的内容基本赞向,唯一不确定的是到底是在某个技术方向深耕好,还是在某个方向有优势的前提下发展多个方向。
非常感谢视频编解码群里一位工作14年的大牛提出他的想法:一直在一个方向深耕的可能发展更好。
我一直相信这样一句话:真正的危机,来源于在正确的时间做不正确的事。没有在正确的时间,为下一步做出积累,这才是危机的根源。
如果有相同困惑的朋友,或者技术上的交流可以加我QQ进行讨论:425851955
1.知识结构
因为一个清晰的目标,可以让你的职业成长围绕着一个点去积累经验,而这种日积月累的经验积累,也是你日后升职加薪的筹码。
要脱离具体的操作层面的问题,把你看待问题的眼光放得更高一些,更远一些,成为一个具有“远见卓识”而不是“鼠目寸光”的人。
你要向这个行业里最优秀的人看齐,并以他们为目标,作为自己修炼成长的榜样,一步一步弥补与优秀之间的差距。这个时候,在职学习、进修等等都需要提上日程,学会用新的知识充实自己的头脑。
你的能力没有提升可能是:
• 一种是频繁跳槽,没有在一个方向上积累,无一技之长;
• 二是虽然在一个方向上长期积累,但只是第一年是成长的,剩下的几年都是在做重复劳动,原地踏步。
2. 不断学习的能力,这里有两种方向。
(1)要坚持使用一个开发平台,框架或语言
在过去十年间,我所犯的最大错误是:几乎每次我换工作时也转换了开发平台。
我的经历从 Java 企业开发开始,到嵌入式 C 编程,到用 VB、C# 和 C++ 开发 Windows 桌面应用程序,然后用 Objective-C 写 iOS 应用程序,到用 NDK 编写 Android 库,最后到写 Android 应用。
这个职业经历听起来令人敬畏,但实际上雇主并不关心。雇主们并不会重点关注你拥有 10 年各式各样的开发经验,但如果他们看到你没有足够的 Android 应用开发经验,你就不可能获得一个 Android 开发的工作。
转换平台会对你的简历产生巨大的负面影响。对于一个雇主来说,实际上他没办法通过简历来验证你是不是某一特定开发领域的专家,为你付出大量资金是否合理。
大多数公司都不关心你的过去,技术面试会更加重要。这就是为什么很多经历尚浅但专业对口的开发者可以找到工作的原因。
那么我们如何适应市场的变化呢?只要你不停地敲代码,你就能自然而然地适应市场,但你也需要投入一些时间在新技能上,应在空闲时抽出时间来学习新技能,而且你也要降低期望薪水。你需要后退一步,才能前进两步。
一旦你找到一个让你觉得舒服的平台,框架或语言,就应该坚持下去。从长远看,你期望的薪水和你的工作能力都会比频繁跳槽来得更高。找到最需要你的专属技能的好公司,然后踏实地在那里工作。我知道这听起来很简单,但我花了很多年才意识到这点。
(2)在某个方向上深耕
我们会在很多场合听到对「精钻」这个词语的推崇,包括在职场上,我们常常听到前辈教导我们对待工作要精益求精,但事实上,在某一方面做到万里挑一的大牛是一条可取的道路,却不是职业发展的唯一道路。
尤其是对于那些未来的职业发展规划是进入明星创业团队担任技术负责人的程序员来说,在之前的积累过程中寻找机会尽量多地接触各类业务场景并寻找解决方案,可能是一条更可行的路径。
这里的业务场景分为大业务场景,也分为小业务场景。大业务场景即不同的细分行业,如电商、内容、视频、共享平台等等。我建议程序员们在进行工作选择的时候不要被自己原先所属的细分领域太过限制,认为自己原来在电商公司以后也必须在电商公司。事实上,多去尝试不同领域的公司,去了解不同领域的公司在技术实现上有什么异同,对于程序员更深入地理解技术是很有帮助的。
尤其是当今行业发展日新月异,某一细分领域很难在一个人 15-20 年的职业生涯中一直处于蓬勃发展的状态,如果之后又出现了新的细分市场,复合背景积累的经验会帮助程序员快速切入到新的细分市场。
而小业务场景则是指同一个技术在同一家公司的不同业务范畴。例如算法方向,可以分为排序、推荐、NLP、图像识别和用户行为研究等,攻坚某一领域是一条发展路径,但横跨不是一个领域也是一条发展路径。这就需要程序员自己把握机会,不断跳出舒适区去承担新的业务和需求。
3.树立自己在行业内的影响力。
你要想成为优秀的职场人士,也必须向那些最优秀的人看齐,树立在这个行业内的影响力,用你的思想去影响别人。
成为开发者社区的一员
当我还在大学的时候,我总是懒得参加各种社团和俱乐部活动。当我找到我的第一份开发工作时,最不乐意做的也是和其他开发者闲聊闲逛。
但是我错了。
同行聚会和进入开发群是很有趣的事情,是结识开发者伙伴的好地方。如果你想在这个行业里做到最好,就尽量不要消极被动。与坐在你旁边的人交谈,提供你的帮助,分享你的经验。每个人都喜欢谈论自己的经历,更何况你也许会遇到很多潜在的雇主。
在那里你会碰到许多需要教练的初学者团体,你可以指导新手,给他们提供练手的机会,甚至赞助活动。
当然,要学习别人的开发技巧并且勇于实践,要热情地欢迎不同意见的人讲话,勇敢地听取他们的意见。
4.锻炼其他方面的能力,
(1) 你的人际关系处理能力这其中包括与你的上司的关系,以及与你的同事的关系。
(2)除了编程之外,程序员要尽量培养一些其他方面的技能,例如演讲、写作等等。这样做一方面可以为程序员提供一些兼职机会,如主讲技术相关的直播课程、参考文章或书籍的撰写等。类似的机会在提供报酬的同时也会增加员工的知名度和行业影响力,更有甚者,在社交媒体上发表了相关文章之后,吸引了一批志同道合的同行,开始合伙创业,有了更大的机遇。
5.不要为高工资追求管理角色
以前我总是以为那些穿着西装,作行政决策的管理者拿的薪水高得令人神往。虽然在一些情况下这没错,但这所占比例很小,经验丰富的开发者的薪金一般会比中等管理者更好。
在我早期的职业生涯中,我一直想进入项目管理。我自修了管理硕士,在那里我学到了很多有趣的东西。最后,我在一家西班牙公司作了一阵开发经理,然而我意识到这不并适合我。
在做开发者的时候,我总是感到公司缺乏企业文化,尤其是缺少技术因素的企业文化。然而在做了管理者之后,不仅编程水平无法提高,而且在企业文化的孤独感甚至更加强烈。最终当我离开这个岗位重归技术开发时,我终于开始重新欣赏我的开发工作。
如果你对敲代码感到厌烦了,那么转成管理岗并不是解决方案,更好的办法是横向移动,换一个部门,换一家公司,或者是旅行,甚至可以选择在国外工作来解放你的思想,在全世界有许多技术中心,那里对开发者的要求很高,这能帮助你打开眼界。
如果有相同困惑的朋友,或者技术上的交流可以加我QQ进行讨论:425851955
6.保持紧密沟通
有些程序员认为自己做的是技术性工作,只要写好代码就可以了。这是错误的认知。根据以往服务候选人的经验来看,那些有意识在工作之余关注行业动态,积攒人脉资源,并且乐于与同行沟通的程序员,往往在职业发展的路上走得更远。
一方面,程序员可以通过这些方式随时评估自己在市场上的价值和优势,当行业和技术的风向发生转变时,及时对自身查漏补缺,避免被时代抛弃。另一方面,人脉资源的积累,有时也能对自己下一次换工作起到雪中送炭的作用。
可见,行业信息、公司动态的互通有无对于职业发展有着至关重要的影响,准确地把握行业动态有助于员工抓住一些转瞬即逝的机会。
而对于信息的获取,自己的朋友、前同事、公司 HR 还有靠谱的猎头、100offer 的职业顾问等,这些都是可以利用的资源,同时也可以参加一些展览、峰会等线下活动。尤其对于那些自己感兴趣的技术方向,尽量积累一些人脉资源,一次有效的内推往往比海投简历更有效果。