無論從年初開源社釋出的《2020 中國開源年度報告》還是整體的大環境,不難看到中國的開源正在崛起,越來越多的來自中國的開源專案和開發者們正在走入大家的視野。在開源浪潮的大趨勢下,程式設計師又該如何規劃自己的職業以及個人成長呢?不如聽聽正在全職做開源的工程師張晉濤怎麼說。
本文根據張晉濤在又拍雲 Open Talk 技術沙龍北京站主題演講《開源浪潮下程式設計師的職業規劃和成長》整理而成.
張晉濤,支流科技雲原生技術專家,Apache APISIX committer, Kubernetes ingress-nginx reviewer,containerd/Docker/Helm/Kubernetes/KIND 等眾多開源專案 contributor,對 Docker 和 Kubernetes 等容器化技術有大量實踐和深入原始碼的研究,著有 《Kubernetes 上手實踐》和 《Docker 核心知識必知必會》等專欄。
大家好,今天我分享的主題是《開源浪潮下程式設計師的職業規劃和成長》。今天在這裡聊兩個專案,一個是 Apache APISIX,APISIX 是 Apache 基金會旗下的頂級開源專案。第二個專案是 ingress-nginx,它是 Kubernetes 整個生態圈裡頭,除去 Kubernetes 自身以外使用頻率最高的軟體之一了。搞過 Kubernetes 的同學應該基本上都用過這個專案。
今天我分享的內容主要從四個方面來聊:
-
開源的文化
-
如何參與開源
-
關於我的故事
-
職業規劃相關的內容
瞭解開源文化
自由軟體運動
提到開源文化,首先需要了解自由軟體運動。
圖右是被稱為自由軟體之父的斯托曼,他在 1983 年提出了 GNU 計劃。1984 年,斯托曼提出了 Copyleft 的概念,Copyleft 跟我們平時用到的版權 Copyright 是相對應的,它放棄了 Copyright 類似對版權的嚴格限制。
1985 年,斯托曼成立了自由軟體基金會,目的是為了能夠讓自由軟體更好地發展。在當時,很多軟體都是專有軟體或者商用軟體,任何人使用這些軟體都是需要付費的。斯托曼認為隨著計算機的發展,如果商用軟體、付費軟體掌握在極少數公司的情況下,那麼我們將會逐步失去自由。因為很多商業軟體或者專用軟體都是由商業公司,或者是極少數的人掌握著,如果你依賴這些軟體,都必須依賴於其他人,你的命脈就掌握在了他們手中,就不可能獲得自由。
1989 年,出現了第一個 GNU 的通用協議,叫做 GPL。
接下來,我們來看下在自由軟體運動之後發生了什麼事情。想必大家都接觸過 Linux 作業系統。Linux 作業系統的創始人是林納斯·託瓦茲,他在 1991 年首次釋出了 Linux 作業系統,並且選擇了將它的原始碼直接釋出到網路上,供其他人去使用和分享。
在這個時候,斯托曼找到了林納斯。GNU 自由軟體基金會的主要目標是希望能夠建立出所有人都可以使用的基礎軟體,包括作業系統。直到 1991 年 Linux 作業系統釋出的時候,GNU 自由軟體基金會已經完成了所有基礎類的自由軟體開發,但是它沒完成最核心的作業系統的開發。所以,斯托曼找上了林納斯。結果我們都知道,Linux 作業系統的完整名字是 GNU/Linux。
開源協作與文化
聊完自由軟體運動、Linux 作業系統,來看下我們現在所接觸到的開源協作和開源文化。
開放
在開源協作中,基本的理念就是開放。但很多人可能對此有誤解,認為開放原始碼就等於開放,其實不然。原始碼的開放和真正的開放並不一樣。舉個簡單的例子:MongoDB。
MongoDB 是一個文件型別的資料庫。近幾年,MongoDB 修改了一次協議 SSPL,稱之為服務端公共許可證,協議更改之後有什麼變化呢?它的協議規定任何一個雲廠商,如果在雲服務上使用了 MongoDB,就必須把在 MongoDB 之上所做的更改,包括管控端的原始碼都開源出來。
大家想一下這個事情可能嗎?
其實不可能,任何一個雲廠商,它對所有基礎軟體,或者所有開源軟體的變更,都是它的核心,是它的命脈。所以說,MongoDB 這一次修改其實是帶有針對性的,它針對的是這些雲廠商。在開源軟體的基本協定之下,這其實屬於不開放的協議。
再有就是前段時間,Elasticsearch 也宣佈其使用 SSPL,這導致 AWS 基於之前 Apache 協議的程式碼直接 fork 了一個版本,並稱之為 OpenSearch 。這也是對這種不開放的行為的一種應對方式。
協同
開源文化當中提到另外一點,就是協作。Linux 作業系統為什麼能夠獲得成功?因為 1991 年的時候林納斯釋出了第一個 Linux 的版本,把原始碼直接公開到了網際網路上,其他人可以直接下載原始碼,並且對這些原始碼進行修改。
在 1991 年,林納斯釋出完 Linux 第一個可供下載和使用的版本時,其實自由軟體基金會旗下還有其他人也在寫給 GNU 使用的核心,只是沒有 Linux 的完成度高。
為什麼它沒有發展起來呢?因為它是由固定的幾個人在做這個事情,且僅有那麼幾個人,只有它真正對外公開發布了一個版本,外界才會瞭解到。這裡就不得不提到一種思想,那就是大教堂與集市。這是一個什麼概念呢?
可以這樣理解,傳統的軟體開發過程像大家在修建一個大教堂一樣,只有極少數的精英工匠參與其中。而開源軟體提倡的開放和協同,主要指將軟體當成一個大集市,每個人都是自由的,大家都可以互相協作,每個人貢獻自己的一份力量。有專門一本書,來闡述這些理念,就叫做《大教堂與集市》,感興趣可以看看。
開源軟體
聊完開源理念,我們最後來說說開源軟體。
開源軟體的前提是開放原始碼,這是必不可少的。另外,其實每個開源軟體都是有開源許可證的,剛才我們聊 MongoDB 的時候也提到了,它的許可證是不被認可的。開源軟體核心價值觀就是不歧視、中立、開放。
目前國內開源生態整體向好,有很多進入開源軟體基金會的專案,無論是進入 Apache 軟體基金會,還是 CNCF,亦或 Linux 的基金會。其中有很多的專案例如 ApacheAPISIX 就是 Apache 基金會旗下的頂級開源專案,通過 Apache-2.0 License 進行分發,這是一種非常開放且友好的協議。
如何參與開源
很多人對於參與開源有一些誤解。有些人認為,我在使用一個開源軟體,並且在它的 GitHub 上面提交了 issue,提交了 pull request 之類的,認為就是在參與開源專案了。還有一些人認為,我寫了一個軟體或者程式,我把它放在 GitHub 上面,程式碼是公開的,認為自己在做開源了。其實不然(儘管我們也認可為開源專案所做的貢獻)。
做開源的前提是基於你對開源文化的認同。
開源文化的最主要是平等、中立、開放、一致、文件優先。一致是什麼意思呢?意味著你的軟體在這個環境和在另外一個環境當中產生的結果是一樣的。
那麼如何選擇一個開源專案呢?
從我個人角度來講,首先一定是興趣使然的。 我不會選擇一個自己並不太感興趣的專案去參與。因為這樣子是不可持續的。也有很多人問過我,參與開源你能收穫什麼?為什麼你願意花費那麼多的時間和精力在這個事情上面?在參與開源專案的前期,或者很長的一段時間,其實沒有任何收穫,尤其是物質上的收穫一點都沒有。所以這也是我為什麼提了一定是要自己感興趣的。
其次,持續投入非常重要。 在一個開源專案中,如果你只是想起來了參與一下,而不是持續地投入,也不會有較高的價值產生。
最後,應該選擇一個比較活躍的社群。如果專案的社群已經非常的不活躍,你參與到這個專案當中就很難。比如你提交 issue,提交 pull request,很少有人會給你對應的回覆。
這裡我選取了三個專案做對比,ApacheAPISIX、Kong 和 tyk。目前可以看到活躍度最高的是 Apache APISIX,每天都有很多的開發者會參與到 Apache APISIX 的社群中,幫助別人解答問題,或者為 Apache APISIX 提交 PR 等,大家彼此都會在這麼活躍的社群中成長和收穫。
開源協作的中立也是一種很重要的價值觀。 無論你是提交程式碼,或者回復別人的 issue,這些我認為是其次的。最重要的是應該基於平等、尊重、中立的心態去參與到專案當中。
我現在主要參與的是 Apache APISIX 當中的一個子專案 APISIX ingress,還有一個是 Kubernetes ingress-nginx。這兩個專案都是 Kubernetes controller 的專案,做的事情是類似的,但是參與開源專案過程中,我始終保持著中立的態度,而不會因為我在支流科技就大力發展 APISIX ingress 專案,限制 ingress-nginx 專案的發展,這是不存在的。所以心態很重要,只有保持中立的心態才能持續地參與到開源專案當中。
聊聊我的故事
我的職業路徑
接下來聊一下我發展的過程和職業規劃上的選擇。
我的第一份工作 title 是 Web 開發工程師,主要是在做後端開發,也會兼顧一部分的前端開發工作,以及運維及 DBA 的任務。第二份工作是在做運維開發,會涉及一部分的運維工作,主業也還是在做開發。再後來就是做容器化的開發,現在我是支流科技的技術專家,做的事情主要是做開源基礎軟體。這些年前端、後端、運維、資料庫、中介軟體,基礎軟體,容器化技術基本都有涉及到,這是我的職業整體路線。
很多人問過我這樣的問題,特別是在跟 HR 溝通的時候。他們會問我,你為什麼從 Web 開發做了運維開發,這是第一個時間點。第二個時間點,為什麼從運維開發,到做基礎軟體以及全職做開源的事情。
我做 Web 開發,大概是七八年前,那個時候像伺服器通常是 32G 或者 64G 的記憶體。但是現在,我的筆記本已經是 32G 的記憶體了,可以想象當時硬體資源是比較緊張的。在實際做後端開發中,當業務量上來的時候,我們會去做很多效能優化相關的工作。
那個時候,我們會花很多的時間去做優化,現在遇到效能的問題可能很簡單,加一臺機器擴容一下就搞定了。但在那個時候大家的第一想法就是做效能優化,怎麼樣可以充分地壓榨資源,這是我們當時做的事情。在這個過程當中,偏底層的事情我做得更多些。
在 2014 年,我開始接觸 Docker。2013 年Docker 首次開源,我在國內算是比較早一批接觸到 Docker 的。我很喜歡這些底層的技術,包括容器化的技術。在職業選擇的時候,我就從 Web 開發轉向了運維開發。做運維開發的時候,前期是做運維平臺化的開發,運維平臺化、運維自動化、包括 GitOps 和ChatOps 等等。
隨著 Kubernetes 在容器化編排技術爭奪戰中成為了王者。很多公司開始做容器化改造,我們也選擇了 Kubernetes 做自己的容器平臺。這個時候,由於我在容器化技術這方面,積澱相對比較多一些,自然也就承擔了相關的工作內容。
再後來工作的選擇,因為我想要更多的自由,也想更傾向於自己的興趣,而在公司做專案的話,確實不夠自由,所以我現在的工作是全職做開源,我可以在任何一個我喜歡工作的時間,或者想要工作的時間去工作。
有一些人評價我說,我是把我的興趣做成了我的工作。 其實是的,即使沒有這份工作,我也會持續地去做開源。工作時間做開源,閒暇的時間也在做開源,這個本身來講也沒有什麼界限。這是我目前的現狀,自由、全職做開源的工程師。
職業規劃
接下來,我們來看一下職業規劃。大家可能對於我到底是什麼樣的情況並不關心,更應該想知道在開源的場景裡如何做職業規劃。
我現在一方面是做開源相關的工作,再有一方面,也在做自媒體。我認為做職業規劃最重要的一點是基於自己的興趣。 一天一共就 24 小時,除去睡覺的時間,剩下的幾個小時如果做的是自己不感興趣的工作,一直處於不開心的狀態,那真是太慘了。所以一定要選擇自己喜歡的、感興趣的工作,這是第一點。
第二點就是核心競爭力。 既然是程式設計師,無論是前端、後端、運維,還是其他開發,自身的技術實力才是核心競爭力。現在有個詞很流行,那就是“內卷”,為什麼內卷會讓人產生焦慮感呢?焦慮到底是怎麼來的?
我是這麼理解的,焦慮就是別人在學,我不學,我可能會很焦慮;別人會,我不會,我也會焦慮;別人知道,我不知道,那更焦慮;還有就是別人在聊這些,我聽的一臉懵逼,這些都是焦慮的產生原因。
那如何應對這個問題呢?那就是提升你的核心競爭力。首先選一個自己最感興趣的方向,提升自己的技術深度,這樣才能持續地提升自己的核心競爭力。技術深度就跟海面上的冰山差不多,海面上你可以看到的只有那麼一小點,但在海面之下還有很多很多。
技術的深度是無限的,當你把技術深度提升到一定程度之後,你會發現好像我不知道的東西越來越多,這是一個技術人常常會有的感覺。如果你很長時間沒有這種感覺了,認為好像所有的東西我都知道,所有面臨的問題我都能解決。這個情況我認為,你可能需要去參與一些開源專案,或者出去跟別人交流一下,或者換一份工作,開闊一下自己的眼界。當你的技術深度到了一定程度,例如能 cover 住面臨的絕大多數問題時,我建議你在這個時候儘量提升一下自己的技術廣度。
第三點我要說的是價值。 價值這個概念非常寬泛,在做工作中最直觀體現價值的,那就是薪資。當然,薪資只是一方面,另一方面在於你能夠收穫到什麼。
我們回到剛才第一點,也就是工作開不開心的事情。如果說你的工作薪資是令人滿意的,同時你又能收穫一些開心,那就賺到了。因為公司本來給你提供的,是一種僱傭關係,他給到你的本質上來講只有你的薪資。而你做這份工作的同時,收穫了一些樂趣,其實也就是賺到了。收穫開心,這是我要提到價值當中的第一點。
此外,在工作的過程當中,你肯定不是一個人在獨自戰鬥,你也會收穫到一些夥伴,這是第二點。
第三點,在這份工作當中,你還實現自己價值的提升。這些價值可以理解為心理學當中或者社會學當中提到的認可,當你獲得別人或者社會的一些認可。 這也是價值的一部分。
程式設計師的副業
最後我們來聊聊程式設計師的副業,這個事情也許大家會比較感興趣一些。在談到副業的時候,你要先評估一下自己能做什麼,量力而行在任何情況下都是比較正確的。承認自己在某些方面不擅長,或者某些方面不太懂這個事情其實沒有什麼的,如果強行做不擅長的事情,可能得到的結果並不太好。
我來聊一下我自己個人做的一些東西。我之前寫了一個專欄,叫 《Kubernetes 上手實踐》。後來又寫了一個專欄,叫做 《Docker 核心知識必會》。我自己在這方面相對來說積累比較多一點,這裡就不多說了,說多了就變成廣告了(笑),不過你可以關注下我的公眾號:MoeLove ,我會跟你分享一些有價值的技術和內容。
很多人可能會問我能做什麼?我認為其實還是有很多的事情可以做,具體肯定看個人的選擇。做副業能為自己帶來最直觀的,大家可能認為是金錢收益。但實際上如果你把耗費的時間精力折算一下,可能會發現這個事情收益很少。陪陪家人、跟愛人約個會,出去玩一趟,可能能收穫的更多。現在整體來說就是兩種選擇,一是用時間換錢,另一種是用錢換時間。很多事情如果年輕的時候錯過了還是會很遺憾的。所以還是要建議大家根據自己的情況衡量一下。
以上是今天的全部分享內容,來簡單總結下:第一部分聊了平等、中立、自由的開源文化;接著談了如何參與開源,心態一定要擺正,同時要基於自己個人的興趣;最後聊到一些個人成長,還是建議大家應根據自己的實際情況,合理地規劃一下自己的的職業生涯,謝謝大家。