您的位置:首页 > 职场人生

程序员除了编代码,还能做哪些职业规划?

2017-12-10 11:56 661 查看
不思进取的程序员不是好的程序员。无数的开发者都梦想着可以加入 Google、Facebook、Apple、BAT 这样的大公司,的确,能够在数一数二的互联网公司工作确实很酷。但是,作为一名开发者,如果能够打败 Google、BAT,那岂不是更酷?不过想要做到这一点很不容易,因为你需要的不仅仅是计算机相关知识。

那么怎么才能打败 Google、BAT 呢?除了掌握编码知识,又需要了解哪些内容呢?接下来我们为你一一揭晓答案,这篇文章比较长,阅读需一定的耐心,即使如此,但个人认为也极具借鉴意义。

第一步,成为一名入门级的 efficiencer。

何为 Efficiencer?

音标:[εfisjãs]
n.f. 效力,效能,功效,效率,性能
efficience
f.
效力;效率;实效

Efficiencer 是一个新的词汇,源
16617
于我自己创造,用来描述那些我认为更有商业头脑,更能自主的软件开发者。

简而言之,Efficiencer 与程序员是有一定区别的。程序员主要工作是根据软件需求和规范编写代码。而 Efficiencer 重在解决问题。以下的案例希望可以帮助你更好地理解两者的区别:

你去找一个程序员,说:“我需要一个 ASP MVC 网站,在后台使用 Entity Framework、.NET 和 SQL Server。” 程序员说:“好的,老板,把线框图给我,我马上开始写代码。”

你去找一个 Efficiencer,说:“目前我们公司采用电话的方式下单,而我们公司的网站仅仅是一个展示性的页面。我不懂技术细节,但我希望客户可以 24 小时的通过我们的网站进行下单,我想要你帮助我实现这样的功能,以便我们跟上竞争对手的脚步。” Efficiencer 说:“我帮助了很多像你这样的企业实现自动化订购流程,所以不用担心,我会确保你的网站不仅可以与竞争对手竞争,而且还会超越竞争对手。”

基于此,你看出两者的差别了吗?哪一种专业人员是需要被老板管理,哪一种可以自己直接当老板?

入门级 Efficiencer 的难题

在未来的编程世界里,软件开发人员并非是行业中最不重要的人。曾经我提出了一个关于未来的构想,在这个构想中,由 Efficiencer 组成的公司架构上类似律师事务所,他们负责将项目管理(状态报告和时间表协调)委托给下属,而不是上级。

这已经引起了很多人的共鸣。人们普遍喜欢这个构想,但入门级的 Efficiencer 面临的阻碍是什么呢?

短期到中期的职业生涯规划

有关 Efficiencer 职业规划需注意以下几点:

跳过大量的编程理论和书籍,因为这种学习方式效率很低。

用尽所有办法让自己开始进行编程实战(新兵训练营、横向过渡、自学,或者其他途径)。

花 2-4 年的时间担任公司程序员,尽可能多的做项目,从项目中提升自己。程序员和医生有些类似,需要不断从项目中学习,活到老学到老。

辞去现有的编码工作,成为一个实际的 Efficiencer,因为 2 - 4 年时间足够你掌握某一领域的编程技能。在你重新就业之后,你应该开始专注于你的特殊专长,并提升你的个人品牌、职业规划、商务能力。

以上,很多人会有争议,毕竟 2 - 4 年的编程经历只能勉强入门而已,怎么会达到高级水平?接下来,我将一一来解释。



先发制人的辩护之路

我是一个达克效应(认知偏差,能力越低的人越容易产生对自己过高的评价,而能力越高的人则倾向于低估自己的能力)中所说的白痴吗?当然,在反对者的眼里我的确是白痴。现在我们先不讨论达克效应,我先介绍一些我自己。

我的背景

虽然我可能是一个白痴,但在我所说的 2 - 4 年的时间里,我活得明明白白。如果我说你在提升开发技能上花费的时间的培训大多数都是浪费的,那么你一定感觉到自己被冒犯。

换句话说:

学位不错,但很久以前我就已经拿到了,自然愿景也变了。

自从我停止当一名领死工资的程序员以来,我的收入增加了一倍多。

我发现教会别人编程比编程本身更有价值。

有些公司在面试时把 R-Tree 看得比什么都重要,对于这类公司我会毫不犹豫地拒绝。

我离开了我前文中提到的那家公司,这家公司采用非循环图表,并在不久之后关闭了整个产品线(并破产了)。

之后,我拥有一个非常好的生活方式和极大的自主权。

我提到所有这一切只是为了证明我既没有酸葡萄心理,也不是纸上谈兵。接下来,先不说我,我们来谈谈 Google 的 Jill 吧。

编程技巧对你的收入影响不大

为了加强我关于程序员技能边际收益递减的假设,让我们以一个名为 Jill 的程序员举例。Jill 是一位真正的程序大牛,她是一名以一敌十的程序员。她加入 Google 之后让 Google 里面那些大牛都黯然失色。

我想 Jill 应当算是一个以一敌千的程序员。她真的非常出色,当她厌倦了 git 命令行的笨拙时,自学成才,并且从头开始用汇编语言编写了一个 Linux shell,其中每个 git 命令参数排列都是单个字符。她是世界上最有趣的程序员,并且她在 Google 工作。

那么她在 Google 做什么呢?她负责优化网络搜索引擎的速度。她精通计算机基础知识、缓存失效、异步编程、分布式系统,能够将搜索时间优化到纳秒级。

这为谷歌带来了多少价值呢?因为 Jill 的存在,使得 Google 在搜索方面几乎垄断了市场。Jill 为 Google 带来数十亿美元的收入。



那么 Google 给 Jill 支付的薪水是多少呢? 大概每年 20 万美元。

当然 Google 会支付她更多,但是你懂得,这也需要遵守制定好的薪酬体系。你不能比你的经理拿得更多。因此,Jill 为 Google 赚了数十亿美元,然而每年在 15 万美元(Google 软件工程师标准薪资)的基础之上仅仅多获得 5 万美元。在山景城总部,这仅仅意味着她的住所可以从一个标间换成一套。

编程技巧对你的公司影响不大

或许,你会对 Jill 这种不公平的事情充满了不满。她为 Google 创造了数十亿美元的收入,但是自己每年仅仅多得 5 万美元。但是,说实话,他们应该付给她多少呢?

他们应该每年支付她一百万吗?如果他们真的想这样做,可以找到人力资源部门并调整薪酬体系。但是这样做会提醒像微软这样的竞争对手她的重要性。

当然,她可以自主创业。她可以从 Google 中脱颖而出,开始构建自己的搜索引擎,但是 Jill 不再是程序员了。她变成了一个 efficiencer,专门研究快速搜索技术。而她的算法在产品化,市场化,获得资金之后才有价值,然后找到一种方式进入市场。怀着一颗成为巨头的心,但是却面临着残酷的竞争。

回到主题,Jill 在 Google 的卓越贡献真的值得吗?如果她幸运的话,每年价值也仅比他人多 5 万美元。

你知道为什么吗?因为仅仅擅长编程的价值是不高的。

Jill 是不过是一个假设,没有能够以一敌千的程序员,也没有能够独自一人完成搜索引擎的“爱因斯坦”存在。Jill 的案例大大夸大了程序员的价值。在现实世界里,Jill 不过是一位比普通人优秀一点的程序员,和 Google 大部分程序员相比,她可能也就是在编程方面比较出色。

关于编程技巧的玩笑

当我回顾自己的编程生涯时,我想我学过的编程语言都数不过来了。

曾经有一段时间我深信自己掌握多门语言会使自己成为一名优秀的程序员。我最早使用 C ++ ,后来使用一门叫做 ML 的函数式语言,然后是 Perl、PHP、C、C#、Java、Python、VB,还有一些我不记得的编程语言,并且我都学得还不错。考虑诸多语言的特性,理解类型和泛型,权衡多重继承的利弊......所有这一切都是超级重要的。这使我成为一个真正的、全面的、专业的程序员。

人们总是喜欢重视和叙述自己的经验。是的,我常常告诉自己:没有 10 种不同编程语言的涉猎,我就不可能写出一些好的业务应用程序。当然,我可以写,但我不会写得太好。维护起来会稍微困难一点,用户的成本会更高。

边际收益递减

你越多学习一门编程语言就越能使你成为一个更好的程序员吗?当然,它的确如此。但是在这篇文章的剩余部分会贯穿一个术语:边际收益递减((The
law of diminishing returns/The law of diminishing marginal utility)又称边际效益递减规律,或边际产量递减规律,指在短期生产过程中,在其他条件不变(如技术水平不变)的前提下,增加某种生产要素的投入,当该生产要素投入数量增加到一定程度以后,增加一单位该要素所带来的效益增加量是递减的,边际收益递减规律是以技术水平和其他生产要素的投入数量保持不变为条件进行讨论的一种规律)。我们常常认为学习每个语言、框架等等是非常重要的,但这并不一定能够提升我们的编程技能。

实际上,新的语言和框架并没有我们认为的那么重要。它们不过是时代的趋势。

正如我前文所说,我最早进入软件行业时使用 C ++。但是,C++ 无法作为一个企业级 Web 语言,因此我学习了 Java。持续了一段时间之后我进入了一家使用 .NET  的公司,在那里我又学习了 C#。多年来,我并不是为了追求新奇的技术而选择学习多个语言和框架。而是为了跟上时代的步伐,以免公司招聘一个只有我一半工资的应届毕业生来替代我。

随着我们在这个行业中年龄的增长,发现企业有使用“年轻”程序员淘汰大龄程序员的想法。这是非常糟糕的想法。我们对此进行抗议:“新人编写的代码充满 bug,而像我们这样的经验丰富的大龄程序员编写的代码更加优雅和稳定!”  我们把掌握多个编程语言的丰富经验叙述为一种优点,让雇主相信自己的价值。也让自己更加安心。

但是,我们所有这些多个不同语言的经验价值并不高。实际上,我们面对新的编程语言和框架,大多数人差不多都只有一两年的经验。

编程技能的实际价值

如果本文就在此处终止了,那么一定是令读者沮丧的。我要继续论证自己的 efficiencer 理论:你只需要2 - 4年的时间或者编程经验,然后你就可以开始利用常规编程以外的经验。

所以,让我们通过图表来看清现实。我创建了下面这个模型来说明自动化和编程的价值。



还记住我所说的边际收益吗?大体上这是行业在编程技能方面的边际收益。如上图所示,我用红色部分来表示一个初级编程在行业中占有的比例和创造的价值。我估计它差不多占一半左右,虽然这样的程序写得非常糟糕。如果细分的话,情况如下:

市面上的初级程序(红色)占比 50%。

加上稍好一些的程序(橙色),可以达到 75%。

如果加上更好一些的程序(黄色),那么可以高达 90%,这将带给你一个高度可维护的领域。

如果程序非常出色(绿色),则可达到 95%。

加上最后的5%(蓝色)可以提高到 100%,来自 Jill 这样的大牛。

以上数据虽然并不是绝对的准确,但是你可以推断没有经验的开发者编写代码的指数倍增。市面上所有软件中有一半是由经验不多的人编写的。而且,尽管如此,依然在继续。

这是什么意思呢?这意味着从初级程序开始然后试图将其提升是有商机的。

编程技巧的价值递减

我刚刚概述的是一个基准。从敏捷开发的角度来看实际上它可能有些不准确。

为什么呢?敏捷开发的目标是为应用开发商降低风险。如何降低风险?这意味着找到一种方法来帮助企业让有限的人才库中的初级开发人员做更多的事情。敏捷开发涉及结对编程,早期反馈和检查,集体代码所有权,严格的测试,持续集成等实践...总之,敏捷包括假设,发现和纠正错误。

敏捷会改进上面的图表。它将软件开发商品化,使经验较少的人员在可替代团队成员的职业生涯中提前做出有意义的贡献。因此一幅新的图表应运而生:



但敏捷已经存在了一段时间,我们正在接受更新更大的事情。我不是在谈论“精益”和其他项目管理潮流,而是更多的技术导向的运动。我们打破了开发、部署和运营之间的障碍,称之为 DevOps。从单元层面到生产层面,我们已经取得了更大的进展。我们做dark launches,使用 Monkey 测试,并用微服务去去除风险。

随着我们这些手段的实施,提升了商品化应用开发。我们启用自动化错误检测,补救和分析。我们将 Web、移动开发整体上转化为逐个数字的活动,而且我们最终得到的边际回报看起来更像下图这样。



现在回到我提到的  efficiencer 理念,对其进行重新定义。红色和橙色代表“我们已经完成了它,它介于初级和稍好之间。拥有 2 - 4 年的编程经验,你将达到或超过这个水平的技能。然后,你将发现自己处于 95% 区间,相比于 Jill 这种以一敌千的大牛来说,你已经成为了以一敌 950 的优秀程序员。


efficiencer 的人生

我提出了一个不重要的边缘编程技巧,这使很多人都感到压抑,包括我自己。但是,真的,这并不全是坏事。因为你真的很喜欢编写代码和学习新技术,如果你想在自己的职业生涯中成为一个个人贡献的软件开发者,放手去做,你一定会过上自己想要的生活。

如果用金钱来衡量的话,你的职业路径如下:

刚刚进入软件行业,作为一个初级开发人员每年薪水大约 6 万美元。

工作 5 年之后成为一名高级开发人员,薪水大约 11 万美元。

逐渐获得类似“首席工程师”或“技术主管”或“架构师”这样的头衔,薪水在 15 万美元左右。

在职业生涯的剩余时间进行朝九晚五的工作,每年学习一下新的技术,将薪水维持在 15 万美元。

这样的生活很不错。我想,你的收入在全球范围内来比较是比较普通的。而且你也意识想要发展自己的业余爱好是需要足够工资支持的。

这不容易突破,不过也没有什么可耻的。

非常容易理解,它有一个非常具体和清晰的上限。随着时间的流逝,你或许会成为软件开发领域中最不重要的人,因为你会忙于追逐框架和技术,以此为条件让他人来衡量你的价值。

将非 efficiencer 的职业生涯进行可视化

假设你作为一个程序员开始了职业生涯,决心永远不会进入管理岗位。当然,你永远不会自己主动成为一个 efficiencer,因为直到几分钟前你才知道 efficiencer 是什么。

以下是你的职业生涯直观的可视化图像。2 - 4 年后,你可以获得高达 95% 的价值交付能力,你成为一个多面手。那么,在接下来的 41 年里,你将会捣鼓,学习新的框架,保持现状,并在最后 5% 的边际收益递减区域徘徊(除非你从编程工作中逃离开,用更多的时间来指导别人,这是我为 efficiencer 所提到的那种专业的一个例子)。

换句话说,在职业生涯的前10%,你将达到职业价值的 95%。这非常令人惊讶。



程序员迷恋技能的弊端

如果把你的技能定位在绿色和黄色,你会有一个美好的生活。而基于此,你仅是把技能的提升当做是一种业余爱好,因为你投入了很多精力,却没有获得任何额外的回报。

实际上,任何一个具有商业意识的红色或橙色的人都可以利用他们的编程技巧,并且自己做得更好。

例如以一敌千的程序员 Jill 离开谷歌,甚至只是稍微做一点商业计划,她就会建立一个初创公司,抗衡谷歌。然后谷歌将不得花费数百万美元买下她。但是如果身处黄、绿、蓝阶段的程序员,仅是自我提升该有的编程技能,这样反而会有限制作用,好比在对她说:“Jill,你技术太牛了,不要操心其他事情,只要专门做好搜索就可以了,至于商业上的事交给我们就可以。”

Efficiencer
的未来

总体而言,Efficiencer 可以解释为程序员出生的创业者。在如今技术变革日新月异的大环境之下,很多程序员都担心一过 35 岁就即将面临失业的风险,其实若不想成为管理者,却又对编程充满兴趣,Efficiencer 不乏为一个较好的出路,虽然刚开始,收入有所下降,但是一旦坚持下去,很快就可以超越之前的水准。

原文:Learning in a World Where Programming Skills Aren't That Important

作者:Erik Dietrich  

译者:安翔

责编:苏宓

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: