【不要走开,文末送书】
大多数程序员都不懂得如何规划自己的职业生涯,他们大抵知道程序员晋升路线是初级、中级、高级、管理……当问到自身规划时,大多数人总是从学好语言、算法,多做项目等回复:
我会C语言,我的目标在项目中磨炼我的编程技术,从普通程序员到小组长,到高级程序员,到管理者.....
外行人都觉得程序员岗位只和电脑打交道,精通技术就可以征服职场。但精通技术只是程序员能在职场上立住脚跟的前提。
很多程序员并不知道应该如何开始自己的职业生涯,如何推进自己的职业生涯,如何令自己的事业蒸蒸日上,以及为了尽可能地获得成功,他们究竟需要知道些什么。
无论经验丰富的老手还是初出茅庐的菜鸟,关于软件开发,都会有着各种各样的问题。例如:
作为一名软件开发者,我该如何起步?
我该如何培养自己的技术能力?
我该如何谈判薪水?在合同制员工和正式职员之间我该如何选择?
我该如何跟我的老板、同事打交道?我该如何对待职场偏见?我该如何跟技术女性打交道?我该如何成为一名技术女性?
我真正需要知道什么?又该如何学习它们?
大学学历教育、编程训练营还有自学成才,该选哪一种?
我如何找到一份工作?如果没有经验,我该怎么办?
我怎样才能通过面试?
身在职场我该怎样穿着?
我怎样才能推动自己的职业发展提升到一个新的水平?
......
这些其实是程序员职业生涯中都会遇到的问题,如果之前无法找出答案,那《软技能2:软件开发者职业生涯指南》详细解答了程序员职业生涯全过程中的各类问题。
在本书中,就“职业发展”的主题做了很多深入而又富有建设性的探讨,围绕“软件开发者”这一核心,关注于“如何让你的职业生涯更加灿烂”。
当程序员步入职场不久就会发现,没有规划好职业发展路径,很容易间歇性地陷入迷茫,反思自己当下还应该做些什么。
毕竟,软件开发人员仅靠技术知识是远远不够的,在其整个职业生涯中,职场中还需要具备的各种“软技能”,才能你更好规划并实现职场成功之路:
从入门的如何学会自己的第一门编程语言、如何准备面试并成功入职心仪岗位;
到晋升阶段的扩展自己的技术技能、如何与团队译融洽相处,如何与领导融洽相处,最后如何以著书立说和为人师表的方式为自己在业界赢得声誉,等等......
程序员该何时规划职业生涯?
大部分程序员职业生涯的初期:找个公司进去,一段时间后跳槽换工作,哪个技术赚的多,我去学哪个干哪个,哪家公司给开的薪资高,福利待遇好,那就去那家公司。
为了钱工作并不是是错误的价值观,毕竟工作就是为了让自己过上更优质的生活。
但是等你经历之后,你会发现,职业生涯的初期,确实跳槽涨薪很快,但是到了中后期之后,再怎么跳槽也没有前期涨幅那么巨大了,而且你会发现,在自己频繁的跳槽过程中,很多技能与业务的能力也没能积累起来。
这就是为什么程序员普遍面临着职业焦虑,小白时期不知道自己选择什么技术方向,应该着重哪方面的东西,中后期到了职业生涯瓶颈,钻研技术又没有那个功力,转管理又资历不够,不知道自己未来的路何去何从。
这本质上其实都是因为没有职业规划导致的,所以说,职业规划非常重要。
而有一些人则是恰恰相反,他们并没有这些焦虑,为什么呢?
因为他们走的每一步都有规划,尽管也想赚更多的钱,但是他们眼里不单单只盯着薪资这一个选项,他们会综合衡量薪资待遇、技能积累以及未来发展等多个方面。所以,很多时候,你会看到很多人在职场中厚积薄发,甚至焕发职场第二春。
这些人他们要考虑的仅仅是,做自我规划的路线中,我更喜欢哪个方面,我最后想走管理路线、技术路线或者是独立创业。
说到这里,肯定有不少人开始提出疑问了:我该如何像别人一样规划自己的职业生涯?
太多的人终其一生都会沿着一个方向执着前行,却不会在发轫之始就去深思熟虑以谋定而动。花一些时间探究“想做什么样的软件开发者”,这样你才可以在策马扬鞭走上这条职业之路时计划周全。
因此,在《软技能2:软件开发者职业生涯指南》一书中,作者把程序员整个职业生涯所需要具备的能力归为五大板块,以此帮助处在不同阶段的程序员也能及时做好职业规划:
◎ 假设你刚刚开始投身于软件开发工作,甚至你还没有真正学会编程,在这种情况下,可以从本书的第一篇“入行成为软件开发者”开始阅读,获益最大,因为这一篇的内容与你关联度最大。
◎ 假设你已经有一份软件开发的工作,已经具备了好几年的编程经验,你可以直接跳到第四篇“软件开发者的日常工作”或者第三篇“关于软件开发你需要知道些什么”。
◎ 或者你只是对如何推进自己的职业生涯感兴趣,在这种情况下,选择直接跳到第五篇“推进你的职业发展”将是最审慎的行动策略。
◎ 当你刚入行的时候,你想学习如何开始,但也可能你想要获得一些关于学习新的编程语言或者新技术的建议。
◎ 你现在可能并不需要立刻工作,也不需要去谈判薪水,也没有机会去和一位令你讨厌的同事或者老板打交道,但是将来的某个时候,这些内容可能会与你当时的处境息息相关。
下图为《软技能2:软件开发者职业生涯指南》的内容框架,关注“异步图书”微信公众号,回复关键词“软技能“即可免费获得高清版思维导图。
不同发展阶段的程序员
在程序员的职业生涯中,一般会分为三个阶段:初级程序员、中级程序员、高级程序员。
不同阶段的程序员对应不仅仅是工作经验的区别,更重要的是所掌握能力、所处环境,以及需要思考方向等区别。
初级程序员一般是职场早期、打基础的时期。
新手小白怀揣着梦想进入IT行业,跌跌撞撞进入职场,开始探索自己的发展之路。这个阶段的程序员,怎么才能在职场稳住脚跟?
那就要靠你所擅长的那项技术——它证明你在IT行业所具备了基础的技能,可以在行业内发挥价值。当然,知识与技能永远是是程序员初步踏入职场时最基本的底牌。
在这一阶段,初级程序员最重要的三点是:
必须懂技术,有至少一技之长;
必须建立起属于自己的人脉;
必须有韧性,具备失败了再战的能力,没有失败,何以谈成功。
第一点很容易理解,当了解自己所处岗位之后,就需要迅速搞清楚自己这个岗位需要的专业知识、技能。刚开始可能仅限了解,慢慢还需要精通。
除此之外,IT行业一向有日新月异的特点,技术更迭迅速,需要程序员了解的技术就越多。
迄今为止,关于软件开发我最常被问到的问题就是:“我该怎样入门XX技术?”
在生活中,真正开始做某事的最大障碍无外乎“如何起步”。其实并不难,比如你想学一项新的编程语言,找资源学习语言的基础知识,有一定了解之后,就可以开始尝试着用它去解决一些实际问题。
除了通过”学-做-学”的方式获取技能,在知识量无比丰富的当下,筛选知识也十分重要,那些被你判定为仅需了解的知识,只需要浮光掠影般地做一下全景式扫描,以便遇到的时候不至于不知所措。
第二点是建立人脉,这是一件任何一位寻求工作的人都应该做的事情,尤其需要做好这一点。
确保你积极参加社区活动,如参加技术会议、加入开发者组织等。努力与那些不同公司(你可能想在这些公司里找到一份工作)的人建立良好的人脉网络。
最后一点,作为一个初入编程世界的新手,你会遇到职场早期的迷茫,甚至各种不成功的尝试......
比如不知道如何运用自己所掌握的技能,看不懂别人的代码,改不好Bug、不懂新技术、不会拆解需求......
千万不能被这些挫折打到,如果一打就趴下了,开始怀疑自我,这样会在职场后期品尝退缩带来的无奈,和对他人成功的羡慕嫉妒恨。
要开始调整自己的心态,提升自己的适应和整合能力,而不仅是关注自己的技术和韧性的打造。
初级程序员这个阶段会根据每个人的适应性、态度、个性等原因,大致在步入职场后的3~5年。
“脚踏实地,仰望星空”这句话特别适合这个阶段的程序员,一方面要勤勤恳恳的写代码,积累编程经验,另一方面还要时刻关注行业动向,根据市场大环境及时提升自己。
这个阶段越往后走就会越顺利,3~5年其实很快,但程序员完成新手的蜕变,需要在短短几年内拥有可观的技术储备和基本的职场生存经验。
中级程序员一般是职场飞跃期、规范化的时期。
这个阶段的程序员,就不只有技术这一张底牌了。
经历三五载的蜕变,程序员逐渐在职场稳住脚跟,这个时候,技术并非最有重要的了。
在这一阶段,中级程序员最重要的三点是:
必须善于与人相处、学会和同事、老板的相处之道;
必须学会管理团队;
必须有全局观、会整合资源;
很多人会觉得程序员的工作很单纯——和电脑打交道,但到了中级程序员阶段,你的工作远远超过编写代码。
事实上,在长期的职业生涯中,你所能取得的最重要的成就受软技能因素的影响比受你所编写的代码的影响更大,例如,如何与同事相处,如何沟通你的想法,如何与老板打交道,如何要求加薪,如何处理绩效考核,甚至如何着装。
当然,这并不意味着即使你的代码写得再糟糕,只要做一只趋炎附势的应声虫就可以侥幸成功,而是说,在做技术领域工作的时候,你不得不仔细关注其中的社会动力学因素。
想在复杂多变、有时甚至是混乱不堪的工作氛围之中平稳航行,在这种环境里满是性格孤僻的同事、傲慢自大的老板、尖酸刻薄的客户,甚至还有形形色色的偏执狂。你还需要搞清楚每个人都喜欢谈论的生活与工作的平衡问题。
除此之外,这个阶段的程序员往往开始逐步晋升为领导者,有小团队要带领。那么,成为一个高效能的领导者就非常关键了。
高效能领导者是那种能鼓舞、激励和推动团队以保证团队成功的领导者,那种不需要正式授权就可以赢得尊重、促进合作和激发最佳成绩的领导者,而不是那种被简单地授予“领导者”头衔的领导者。
只有一种方法能够成为高效能的领导者,那就是以身作则。
最好的领导会做到所有他要求他的团队做的事情。他们愿意牺牲,愿意多走一公里为他们试图领导的人铺平道路。
太多的“领导者”想坐在象牙塔里高高在上地指挥他们的军队。作为一个真正的、以身作则的领导,你必须自愿在前线、在战场上身先士卒,自愿去承担一些困难的、枯燥的甚至是你的团队里没人愿意去做的工作。向他们表明:即使是最单调乏味的任务,你也能做出高品质。
和初级程序员相比,中级阶段的程序员已经逐步脱离单项技能的输出了,需要依靠团队协作或者带领团队完成更具挑战性的任务。因此,拥有全局观和整合能力。
你不必掌握所有技术,但是必须不断完善自己的技术知识体系,这才能把任务和意图尽可能清晰和简洁的分享给团队其他人。
只要你的团队成员知道你最终想要让他们去完成什么,以及什么才是最重要的(也就是大家整体的愿景),他们就可以自行决定如何去实现这些目标。理想状态就是告诉团队成员目标是什么,而不需要告诉他们如何去做,也不必让他们去执行你的每一个细微决策。
你也可以明确制定一个操作规程,任何人都可以遵守规程来完成某些类型的任务。流程图或检查表在这里都能起到非常好的作用。
可以看出,中级阶段的程序员在初级阶段的基础上,增加的都是非技术的难题。这个阶段根据每个人情况的不同,时间长短从五年到十年、十五年不等,也是最能拉开差距的阶段。
如果你有着超出同龄人的专业技能、社会关系、资源等,这个阶段的程序员应该着力于如何将自身优势放大。
高级程序员一般是职场转型期、突破的时期。
大多数中小型公司在向上晋升和发展方面都存在实际的限制。
作为一名软件开发者,你不可能比公司的发展通道最高级别还要高,而且,那个所谓的“最高级别”其实可能根本也没有高到哪里去。
但在像微软、苹果、IBM、谷歌、Facebook、惠普这样的大公司,上限可能会高出许多。这类公司往往需要最优秀的技术人员,所以大公司为这些技术人员量身定做出专门的技术通道。
通常,在这类大公司里,可以选择技术型职业发展通道,也可以选择走上管理通道。你必须从中做出抉择,如果你想要走上管理通道,那就得放弃自己的编码技能,你也可以选择坚守在技术通道上,一直编码到他们告诉你再也不需要你编码了。
所以,这阶段的程序员,最重要的两点是:
必须做好取舍,在管理通道和技术通道中做抉择;
必须敢于打破技术的“天花板”,开创新起点;
如果你选择走上管理通道,你可能会成为一名开发者经理,然后可能是一名部门经理或项目经理,再然后,如果你能一直获得晋升,你可以一路做到高级管理职位,如开发总监甚或是首席技术官(CTO)。
有些公司把这个角色称为研究员(Fellow)或者技术院士(Technical Fellow)。
担任这个角色的软件开发者是某一领域内的杰出专家,领导研究工作,是公司智囊团的成员,或者参与非常复杂或者极高优先级的项目。
这类角色还可能涉及指导整个组织内的开发者的工作。作为软件开发总监甚或是首席技术官,还要做出各种技术性和非技术性决策。
如果你选择了技术通道,你可能会从高级开发者转去做架构师,然后再晋升为研究员或者高级研究员。(每个组织都有自己的技术和非技术职业发展通道,但在职位和职位名称上往往不尽相同。)
但是,如果你达到了“玻璃天花板”还想继续有所突破,那你就不得不做出抉择:坚守技术通道,还是转去管理通道。
事实上,如果你没能在一家拥有先进技术路线的大公司工作,你甚至可能都没得选择。进入管理层可能是你能够得到晋升的唯一选择——要么转去做管理工作,要么自己选择退出。
一般来说,软件开发者不管选择了哪一条特定的职业路径(也许不止一条),最终都会遇到所谓的“玻璃天花板”。
这个玻璃天花板实质上就是一个极限,限制了你在职业发展路径上可以前进多远,限制了你作为一个软件开发者可以得到的最高薪酬。
无论你有多优秀,总有一天你会到达这个顶点,你再也无法前进了。但是,有办法绕过或者穿越这个玻璃天花板。
你可以选择不再为别人工作。如果选择做一个自由职业者,你的玻璃天花板要宽敞许多,尽管作为一个自由职业者你可以赚多少钱仍然有一个实际存在的限制,因为你仍然需要用时间来换钱。
如果选择做一名企业家,那就完全没有上限了,但你的收入也可能是0甚至是负数。
任何一种选择都可以让你穿越玻璃天花板。
如果你依然坚守职业开发者的道路,那你可以在打造个人品牌和自我营销上加大投入,这样你可能凭着自己的声望就能找到一家公司,让你的薪酬远远高于平均水平。
还有另外一种方法。你可以寻求加入一家大公司,进入它的管理通道或者技术轨道。
以上的内容都希望能够促使你认真规划一下自己的工作方向,在自己的职业生涯发展方向上你需要深谋远虑。如果你想在事业上阔步前进,那你就需要清楚地知晓你该往哪个方向前进。
因此,仔细思考一下:你想成为怎样的软件开发者?
你想永远都做职业开发者吗?
如果是,那你想做哪个领域的开发者:Web开发者、移动开发者,还是云开发者?
还有,你的职业生涯的终点在哪里?最终,你想做一名架构师吗?
还是说,你只是想一直编码、一直都在做一些很酷的事情,永远都不要操心自己该往哪个方向前进?
你想让自己的职业发展得尽善尽美吗?
如果是这样的话,那你最好现在就开始寻找拥有高级技术发展通道的公司。
也许你想最终进入管理层,或者成为首席技术官,甚或是首席执行官。又或许你想在自己的职业生涯早期做一名开发者,然后转变成为一名自由职业者甚或是创业。
无论你决定做什么,最重要的是:你需要做出决策,并且为此做出计划。
即使你做出了选择,你也不必死守在一条通道上一成不变,你可以不断调整改变计划。但是,你应该至少制订一些计划,否则你会在自己的职业生涯中漫无目的地随波逐流。
程序员的自我提升
程序员的职业生涯有着常规的发展阶段,每一个阶段的提升,势必会在职位上、薪水上、社会资本上、个人成绩上有所变化。
这样的变化并不是随着时间发展自然而然的效果,而是需要程序员有闯劲有毅力的前进,既要脚踏实地,进退有度,以提升知识和技能为主,又要看清局势,了解未来趋势,为在阶段末期实现跨越做好准备。
所以,程序员要能掌控自己的职业生涯,这10项自我提升的方法是必不可少的:
1、高效开发
这些是程序员必须要知道并且掌握:编程语言、源代码控制、测试、持续集成、Web开发、HTML、CSS、设计模式、数据库、调试、方法论、Scrum、敏捷……(这一串长长的列表我还可以继续延伸)
这个世界很疯狂,技术发展日新月异,昨天还是新鲜而又热门的东西今天就“人老珠黄”,关键在于要让你的技能跟得上时代。
2、制定计划
为了推进你的职业生涯发展,让你的技能跟得上时代,你需要量身定制计划。作为制订计划的开端,请确保你下载一份本书附带的“软件开发者技能评估”的工具。使用该工具做个自我诊断,找出你最需要改善的技能。
3、阅读博客
作者发现,在编程的世界中保持与时俱进的最佳方法之一就是每天清晨花30分钟左右的时间阅读编程方面的博客。
纵观作者的职业生涯,有一个不断变化的有关软件开发方面的博客列表,每天清晨第一件事,就是花30分钟时间阅读这些博客。在某种程度上,这其实相当于让其他人为你做了许多工作。通过阅读其他软件开发者的博客,你可以深入洞察编程世界里最新的和最重要的技术,你甚至还可以学习一两项新技术。
通常情况下,如果某项技术拥有举足轻重的地位,你会发现总有人会在博客上写文章讨论它。
博客还让你有机会一览软件开发世界中的难题,你可以不必亲自动手就可以知晓这些问题的破解之道。
4、读书
程序员还应该一直保持手不释卷的习惯,尝试选择你将从中受益最多或者具有持久价值的书籍,挑选与你目前正在从事的工作直接相关的书是不错的选择,因为这样做你能获得的将是即得即用的价值。
挑选有关软件开发方法论或者设计模式和体系架构方面的书也是绝佳的、永不过时的选择。
5、挑选一样新东西去学习
不管你对当前的技能是多么驾轻就熟,也不管你的教育背景有多么深厚博大,你总是要去学习新东西。
针对你要去学习的内容定一份计划,这样当你完成了一样新东西的学习之后,你就可以接着去学习下一样了。定期评估你现在的技能,定期校正你的学习方向,这样就可以明确确定你应该学习哪些新东西,以及你的学习内容的优先级与顺序。
到后面,你会惊奇地发现,只要你每年都投入大量的时间去学新东西,那么在一年的时间里你就能学到相当多的新技能。你甚至可能想在自己的日历上明确地安排每周的学习时间。
不过,要注意一点:不要去学那些你永远都不会用到的东西。
6、保正学习的质量
如果你想勇立潮头,那你就必须持续学习。就像我之前说过的,在当今的环境中,科技发展的速度极快,而且我不认为在短期内有降速的可能。
你并不一定要按照我的体系来学习,但你确实需要某种有利于快速学习的体系。不管怎么说,如果你想保持勇立潮头,你就需要某种有利于快速学习的策略。
7、参加活动
另外一个可以让你在变幻莫测的软件开发领域中保持与时俱进、脱颖而出的方法,就是参加活动。
所谓“活动”可以是会议,可以是编程训练营,也可以是非正式的聚会,甚至也包括像微软这样的公司展示他们新技术的活动。
你可以在一个活动上花上一整天时间,观看一些演示介绍,了解一种新技术或者新工具的工作原理和应用方法,你既不必阅读大部头的整本书,也不必费力阅读使用教程。
仔细观看有人向你演示某种新技术,观看他们向你展示的代码示例,通过这种方法接触到新技术的速度要比其他媒体快得多。
8、阅读新闻
阅读新闻,特别是与编程相关的新闻。浏览Hacker News或者Proggit之类的网站,或者订阅与编程或技术相关的新闻推送服务,都是不错的主意。
这些网站可以了解编程世界里正在发生的事情,比如行业趋势,比如越来越多的人在使用某一种特定的变成语言或技术,这可以帮助规划未来,审视需要在哪些方面改善自己的职业生涯。
阅读关于你感兴趣的东西的有针对性的新闻信息可以是一个很好的方式,保持你对领域内正在发生的事情了如指掌。
9、大量编写代码
能够让你的编程技能与时俱进的最显而易见的方法莫过于自己编写程序,而且是经常编写程序。
你编写的代码越多,你的编码技能就越不可能变得生疏。这似乎是常识,但你一定会感到惊讶:大量的已经陷入技能过时窘境的软件开发者,在被问及他们编码的频率时,他们会说“不高”。因此,一定要确保你每周(最好是每天)都花一些时间写代码。
要想做到每天编写代码,有一个很好的方法,就是一直致力于开发小规模的项目。选择一些你想要去学习的新技能,然后使用这些新技术或者编程语言开发一个小规模的项目。要确保项目的规模足够小,以便于你可以切实完成它。
10、不要让自己太安逸
记住,无论你眼下的工作岗位或者工作氛围多有保障,都不要过得太安逸,这很重要。
一些在同一家公司里工作了20年的程序员,他们觉得自己的工作岗位很安定,所以没有必要保持他们的技能与时俱进。因为他们的工作很有保障,所以他们觉得生活很不错、很安逸,没有必要去学习任何新东西。
然后,当意料之外的裁员突然发生时,他们会在一瞬间被抛入劳动力大军中,看着自己落后于时代20年的技术与技能,他们很快就会意识到自己之前的错误。
所以,不要让这种事情发生在你身上。制订一个积极进取的计划来保持你的技能与时俱进。
想了解更多程序员进阶干货?可查看《软技能2 软件开发者职业生涯指南》,现在你有机会获得TA:
#欢迎来留言#
你的职业成长计划是什么?
留言点赞数量最多的第一名
程序人生携手【人民邮电社】送出
《软技能2 软件开发者职业生涯指南》一本
截至5月18日12:00点
欢迎来留言哦!
更多精彩推荐
☞潘石屹 Python 考试成绩 99 分,网友:还有一分怕你骄傲
☞赠书 | 程序员修炼的务实哲学
☞JavaScript 流行度最高,Java 屈居第三!| 2020 最新软件开发状况报告
☞深度学习基础总结,无一句废话(附完整思维导图)
☞震惊!阿里的程序员竟被一个简单的 SQL 查询难住了!
☞大学生程序员被勒索比特币后,绝地反击!
你点的每个“在看”,我都认真当成了喜欢