无码人妻精品一区二区三18禁,影音先锋男人AV橹橹色,污污污污污污www网站免费,日韩成人av无码一区二区三区,欧美性受xxxx狂喷水

譚雪峰:不碼“磚頭”,碼代碼

Yu Chen

2024-06-18 / ,

在前段時間我們舉辦的“TDengine Open Day”第一季技術沙龍中,TDengine 應用研發高級工程師譚雪峰進行的“開源之路:程序員的成長與探索”主題分享獲得了眾多參會者的好評。譚雪峰從自身獨特的職業發展經歷出發,分享了自己在開源領域的種種收獲以及在進行職業轉換過程中面臨的挑戰及應對。本篇文章基于此次演講整理而成,給到有需要的開發者參考。

譚雪峰:不碼“磚頭”,碼代碼 - TDengine Database 時序數據庫

從土木工程到軟件開發,開源是我的“老師”

我并不是科班出身,大學學的是土木工程專業,最后轉來轉去,就成為了一名開發者,過程中所有的編程知識我都是自學的。從土木工程到軟件開發,這一轉變幾句話可能就概括完了,但我在其中付出的精力和努力不是能簡單用文字概括的,現在想想,幸好堅持了下來,最終也結出了一個不錯的成果。

最開始就是因為對游戲的熱愛,引發了我對游戲逆向工程的興趣。我開始使用工具如金山游俠、Cheat Engine(CE)、OllyDbg(OD)、IDA 等,來探索游戲的內部工作原理。這一過程讓我熟悉了匯編語言和偽 C 代碼,進而激發了我對底層編程的興趣。通過參與 Capture The Flag(CTF)比賽,我進一步鍛煉了我的技術能力,并在解決復雜問題中找到了樂趣。

之后,我從逆向工程轉向了更廣泛的編程領域,開始自學 JavaScript、Python、PHP、Lua 和 Go 等語言。在剛開始工作時由于編程知識的基礎不足,工作上還是非常困難的,我就邊實踐邊學習。

這一路上,我的知識幾乎都是通過網絡學習來的——通過百度和谷歌,我能夠搜索到幾乎任何我需要的學習資源;同時,技術社區如 CSDN 和 Stack Overflow 成為了我解決編程難題和學習新技能的寶貴平臺。這些資源對我幫助巨大,讓我能在編程的世界里越走越遠。

還有一個很重要的學習途徑就是參與開源項目。剛開始我就是在 GitHub 上學習別人寫的開源代碼,等有了成長之后就不單是學習了,我自己也開始貢獻代碼,成為了一名 Contributor。

我參與的第一個開源項目是關于尋路算法的優化,在從 ActionScript 到 TypeScript 的轉換過程中,我發現了一些算法的 Bug,并開始嘗試修復,最終成功修正了源算法的狄洛尼三角網生成錯誤以及包圍盒調用錯誤。這是我第一次向開源社區貢獻代碼,感覺自己真的是從使用工具到改進工具的一個轉變。

譚雪峰:不碼“磚頭”,碼代碼 - TDengine Database 時序數據庫

之后我印象比較深刻的一個項目是關于 H265 視頻流。在某次工作中,我在一個項目中需要處理 H265 格式的視頻流,要優化延遲時間。我花了一些時間進行改進,后端取到 H265 裸流進行處理之后用 Websocket 實時推送 Web 端,然后在 Web 端我將 ffmpeg 編譯成 webassembly,之后在瀏覽器里用 Worker 實現多線程軟解,最終通過 Canvas 進行實時監控,并成功實現了毫秒級延遲。這個項目讓我學到了很多關于視頻處理和瀏覽器性能優化的知識。后來,我把這個前端解決方案開源了,希望能幫助到其他面臨相同挑戰的開發者。

最具戲劇化的一次開源經歷就是參與 TDengine HiveMQ 挑戰賽,這次經歷也讓我與 TDengine 真正連接在了一起。在這場比賽中,我最終以第一名的成績獲得了“優勝獎”,結果還是很不錯的。這也是我第一次參與開源社區活動,感覺能展示自己還能回饋社區,這正是我想做的事情。接著我就收到了濤思數據拋出的“橄欖枝”,最后很幸運地成為其中一員,目前我主要負責 TDengine 的應用研發和一些周邊生態建設。

譚雪峰:不碼“磚頭”,碼代碼 - TDengine Database 時序數據庫

其實在這之前我就在研究 TDengine 了,我之前所在領域是工業物聯網,對各種時序數據庫(Time Series Database)都需要了解一些,國產的時序數據庫數量比較少,其中開源的就更少了,在這些開源數據庫里面 TDengine 性能又是其中非常高的,當時要將TDengine 引入到平臺里面,就認識了濤思數據的人。后來因為一些開發任務我開始研究 TDengine 的源碼,為了能在 Windows 上應用便用 GCC 編譯做了一些修改,這也是我首次參與大型開源項目。

譚雪峰:不碼“磚頭”,碼代碼 - TDengine Database 時序數據庫

譚雪峰:不碼“磚頭”,碼代碼 - TDengine Database 時序數據庫

通過這些經歷,我從一個簡單使用工具的程序員,變成了能夠自己“造輪子”的開發者。現在,我不僅能解決問題,還能創造工具幫助他人解決問題。這就是開源給我的最大禮物—成長和自由。

開源讓用戶、項目、開發者多方共贏

發展至今,開源社區已經演變為一個日益壯大的全球性多元化舞臺,開發者可以在社區中分享經驗、解決問題、合作開發,共同推動項目的發展。越來越多的企業意識到開源的重要性,積極支持開源項目,并且在自己的產品和服務中采用開源技術。許多大型企業也積極參與到開源項目中,貢獻代碼、資源和經驗,推動了開源社區的發展和創新。

譚雪峰:不碼“磚頭”,碼代碼 - TDengine Database 時序數據庫

上圖是 GitHub 2023 年年度報告,從其中我們可以看到,2023 全年一共有 4.2 億個項目、2.84 億個公共倉庫、6.5 萬個公開的生成式 AI 項目、總共做出了 45 億次貢獻。可見開源項目數量不斷增長,涵蓋了各個領域,包括操作系統、編程語言、框架、工具、應用程序等。

開源產品無疑是當今技術發展的一大趨勢。通過開源,產品可以吸收來自不同使用者的廣泛反饋,不合理之處可以通過提交問題(issue)來指出,而社區的開發者則能貢獻自己的代碼改進。這種模式促使使用者、開發團隊和社區三者之間形成協作,共同豐富和完善項目內容,確保了項目的持續健康發展,而不是閉門造車式地過早終結。

以 TDengine 為例,不同于許多時序數據庫采用的是單機版免費而集群版收費的模式,TDengine 提供的集群版同樣是開源的。這不僅使得開發者能夠深入學習數據庫集群的解決方案,還為使用者提供了更優質的集群版時序數據庫選擇,實現了多方共贏的局面。

當下的“開源盛景”無疑也為每個開發者提供了很大的機會。開源讓開發者展現自己的同時還能幫助到其他人,分享越多得到的就越多,你可能覺得自己掌握的知識很簡單,但也有很多人還不懂,他們得到了你的幫助也會誠心的去感謝你。以我自身參與開源的經歷來說,我認為通過開源項目主要能讓我們獲得以下四個維度的能力提升。

提升代碼質量

我們可以選擇一些優質的開源項目,多看多學習這些開源代碼。但想要成長還需要多寫,不光要寫代碼還要把優化的過程寫出來,最簡單的辦法就是寫完一段代碼之后半個月再去看,如果覺得當時的寫的非常 low 那就說明有成長了。最好就是自己寫東西開源出來,幫助別人的同時與開源項目一起成長。

而且開源代碼還會促使開發者保持高標準,因為知道自己的代碼將被公開展示,我們便會更加注重代碼的整潔和清晰。Linus’s Law 曾說過一句經典名言“Given enough eyeballs, all bugs are shallow”,這句話的意思是如果有足夠多的人檢查代碼,那么所有的 Bug 都將無處藏身。

技術視野拓展

當一項新技術開始引起關注時,開源項目往往是最早采用和實驗這些技術的平臺之一。參與這些項目不僅可以使程序員在早期階段就接觸并掌握這些前沿技術,還能深入了解其背后的原理和實際應用場景。這種直接的實踐經驗不僅能夠提升個人的技術能力,還有助于幫助我們形成對未來技術趨勢的敏銳洞察,在不斷變化的職業市場中保持競爭優勢。

建立個人品牌

隨著開源技術的深入和廣泛應用,開源社區的影響力日益增強,越來越多的企業開始認識到開源項目中隱藏的人才價值。企業不僅在技術創新上依賴這些開源解決方案,同時也傾向于招募那些在開源社區中積極貢獻的程序員。那些在開源社區中有所貢獻的程序員,往往更容易獲得企業的青睞,從而獲得更好的職業發展機會。

但相應地,擁有“Contributor”的頭銜不僅是一種榮譽,更是一種責任。作為開源社區的一員,我們需要從內心深處發揮回饋社區的責任感。開源項目的成功不僅僅依賴于代碼的質量,更重要的是依賴于社區成員的積極參與和持續貢獻。這包括對項目的負責,關注并推動項目的長期發展,維護社區的健康生態,以及確保軟件的高質量和穩定性,為用戶提供卓越的使用體驗。通過這種全面的投入,我們不僅提升個人技術水平,還為整個開源生態系統的繁榮做出貢獻。

程序員與工程師

在軟件開發中,程序員和工程師雖共同致力于軟件的創建與完善,但他們的角色和職責各有側重。程序員主要專注于編寫、測試和維護代碼,解決特定的技術問題。他們是代碼實現和邏輯的專家,通過精確的編程確保軟件功能的實現。

而軟件工程師的職責更為廣泛,不僅包括編程,還涵蓋項目的整體規劃、設計、測試、部署與維護。工程師需要在整個軟件開發周期中進行綜合考慮和資源協調,以確保項目的順利執行和質量標準的達成。

因此,每位工程師都應具備扎實的編程能力,而成為一名合格的程序員僅是邁向全面軟件工程師之路的起點。通過積極參與開源,程序員可以逐步擴展自身的技術和管理視野,最終成長為能夠在更廣泛領域內作出影響的軟件工程師。