这是一则关于 eBay 的 Java 企业版程序员的故事。
eBay 刚成立的时候,Java 正如日中天。彼时,每个人都在用 Java 编程。如果你是一名真正的程序员,那么你所做的一切都是基于 Java。我之所以知道这一点,是因为我曾被卷入到一个无休止的、可怕的 Java 项目中。直到 2008 年银行倒闭潮,这个糟糕的 Java 项目才随之而去。
2008 年银行的倒闭潮确实对 Java 企业版带来了毁灭性的打击,该事件最终还扼杀掉了 Sun(2009 年被 Oracle 公司收购,Java 是 Sun 在 1995 年 5 月正式发布的产品)。在 2008 年,Sun 大约 40~50% 的资金来自运行 Java 的各个银行。当银行因为抵押贷款欺诈而倒闭时,Sun 的一大笔收入几乎在一夜之间蒸发殆尽。随着较小的银行被并入其余三家较大的银行,对 Sun 的合同义务也随即被取消了。
还有一种形式的 “罪恶关联” ,因为 Java 与僵化的旧系统联系在一起,这些旧系统无法以足够快的速度做出改变,以至于未能在 2008 年的崩溃事件中幸存下来。要问我怎么知道的,那是因为我曾在 Bear Stearns(贝尔斯登公司,成立于 1923 年的美国第五大投资银行与主要证劵交易公司之一)一个僵化的 Java 系统上工作过,亲眼见证了整个崩溃的过程。
要不是因为 Android,Java 这门语言早就在 2008 年悲惨地消亡了。这就是我为什么一直说 “企业版” 的原因,因为这个版本的 Java 比较特殊,从那时起,大多数程序员都很讨厌这个版本。这种怪异的、无限的、迂回的、晦涩的代码,似乎是为了让企业程序员保住饭碗才存在的。我至今还记得那些令人讨厌的 “老胡子” Java 程序员,如果你没有把所有的东西都封包在 AbstractFactoryIndirectFactoryFactory 中,他们就会辱骂你、骚扰你。
这种使用错综复杂、晦涩难解的代码写法,因其充满 AbstractFactory 特征,确实起到了将新人排除在行业之外的壁垒作用,同时也保住了程序员的饭碗。
你不能解雇那些 Java 企业版程序员,因为只有他们才懂那些令人难以置信的晦涩代码,每年一次的 Bug 修复还得靠他们,而且这 Bug 还有一个诡异之处:每次在他们应该得到奖金的时候就会出现。你不得不一年又一年地支付 8000 人的工资,而他们上班所做的事基本就是:坐在那里,看着一堆 Java 虚拟机无所事事,否则有一天(就在要发奖金之前),这些虚拟机就会崩溃,到那时你就找不到人来修复它们了。
这些企业版 Java 程序员存在的问题是,一旦公司倒闭,你就需要找到一份新工作。你可能会认为,2008 年那场崩溃事件会给这些程序员上一课,但他们根本就没有吸取教训。你可能还会以为,他们已经意识到没有一份工作是安全的,他们需要掌握第二门编程语言,并有大量替代项目,以防万一因公司倒闭而失业。
eBay 的程序员就是一个很好的例子。
我曾用过几次 eBay,即使到了 2014 年,它的用户界面仍然是恐龙级老古董。当用户结账时,它会把<iframe>标签注入到自己的服务中,显示比如发票之类的简单内容。这种做法在某些地方用用还是可以的,但在 eBay 上,到处都是这些 <iframe> “蟑螂” 。Paypal(当时为 eBay 所有)差不多也是这样的情况,到处都是糟糕的用户界面、陈旧的基础设施。
这些糟糕的用户界面万年不变,原因在于它是企业版 Java 程序员及其工作的保护代码。为了保住饭碗,他们创建了在没有他们帮助的情况下很难更改的系统。但这是一把双刃剑,这一策略也使得他们自己难以更改代码,所以当公司要求他们让网站的风格看上去更 “现代化” 一些时,他们会声称:“这是不可能的任务。” 你可能会问他们,是否可以只使用诸如 bootstrap 之类的东西,企业版 Java 程序员就会看着他们的老古董 Java 代码,用手工编码的 HTML 代码嵌入到 FactoryFactoryImplInterface 中,然后说:“不,那是不可能的。”
然而,这种 “不可能” 被证明是一个谎言。最终,PayPal 独立出来了,用户界面突然开始改善。PayPal 与 eBay 原本共享同一批程序员,但在分拆之后,他们解雇了那些老气横秋的企业版 Java 程序员,并雇佣了一些更好的用户界面设计人员来改进应用。PayPal 之所以要这样做,是因为面临 Stripe 的竞争,后者凭借漂亮的用户界面和文档占据了开发商市场。
在 PayPal 给你展示了这个所谓 “不可能” 的代码其实可以改进之后,这事儿在 eBay 内部引发了一场战争,最终,eBay 解雇了大约 3000 名企业版 Java 程序员。官方虽然没有给出数字,但我从内部得到的信息是,有 3000~8000 名左右的企业版 Java 程序员被炒了鱿鱼,因为 CTO 想找别人来改进公司。
只要你去看看 2008 年以来的许多银行,你会发现总有一些由程序员控制的僵化技术,他们认为保持僵化就可以保住饭碗。这种态度的讽刺之处在于,这种顽冥不化最终会毁了公司,从而让他们丢掉工作,而且也让他们以后很难找到工作。
eBay 程序员就是这种恶果的极好例证。他们中的许多人甚至无法切换到 Android 开发。我知道有很多人转而从事与编程无关的工作,或者干脆退休。他们中的大多数人在 eBay 工作了几十年,没有其他成就,也没有能力学习任何新的编程语言。他们没有潜在的副业可做,没有额外的技能可供展示,也没有办法解释他们是如何花了 20 年时间来维持 AbstractInterfaceImpl <iframe> 虚拟机的运行。
很多人会告诉你:不要在家里用额外的时间来写代码,他们试图把这种观点看作是无产阶级对晚期资本主义机器的某种反抗。我出生在一个非常贫穷的家庭,我可以告诉你,这些人没有一个是真正贫穷的。那些真正贫穷的人想要工作,他们知道有可能会在一瞬间失去一切,所以,他们会尽其所能继续工作。工作并不可耻,也不是失败的标志。
但凡让你少工作的人都不是你的朋友。对于任何想赚更多钱而感到羞耻的人也是如此。通常情况下,这号人一般都有家庭或配偶罩着。如果他们突然失去了工作,他们还有第二学位,而编程技能只不过是通往其他工作的一块小小的踏脚石;或者他们只是在妄想,认为自己会永远拥有轻松的工作。他们的经历和你我完全不同,所以,如果你需要工作,并且你还想继续从事程序员这份职业,那么你绝对应该离那些在一家公司只学习一门编程语言的人远点儿。
事实上,做副业就是你对抗公司贪婪的主要手段。要利用一个拥有选择权的人很难,根据我的经验,工作之余从事一些额外项目,给我带来的好处比任何工作都要多得多。我可以有把握地说,我在职业生涯中所学到的一切都是从我的个人项目中学到的,而不是从我从事的工作中学到的。我还可以说,我在编程中最大的乐趣和享受,就是从事我自己的项目。
因此,我将给你列举一些理由,来说明副业对任何经验水平的程序员都是有好处的。
时至今日,仍然有一大群程序员还天真地认为从事副业是一种压迫。但事实是,副业给了你选择权,而拥有选择权就意味着自由。如果副业是用另一种编程语言完成的,当你用新语言找到更好的职位时,你就可以选择离开。你也可以把这些副业转化为你自己的新业务。
如果你所做的全部工作就是处理公司的代码,那么你实际上就会陷入他们特定的代码品牌和做事方式中。除非那家公司是 Facebook、Apple、Amazon、Netflix、Google 等科技巨擘之一,否则,在找新工作时,你的经验在很多方面都会对你不利。
你工作的公司就喜欢这样的,因为他们知道你永远不会跳槽,因为你已经没有新技术的经验,而且新技术学习起来非常困难。你将只需坐在那里看护 JVM,而不是试图找一份依靠 Go 编程语言的新工作,因为学习 Go 非常难。
你不应该把副业看成是不情愿的事儿,这样,一旦公司倒闭后,你还能找到新工作。你应该将它看作是通过培训和学习让你有更多的选择余地,这样你就可以更自由地找到一份新工作。
公司永远不会给程序员与他们影响力相匹配的工资。你每年可能会得到 2% 的加薪,这还赶不上货币的通胀率。当然你也可能会得到一点点奖金。但与此同时,你的代码却是你的公司赚取数十亿美元乃至数万亿美元的主要原因。你也许会得到一些股票期权,这大概是你得到加薪的唯一途径,永远。
这个行业经常需要新的人才,所以加薪的最简单方法就是换一位工作。换工作可以让你因为做同样的事情而得到增长 20% 到 100% 的报酬。
如果你认为你的老板会把你的最大利益放在心上,那么你就是在妄想。他们只想从你身上得到最大的回报,同时又能给你尽可能少的报酬。你也应该采取相应的行动,保持掌握你的技能,并找到你所能找到的、最好的工作。有一个好方法可以让你的选择留有余地,那就是你有公开可用的副业项目。
将工作换到一种新的热门编程语言是提高工资的有效方法。如果你坚持让古老代码正常工作,你就别想能够跳槽到薪水更高的职位。你需要证明你可以用 Go、Rust、Nim、Zig 或其他热门编程语言来编写代码。公司雇佣你就是为了让你能够开发一些东西,通过在副业项目中使用新技术开发东西,而你可以很容易证明这一点。
如果一门语言是新的,那么你该如何获得这份工作呢?最近有一则新闻说 IBM 想招聘在 Kubernetes 上具有 12 年工作经验的程序员,要知道 Kubernetes 诞生才 6 年,但要求有一定的工作经验实际上是非常普遍。那你该如何获得新技术方面的经验呢?答案就是:副业项目。
公司知道,如果他们在新技术方面提供培训,员工学成后就会选择离开。当你的代码是该公司市值达到一万亿美元的原因时,你为什么还不离开一家拒绝给你加薪的公司呢?
在工作中,你会因为试图使用任何新技术而被指责为 “特立独行” ,哪怕这项技术在性能上是一个巨大的飞跃,并被 Google 或 Facebook 使用。
所以,获得新技术唯一途径就是自己培训自己,而在编程方面唯一有效的培训就是去构建东西。人们付钱给你不是为了让你知道 Haskell 中的 Monad 是如何工作的,而是为了让你用 Haskell 中的 Monad 来构建东西。所以,如果你从来没有构建过什么东西的话,那他们怎么相信你能真正做出他们需要的东西呢?
你永远不会因为你的工作而收到任何实质形式的“致谢”。你只不过是机器上的一个小小齿轮,没有直接证据可以证明你在大多数公司做过什么。如果在 eBay 只用 iframe 完成所有的工作,找新工作时就只得撒谎了。但是在副业项目上使用一门新的编程语言,可以表明你实际上是能胜任的。
除非电影风格的致谢名单成为编程的规范之前,你还得需要副业项目来展示你的技能。
你可能会感到奇怪,为什么 eBay 的 Java 程序员不能直接去做另一个 Java 工作呢?为什么不直接进入 Android 开发领域呢?那是因为他们实际并不懂 Java,他们懂的只是 eBay Enterprise Java。
程序员都有一种错觉,认为自己在公司里所使用的语言是 “标准” 的,然而事实并非如此。你对这种语言的使用是非常特殊的,并且还是为这家公司量身定做的,它基于错综复杂的历史,这使得它与其他人对这门语言的使用相比,显得很奇怪(因为其他人也都认为自己对这种语言的使用是标准的)。
要打破这种错觉(并使自己保持清醒)的唯一方法,就是在公司代码库之外,用完全不同的编程语言做一个副业项目。这将帮助你在未来找到新工作,因为从外部经验来看,你更符合新的编程趋势。
如果仅在 eBay Java 上编程,就意味着你将只能在 eBay Java 上工作。行业变化是很快的,新工作紧跟潮流,所以当你需要或想要一份新工作的时候,你需要做的是:紧跟趋势。
鉴于编程工作的创造性,许多公司的工作环境对程序员来说是令人难以置信的压抑。当你在一家公司工作时,你将被迫使用他们认为你应该使用的工具,而不是最适合你的工具。如果这家公司采用 Eclipse 和 Java,那么你将使用他们特有的 Eclipse 品牌。要是他们使用 WebStorm,那你也将会使用 WebStorm。如果你使用了任何不同的东西,等待你的就是不断的嘲笑和骚扰。许多编程环境对程序员的效率和技能来说,都是压迫性的虐待和威胁,而他们希望通过这样的方式,让程序员随时可以被替代。
那些 MBA 们喜欢整齐划一的齿轮,让他们可以随时更换,他们并不认为你是一个有创造力的人。你只不过是一台机器,他们将模糊的句子灌输进去,然后期望后端能生产出可靠的软件。任何不够通用的东西,都会被视为对企业的冒犯而被关闭。如果你重视自己心智的健全,你就会花一些空暇时间做一些你喜欢的事情。
很多人认为公司在招聘之前要求查看他们作品是不公平的。他们觉得,有些公司竟然还敢要求他们证明自己会编程,认为这很令人反感:编程可不是表演艺术!
而现实是,编程确实已经成为一种表演艺术。你必须展示你的工作,参与团队协作,提交代码审查。你必须将想法写在白板上,并谈论你想要做的事情。你必须参加会议,将你的东西兜售给其他人。
但是,那些能用副业项目来证明自己确实能写代码的人,他们同时对其他任何形式的行业表演都没有问题。他们管理着一个精心策划的 LinkedIn、Instagram 和 Twitter 账户,这些社交网站支持他们展示在开发方面的杰出工作,每年在 30 个会议上发表演讲,还拍了一些梦幻般的专业照片……
事实上,你的副业项目已经证明你可以胜任这项工作,而且可以独立完成。现在编程是表演性质的,这很令人讨厌,但我们必须接受。
你不一定非要写老板让你编写的代码。你可以去做任何你想做的事,那么为什么不去编写能改善你生活的代码呢?如果你所有的编程经验仅仅是你在公司所做的工作,那么很显然你会讨厌它的。
如果你回家后,做一些你感兴趣或者对你生活有直接影响的事,那么这就是学习编程的力量来源。我能理解为什么有些程序员新手认为编程只是他们的第一份工作中要做的事情,但实际上,它远不止这些。当你掌握了这项技能,你甚至可以让你的生活实现自动化。
我用代码研究新的音乐理论,将枯燥的税收工作自动化,为亲朋好友搭建商业网站,还创建了我的整个网络业务,这些最初只是我的一个副业。副业给我了行动和旅行的自由,让我不再惧怕冒险。它们成为了我抵御糟糕的经济、糟糕的老板、糟糕的公司以及全球大瘟疫的安全网。我有信心,我可以在任何地方工作,我可以证明我可以在任何地方做任何事。
当然了,下班后写代码并不是必须的,但如果你想在你的职业生涯中能有所选择,并且充分利用这项技能,那么我强烈建议你这样做。
那些哀叹不得不从事副业的人,没有意识到编程能力就是你的生产资料。现在,你几乎可以不花一分美元就能开展线上业务。很多服务都是免费开始的,甚至不需要招聘一位额外的程序员就可以启动项目。
作为程序员,你自己就拥有终极工具,可以无成本的开创自己的新事业。你可以设置自己的虚拟主机,注册你的公司,创建你的域名,甚至可以使用 btcpayserver 之类的东西来接收你的比特币。你也可以做顾问,在你所在的地区提供编程服务,帮助小微企业等等。
我能理解那些有孩子、家庭的人可能没有时间,但是,绝大多数抱怨自己没有时间做副业的人显然是有时间的。我想起一个人,他每天发布大约 200 条推文,但就是 “没有时间做副业” 。
我建议,如果你认为自己没有时间,就每半个小时记录一次,连续两周,看看你把时间都花在哪里了。老实说,如果你不去干一些傻事,你就会发现自己实际有大把大把的时间。
我非常喜欢做那些最终能让自己感到快乐的事情。如果不得不在家里从事副业,让你感到悲伤和愤怒,我劝你还是别做了。找点别的事情来打发你的时间吧。但是,如果你想在这个行业拥有长久的职业生涯和最终的自由,那么你就必须接纳这份工作的表演性质,并在业余时间独立工作。老实说,副业项目就是确保你不会因为悲剧性的事件而失业的唯一方法,而且,副业也是编程中真正乐趣所在。
Zed A. Shaw,由 Addison/Wesley 出版的《 “笨办法” 学……》系列丛书(The Hard Way Series)的作者,包括《 “笨办法” 学 Python》(Learn Python The Hard Way)等等。
参考阅读:
https://learnjsthehardway.com/blog/07-your-side-projects-are-your-future
暴雪员工集体“开源”工资单:裁员加活不加价,年年盈利却不涨工资
InfoQ 读者交流群上线啦!各位小伙伴可以扫描下方二维码,添加 InfoQ 小助手,回复关键字“进群”申请入群。大家可以和 InfoQ 读者一起畅所欲言,和编辑们零距离接触,超值的技术礼包等你领取,还有超值活动等你参加,快来加入我们吧!
点个在看少个 bug