一、前言
太多的初级程序员从不花时间考虑他们的职业发展道路,从来没有深思熟虑过他们想要走什么样的道路,想要投身于哪一个领域。相反,他们只会站在路边,声嘶力竭地高喊“有没有哪个团队想要我”,然后随随便便就加入一群想要去铤而走险的人中,把别人的道路当作是自己的道路。
你最终将在哪里结束自己的软件开发职业生涯,这将取决于你选择的特定路径。选错路,你在余生中将是一个写Cobol的小矮人;选对路,你就可能成为一名巫师、造物主,住在象牙塔里,高高在上发号施令也许不会是这样。但你在职业道路上的选择的确会产生深远的影响,选择的确很重要。
本文所要论述的正是软件开发者应该如何有的放矢地选择自己想要去追求的职业发展路径。
二、职业发展路径
2.1、三类软件开发者
1、职业开发者(最常见的)
1.本文的主要关注对象是职业开发者;这是因为大多数程序员要么本身就是一名职业开发者,要么在职业生涯中的某个阶段里是一名职业开发者。
2.根据我的定义,职业开发者是一名软件开发者,他有一份为别人工作的全职工作,并且定期获得薪水。大多数的职业开发者都想为他们喜欢的公司工作,在那家公司升职,偶尔也能换一家公司涨一涨薪水,然后也许会在某一天退休。这条路没有错。就像我说的,这就是软件开发者默认的职业发展道路。
2、自由职业者(雇佣兵)
1.在上一章-海阔天空 做自由职业者和创业.已经讨论了什么事自由职业,本文将不再赘述。
2.本质上讲,自由职业者就是一名为自己工作的软件开发者,他们不必忠诚于任何一家特定的公司,他们选择做一名“雇佣兵”为任何他们选择的客户工作。
3、创业者(程序员与企业家的混合体)
1.这一职业发展路径与自由职业者截然不同,因为你不必应用自己的软件开发技能为他人工作,你要利用自己的软件开发技能创造出属于自己的产品,并把这个产品直接销售给客户。
2.这可能包括编写你自己的应用程序然后把它卖掉、创建培训视频教程、撰写博客、写作,甚至凭借自己的才华创作音乐……总之,你可以从上述所有这些方式中赚得盆满钵满,从而保证每天自己的晚餐桌上都有通心粉和奶酪。
2.2、职业开发者的选项
前言
1.作为一名软件开发者,你可以选择的专业发展大方向之所以把这些专业发展的大方向称之为“选项”,是为了避免产生混乱,从技术上讲,作为一名软件开发者,你可以选择其中任何一个作为自己宏观的职业路径,然后一往无前一直走下去。
2.必须要明确的是,这些选项并非职业开发者所独有,另外两类开发者必须也要选择其中一条职业发展路径。你也可以选择多条路径,做一名“双栖开发者”,但你至少应该选择其中某一条路径。
2.2.1、Web开发
1.如今,Web开发可能是人数最为庞大的一类软件开发者。大多数软件开发者都是Web开发者,或者至少在做一些Web开发工作。
2.作为一名Web开发者,你要开发Web应用程序;可以在前端工作,让应用程序变得绚丽多彩,你也可以在后端工作,保障应用程序正常运行,或者你也可以同时工作在前端和后端;能够完成所有Web开发工作(也许除网页设计之外)的开发者会被冠以“全栈开发者”的美誉,因为他们可以在完完全全的Web开发技术栈上完成开发工作:前端、中间件与后端(用户界面、业务逻辑与数据库)。
2.2.2、移动开发
1.如今移动应用遍地都是,越来越多的软件开发者选择成为移动开发者,为手机、平板电脑甚至智能电视或者其他可穿戴设备开发移动应用。
2.应用开发领域为软件开发者提供了大量令人欣喜的机会,因为每年都会出现越来越多的应用。现在,几乎每一家公司都需要一款移动应用,有时甚至不止一款。
2.2.3、桌面开发
1.实际上,你是如何编写并且编译代码的?我们中大多数人使用的依然是基于桌面的IDE,尽管云IDE越来越流行。
2.我承认,对桌面开发者来说,形势看起来是不大好;但是,我认为,在现实中,对编写直接运行在PC上的桌面应用程序的软件开发者,总归会有一些需求的。我的见解可能是错误的,但至少在现在,这是一个可行的职业选择,只不过它不是一个非常受欢迎的选择。
2.2.4、电子游戏
1.成为一名电子游戏开发者其实正是我进入软件开发行业的原因。但我最终并没有真正成为一名电子游戏开发者
2.人生不如意,十之八九。但是,严肃地说,这是一个可行的职业选择,但这又是一个困难重重的选择,竞争激烈,工作辛苦,长时间加班,这些都是我能想到的所有缺点;沿着这条路走下去吧!
2.2.5、嵌入式系统
1.这一行听起来不太有利可图,也没什么值得炫耀的,但相信我,这一行很有趣(如:你正在喝的这杯水里的冰块是电冰箱造出来的,而电冰箱之所以能造出冰块可是因为电冰箱里有个“大脑”。如今,一切事物都有“大脑”。因此,总得有人“写”出来充当这些“大脑”的程序;那个人可能就是你)嵌入式系统的开发者大多是工作在实时操作系统上,这些操作系统运行在电子设备内部,所以就我所知,“嵌入式系统”这个名字起得实在是很睿智。
2.这是一个很好的职业选择,因为它的需求量巨大,而且它需要专业技能,这些技能非常有价值。
2.2.6、大数据科学
1.这是一个相当新颖的职业道路径,但似乎也是前途最为辉煌的选择数据科学家到底做什么呢?没人真的知道答案。我认为他们的工作肯定与“大数据”有关。但严肃地说,数据科学是一个体量巨大而又增长迅速的领域,软件开发者可以进入,特别是如果他们想要赚到大钱的话数据科学家利用来自不同领域的技能和技术来获取大量数据、理解大数据,然后做出结论和预测。数据科学家经常利用他们的编程技巧来编写定制的程序,以提取、整理和重组数据,以便以一种易于理解的方式来表征数据。
2.随着数据量的不断增长,数据科学的未来肯定是一片如火如荼之势。
2.2.7、工具和企业信息化
1.许多软件开发者创建的软件并不会商业化地发布与销售,也不会用在商业化销售的产品中。相反,他们创建的是在组织内部应用的工具,或者是在组织内部使用的应用程序实际上,我发现工具开发非常有趣、富有价值,因为当你构建出一个有效的工具能够帮助你的团队或者其他团队更好地完成工作时,开发工具的效果会非常显著。
2.企业信息化软件的开发工作可能非常具有挑战性,需要一套独特的能力和知识体系,因为企业信息化软件的开发者通常必须对组织、对组织内的政治局势有着深刻的理解,而正是这些政治局势决定了企业信息化软件的开发方式。
2.2.8、云
1.云开发也是一个相当新的领域,伴随越来越多的应用转移到云和分布式模式,云开发的体量也在迅速增长大多数云应用同时也是Web应用,但它们并不一定都是Web应用。云开发者需要了解云是如何工作的,特别是在可伸缩性和可用性方面。
2.有了云IDE,你甚至可以成为在云中开发的云开发者。
2.2.9、自动化测试
1.当你看到自己编写的自动化测试运行自如,在应用中自动填写字段、点击按钮、自动导航并且能够验证结果的时候,那是一种非常奇妙的感觉测试自动化充满乐趣。我很爱它。它不仅有趣,而且总体规模也在迅速扩展,需求量巨大。目前严重缺乏了解自动化测试框架、编写自动化测试工具以正确方式测试其他软件方法的优秀软件开发者。
2.专注于测试自动化的软件开发者要构建用于自动化应用测试的工具,编写自动化测试脚本以执行和验证功能。测试自动化极具挑战性,复杂度也很高,因为本质上这个工作是要求你编写一个应用程序来测试另一个应用程序我觉得这个工作兴趣盎然。
2.3、穿越“玻璃天花板”
一般来说,你会发现,软件开发者不管选择了哪一条特定的职业路径(也许不止一条),最终都会遇到所谓的“玻璃天花板”。这个玻璃天花板实质上就是一个极限,限制了你在职业发展路径上可以前进多远,限制了你作为一个软件开发者可以得到的最高薪酬。
无论你有多优秀,总有一天你会到达这个顶点,你再也无法前进了但是,有办法绕过或者穿越这个玻璃天花板:
1.你可以选择不再为别人工作。如果选择做一个自由职业者,你的玻璃天花板要宽敞许多,尽管作为一个自由职业者你可以赚多少钱仍然有一个实际存在的限制,因为你仍然需要用时间来换钱。如果选择做一名企业家,那就完全没有上限了,但你的收入也可能是0甚至是负数
2.如果你依然坚守职业开发者的道路,那你可以在打造个人品牌和自我营销上加大投入,这样你可能凭着自己的声望就能找到一家公司,让你的薪酬远远高于平均水平。
3.还有另外一种方法。你可以寻求加入一家大公司,进入它的管理通道或者技术轨道。
2.4、做管理还是搞技术
大多数中小型公司在向上晋升和发展方面都存在实际的限制。作为一名软件开发者,你不可能比公司的发展通道最高级别还要高,而且,那个所谓的“最高级别”其实可能根本也没有高到哪里去。但在像微软、苹果、IBM、谷歌、Facebook、惠普这样的大公司,上限可能会高出许多。这类公司往往需要最优秀的技术人员,所以大公司为这些技术人员量身定做出专门的技术通道。
1.通常,在这类大公司里,可以选择技术型职业发展通道,也可以选择走上管理通道。你必须从中做出抉择,如果你想要走上管理通道,那就得放弃自己的编码技能,你也可以选择坚守在技术通道上,一直编码到他们告诉你再也不需要你编码了。
2.如果你选择走上管理通道,你可能会成为一名开发者经理,然后可能是一名部门经理或项目经理,再然后,如果你能一直获得晋升,你可以一路做到高级管理职位,如开发总监甚或是首席技术官(CTO)。
每个人都可以胜任管理工作,还是说你需要先学会“做人”?
1.如果你想在事业上取得成功,你绝对应该致力于提升自己的人际交往技能;如果你觉得自己需要对此有所了解的话,你可以阅读软技能:代码之外的生存指南.或者戴尔·卡内基的永恒经典名著如何赢得朋友及影响他人.。
2.就管理工作而言,你面临的最大问题并不在于你能否成为那种能胜任管理工作的“人”,而在于技术人员出身的你能否忍受不能从事技术工作的缺憾。每当我被派到任何一种管理岗位时,我的最大问题总是想要撸起袖子去写代码或者去做其他技术工作;大多数软件开发者之所以进入这个行业就是因为他们喜欢解决技术问题,而不仅仅是为了赚大把钞票你真的应该问问自己,你能不能坦然面对在你的职业生涯中无法编写代码的生活呢?。
3.如果你选择了技术通道,你可能会从高级开发者转去做架构师,然后再晋升为研究员或者高级研究员。(每个组织都有自己的技术和非技术职业发展通道,但在职位和职位名称上往往不尽相同)
4.如果你达到了“玻璃天花板”还想继续有所突破,那你就不得不做出抉择:坚守技术通道,还是转去管理通道事实上,如果你没能在一家拥有先进技术路线的大公司工作,你甚至可能都没得选择。进入管理层可能是你能够得到晋升的唯一选择——要么转去做管理工作,要么自己选择退出。
2.5、要一直思考“我要去哪里”
本文的目的是促使你认真规划一下自己的工作方向,在自己的职业生涯发展方向上你需要深谋远虑。如果你想在事业上阔步前进,那你就需要清楚地知晓你该往哪个方向前进。
仔细思考一下:你想成为怎样的软件开发者。你想永远都做职业开发者吗?如果是,那你想做哪个领域的开发者:Web开发者、移动开发者,还是云开发者?还有,你的职业生涯的终点在哪里?最终,你想做一名架构师吗?还是说,你只是想一直编码、一直都在做一些很酷的事情,永远都不要操心自己该往哪个方向前进?你想让自己的职业发展得尽善尽美吗?如果是这样的话,那你最好现在就开始寻找拥有高级技术发展通道的公司。也许你想最终进入管理层,或者成为首席技术官,甚或是首席执行官。又或许你想在自己的职业生涯早期做一名开发者,然后转变成为一名自由职业者甚或是创业。
无论你决定做什么,最重要的是:你需要做出决策,并且为此做出计划即使你做出了选择,你也不必死守在一条通道上一成不变,你可以不断调整改变计划。但是,你应该至少制订一些计划,否则你会在自己的职业生涯中漫无目的地随波逐流。
感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取