玉伯:開源有帶給我什么

在2021年527螞蟻技術日上,螞蟻內源社區舉辦了內源專場,在專場上玉伯給大家分享了《開源有帶給我什么》,以下為演講的圖文整理。

我的開源之路

我從2009年到2018年,接近十年時間,一直在做開源的一些事情,在這個過程中收獲了很多東西。今天就和大家分享一下,回顧這十年,我的一些收獲和感觸。

我最開始注冊GitHub是09年的夏天,再之前,是在Google Code上面有一些個人項目。這張圖是10年7、8月之后,開始在GitHub上瘋狂提交代碼的時候,那時候整天沉浸在代碼里面,現在回想起來還是很開心的。

這些年做過一些開源項目,最開始是模塊加載器Sea.js,在淘寶時期和別人一起開發了Kissy項目,來支付寶的早期做過一個不太成功的項目Arale,做了大概兩年覺得這個方面是不對的,馬上切換開始去做Ant Design,再后來又開啟了AntV數據可視化開源項目。當然,體驗技術部還有很多做的不錯的開源項目,比如egg.js和Chair,不過這些我參與不多。

我的收獲之一:高效工作

這些年我一直在思考,我在參與開源的過程中真正的收獲是什么。

我總結了三點。其中第一個就是養成了高效工作的習慣。

高效工作里面包括幾個小點,首先是文檔優先。

在文檔方面我印象最深的一件事,就是在2010年左右參與到CommonJS開放組織里面,這是一個虛擬的組織,最主要的產出就是文檔,我在里面感受到了業界這些頂尖的專家對于文檔的重視。

當時,大家通過一個wiki系統以及Google Group論壇在一起,討論什么叫模塊,以及擬定它的1.0、1.1等版本的規范細則,每個規范中都有很多分支,圍繞里面的很多細節,大家吵的不可開交。正是通過大家的努力產出的這些規范文檔,對整個行業都起到很大的幫助。

經常參與開源的同學可能發現,在文檔優先這方面,老外比我們重視太多了,有點項目可能還只是個空殼,但里面已經討論很多了,把很多想法思路、怎么做、可能遇到什么坑這些問題,通過文檔和討論,想的比較清楚了才動手去寫代碼,這點和國內是很不一樣的。

當你真的深度參與開源,并且以文檔先行的方式去實踐的話,你的收獲會非常之大。

第二點就是,在開源社區非常強調異步協作。無論是GitHub上的issues,還是Google的Groups,都是異步協作的利器,后來語雀的討論區也借鑒了這些思路,就是是因為我們發現,異步協作比線下會議高效很多。我也非常想在公司內去推行異步協作,在體驗技術部有句話,與其在釘釘上找我,不如發個issue給我,你可能會更快的得到反饋。

人們通常進行交流的手段就是聽說讀寫,其中讀和寫是比聽和說更高維度的手段,需要更多邏輯和抽象能力,更有助于問題的及早解決。

最后一點是求同尊異。GitHub上有些項目參與人數眾多,大家參與討論很激烈,如何在有分歧的情況下達成共識,以及不僅達成共識而是讓社區往前走一步,這是需要一些領導力,以及一些意見領袖做出一些犧牲的。比如當時在CommonJS社區里有一位C語言大拿,他已經實現了一版模塊化代碼,?比已有的一些都更優雅,但為了讓社區意見保持一致往前走,他把自己的代碼全刪掉了。

在這里,求同尊異不是很虛的詞,而是很實際的原則,影響你的很多取舍。

最后一點是挺有趣的,在早期GitHub做社區的可能很多都是技術,比較純粹,后來各種追求商業化以及個人影響力的都來了。所以我最后一點就是你要知人情世故,現在GitHub上很多開源類庫你一看就知道是來蹭名利的,這種情況下笑一笑就好了,不需要去較真,否則會耗費很多無謂的時間,最少也影響心情。但同時你自己不要去人情世故,保持純粹。開源社區也是個小社會,GitHub也沒有大家想象中那么純潔,有很多故事在里面。

這些習慣和認知一直延續到我現在的工作中,真的給我帶來了很多幫助。我相信在開源上,只要你參與進去,你就會獲得一些感性的認識,知道它們對你的職業成長和習慣是非常有利的。

我的收獲之二:學做產品

我之前做Sea.js這些開源項目的時候,是把它當做一個產品去打造的,因此肯定會遇到產品的靈魂三問:

每一個開源項目在決定要不要去做的時候,都要問自己這幾個問題。這些問題其實和很多業務和產品遇到的問題很類似。你必須將這些問題回答清楚之后才能再往前走一步。

比如當初我們在做AntV的G2的時候,就要回答一個問題,當時國內外有higcharts、echarts等開源的可視化框架,也都非常成功,這時候你G2憑什么去做另一個可視化類庫?后來和蕭慶關于這個問題想了很久,最終得出的答案是我們要做圖形語法,而不是以前業界通行的基于配置的可視化,這也正是G2的差異化競爭優勢,真的做好了會帶來更多的可能性。

關于第二個問題,是因為很多你想做的項目,要么在GitHub上已經有了,要么已經在文檔中被人討論過了,那為什么是你做?為什么你更有可能去做成?這個問題的一個“政治正確”的答案是和你的業務有相關性,更實際的可能是和你這個人更有關系,是你內心想不想做,愿不愿意去長期的投入。

比如Ant Design、AntV,其實當時是集團更有機會去做的,因為集團有數據產品技術部,他們有很多業務,在這些業務土壤下是更有機會去長出這些項目的,但是他們缺人。所以對這個問題我的回答是,很多情況下,人的要素是比業務更重要的。只要你對事情是篤定想要去做的,大膽去做就好了。

第三個問題其實是更難回答的,就是你的邊界在哪。之前接觸過的一些開源項目越做越大,或者越做越復雜,這不一定是好的。我自己心目中理想的開源產品,是做到一定階段,就不需要再做了。比如一些命令行小工具,很多年都沒有更新了,但大家都在用,因為它們各種接口很完備,已經不需要更新了。做開源項目也一樣,當你花一些時間設計好了,然后寫完代碼,就可以對整個世界說,我做好了,你用吧。當然,這是一種理想狀態。

我的收獲之三:對事的熱愛

我的分享最后一點是熱愛。但凡你曾經經歷過為開源而瘋狂,你就會理解什么叫熱愛。而如果你沒有瘋狂過,熱愛對你來說只是兩個字而已。

最近袁老去世,舉國同悲,我也看了那個40多分鐘的紀錄片,看的過程中真的是非常感動。特別是里面提到袁老的禾下乘涼夢:他有一個夢,希望稻谷長的像高粱一樣高,稻穗比掃把還長,結的谷粒和花生米一樣大,到時候他和他的助手可以躺在下面乘涼,睡個午覺。我覺得袁老說到這段話的時候整個人都升華了,看了這段視頻,你可以理解什么叫做事業,什么叫做熱愛。

當你把開源當做自己的事業的時候,感受其實是一樣的,即使生活上很樸素,你也可以過的很開心。當你寫代碼的時候想著怎么寫的更好,某個內存占用怎么降低一點點,某個性能怎么提高一點點,當你滿腦子在想這些的時候,一些物欲得失也就沒那么重要了。

我希望同學們通過開源,去參與和主導項目,能夠感受到這份熱愛。持續去感受過幾份熱愛之后,我覺得你整個人都會不一樣的,面對許多事情,你會活的更通透,更透徹。

另外前不久在推特上看到一句話讓我挺有感觸,他主要說的是,很多人說工作要跟對人,但其實沒什么關系,跟你工作的地方和公司也沒關系,跟什么人不如跟隨自己的內心。真正一個人在職場生涯往前走,應該找到的是你的mission和calling,還有找到對你有意義和熱愛的一些事情。

總結一下,如果說開源帶給我什么,首先第一個就是高效工作的習慣,讓我受益終身;第二個是在這個過程中,學會了怎么去做產品;第三個是非常感謝自己有興趣參與一些開源項目之后,從中感受到什么叫熱愛,從而改變了我對人生的很多看法。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/275766.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/275766.shtml
英文地址,請注明出處:http://en.pswp.cn/news/275766.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python并行運算庫_最佳并行繪圖Python庫簡介:“ HiPlot”

python并行運算庫HiPlot is Facebook’s Python library to support visualization of high-dimensional data table, released this January. It is particularly well known for its sophisticated interactive parallel plot.HiPlot是Facebook的Python庫,用于支持…

Asp.net 文件上傳的 FileUpload FileName 和 FileUpload PostedFile.FileName的細節問題

Asp.net 文件上傳的 FileUpload FileName 和 FileUpload PostedFile.FileName的細節問題 ASP.NET 文件上傳估計大家都用得很熟悉,常用控件 FileUpload 。 主要步驟: 1.判斷是否合法 2.獲得文件的路徑 (包括目錄的完整路徑,同時可能…

java 友元_C++ 友元函數 | 菜鳥教程

對教程中的例子,稍加修改,添加了友元類的使用。#include using namespace std;class Box{double width;public:friend void printWidth(Box box);friend class BigBox;void setWidth(double wid);};class BigBox{public :void Print(int width, Box &…

剛學編程的程序員必備這5大編程網站,你知道幾個?

一個好的網站,就是程序員學編程的基地。 雖說新手程序員也許知道一些在線編程網站,但是質量上乘的編程網站又知道幾個呢? 下面就來給大家推薦5個質量上乘的編程網站: 0、Leetcode LeetCode是大名鼎鼎的在線刷題網站,通過該網站的…

【贈書福利】不扶好眼鏡,請別打開這本挑戰JS語言特性的書

文末贈福利大家好,我是若川。為感謝大家一直以來的支持和肯定,文末抽《JavaScript悟道》3本包郵送和若干紅包,詳細規則請看文末哦。"人們不停地給老化的語言“整容”,拼命地往其中注入各種新的特性來穩住其流行地位&#xff…

MySQL存儲過程之事務管理

MySQL存儲過程之事務管理 ACID:Atomic、Consistent、Isolated、Durable 存儲程序提供了一個絕佳的機制來定義、封裝和管理事務。 1,MySQL的事務支持 MySQL的事務支持不是綁定在MySQL服務器本身,而是與存儲引擎相關: Java代碼 MyISAM&#xff…

羅馬數字 java_【leetcode刷題】[簡單]13.羅馬數字轉整數(roman to integer)-java

羅馬數字轉整數 roman to integer題目羅馬數字包含以下七種字符: I, V, X, L,C,D 和 M。字符 數值I 1V 5X 10L 50C 100D 500M 1000例如, 羅馬數字 2 寫做 II ,即為兩個并列的 1。12 寫做 XII &a…

我在工作中是如何使用Git的

大家好,我是若川。今天分享一篇關于git的好文章。我自己經常用命令行終端和git縮寫。具體可以看我以往的文章。使用 ohmyzsh 打造 windows、ubuntu、mac 系統高效終端命令行工具,用過都說好。點擊下方卡片關注我、加個星標學習源碼整體架構系列、年度總結…

克服浮躁_設計思維:您克服并贏得低迷的最終工具。

克服浮躁設計思維101 (Design thinking 101) Let’s begin by getting ourselves clear on the question: What is design thinking?讓我們首先弄清楚問題:設計思想是什么? Many people have an impression that design thinking has something to do …

mongodb數組字段prefix匹配返回

DOC: https://docs.mongodb.com/manu... collection(test)結構 {_id: Objectd("123456789"),category: [apple_1,apple_2,banana_1,banana_2] }Question: 對test表的所有數據做category過濾,返回category中以apple開頭的元素 表原數…

java參數化查詢_小博老師解析Java核心技術 ——JDBC參數化查詢(二)

[步驟閱讀四]SQL注入按照以上方式開發,確實已經完成了基本的用戶登錄業務需求,但是這么做的話可以會出現一個比較嚴重的問題,那就是容易被SQL注入。所謂SQL注入,就是在需要用戶填寫信息,并且這些信息會生成數據庫查詢字…

Lightbox 效果

網上其實到處都是。 遮罩層: .transparent {filter:alpha(opacity0); -moz-opacity: 0.0; opacity: 0.0; z-index: 90;background-color:#000;float:left;top:0;left:0;position:absolute;width:100%; }主要業務層:.rollover5 {display:none; position:a…

前端搶飯碗系列之Vue項目如何做單元測試

大家好,我是若川。今天分享一篇vue項目如何做單元測試的好文,文章比較長,建議先收藏,需要時用電腦看。點擊下方卡片關注我、加個星標學習源碼系列、年度總結、JS基礎系列關于單元測試,最常見的問題應該就是“前端單元測…

React Native組件開發指南

React Native的組件開發一直處在一個比較尷尬的處境。在官方未給予相關示例與腳手架的情況下,社區中依然誕生了許許多多的React Native組件。因為缺少示例與規范,很多組件庫僅含有一個index.js文件。這種基礎的目錄結構也導致了一些顯而易見的問題&#…

java activiti jbpm_activiti和jbpm工作流引擎哪個比較好?

原標題:activiti和jbpm工作流引擎哪個比較好?在常用的ERP系統、OA系統的開發中,工作流引擎是一個必不可少的工具。之前在選擇工作流引擎時曾經在activiti和jbpm之間有過比較,當時做出的決定是使用jbpm,但實際開發過程中…

C/C++中善用大括號

C/C中善用大括號轉載于:https://www.cnblogs.com/satng/archive/2010/12/17/2138840.html

識別人聲_演唱人聲的5個技巧

識別人聲什么是聲樂伴奏? (What is Vocal Comping?) Vocal comping describes the process of combining multiple vocal takes into one “supertake” that has the best parts of each. This is called a “composite track,” or comp for short. Many instrum…

你知道source map如何幫你定位源碼么?

大家好,我是若川。今天分享一篇我們經常會忽略的定位原始代碼位置原理的文章。文章不長,例子不錯,可以先收藏,有空時動手試試。學習源碼系列、年度總結、JS基礎系列前言我們知道,代碼上線前要經過壓縮,美化…

OOP 中的 方法調用、接口、鴨式辯型、訪問者模式

2019獨角獸企業重金招聘Python工程師標準>>> 方法調用的四種方式 直接調用:通過類或者實例直接調用其方法。接口調用或者轉型調用:通過將實例回調給一個接口對象,或者轉型為一個父類的實例,來調用間接調用:…

Substitution控件MethodName無法取到Session的解決辦法

Substitution是對緩存頁面實現動態顯示部分內容的控件,使用方法:在后臺頁面添加靜態方法,private static string MethodName(HttpContext context),經典的用法是動態顯示的是當前的登錄用戶名字(非登錄用戶顯示其他的)…