開源浪潮下程序員的職業規劃和成長

blank

開源浪潮下程序員的職業規劃和成長

無論從年初開源社發布的《2020 台灣開源年度報告》還是整體的大環境,不難看到台灣的開源正在崛起,越來越多的來自台灣的開源項目和開發者們正在走入大家的視野。在開源浪潮的大趨勢下,程序員又該如何規劃自己的職業以及個人成長呢?不如聽聽正在全職做開源的工程師張晉濤怎麼說。

無論從年初開源社發布的《2020 台灣開源年度報告》還是整體的大環境,不難看到台灣的開源正在崛起,越來越多的來自台灣的開源項目和開發者們正在走入大家的視野。在開源浪潮的大趨勢下,程序員又該如何規劃自己的職業以及個人成長呢?不如聽聽正在全職做開源的工程師張晉濤怎麼說。

大家好,今天我分享的主題是《開源浪潮下程序員的職業規劃和成長》。今天在這裡聊兩個項目,一個是Apache APISIX,APISIX 是Apache 基金會旗下的頂級開源項目。第二個項目是ingress-nginx,它是Kubernetes 整個生態圈裡頭,除去Kubernetes 自身以外使用頻率最高的軟件之一了。搞過Kubernetes 的同學應該基本上都用過這個項目。

今天我分享的內容主要從四個方面來聊:

  • 開源的文化
  • 如何參與開源
  • 關於我的故事
  • 職業規劃相關的內容

了解開源文化

自由軟件運動

提到開源文化,首先需要了解自由軟件運動。

blank

圖右是被稱為自由軟件之父的斯托曼,他在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 的完成度高。

為什麼它沒有發展起來呢?因為它是由固定的幾個人在做這個事情,且僅有那麼幾個人,只有它真正對外公開發布了一個版本,外界才會了解到。這裡就不得不提到一種思想,那就是大教堂與集市。這是一個什麼概念呢?

可以這樣理解,傳統的軟件開發過程像大家在修建一個大教堂一樣,只有極少數的精英工匠參與其中。而開源軟件提倡的開放和協同,主要指將軟件當成一個大集市,每個人都是自由的,大家都可以互相協作,每個人貢獻自己的一份力量。有專門一本書,來闡述這些理念,就叫做《大教堂與集市》,感興趣可以看看。

開源軟件

聊完開源理念,我們最後來說說開源軟件。

blank

開源軟件的前提是開放源代碼,這是必不可少的。另外,其實每個開源軟件都是有開源許可證的,剛才我們聊MongoDB 的時候也提到了,它的許可證是不被認可的。開源軟件核心價值觀就是不歧視、中立、開放。

目前國內開源生態整體向好,有很多進入開源軟件基金會的項目,無論是進入Apache 軟件基金會,還是CNCF,亦或Linux 的基金會。其中有很多的項目例如ApacheAPISIX 就是Apache 基金會旗下的頂級開源項目,通過Apache-2.0 License 進行分發,這是一種非常開放且友好的協議。

如何參與開源

很多人對於參與開源有一些誤解。有些人認為,我在使用一個開源軟件,並且在它的GitHub 上面提交了issue,提交了pull request 之類的,認為就是在參與開源項目了。還有一些人認為,我寫了一個軟件或者程序,我把它放在GitHub 上面,代碼是公開的,認為自己在做開源了。其實不然(儘管我們也認可為開源項目所做的貢獻)。

做開源的前提是基於你對開源文化的認同。

blank

開源文化的最主要是平等、中立、開放、一致、文檔優先。一致是什麼意思呢?意味著你的軟件在這個環境和在另外一個環境當中產生的結果是一樣的。

那麼如何選擇一個開源項目呢?

從我個人角度來講,我不會選擇一個自己並不太感興趣的項目去參與。因為這樣子是不可持續的。也有很多人問過我,參與開源你能收穫什麼?為什麼你願意花費那麼多的時間和精力在這個事情上面?在參與開源項目的前期,或者很長的一段時間,其實沒有任何收穫,尤其是物質上的收穫一點都沒有。所以這也是我為什麼提了一定是要自己感興趣的。

其次,持續投入非常重要。在一個開源項目中,如果你只是想起來了參與一下,而不是持續地投入,也不會有較高的價值產生。

最後,應該選擇一個比較活躍的社區。如果項目的社區已經非常的不活躍,你參與到這個項目當中就很難。比如你提交issue,提交pull request,很少有人會給你對應的回复。

blank

這裡我選取了三個項目做對比,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 ,我會跟你分享一些有價值的技術和內容。

很多人可能會問我能做什麼?我認為其實還是有很多的事情可以做,具體肯定看個人的選擇。做副業能為自己帶來最直觀的,大家可能認為是金錢收益。但實際上如果你把耗費的時間精力折算一下,可能會發現這個事情收益很少。陪陪家人、跟愛人約個會,出去玩一趟,可能能收穫的更多。現在整體來說就是兩種選擇,一是用時間換錢,另一種是用錢換時間。很多事情如果年輕的時候錯過了還是會很遺憾的。所以還是要建議大家根據自己的情況衡量一下。

以上是今天的全部分享內容,來簡單總結下:第一部分聊了平等、中立、自由的開源文化;接著談瞭如何參與開源,心態一定要擺正,同時要基於自己個人的興趣;最後聊到一些個人成長,還是建議大家應根據自己的實際情況,合理地規劃一下自己的的職業生涯,謝謝大家。

視頻與PPT請戳:

What do you think?

Written by marketer

blank

漫談瀏覽器渲染

blank

哪些Shopify 的SEO應用程序是最好用