程序員摸魚指南:副業成就未來

導讀 :你可知道,大名鼎鼎的 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 年,它的用戶界面仍然是恐龍級老古董。當用戶結賬時,它會把 <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> 虛擬機的運行。

真相

很多人會告訴你:不要在家裏用額外的時間來寫代碼,他們試圖把這種觀點看作是無產階級對晚期資本主義機器的某種反抗。我出生在一個非常貧窮的家庭,我可以告訴你,這些人沒有一個是真正貧窮的。那些真正貧窮的人想要工作,他們知道有可能會在一瞬間失去一切,所以,他們會盡其所能繼續工作。工作並不可恥,也不是失敗的標誌。

但凡讓你少工作的人都不是你的朋友。對於任何想賺更多錢而感到羞恥的人也是如此。通常情況下,這號人一般都有家庭或配偶罩着。如果他們突然失去了工作,他們還有第二學位,而編程技能只不過是通往其他工作的一塊小小的踏腳石;或者他們只是在妄想,認爲自己會永遠擁有輕鬆的工作。他們的經歷和你我完全不同,所以,如果你需要工作,並且你還想繼續從事 程序員這份職業 ,那麼你絕對應該離那些在一家公司只學習一門編程語言的人遠點兒。

事實上, 做副業就是你對抗公司貪婪的主要手段 。要利用一個擁有選擇權的人很難,根據我的經驗,工作之餘從事一些額外項目,給我帶來的好處比任何工作都要多得多。我可以有把握地說,我在職業生涯中所學到的一切都是從我的個人項目中學到的,而不是從我從事的工作中學到的。我還可以說,我在編程中最大的樂趣和享受,就是從事我自己的項目。

因此,我將給你列舉一些理由,來說明副業對任何經驗水平的程序員都是有好處的。

真相 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 上工作。行業變化是很快的,新工作緊跟潮流,所以當你需要或想要一份新工作的時候,你需要做的是:緊跟趨勢。

真相 6:MBA 喜歡齒輪

鑑於編程工作的創造性,許多公司的工作環境對程序員來說是令人難以置信的壓抑。當你在一家公司工作時,你將被迫使用他們認爲你應該使用的工具,而不是最適合你的工具。如果這家公司採用 Eclipse 和 Java,那麼你將使用他們特有的 Eclipse 品牌。要是他們使用 WebStorm,那你也將會使用 WebStorm。如果你使用了任何不同的東西,等待你的就是不斷的嘲笑和騷擾。許多編程環境對程序員的效率和技能來說,都是壓迫性的虐待和威脅,而他們希望通過這樣的方式,讓程序員隨時可以被替代。

那些MBA 們喜歡整齊劃一的齒輪,讓他們可以隨時更換,他們並不認爲你是一個有創造力的人。你只不過是一臺機器,他們將模糊的句子灌輸進去,然後期望後端能生產出可靠的軟件。任何不夠通用的東西,都會被視爲對企業的冒犯而被關閉。如果你重視自己心智的健全,你就會花一些空暇時間做一些你喜歡的事情。

真相 7:不管公平與否,只是一場表演而已

很多人認爲公司在招聘之前要求查看他們作品是不公平的。他們覺得,有些公司竟然還敢要求他們證明自己會編程,認爲這很令人反感:編程可不是表演藝術!

而現實是,編程確實已經成爲一種表演藝術。你必須展示你的工作,參與團隊協作,提交代碼審查。你必須將想法寫在白板上,並談論你想要做的事情。你必須參加會議,將你的東西兜售給其他人。

但是,那些能用副業項目來證明自己確實能寫代碼的人,他們同時對其他任何形式的行業表演都沒有問題。他們管理着一個精心策劃的 LinkedIn、Instagram 和 Twitter 賬戶,這些社交網站支持他們展示在開發方面的傑出工作,每年在 30 個會議上發表演講,還拍了一些夢幻般的專業照片……

事實上,你的副業項目已經證明你可以勝任這項工作,而且可以獨立完成。現在編程是表演性質的,這很令人討厭,但我們必須接受。

真相 8:你可以隨處使用代碼

你不一定非要寫老闆讓你編寫的代碼。你可以去做任何你想做的事,那麼爲什麼不去編寫能改善你生活的代碼呢?如果你所有的編程經驗僅僅是你在公司所做的工作,那麼很顯然你會討厭它的。

如果你回家後,做一些你感興趣或者對你生活有直接影響的事,那麼這就是學習編程的力量來源。我能理解爲什麼有些程序員新手認爲編程只是他們的第一份工作中要做的事情,但實際上,它遠不止這些。當你掌握了這項技能,你甚至可以讓你的生活實現自動化。

我用代碼研究新的音樂理論,將枯燥的稅收工作自動化,爲親朋好友搭建商業網站,還創建了我的整個網絡業務,這些最初只是我的一個副業。副業給我了行動和旅行的自由,讓我不再懼怕冒險。它們成爲了我抵禦糟糕的經濟、糟糕的老闆、糟糕的公司以及全球大瘟疫的安全網。我有信心,我可以在任何地方工作,我可以證明我可以在任何地方做任何事。

當然了,下班後寫代碼並不是必須的,但如果你想在你的職業生涯中能有所選擇,並且充分利用這項技能,那麼我強烈建議你這樣做。

真相 9:你擁有生產資料

那些哀嘆不得不從事副業的人,沒有意識到編程能力就是你的生產資料。現在,你幾乎可以不花一分美元就能開展線上業務。很多服務都是免費開始的,甚至不需要招聘一位額外的程序員就可以啓動項目。

作爲程序員,你自己就擁有終極工具,可以無成本的開創自己的新事業。你可以設置自己的虛擬主機,註冊你的公司,創建你的域名,甚至可以使用 btcpayserver之類的東西來接收你的比特幣。你也可以做顧問,在你所在的地區提供編程服務,幫助小微企業等等。

真相 10:時間不夠

我能理解那些有孩子、家庭的人可能沒有時間,但是,絕大多數抱怨自己沒有時間做副業的人顯然是有時間的。我想起一個人,他每天發佈大約 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章