程序员上班摸鱼指南:副业兼职开发成就未来

你可知道,大名鼎鼎的 eBay 在当年就是由副业项目发展壮大起来的。今天,摸鱼大神 Zed A. Shaw 给我们娓娓道来他的摸鱼经验,要知道,他在上班期间就摸了好多鱼,不仅开发了网站,还在业余时间写了一套丛书。另外副业也是你对抗贪婪企业的主要手段。

小蜜蜂云工作平台提供大量程序开发人员的兼职岗位,工资预付到平台监管,不用担心接了私活儿却拿不到钱。


这是一则关于 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 大裁员
我曾用过几次 eBay,即使到了 2014 年,它的用户界面仍然是恐龙级老古董。当用户结账时,它会把标签注入到自己的服务中,显示比如发票之类的简单内容。这种做法在某些地方用用还是可以的,但在 eBay 上,到处都是这些 “蟑螂” 。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 虚拟机的运行。
真相
很多人会告诉你:不要在家里用额外的时间来写代码,他们试图把这种观点看作是无产阶级对晚期资本主义机器的某种反抗。我出生在一个非常贫穷的家庭,我可以告诉你,这些人没有一个是真正贫穷的。那些真正贫穷的人想要工作,他们知道有可能会在一瞬间失去一切,所以,他们会尽其所能继续工作。工作并不可耻,也不是失败的标志。
但凡让你少工作的人都不是你的朋友。对于任何想赚更多钱而感到羞耻的人也是如此。通常情况下,这号人一般都有家庭或配偶罩着。如果他们突然失去了工作,他们还有第二学位,而编程技能只不过是通往其他工作的一块小小的踏脚石;或者他们只是在妄想,认为自己会永远拥有轻松的工作。他们的经历和你我完全不同,所以,如果你需要工作,并且你还想继续从事程序员这份职业,那么你绝对应该离那些在一家公司只学习一门编程语言的人远点儿。
事实上,做副业就是你对抗公司贪婪的主要手段。要利用一个拥有选择权的人很难,根据我的经验,工作之余从事一些额外项目,给我带来的好处比任何工作都要多得多。我可以有把握地说,我在职业生涯中所学到的一切都是从我的个人项目中学到的,而不是从我从事的工作中学到的。我还可以说,我在编程中最大的乐趣和享受,就是从事我自己的项目。
因此,我将给你列举一些理由,来说明副业对任何经验水平的程序员都是有好处的。
真相 0:副业意味着自由
时至今日,仍然有一大群程序员还天真地认为从事副业是一种压迫。但事实是,副业给了你选择权,而拥有选择权就意味着自由。如果副业是用另一种编程语言完成的,当你用新语言找到更好的职位时,你就可以选择离开。你也可以把这些副业转化为你自己的新业务。
如果你所做的全部工作就是处理公司的代码,那么你实际上就会陷入他们特定的代码品牌和做事方式中。除非那家公司是 Facebook、Apple、Amazon、Netflix、Google 等科技巨擘之一,否则,在找新工作时,你的经验在很多方面都会对你不利。
你工作的公司就喜欢这样的,因为他们知道你永远不会跳槽,因为你已经没有新技术的经验,而且新技术学习起来非常困难。你将只需坐在那里看护 JVM,而不是试图找一份依靠 Go 编程语言的新工作,因为学习 Go 非常难。
你不应该把副业看成是不情愿的事儿,这样,一旦公司倒闭后,你还能找到新工作。你应该将它看作是通过培训和学习让你有更多的选择余地,这样你就可以更自由地找到一份新工作。
真相 1:你永远不会得到加薪
公司永远不会给程序员与他们影响力相匹配的工资。你每年可能会得到 2% 的加薪,这还赶不上货币的通胀率。当然你也可能会得到一点点奖金。但与此同时,你的代码却是你的公司赚取数十亿美元乃至数万亿美元的主要原因。你也许会得到一些股票期权,这大概是你得到加薪的唯一途径,永远。
这个行业经常需要新的人才,所以加薪的最简单方法就是换一位工作。换工作可以让你因为做同样的事情而得到增长 20% 到 100% 的报酬。
如果你认为你的老板会把你的最大利益放在心上,那么你就是在妄想。他们只想从你身上得到最大的回报,同时又能给你尽可能少的报酬。你也应该采取相应的行动,保持掌握你的技能,并找到你所能找到的、最好的工作。有一个好方法可以让你的选择留有余地,那就是你有公开可用的副业项目。
真相 2:新语言薪水更多
将工作换到一种新的热门编程语言是提高工资的有效方法。如果你坚持让古老代码正常工作,你就别想能够跳槽到薪水更高的职位。你需要证明你可以用 Go、Rust、Nim、Zig 或其他热门编程语言来编写代码。公司雇佣你就是为了让你能够开发一些东西,通过在副业项目中使用新技术开发东西,而你可以很容易证明这一点。
真相 3:你从未接受过培训
如果一门语言是新的,那么你该如何获得这份工作呢?最近有一则新闻说 IBM 想招聘在 Kubernetes 上具有 12 年工作经验的程序员,要知道 Kubernetes 诞生才 6 年,但要求有一定的工作经验实际上是非常普遍。那你该如何获得新技术方面的经验呢?答案就是:副业项目。
公司知道,如果他们在新技术方面提供培训,员工学成后就会选择离开。当你的代码是该公司市值达到一万亿美元的原因时,你为什么还不离开一家拒绝给你加薪的公司呢?
在工作中,你会因为试图使用任何新技术而被指责为 “特立独行” ,哪怕这项技术在性能上是一个巨大的飞跃,并被 Google 或 Facebook 使用。
所以,获得新技术唯一途径就是自己培训自己,而在编程方面唯一有效的培训就是去构建东西。人们付钱给你不是为了让你知道 Haskell 中的 Monad 是如何工作的,而是为了让你用 Haskell 中的 Monad 来构建东西。所以,如果你从来没有构建过什么东西的话,那他们怎么相信你能真正做出他们需要的东西呢?
真相 4:你永远得不到认可
你永远不会因为你的工作而收到任何实质形式的“致谢”。你只不过是机器上的一个小小齿轮,没有直接证据可以证明你在大多数公司做过什么。如果在 eBay 只用 iframe 完成所有的工作,找新工作时就只得撒谎了。但是在副业项目上使用一门新的编程语言,可以表明你实际上是能胜任的。
除非电影风格的致谢名单成为编程的规范之前,你还得需要副业项目来展示你的技能。
真相 5:你不懂 Java
你可能会感到奇怪,为什么 eBay 的 Java 程序员不能直接去做另一个 Java 工作呢?为什么不直接进入 Android 开发领域呢?那是因为他们实际并不懂 Java,他们懂的只是 eBay Enterprise Java。
程序员都有一种错觉,认为自己在公司里所使用的语言是 “标准” 的,然而事实并非如此。你对这种语言的使用是非常特殊的,并且还是为这家公司量身定做的,它基于错综复杂的历史,这使得它与其他人对这门语言的使用相比,显得很奇怪(因为其他人也都认为自己对这种语言的使用是标准的)。
要打破这种错觉(并使自己保持清醒)的唯一方法,就是在公司代码库之外,用完全不同的编程语言做一个副业项目。这将帮助你在未来找到新工作,因为从外部经验来看,你更符合新的编程趋势。
如果仅在 eBay Java 上编程,就意味着你将只能在 eBay Java 上工作。行业变化是很快的,新工作紧跟潮流,所以当你需要或想要一份新工作的时候,你需要做的是:紧跟趋势。